diff options
author | HJ <thechairman@thechairman.info> | 2024-02-03 15:09:54 -0500 |
---|---|---|
committer | HJ <thechairman@thechairman.info> | 2024-02-03 15:09:54 -0500 |
commit | 96a3c5c179d8d3fff24eb2953e45f8dd15e2714c (patch) | |
tree | 0a67bc0cfeabe51740bb049c61f16f1ac3bdd4ff | |
parent | 547fe03cf43105f46160e2dd9afff21637eaaf47 (diff) | |
download | gleam_aoc-96a3c5c179d8d3fff24eb2953e45f8dd15e2714c.tar.gz gleam_aoc-96a3c5c179d8d3fff24eb2953e45f8dd15e2714c.zip |
cleanup
1493 files changed, 194664 insertions, 0 deletions
diff --git a/aoc2023/aoc.toml b/aoc2023/aoc.toml new file mode 100644 index 0000000..3843235 --- /dev/null +++ b/aoc2023/aoc.toml @@ -0,0 +1,4 @@ +version = 2 +year = "2023" +session = "53616c7465645f5f9b329c2ce8962445c1bf7e50415667e182265b26a30deb203787e6f505943bd2ee4a7bbb39e99ac4cf724a722d58e3c1984b7f30af6be76d" +showtime = true diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.cache Binary files differnew file mode 100644 index 0000000..939bda2 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.cache_meta Binary files differnew file mode 100644 index 0000000..0af4a84 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.erl new file mode 100644 index 0000000..e3ceebe --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.erl @@ -0,0 +1,55 @@ +-module(adglent). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([inspect/1, get_input/1, get_test_folder/1, start_arguments/0, get_part/0]). +-export_type([example/1, problem/0, charlist/0]). + +-type example(ODD) :: {example, binary(), ODD}. + +-type problem() :: first | second. + +-type charlist() :: any(). + +-spec inspect(any()) -> binary(). +inspect(Value) -> + Inspected_value = gleam@string:inspect(Value), + case begin + _pipe = Inspected_value, + gleam@string:starts_with(_pipe, <<"\""/utf8>>) + end of + true -> + _pipe@1 = Inspected_value, + _pipe@2 = gleam@string:drop_left(_pipe@1, 1), + gleam@string:drop_right(_pipe@2, 1); + + false -> + Inspected_value + end. + +-spec get_input(binary()) -> {ok, binary()} | {error, simplifile:file_error()}. +get_input(Day) -> + simplifile:read( + <<<<"src/day"/utf8, Day/binary>>/binary, "/input.txt"/utf8>> + ). + +-spec get_test_folder(binary()) -> binary(). +get_test_folder(Day) -> + <<"test/day"/utf8, Day/binary>>. + +-spec start_arguments() -> list(binary()). +start_arguments() -> + _pipe = init:get_plain_arguments(), + gleam@list:map(_pipe, fun unicode:characters_to_binary/1). + +-spec get_part() -> {ok, problem()} | {error, nil}. +get_part() -> + case start_arguments() of + [<<"1"/utf8>>] -> + {ok, first}; + + [<<"2"/utf8>>] -> + {ok, second}; + + _ -> + {error, nil} + end. diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.cache Binary files differnew file mode 100644 index 0000000..a39d38a --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.cache_meta Binary files differnew file mode 100644 index 0000000..1637f81 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.erl new file mode 100644 index 0000000..b80368f --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.erl @@ -0,0 +1,278 @@ +-module(adglent@day). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([main/0]). + +-spec create_file_if_not_present(binary(), binary()) -> {ok, binary()} | + {error, binary()}. +create_file_if_not_present(Content, Path) -> + case simplifile:is_file(Path) of + true -> + {ok, <<Path/binary, " already exists - skipped"/utf8>>}; + + false -> + gleam@result:'try'( + begin + _pipe = simplifile:create_file(Path), + priv@errors:map_messages( + _pipe, + <<"Created "/utf8, Path/binary>>, + <<"Could not create "/utf8, Path/binary>> + ) + end, + fun(_) -> _pipe@1 = simplifile:write(Path, Content), + priv@errors:map_messages( + _pipe@1, + <<"Wrote "/utf8, Path/binary>>, + <<"Could not write to "/utf8, Path/binary>> + ) end + ) + end. + +-spec main() -> binary(). +main() -> + Day@1 = begin + _pipe = case adglent:start_arguments() of + [Day] -> + {ok, Day}; + + Args -> + {error, + <<"Expected day - found: "/utf8, + (gleam@string:join(Args, <<", "/utf8>>))/binary>>} + end, + _pipe@1 = priv@errors:map_error( + _pipe, + <<"Error when parsing command args"/utf8>> + ), + _pipe@2 = priv@errors:print_error(_pipe@1), + priv@errors:assert_ok(_pipe@2) + end, + Aoc_toml = begin + _pipe@3 = simplifile:read(<<"aoc.toml"/utf8>>), + _pipe@4 = priv@errors:map_error( + _pipe@3, + <<"Could not read aoc.toml"/utf8>> + ), + _pipe@5 = priv@errors:print_error(_pipe@4), + priv@errors:assert_ok(_pipe@5) + end, + Aoc_toml_version = priv@toml:get_int(Aoc_toml, [<<"version"/utf8>>]), + Year = begin + _pipe@6 = priv@toml:get_string(Aoc_toml, [<<"year"/utf8>>]), + _pipe@7 = priv@errors:map_error( + _pipe@6, + <<"Could not read \"year\" from aoc.toml"/utf8>> + ), + _pipe@8 = priv@errors:print_error(_pipe@7), + priv@errors:assert_ok(_pipe@8) + end, + Session = begin + _pipe@9 = priv@toml:get_string(Aoc_toml, [<<"session"/utf8>>]), + _pipe@10 = priv@errors:map_error( + _pipe@9, + <<"Could not read \"session\" from aoc.toml"/utf8>> + ), + _pipe@11 = priv@errors:print_error(_pipe@10), + priv@errors:assert_ok(_pipe@11) + end, + Showtime = case Aoc_toml_version of + {ok, 2} -> + _pipe@12 = priv@toml:get_bool(Aoc_toml, [<<"showtime"/utf8>>]), + _pipe@13 = priv@errors:map_error( + _pipe@12, + <<"Could not read \"showtime\" from aoc.toml"/utf8>> + ), + _pipe@14 = priv@errors:print_error(_pipe@13), + priv@errors:assert_ok(_pipe@14); + + _ -> + _pipe@15 = priv@toml:get_string(Aoc_toml, [<<"showtime"/utf8>>]), + _pipe@16 = gleam@result:map( + _pipe@15, + fun(Bool_string) -> case Bool_string of + <<"True"/utf8>> -> + true; + + _ -> + false + end end + ), + _pipe@17 = priv@errors:map_error( + _pipe@16, + <<"Could not read \"showtime\" from aoc.toml"/utf8>> + ), + _pipe@18 = priv@errors:print_error(_pipe@17), + priv@errors:assert_ok(_pipe@18) + end, + Test_folder = adglent:get_test_folder(Day@1), + Test_file = <<<<<<Test_folder/binary, "/day"/utf8>>/binary, Day@1/binary>>/binary, + "_test.gleam"/utf8>>, + _pipe@19 = simplifile:create_directory_all(Test_folder), + _pipe@20 = priv@errors:map_error( + _pipe@19, + <<<<"Could not create folder \""/utf8, Test_folder/binary>>/binary, + "\""/utf8>> + ), + _pipe@21 = priv@errors:print_error(_pipe@20), + priv@errors:assert_ok(_pipe@21), + Testfile_template = case Showtime of + true -> + <<" +import gleam/list +import showtime/tests/should +import adglent.{type Example, Example} +import day{{ day }}/solve + +type Problem1AnswerType = + String + +type Problem2AnswerType = + String + +/// Add examples for part 1 here: +/// ```gleam +///const part1_examples: List(Example(Problem1AnswerType)) = [Example(\"some input\", \"\")] +/// ``` +const part1_examples: List(Example(Problem1AnswerType)) = [] + +/// Add examples for part 2 here: +/// ```gleam +///const part2_examples: List(Example(Problem2AnswerType)) = [Example(\"some input\", \"\")] +/// ``` +const part2_examples: List(Example(Problem2AnswerType)) = [] + +pub fn part1_test() { + part1_examples + |> should.not_equal([]) + use example <- list.map(part1_examples) + solve.part1(example.input) + |> should.equal(example.answer) +} + +pub fn part2_test() { + part2_examples + |> should.not_equal([]) + use example <- list.map(part2_examples) + solve.part2(example.input) + |> should.equal(example.answer) +} + +"/utf8>>; + + false -> + <<" +import gleam/list +import gleeunit/should +import adglent.{type Example, Example} +import day{{ day }}/solve + +type Problem1AnswerType = + String + +type Problem2AnswerType = + String + +/// Add examples for part 1 here: +/// ```gleam +///const part1_examples: List(Example(Problem1AnswerType)) = [Example(\"some input\", \"\")] +/// ``` +const part1_examples: List(Example(Problem1AnswerType)) = [] + +/// Add examples for part 2 here: +/// ```gleam +///const part2_examples: List(Example(Problem2AnswerType)) = [Example(\"some input\", \"\")] +/// ``` +const part2_examples: List(Example(Problem2AnswerType)) = [] + +pub fn part1_test() { + part1_examples + |> should.not_equal([]) + use example <- list.map(part1_examples) + solve.part1(example.input) + |> should.equal(example.answer) +} + +pub fn part2_test() { + part2_examples + |> should.not_equal([]) + use example <- list.map(part2_examples) + solve.part2(example.input) + |> should.equal(example.answer) +} + +"/utf8>> + end, + _pipe@22 = priv@template:render( + Testfile_template, + [{<<"day"/utf8>>, Day@1}] + ), + _pipe@23 = create_file_if_not_present(_pipe@22, Test_file), + _pipe@24 = priv@errors:print_result(_pipe@23), + priv@errors:assert_ok(_pipe@24), + Solutions_folder = <<"src/day"/utf8, Day@1/binary>>, + Solution_file = <<Solutions_folder/binary, "/solve.gleam"/utf8>>, + _pipe@25 = simplifile:create_directory_all(Solutions_folder), + _pipe@26 = priv@errors:map_error( + _pipe@25, + <<<<"Could not create folder \""/utf8, Solutions_folder/binary>>/binary, + "\""/utf8>> + ), + _pipe@27 = priv@errors:print_error(_pipe@26), + priv@errors:assert_ok(_pipe@27), + _pipe@28 = priv@template:render( + <<" +import adglent.{First, Second} +import gleam/io + +pub fn part1(input: String) { + todo as \"Implement solution to part 1\" +} + +pub fn part2(input: String) { + todo as \"Implement solution to part 2\" +} + +pub fn main() { + let assert Ok(part) = adglent.get_part() + let assert Ok(input) = adglent.get_input(\"{{ day }}\") + case part { + First -> + part1(input) + |> adglent.inspect + |> io.println + Second -> + part2(input) + |> adglent.inspect + |> io.println + } +} +"/utf8>>, + [{<<"day"/utf8>>, Day@1}] + ), + _pipe@29 = create_file_if_not_present(_pipe@28, Solution_file), + _pipe@30 = priv@errors:print_result(_pipe@29), + priv@errors:assert_ok(_pipe@30), + _pipe@31 = create_file_if_not_present( + <<"input.txt"/utf8>>, + <<Solutions_folder/binary, "/.gitignore"/utf8>> + ), + _pipe@32 = priv@errors:print_result(_pipe@31), + priv@errors:assert_ok(_pipe@32), + Input = begin + _pipe@33 = priv@aoc_client:get_input(Year, Day@1, Session), + _pipe@34 = priv@errors:map_error( + _pipe@33, + <<"Error when fetching input"/utf8>> + ), + _pipe@35 = priv@errors:print_error(_pipe@34), + priv@errors:assert_ok(_pipe@35) + end, + _pipe@36 = Input, + _pipe@37 = gleam@string:trim(_pipe@36), + _pipe@38 = create_file_if_not_present( + _pipe@37, + <<Solutions_folder/binary, "/input.txt"/utf8>> + ), + _pipe@39 = priv@errors:print_result(_pipe@38), + priv@errors:assert_ok(_pipe@39). diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.cache Binary files differnew file mode 100644 index 0000000..5337c50 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.cache_meta Binary files differnew file mode 100644 index 0000000..2751b68 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.erl new file mode 100644 index 0000000..fb28101 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.erl @@ -0,0 +1,142 @@ +-module(adglent@init). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([main/0]). + +-spec main() -> {ok, binary()} | {error, binary()}. +main() -> + Year = priv@prompt:value(<<"Year"/utf8>>, <<"2023"/utf8>>, false), + Session = priv@prompt:value(<<"Session Cookie"/utf8>>, <<""/utf8>>, false), + Use_showtime = priv@prompt:confirm(<<"Use showtime"/utf8>>, false), + Aoc_toml_file = <<"aoc.toml"/utf8>>, + Overwrite = case simplifile:create_file(Aoc_toml_file) of + {ok, _} -> + true; + + {error, eexist} -> + priv@prompt:confirm(<<"aoc.toml exits - overwrite"/utf8>>, false); + + _ -> + erlang:error(#{gleam_error => panic, + message => <<"Could not create aoc.toml"/utf8>>, + module => <<"adglent/init"/utf8>>, + function => <<"main"/utf8>>, + line => 29}) + end, + _pipe@3 = case Overwrite of + true -> + _pipe@1 = priv@template:render( + <<" +version = {{ version }} +year = \"{{ year }}\" +session = \"{{ session }}\" +showtime = {{ showtime }} +"/utf8>>, + [{<<"version"/utf8>>, <<"2"/utf8>>}, + {<<"year"/utf8>>, Year}, + {<<"session"/utf8>>, Session}, + {<<"showtime"/utf8>>, + begin + _pipe = gleam@bool:to_string(Use_showtime), + gleam@string:lowercase(_pipe) + end}] + ), + _pipe@2 = simplifile:write(Aoc_toml_file, _pipe@1), + priv@errors:map_messages( + _pipe@2, + <<"aoc.toml - written"/utf8>>, + <<"Error when writing aoc.toml"/utf8>> + ); + + false -> + {ok, <<"aoc.toml - skipped"/utf8>>} + end, + priv@errors:print_result(_pipe@3), + Gleam_toml = begin + _pipe@4 = simplifile:read(<<"gleam.toml"/utf8>>), + _pipe@5 = priv@errors:map_error( + _pipe@4, + <<"Could not read gleam.toml"/utf8>> + ), + _pipe@6 = priv@errors:print_error(_pipe@5), + priv@errors:assert_ok(_pipe@6) + end, + Name = begin + _pipe@7 = priv@toml:get_string(Gleam_toml, [<<"name"/utf8>>]), + _pipe@8 = priv@errors:map_error( + _pipe@7, + <<"Could not read \"name\" from gleam.toml"/utf8>> + ), + _pipe@9 = priv@errors:print_error(_pipe@8), + priv@errors:assert_ok(_pipe@9) + end, + Test_main_file = <<<<"test/"/utf8, Name/binary>>/binary, + "_test.gleam"/utf8>>, + _pipe@12 = case Use_showtime of + true -> + _pipe@10 = priv@template:render( + <<" +import showtime + +pub fn main() { + showtime.main() +} +"/utf8>>, + [] + ), + _pipe@11 = simplifile:write(Test_main_file, _pipe@10), + priv@errors:map_messages( + _pipe@11, + <<"Wrote "/utf8, Test_main_file/binary>>, + <<"Could not write to "/utf8, Test_main_file/binary>> + ); + + false -> + {ok, <<"Using existing (gleeunit) "/utf8, Test_main_file/binary>>} + end, + _pipe@13 = priv@errors:print_result(_pipe@12), + priv@errors:assert_ok(_pipe@13), + _pipe@17 = case simplifile:is_file(<<".gitignore"/utf8>>) of + true -> + gleam@result:'try'( + begin + _pipe@14 = simplifile:read(<<".gitignore"/utf8>>), + gleam@result:map_error( + _pipe@14, + fun(Err) -> + <<"Could not read .gitignore: "/utf8, + (gleam@string:inspect(Err))/binary>> + end + ) + end, + fun(Gitignore) -> + Aoc_toml_ignored = begin + _pipe@15 = gleam@string:split(Gitignore, <<"\n"/utf8>>), + gleam@list:find( + _pipe@15, + fun(Line) -> Line =:= <<"aoc.toml"/utf8>> end + ) + end, + case Aoc_toml_ignored of + {error, _} -> + _pipe@16 = simplifile:append( + <<".gitignore"/utf8>>, + <<"\naoc.toml"/utf8>> + ), + priv@errors:map_messages( + _pipe@16, + <<".gitignore written"/utf8>>, + <<"Error when writing .gitignore"/utf8>> + ); + + {ok, _} -> + {ok, + <<".gitignore - skipped (already configured)"/utf8>>} + end + end + ); + + false -> + {error, <<"Could not find .gitignore"/utf8>>} + end, + priv@errors:print_result(_pipe@17). diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent_ffi.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent_ffi.erl new file mode 100644 index 0000000..a6a92e6 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent_ffi.erl @@ -0,0 +1,12 @@ +-module(adglent_ffi). + +-export([get_line/1]). + +-spec get_line(io:prompt()) -> {ok, unicode:unicode_binary()} | {error, eof | no_data}. +get_line(Prompt) -> + case io:get_line(Prompt) of + eof -> {error, eof}; + {error, _} -> {error, no_data}; + Data when is_binary(Data) -> {ok, Data}; + Data when is_list(Data) -> {ok, unicode:characters_to_binary(Data)} + end. diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/gleam@@compile.erl new file mode 100644 index 0000000..543db88 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/gleam@@compile.erl @@ -0,0 +1,157 @@ +#!/usr/bin/env escript + +% TODO: Don't concurrently print warnings and errors +% TODO: Some tests + +-record(arguments, {lib = "./", out = "./", modules = []}). + +main(Args) -> + #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args), + IsElixirModule = fun(Module) -> + filename:extension(Module) =:= ".ex" + end, + {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules), + ok = configure_logging(), + ok = add_lib_to_erlang_path(Lib), + ok = filelib:ensure_dir([Out, $/]), + {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out), + {ElixirOk, _ElixirBeams} = case ErlangOk of + true -> compile_elixir(ElixirModules, Out); + false -> {false, []} + end, + case ErlangOk and ElixirOk of + true -> ok; + false -> erlang:halt(1) + end. + +compile_erlang(Modules, Out) -> + Workers = start_compiler_workers(Out), + ok = producer_loop(Modules, Workers), + collect_results({true, []}). + +collect_results(Acc = {Result, Beams}) -> + receive + {compiled, Beam} -> collect_results({Result, [Beam | Beams]}); + failed -> collect_results({false, Beams}) + after 0 -> Acc + end. + +producer_loop([], 0) -> + ok; +producer_loop([], Workers) -> + receive + {work_please, _} -> producer_loop([], Workers - 1) + end; +producer_loop([Module | Modules], Workers) -> + receive + {work_please, Worker} -> + erlang:send(Worker, {module, Module}), + producer_loop(Modules, Workers) + end. + +start_compiler_workers(Out) -> + Parent = self(), + NumSchedulers = erlang:system_info(schedulers), + SpawnWorker = fun(_) -> + erlang:spawn_link(fun() -> worker_loop(Parent, Out) end) + end, + lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)), + NumSchedulers. + +worker_loop(Parent, Out) -> + Options = [report_errors, report_warnings, debug_info, {outdir, Out}], + erlang:send(Parent, {work_please, self()}), + receive + {module, Module} -> + log({compiling, Module}), + case compile:file(Module, Options) of + {ok, ModuleName} -> + Beam = filename:join(Out, ModuleName) ++ ".beam", + Message = {compiled, Beam}, + log(Message), + erlang:send(Parent, Message); + error -> + log({failed, Module}), + erlang:send(Parent, failed) + end, + worker_loop(Parent, Out) + end. + +compile_elixir(Modules, Out) -> + Error = [ + "The program elixir was not found. Is it installed?", + $\n, + "Documentation for installing Elixir can be viewed here:", + $\n, + "https://elixir-lang.org/install.html" + ], + case Modules of + [] -> {true, []}; + _ -> + log({starting, "compiler.app"}), + ok = application:start(compiler), + log({starting, "elixir.app"}), + case application:start(elixir) of + ok -> do_compile_elixir(Modules, Out); + _ -> + io:put_chars(standard_error, [Error, $\n]), + {false, []} + end + end. + +do_compile_elixir(Modules, Out) -> + ModuleBins = lists:map(fun(Module) -> + log({compiling, Module}), + list_to_binary(Module) + end, Modules), + OutBin = list_to_binary(Out), + Options = [{dest, OutBin}], + % Silence "redefining module" warnings. + % Compiled modules in the build directory are added to the code path. + % These warnings result from recompiling loaded modules. + % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation. + 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]), + case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of + {ok, ModuleAtoms, _} -> + ToBeam = fun(ModuleAtom) -> + Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam", + log({compiled, Beam}), + Beam + end, + {true, lists:map(ToBeam, ModuleAtoms)}; + {error, Errors, _} -> + % Log all filenames associated with modules that failed to compile. + % Note: The compiler prints compilation errors upon encountering them. + ErrorFiles = lists:usort([File || {File, _, _} <- Errors]), + Log = fun(File) -> + log({failed, binary_to_list(File)}) + end, + lists:foreach(Log, ErrorFiles), + {false, []}; + _ -> {false, []} + end. + +add_lib_to_erlang_path(Lib) -> + code:add_paths(filelib:wildcard([Lib, "/*/ebin"])). + +parse(Args) -> + parse(Args, #arguments{}). + +parse([], Arguments) -> + Arguments; +parse(["--lib", Lib | Rest], Arguments) -> + parse(Rest, Arguments#arguments{lib = Lib}); +parse(["--out", Out | Rest], Arguments) -> + parse(Rest, Arguments#arguments{out = Out}); +parse([Module | Rest], Arguments = #arguments{modules = Modules}) -> + parse(Rest, Arguments#arguments{modules = [Module | Modules]}). + +configure_logging() -> + Enabled = os:getenv("GLEAM_LOG") /= false, + persistent_term:put(gleam_logging_enabled, Enabled). + +log(Term) -> + case persistent_term:get(gleam_logging_enabled) of + true -> erlang:display(Term), ok; + false -> ok + end. diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache Binary files differnew file mode 100644 index 0000000..40f6caf --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache_meta Binary files differnew file mode 100644 index 0000000..b6c1617 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.erl new file mode 100644 index 0000000..1acb9b5 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.erl @@ -0,0 +1,61 @@ +-module(priv@aoc_client). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([get_input/3]). + +-spec get_input(binary(), binary(), binary()) -> {ok, binary()} | + {error, binary()}. +get_input(Year, Day, Session) -> + Url = <<<<<<<<"https://adventofcode.com/"/utf8, Year/binary>>/binary, + "/day/"/utf8>>/binary, + Day/binary>>/binary, + "/input"/utf8>>, + gleam@result:'try'( + begin + _pipe = gleam@http@request:to(Url), + gleam@result:map_error( + _pipe, + fun(Error) -> + <<<<<<"Could not create request for \""/utf8, Url/binary>>/binary, + "\": "/utf8>>/binary, + (gleam@string:inspect(Error))/binary>> + end + ) + end, + fun(Request) -> + gleam@result:'try'( + begin + _pipe@1 = Request, + _pipe@2 = gleam@http@request:prepend_header( + _pipe@1, + <<"Accept"/utf8>>, + <<"application/json"/utf8>> + ), + _pipe@3 = gleam@http@request:prepend_header( + _pipe@2, + <<"Cookie"/utf8>>, + <<<<"session="/utf8, Session/binary>>/binary, ";"/utf8>> + ), + _pipe@4 = gleam@httpc:send(_pipe@3), + gleam@result:map_error( + _pipe@4, + fun(Error@1) -> + <<<<<<"Error when requesting \""/utf8, Url/binary>>/binary, + "\": "/utf8>>/binary, + (gleam@string:inspect(Error@1))/binary>> + end + ) + end, + fun(Response) -> case erlang:element(2, Response) of + Status when (Status >= 200) andalso (Status < 300) -> + {ok, erlang:element(4, Response)}; + + Status@1 -> + {error, + <<<<(gleam@int:to_string(Status@1))/binary, + " - "/utf8>>/binary, + (erlang:element(4, Response))/binary>>} + end end + ) + end + ). diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.cache Binary files differnew file mode 100644 index 0000000..7bfeea9 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.cache_meta Binary files differnew file mode 100644 index 0000000..498e302 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.erl new file mode 100644 index 0000000..41545be --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.erl @@ -0,0 +1,74 @@ +-module(priv@errors). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([map_messages/3, map_error/2, print_result/1, print_error/1, assert_ok/1]). + +-spec map_messages({ok, any()} | {error, any()}, binary(), binary()) -> {ok, + binary()} | + {error, binary()}. +map_messages(Result, Success_message, Error_message) -> + _pipe = Result, + _pipe@1 = gleam@result:map_error( + _pipe, + fun(Error) -> + <<<<<<"Error - "/utf8, Error_message/binary>>/binary, ": "/utf8>>/binary, + (gleam@string:inspect(Error))/binary>> + end + ), + gleam@result:replace(_pipe@1, Success_message). + +-spec map_error({ok, OBD} | {error, any()}, binary()) -> {ok, OBD} | + {error, binary()}. +map_error(Result, Error_message) -> + _pipe = Result, + gleam@result:map_error( + _pipe, + fun(Error) -> + <<<<Error_message/binary, ": "/utf8>>/binary, + (gleam@string:inspect(Error))/binary>> + end + ). + +-spec print_result({ok, binary()} | {error, binary()}) -> {ok, binary()} | + {error, binary()}. +print_result(Result) -> + _pipe = Result, + _pipe@1 = gleam@result:unwrap_both(_pipe), + gleam@io:println(_pipe@1), + Result. + +-spec print_error({ok, OBM} | {error, binary()}) -> {ok, OBM} | + {error, binary()}. +print_error(Result) -> + _pipe = Result, + gleam@result:map_error( + _pipe, + fun(Err) -> + gleam@io:println(Err), + Err + end + ). + +-spec assert_ok({ok, OBQ} | {error, binary()}) -> OBQ. +assert_ok(Result) -> + _assert_subject = begin + _pipe = Result, + gleam@result:map_error( + _pipe, + fun(Err) -> + erlang:halt(1), + Err + end + ) + end, + {ok, Value} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"priv/errors"/utf8>>, + function => <<"assert_ok"/utf8>>, + line => 43}) + end, + Value. diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.cache Binary files differnew file mode 100644 index 0000000..45d6e3e --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.cache_meta Binary files differnew file mode 100644 index 0000000..b010daf --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.erl new file mode 100644 index 0000000..0277f14 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.erl @@ -0,0 +1,53 @@ +-module(priv@prompt). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([get_line/1, confirm/2, value/3]). +-export_type([get_line_error/0]). + +-type get_line_error() :: eof | no_data. + +-spec get_line(binary()) -> {ok, binary()} | {error, get_line_error()}. +get_line(Prompt) -> + adglent_ffi:get_line(Prompt). + +-spec confirm(binary(), boolean()) -> boolean(). +confirm(Message, Auto_accept) -> + Auto_accept orelse case begin + _pipe = adglent_ffi:get_line(<<Message/binary, "? (Y/N): "/utf8>>), + _pipe@1 = gleam@result:unwrap(_pipe, <<"n"/utf8>>), + gleam@string:trim(_pipe@1) + end of + <<"Y"/utf8>> -> + true; + + <<"y"/utf8>> -> + true; + + _ -> + false + end. + +-spec get_value_of_default(binary(), binary(), boolean()) -> binary(). +get_value_of_default(Message, Default, Auto_accept) -> + case Auto_accept of + true -> + Default; + + false -> + _pipe = adglent_ffi:get_line( + <<<<<<Message/binary, "? ("/utf8>>/binary, Default/binary>>/binary, + "): "/utf8>> + ), + _pipe@1 = gleam@result:unwrap(_pipe, <<""/utf8>>), + gleam@string:trim(_pipe@1) + end. + +-spec value(binary(), binary(), boolean()) -> binary(). +value(Message, Default, Auto_accept) -> + case get_value_of_default(Message, Default, Auto_accept) of + <<""/utf8>> -> + Default; + + Value -> + Value + end. diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.cache Binary files differnew file mode 100644 index 0000000..8446302 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.cache_meta Binary files differnew file mode 100644 index 0000000..5e1f919 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.erl new file mode 100644 index 0000000..6a5d0bf --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.erl @@ -0,0 +1,25 @@ +-module(priv@template). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([render/2]). + +-spec render(binary(), list({binary(), binary()})) -> binary(). +render(Template, Substitutions) -> + <<(begin + _pipe = Substitutions, + _pipe@2 = gleam@list:fold( + _pipe, + Template, + fun(Template@1, Substitution) -> + {Name, Value} = Substitution, + _pipe@1 = Template@1, + gleam@string:replace( + _pipe@1, + <<<<"{{ "/utf8, Name/binary>>/binary, " }}"/utf8>>, + Value + ) + end + ), + gleam@string:trim(_pipe@2) + end)/binary, + "\n"/utf8>>. diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache Binary files differnew file mode 100644 index 0000000..d29fd97 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache_meta Binary files differnew file mode 100644 index 0000000..3397840 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.erl new file mode 100644 index 0000000..7e36387 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.erl @@ -0,0 +1 @@ +-module(priv@templates@solution). diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache Binary files differnew file mode 100644 index 0000000..8cdc9df --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache_meta Binary files differnew file mode 100644 index 0000000..17c867f --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.erl new file mode 100644 index 0000000..ca6b127 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.erl @@ -0,0 +1 @@ +-module(priv@templates@test_main). diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache Binary files differnew file mode 100644 index 0000000..2003723 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache_meta Binary files differnew file mode 100644 index 0000000..c996833 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.erl new file mode 100644 index 0000000..2f5a41e --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.erl @@ -0,0 +1 @@ +-module(priv@templates@testfile_gleeunit). diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache Binary files differnew file mode 100644 index 0000000..155ee1e --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache_meta Binary files differnew file mode 100644 index 0000000..120c91f --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.erl new file mode 100644 index 0000000..bbbc8b2 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.erl @@ -0,0 +1 @@ +-module(priv@templates@testfile_showtime). diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.cache Binary files differnew file mode 100644 index 0000000..e328098 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.cache_meta Binary files differnew file mode 100644 index 0000000..a423083 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.erl new file mode 100644 index 0000000..6c41fbf --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.erl @@ -0,0 +1,83 @@ +-module(priv@toml). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([get_string/2, get_bool/2, get_int/2]). +-export_type([tom_error/0]). + +-type tom_error() :: {tom_parse_error, tom:parse_error()} | + {tom_get_error, tom:get_error()}. + +-spec get_string(binary(), list(binary())) -> {ok, binary()} | + {error, tom_error()}. +get_string(Toml_content, Key_path) -> + gleam@result:'try'( + begin + _pipe = tom:parse(<<Toml_content/binary, "\n"/utf8>>), + gleam@result:map_error( + _pipe, + fun(Field@0) -> {tom_parse_error, Field@0} end + ) + end, + fun(Toml) -> + gleam@result:'try'( + begin + _pipe@1 = tom:get_string(Toml, Key_path), + gleam@result:map_error( + _pipe@1, + fun(Field@0) -> {tom_get_error, Field@0} end + ) + end, + fun(Value) -> {ok, Value} end + ) + end + ). + +-spec get_bool(binary(), list(binary())) -> {ok, boolean()} | + {error, tom_error()}. +get_bool(Toml_content, Key_path) -> + gleam@result:'try'( + begin + _pipe = tom:parse(<<Toml_content/binary, "\n"/utf8>>), + gleam@result:map_error( + _pipe, + fun(Field@0) -> {tom_parse_error, Field@0} end + ) + end, + fun(Toml) -> + gleam@result:'try'( + begin + _pipe@1 = tom:get_bool(Toml, Key_path), + gleam@result:map_error( + _pipe@1, + fun(Field@0) -> {tom_get_error, Field@0} end + ) + end, + fun(Value) -> {ok, Value} end + ) + end + ). + +-spec get_int(binary(), list(binary())) -> {ok, integer()} | + {error, tom_error()}. +get_int(Toml_content, Key_path) -> + gleam@result:'try'( + begin + _pipe = tom:parse(<<Toml_content/binary, "\n"/utf8>>), + gleam@result:map_error( + _pipe, + fun(Field@0) -> {tom_parse_error, Field@0} end + ) + end, + fun(Toml) -> + gleam@result:'try'( + begin + _pipe@1 = tom:get_int(Toml, Key_path), + gleam@result:map_error( + _pipe@1, + fun(Field@0) -> {tom_get_error, Field@0} end + ) + end, + fun(Value) -> {ok, Value} end + ) + end + ). diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.cache Binary files differnew file mode 100644 index 0000000..19b5f6b --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.cache_meta Binary files differnew file mode 100644 index 0000000..96a5705 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.erl new file mode 100644 index 0000000..d4c0030 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.erl @@ -0,0 +1,155 @@ +-module(showtime). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([main/0]). + +-spec mk_runner( + fun((gleam@option:option(list(binary())), list(binary()), showtime@internal@common@cli:capture()) -> NYW), + glint:command_input() +) -> NYW. +mk_runner(Func, Command) -> + _assert_subject = begin + _pipe = erlang:element(3, Command), + _pipe@1 = glint@flag:get_strings(_pipe, <<"modules"/utf8>>), + gleam@result:map(_pipe@1, fun(Modules) -> case Modules of + [] -> + none; + + Modules@1 -> + {some, Modules@1} + end end) + end, + {ok, Module_list} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime"/utf8>>, + function => <<"mk_runner"/utf8>>, + line => 91}) + end, + _assert_subject@1 = begin + _pipe@2 = erlang:element(3, Command), + glint@flag:get_strings(_pipe@2, <<"ignore"/utf8>>) + end, + {ok, Ignore_tags} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"showtime"/utf8>>, + function => <<"mk_runner"/utf8>>, + line => 100}) + end, + _assert_subject@2 = begin + _pipe@3 = erlang:element(3, Command), + _pipe@4 = glint@flag:get_string(_pipe@3, <<"capture"/utf8>>), + _pipe@5 = gleam@result:map( + _pipe@4, + fun(Arg) -> gleam@string:lowercase(Arg) end + ), + gleam@result:map(_pipe@5, fun(Arg@1) -> case Arg@1 of + <<"no"/utf8>> -> + no; + + <<"yes"/utf8>> -> + yes; + + <<"mixed"/utf8>> -> + mixed + end end) + end, + {ok, Capture_output} = case _assert_subject@2 of + {ok, _} -> _assert_subject@2; + _assert_fail@2 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@2, + module => <<"showtime"/utf8>>, + function => <<"mk_runner"/utf8>>, + line => 104}) + end, + Func(Module_list, Ignore_tags, Capture_output). + +-spec start_with_args( + list(binary()), + fun((gleam@option:option(list(binary())), list(binary()), showtime@internal@common@cli:capture()) -> any()) +) -> nil. +start_with_args(Args, Func) -> + Modules_flag = begin + _pipe = glint@flag:string_list(), + _pipe@1 = glint@flag:default(_pipe, []), + glint@flag:description( + _pipe@1, + <<"Run only tests in the modules in this list"/utf8>> + ) + end, + Ignore_flag = begin + _pipe@2 = glint@flag:string_list(), + _pipe@3 = glint@flag:default(_pipe@2, []), + glint@flag:description( + _pipe@3, + <<"Ignore tests that are have tags matching a tag in this list"/utf8>> + ) + end, + Capture_flag = begin + _pipe@4 = glint@flag:string(), + _pipe@5 = glint@flag:default(_pipe@4, <<"no"/utf8>>), + _pipe@6 = glint@flag:constraint( + _pipe@5, + glint@flag@constraint:one_of( + [<<"yes"/utf8>>, <<"no"/utf8>>, <<"mixed"/utf8>>] + ) + ), + glint@flag:description( + _pipe@6, + <<"Capture output: no (default) - output when tests are run, yes - output is captured and shown in report, mixed - output when run and in report"/utf8>> + ) + end, + _pipe@7 = glint:new(), + _pipe@12 = glint:add( + _pipe@7, + [], + begin + _pipe@8 = glint:command( + fun(_capture) -> mk_runner(Func, _capture) end + ), + _pipe@9 = glint:flag(_pipe@8, <<"modules"/utf8>>, Modules_flag), + _pipe@10 = glint:flag(_pipe@9, <<"ignore"/utf8>>, Ignore_flag), + _pipe@11 = glint:flag(_pipe@10, <<"capture"/utf8>>, Capture_flag), + glint:description(_pipe@11, <<"Runs test"/utf8>>) + end + ), + _pipe@13 = glint:with_pretty_help(_pipe@12, glint:default_pretty_help()), + glint:run(_pipe@13, Args). + +-spec main() -> nil. +main() -> + start_with_args( + gleam@erlang:start_arguments(), + fun(Module_list, Ignore_tags, Capture) -> + Test_event_handler = showtime@internal@erlang@event_handler:start(), + Test_module_handler = showtime@internal@erlang@module_handler:start( + Test_event_handler, + fun showtime@internal@erlang@discover:collect_test_functions/1, + fun showtime@internal@erlang@runner:run_test_suite/4, + Ignore_tags, + Capture + ), + Test_event_handler(start_test_run), + Modules = showtime@internal@erlang@discover:collect_modules( + Test_module_handler, + Module_list + ), + Test_event_handler( + {end_test_run, + begin + _pipe = Modules, + gleam@list:length(_pipe) + end} + ), + nil + end + ). diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache Binary files differnew file mode 100644 index 0000000..0dded35 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache_meta Binary files differnew file mode 100644 index 0000000..4c3ebd3 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.erl new file mode 100644 index 0000000..f2d2396 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.erl @@ -0,0 +1,8 @@ +-module(showtime@internal@common@cli). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export_type([capture/0]). + +-type capture() :: yes | no | mixed. + + diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache Binary files differnew file mode 100644 index 0000000..df75ed9 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache_meta Binary files differnew file mode 100644 index 0000000..cea0c4b --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.erl new file mode 100644 index 0000000..5ee9a85 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.erl @@ -0,0 +1,131 @@ +-module(showtime@internal@common@common_event_handler). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([handle_event/3]). +-export_type([test_state/0, handler_state/0]). + +-type test_state() :: not_started | running | {finished, integer()}. + +-type handler_state() :: {handler_state, + test_state(), + integer(), + gleam@dict:dict(binary(), gleam@dict:dict(binary(), showtime@internal@common@test_suite:test_run()))}. + +-spec handle_event( + showtime@internal@common@test_suite:test_event(), + fun(() -> integer()), + handler_state() +) -> handler_state(). +handle_event(Msg, System_time, State) -> + Test_state = erlang:element(2, State), + Num_done = erlang:element(3, State), + Events = erlang:element(4, State), + {Updated_test_state, Updated_num_done, Updated_events} = case Msg of + start_test_run -> + {running, Num_done, Events}; + + {start_test_suite, Module} -> + Maybe_module_events = gleam@map:get( + Events, + erlang:element(2, Module) + ), + New_events = case Maybe_module_events of + {ok, _} -> + Events; + + {error, _} -> + _pipe = Events, + gleam@map:insert( + _pipe, + erlang:element(2, Module), + gleam@map:new() + ) + end, + {Test_state, Num_done, New_events}; + + {start_test, Module@1, Test} -> + Current_time = System_time(), + Maybe_module_events@1 = gleam@map:get( + Events, + erlang:element(2, Module@1) + ), + New_events@1 = case Maybe_module_events@1 of + {ok, Module_events} -> + Maybe_test_event = gleam@map:get( + Module_events, + erlang:element(2, Test) + ), + case Maybe_test_event of + {error, _} -> + _pipe@1 = Events, + gleam@map:insert( + _pipe@1, + erlang:element(2, Module@1), + begin + _pipe@2 = Module_events, + gleam@map:insert( + _pipe@2, + erlang:element(2, Test), + {ongoing_test_run, Test, Current_time} + ) + end + ); + + {ok, _} -> + Events + end; + + {error, _} -> + Events + end, + {Test_state, Num_done, New_events@1}; + + {end_test, Module@2, Test@1, Result} -> + Current_time@1 = System_time(), + Maybe_module_events@2 = gleam@map:get( + Events, + erlang:element(2, Module@2) + ), + New_events@2 = case Maybe_module_events@2 of + {ok, Module_events@1} -> + Maybe_test_run = begin + _pipe@3 = Module_events@1, + gleam@map:get(_pipe@3, erlang:element(2, Test@1)) + end, + Updated_module_events = case Maybe_test_run of + {ok, {ongoing_test_run, Test_function, Started_at}} -> + _pipe@4 = Module_events@1, + gleam@map:insert( + _pipe@4, + erlang:element(2, Test@1), + {completed_test_run, + Test_function, + Current_time@1 - Started_at, + Result} + ); + + {error, _} -> + Module_events@1 + end, + _pipe@5 = Events, + gleam@map:insert( + _pipe@5, + erlang:element(2, Module@2), + Updated_module_events + ); + + {error, _} -> + Events + end, + {Test_state, Num_done, New_events@2}; + + {end_test_suite, _} -> + {Test_state, Num_done + 1, Events}; + + {end_test_run, Num_modules} -> + {{finished, Num_modules}, Num_done, Events}; + + _ -> + {running, Num_done, Events} + end, + {handler_state, Updated_test_state, Updated_num_done, Updated_events}. diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache Binary files differnew file mode 100644 index 0000000..c0f776e --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache_meta Binary files differnew file mode 100644 index 0000000..ae0cd95 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.erl new file mode 100644 index 0000000..7f62f4f --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.erl @@ -0,0 +1,54 @@ +-module(showtime@internal@common@test_result). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export_type([ignore_reason/0, test_return/0, exception/0, reason/0, reason_detail/0, gleam_error_detail/0, class/0, trace_list/0, trace/0, extra_info/0, arity_/0]). + +-type ignore_reason() :: ignore. + +-type test_return() :: {test_function_return, + gleam@dynamic:dynamic_(), + list(binary())} | + {ignored, ignore_reason()}. + +-type exception() :: {erlang_exception, + class(), + reason(), + trace_list(), + list(binary())}. + +-type reason() :: {assert_equal, list(reason_detail())} | + {assert_not_equal, list(reason_detail())} | + {assert_match, list(reason_detail())} | + {gleam_error, gleam_error_detail()} | + {gleam_assert, gleam@dynamic:dynamic_(), integer()} | + {generic_exception, gleam@dynamic:dynamic_()}. + +-type reason_detail() :: {module, binary()} | + {reason_line, integer()} | + {expression, binary()} | + {expected, gleam@dynamic:dynamic_()} | + {value, gleam@dynamic:dynamic_()} | + {pattern, binary()}. + +-type gleam_error_detail() :: {let_assert, + binary(), + binary(), + integer(), + binary(), + gleam@dynamic:dynamic_()}. + +-type class() :: erlang_error | exit | throw. + +-type trace_list() :: {trace_list, list(trace())}. + +-type trace() :: {trace, binary(), arity_(), list(extra_info())} | + {trace_module, binary(), binary(), arity_(), list(extra_info())}. + +-type extra_info() :: {error_info, + gleam@dict:dict(gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_())} | + {file, binary()} | + {line, integer()}. + +-type arity_() :: {num, integer()} | {arg_list, list(gleam@dynamic:dynamic_())}. + + diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache Binary files differnew file mode 100644 index 0000000..80885b8 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache_meta Binary files differnew file mode 100644 index 0000000..b2139f9 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.erl new file mode 100644 index 0000000..6a56de8 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.erl @@ -0,0 +1,30 @@ +-module(showtime@internal@common@test_suite). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export_type([test_run/0, test_module/0, test_function/0, test_suite/0, test_event/0]). + +-type test_run() :: {ongoing_test_run, test_function(), integer()} | + {completed_test_run, + test_function(), + integer(), + {ok, showtime@internal@common@test_result:test_return()} | + {error, showtime@internal@common@test_result:exception()}}. + +-type test_module() :: {test_module, binary(), gleam@option:option(binary())}. + +-type test_function() :: {test_function, binary()}. + +-type test_suite() :: {test_suite, test_module(), list(test_function())}. + +-type test_event() :: start_test_run | + {start_test_suite, test_module()} | + {start_test, test_module(), test_function()} | + {end_test, + test_module(), + test_function(), + {ok, showtime@internal@common@test_result:test_return()} | + {error, showtime@internal@common@test_result:exception()}} | + {end_test_suite, test_module()} | + {end_test_run, integer()}. + + diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache Binary files differnew file mode 100644 index 0000000..68f7428 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache_meta Binary files differnew file mode 100644 index 0000000..236dd39 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.erl new file mode 100644 index 0000000..f0548aa --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.erl @@ -0,0 +1,230 @@ +-module(showtime@internal@erlang@discover). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([collect_modules/2, collect_test_functions/1]). + +-spec get_module_prefix(binary()) -> binary(). +get_module_prefix(Path) -> + Path_without_test = begin + _pipe = Path, + gleam@string:replace(_pipe, <<"./test"/utf8>>, <<""/utf8>>) + end, + Path_without_leading_slash = case gleam@string:starts_with( + Path_without_test, + <<"/"/utf8>> + ) of + true -> + gleam@string:drop_left(Path_without_test, 1); + + false -> + Path_without_test + end, + Module_prefix = begin + _pipe@1 = Path_without_leading_slash, + gleam@string:replace(_pipe@1, <<"/"/utf8>>, <<"@"/utf8>>) + end, + case gleam@string:length(Module_prefix) of + 0 -> + Module_prefix; + + _ -> + <<Module_prefix/binary, "@"/utf8>> + end. + +-spec collect_modules_in_folder( + binary(), + fun((showtime@internal@common@test_suite:test_module()) -> nil), + gleam@option:option(list(binary())) +) -> list(showtime@internal@common@test_suite:test_module()). +collect_modules_in_folder(Path, Test_module_handler, Only_modules) -> + Module_prefix = get_module_prefix(Path), + _assert_subject = simplifile:read_directory(Path), + {ok, Files} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime/internal/erlang/discover"/utf8>>, + function => <<"collect_modules_in_folder"/utf8>>, + line => 40}) + end, + Test_modules_in_folder = begin + _pipe = Files, + _pipe@1 = gleam@list:filter( + _pipe, + fun(_capture) -> + gleam@string:ends_with(_capture, <<"_test.gleam"/utf8>>) + end + ), + gleam@list:filter_map( + _pipe@1, + fun(Test_module_file) -> + Module_name = <<Module_prefix/binary, + (begin + _pipe@2 = Test_module_file, + gleam@string:replace( + _pipe@2, + <<".gleam"/utf8>>, + <<""/utf8>> + ) + end)/binary>>, + case Only_modules of + {some, Only_modules_list} -> + Module_in_list = begin + _pipe@3 = Only_modules_list, + gleam@list:any( + _pipe@3, + fun(Only_module_name) -> + Only_module_name =:= begin + _pipe@4 = Module_name, + gleam@string:replace( + _pipe@4, + <<"@"/utf8>>, + <<"/"/utf8>> + ) + end + end + ) + end, + case Module_in_list of + true -> + Test_module = {test_module, + Module_name, + {some, Test_module_file}}, + Test_module_handler(Test_module), + {ok, Test_module}; + + false -> + {error, nil} + end; + + none -> + Test_module@1 = {test_module, + Module_name, + {some, Test_module_file}}, + Test_module_handler(Test_module@1), + {ok, Test_module@1} + end + end + ) + end, + Test_modules_in_subfolders = begin + _pipe@5 = Files, + _pipe@6 = gleam@list:map( + _pipe@5, + fun(Filename) -> + <<<<Path/binary, "/"/utf8>>/binary, Filename/binary>> + end + ), + _pipe@7 = gleam@list:filter( + _pipe@6, + fun(File) -> simplifile:is_directory(File) end + ), + gleam@list:fold( + _pipe@7, + [], + fun(Modules, Subfolder) -> _pipe@8 = Modules, + gleam@list:append( + _pipe@8, + collect_modules_in_folder( + Subfolder, + Test_module_handler, + Only_modules + ) + ) end + ) + end, + _pipe@9 = Test_modules_in_folder, + gleam@list:append(_pipe@9, Test_modules_in_subfolders). + +-spec collect_modules( + fun((showtime@internal@common@test_suite:test_module()) -> nil), + gleam@option:option(list(binary())) +) -> list(showtime@internal@common@test_suite:test_module()). +collect_modules(Test_module_handler, Only_modules) -> + collect_modules_in_folder( + <<"./test"/utf8>>, + Test_module_handler, + Only_modules + ). + +-spec collect_test_functions(showtime@internal@common@test_suite:test_module()) -> showtime@internal@common@test_suite:test_suite(). +collect_test_functions(Module) -> + Test_functions = begin + _pipe = erlang:apply( + erlang:binary_to_atom(erlang:element(2, Module)), + erlang:binary_to_atom(<<"module_info"/utf8>>), + [gleam@dynamic:from(erlang:binary_to_atom(<<"exports"/utf8>>))] + ), + gleam@dynamic:unsafe_coerce(_pipe) + end, + Test_functions_filtered = begin + _pipe@1 = Test_functions, + _pipe@3 = gleam@list:map( + _pipe@1, + fun(Entry) -> + {Name, Arity} = case Entry of + {_, _} -> Entry; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime/internal/erlang/discover"/utf8>>, + function => <<"collect_test_functions"/utf8>>, + line => 131}) + end, + {begin + _pipe@2 = Name, + erlang:atom_to_binary(_pipe@2) + end, + Arity} + end + ), + _pipe@4 = gleam@list:filter_map( + _pipe@3, + fun(Entry@1) -> + {Name@1, Arity@1} = case Entry@1 of + {_, _} -> Entry@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"showtime/internal/erlang/discover"/utf8>>, + function => <<"collect_test_functions"/utf8>>, + line => 139}) + end, + case gleam@string:ends_with(Name@1, <<"_test"/utf8>>) of + true -> + case Arity@1 of + 0 -> + {ok, Name@1}; + + _ -> + gleam@io:println( + <<<<<<<<"WARNING: function \""/utf8, + Name@1/binary>>/binary, + "\" has arity: "/utf8>>/binary, + (gleam@int:to_string(Arity@1))/binary>>/binary, + " - cannot be used as test (needs to be 0)"/utf8>> + ), + {error, <<"Wrong arity"/utf8>>} + end; + + false -> + {error, <<"Non matching name"/utf8>>} + end + end + ), + _pipe@5 = gleam@list:filter( + _pipe@4, + fun(_capture) -> + gleam@string:ends_with(_capture, <<"_test"/utf8>>) + end + ), + gleam@list:map( + _pipe@5, + fun(Function_name) -> {test_function, Function_name} end + ) + end, + {test_suite, Module, Test_functions_filtered}. diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache Binary files differnew file mode 100644 index 0000000..60fea12 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache_meta Binary files differnew file mode 100644 index 0000000..1223c48 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.erl new file mode 100644 index 0000000..d72ce2c --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.erl @@ -0,0 +1,76 @@ +-module(showtime@internal@erlang@event_handler). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([start/0]). +-export_type([event_handler_message/0]). + +-type event_handler_message() :: {event_handler_message, + showtime@internal@common@test_suite:test_event(), + gleam@erlang@process:subject(integer())}. + +-spec system_time() -> integer(). +system_time() -> + os:system_time(millisecond). + +-spec start() -> fun((showtime@internal@common@test_suite:test_event()) -> nil). +start() -> + _assert_subject = gleam@otp@actor:start( + {not_started, 0, gleam@map:new()}, + fun(Msg, State) -> + {event_handler_message, Test_event, Reply_to} = Msg, + {Test_state, Num_done, Events} = State, + Updated_state = showtime@internal@common@common_event_handler:handle_event( + Test_event, + fun system_time/0, + {handler_state, Test_state, Num_done, Events} + ), + case Updated_state of + {handler_state, {finished, Num_modules}, Num_done@1, Events@1} when Num_done@1 =:= Num_modules -> + {Test_report, Num_failed} = showtime@internal@reports@formatter:create_test_report( + Events@1 + ), + gleam@io:println(Test_report), + gleam@erlang@process:send(Reply_to, Num_failed), + {stop, normal}; + + {handler_state, Test_state@1, Num_done@2, Events@2} -> + {continue, {Test_state@1, Num_done@2, Events@2}, none} + end + end + ), + {ok, Subject} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime/internal/erlang/event_handler"/utf8>>, + function => <<"start"/utf8>>, + line => 32}) + end, + Parent_subject = gleam@erlang@process:new_subject(), + Selector = begin + _pipe = gleam_erlang_ffi:new_selector(), + gleam@erlang@process:selecting(_pipe, Parent_subject, fun(X) -> X end) + end, + fun(Test_event@1) -> case Test_event@1 of + {end_test_run, _} -> + gleam@erlang@process:send( + Subject, + {event_handler_message, Test_event@1, Parent_subject} + ), + Num_failed@1 = gleam_erlang_ffi:select(Selector), + case Num_failed@1 > 0 of + true -> + erlang:halt(1); + + false -> + erlang:halt(0) + end; + + _ -> + gleam@erlang@process:send( + Subject, + {event_handler_message, Test_event@1, Parent_subject} + ) + end end. diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache Binary files differnew file mode 100644 index 0000000..6b896ec --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache_meta Binary files differnew file mode 100644 index 0000000..7cd0c75 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.erl new file mode 100644 index 0000000..a6959f5 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.erl @@ -0,0 +1,53 @@ +-module(showtime@internal@erlang@module_handler). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([start/5]). + +-spec start( + fun((showtime@internal@common@test_suite:test_event()) -> nil), + fun((showtime@internal@common@test_suite:test_module()) -> showtime@internal@common@test_suite:test_suite()), + fun((showtime@internal@common@test_suite:test_suite(), fun((showtime@internal@common@test_suite:test_event()) -> nil), list(binary()), showtime@internal@common@cli:capture()) -> nil), + list(binary()), + showtime@internal@common@cli:capture() +) -> fun((showtime@internal@common@test_suite:test_module()) -> nil). +start( + Test_event_handler, + Test_function_collector, + Run_test_suite, + Ignore_tags, + Capture +) -> + _assert_subject = gleam@otp@actor:start( + nil, + fun(Module, State) -> + gleam@erlang@process:start( + fun() -> + Test_suite = Test_function_collector(Module), + Test_event_handler({start_test_suite, Module}), + Run_test_suite( + Test_suite, + Test_event_handler, + Ignore_tags, + Capture + ), + Test_event_handler({end_test_suite, Module}) + end, + false + ), + {continue, State, none} + end + ), + {ok, Subject} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime/internal/erlang/module_handler"/utf8>>, + function => <<"start"/utf8>>, + line => 23}) + end, + fun(Test_module) -> + gleam@erlang@process:send(Subject, Test_module), + nil + end. diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache Binary files differnew file mode 100644 index 0000000..91e7663 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache_meta Binary files differnew file mode 100644 index 0000000..069c9cf --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.erl new file mode 100644 index 0000000..702fb75 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.erl @@ -0,0 +1,46 @@ +-module(showtime@internal@erlang@runner). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([run_test/4, run_test_suite/4]). + +-spec run_test( + binary(), + binary(), + list(binary()), + showtime@internal@common@cli:capture() +) -> {ok, showtime@internal@common@test_result:test_return()} | + {error, showtime@internal@common@test_result:exception()}. +run_test(Module_name, Test_name, Ignore_tags, Capture) -> + Result = showtime_ffi:run_test( + erlang:binary_to_atom(Module_name), + erlang:binary_to_atom(Test_name), + Ignore_tags, + Capture + ), + Result. + +-spec run_test_suite( + showtime@internal@common@test_suite:test_suite(), + fun((showtime@internal@common@test_suite:test_event()) -> nil), + list(binary()), + showtime@internal@common@cli:capture() +) -> nil. +run_test_suite(Test_suite, Test_event_handler, Ignore_tags, Capture) -> + _pipe = erlang:element(3, Test_suite), + gleam@list:each( + _pipe, + fun(Test) -> + Test_event_handler( + {start_test, erlang:element(2, Test_suite), Test} + ), + Result = run_test( + erlang:element(2, erlang:element(2, Test_suite)), + erlang:element(2, Test), + Ignore_tags, + Capture + ), + Test_event_handler( + {end_test, erlang:element(2, Test_suite), Test, Result} + ) + end + ). diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache Binary files differnew file mode 100644 index 0000000..bf88ac7 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache_meta Binary files differnew file mode 100644 index 0000000..be99189 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.erl new file mode 100644 index 0000000..d2969b2 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.erl @@ -0,0 +1,61 @@ +-module(showtime@internal@reports@compare). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([compare/2]). + +-spec compare(gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> {binary(), + binary()}. +compare(Expected, Got) -> + Expected_as_list = begin + _pipe = Expected, + (gleam@dynamic:list(fun gleam@dynamic:dynamic/1))(_pipe) + end, + Got_as_list = begin + _pipe@1 = Got, + (gleam@dynamic:list(fun gleam@dynamic:dynamic/1))(_pipe@1) + end, + Expected_as_string = begin + _pipe@2 = Expected, + gleam@dynamic:string(_pipe@2) + end, + Got_as_string = begin + _pipe@3 = Got, + gleam@dynamic:string(_pipe@3) + end, + case {Expected_as_list, Got_as_list, Expected_as_string, Got_as_string} of + {{ok, Expected_list}, {ok, Got_list}, _, _} -> + Comparison = begin + _pipe@4 = gap:compare_lists(Expected_list, Got_list), + _pipe@5 = gap@styling:from_comparison(_pipe@4), + _pipe@6 = gap@styling:highlight( + _pipe@5, + fun showtime@internal@reports@styles:expected_highlight/1, + fun showtime@internal@reports@styles:got_highlight/1, + fun(Item) -> Item end + ), + gap@styling:to_styled_comparison(_pipe@6) + end, + {erlang:element(2, Comparison), erlang:element(3, Comparison)}; + + {_, _, {ok, Expected_string}, {ok, Got_string}} -> + Comparison@1 = begin + _pipe@7 = gap:compare_strings(Expected_string, Got_string), + _pipe@8 = gap@styling:from_comparison(_pipe@7), + _pipe@9 = gap@styling:highlight( + _pipe@8, + fun showtime@internal@reports@styles:expected_highlight/1, + fun showtime@internal@reports@styles:got_highlight/1, + fun(Item@1) -> Item@1 end + ), + gap@styling:to_styled_comparison(_pipe@9) + end, + {erlang:element(2, Comparison@1), erlang:element(3, Comparison@1)}; + + {_, _, _, _} -> + {showtime@internal@reports@styles:expected_highlight( + gleam@string:inspect(Expected) + ), + showtime@internal@reports@styles:got_highlight( + gleam@string:inspect(Got) + )} + end. diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache Binary files differnew file mode 100644 index 0000000..58b0250 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache_meta Binary files differnew file mode 100644 index 0000000..86e3c59 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.erl new file mode 100644 index 0000000..4022bed --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.erl @@ -0,0 +1,749 @@ +-module(showtime@internal@reports@formatter). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([create_test_report/1]). +-export_type([glee_unit_assertion_type/0, module_and_test/0, unified_error/0]). + +-type glee_unit_assertion_type() :: {glee_unit_assert_equal, binary()} | + {glee_unit_assert_not_equal, binary()} | + {glee_unit_assert_match, binary()}. + +-type module_and_test() :: {module_and_test_run, + binary(), + showtime@internal@common@test_suite:test_run()}. + +-type unified_error() :: {unified_error, + gleam@option:option(showtime@tests@meta:meta()), + binary(), + binary(), + binary(), + binary(), + gleam@option:option(integer()), + list(showtime@internal@common@test_result:trace())}. + +-spec erlang_error_to_unified( + list(showtime@internal@common@test_result:reason_detail()), + glee_unit_assertion_type(), + list(showtime@internal@common@test_result:trace()) +) -> unified_error(). +erlang_error_to_unified(Error_details, Assertion_type, Stacktrace) -> + _pipe = Error_details, + gleam@list:fold( + _pipe, + {unified_error, + none, + <<"not_set"/utf8>>, + erlang:element(2, Assertion_type), + <<""/utf8>>, + <<""/utf8>>, + none, + Stacktrace}, + fun(Unified, Reason) -> case Reason of + {expression, Expression} -> + erlang:setelement(3, Unified, Expression); + + {expected, Value} -> + case Assertion_type of + {glee_unit_assert_equal, _} -> + erlang:setelement( + 5, + Unified, + showtime@internal@reports@styles:expected_highlight( + gleam@string:inspect(Value) + ) + ); + + _ -> + Unified + end; + + {value, Value@1} -> + case Assertion_type of + {glee_unit_assert_not_equal, _} -> + erlang:setelement( + 6, + erlang:setelement( + 5, + Unified, + <<(showtime@internal@reports@styles:not_style( + <<"not "/utf8>> + ))/binary, + (gleam@string:inspect(Value@1))/binary>> + ), + showtime@internal@reports@styles:got_highlight( + gleam@string:inspect(Value@1) + ) + ); + + _ -> + erlang:setelement( + 6, + Unified, + showtime@internal@reports@styles:got_highlight( + gleam@string:inspect(Value@1) + ) + ) + end; + + {pattern, Pattern} -> + case Pattern of + <<"{ ok , _ }"/utf8>> -> + erlang:setelement( + 5, + Unified, + showtime@internal@reports@styles:expected_highlight( + <<"Ok(_)"/utf8>> + ) + ); + + <<"{ error , _ }"/utf8>> -> + erlang:setelement( + 5, + Unified, + showtime@internal@reports@styles:expected_highlight( + <<"Error(_)"/utf8>> + ) + ); + + _ -> + Unified + end; + + _ -> + Unified + end end + ). + +-spec gleam_error_to_unified( + showtime@internal@common@test_result:gleam_error_detail(), + list(showtime@internal@common@test_result:trace()) +) -> unified_error(). +gleam_error_to_unified(Gleam_error, Stacktrace) -> + case Gleam_error of + {let_assert, _, _, _, _, Value} -> + Result = gleam@dynamic:unsafe_coerce(Value), + {error, Assertion} = case Result of + {error, _} -> Result; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime/internal/reports/formatter"/utf8>>, + function => <<"gleam_error_to_unified"/utf8>>, + line => 293}) + end, + case Assertion of + {eq, Got, Expected, Meta} -> + {Expected@1, Got@1} = showtime@internal@reports@compare:compare( + Expected, + Got + ), + {unified_error, + Meta, + <<"assert"/utf8>>, + <<"Assert equal"/utf8>>, + Expected@1, + Got@1, + none, + Stacktrace}; + + {not_eq, Got@2, Expected@2, Meta@1} -> + {unified_error, + Meta@1, + <<"assert"/utf8>>, + <<"Assert not equal"/utf8>>, + <<(showtime@internal@reports@styles:not_style( + <<"not "/utf8>> + ))/binary, + (gleam@string:inspect(Expected@2))/binary>>, + gleam@string:inspect(Got@2), + none, + Stacktrace}; + + {is_ok, Got@3, Meta@2} -> + {unified_error, + Meta@2, + <<"assert"/utf8>>, + <<"Assert is Ok"/utf8>>, + showtime@internal@reports@styles:expected_highlight( + <<"Ok(_)"/utf8>> + ), + showtime@internal@reports@styles:got_highlight( + gleam@string:inspect(Got@3) + ), + none, + Stacktrace}; + + {is_error, Got@4, Meta@3} -> + {unified_error, + Meta@3, + <<"assert"/utf8>>, + <<"Assert is Ok"/utf8>>, + showtime@internal@reports@styles:expected_highlight( + <<"Error(_)"/utf8>> + ), + showtime@internal@reports@styles:got_highlight( + gleam@string:inspect(Got@4) + ), + none, + Stacktrace}; + + {fail, Meta@4} -> + {unified_error, + Meta@4, + <<"assert"/utf8>>, + <<"Assert is Ok"/utf8>>, + showtime@internal@reports@styles:got_highlight( + <<"should.fail()"/utf8>> + ), + showtime@internal@reports@styles:got_highlight( + <<"N/A - test always expected to fail"/utf8>> + ), + none, + Stacktrace} + end + end. + +-spec format_reason(unified_error(), binary(), binary(), list(binary())) -> list(list(showtime@internal@reports@table:col())). +format_reason(Error, Module, Function, Output_buffer) -> + Meta@1 = case erlang:element(2, Error) of + {some, Meta} -> + {some, + [{align_right, + {styled_content, + showtime@internal@reports@styles:heading_style( + <<"Description"/utf8>> + )}, + 2}, + {separator, <<": "/utf8>>}, + {align_left, {content, erlang:element(2, Meta)}, 0}]}; + + none -> + none + end, + Stacktrace = begin + _pipe = erlang:element(8, Error), + gleam@list:map(_pipe, fun(Trace) -> case Trace of + {trace, Function@1, _, _} when Function@1 =:= <<""/utf8>> -> + <<"(anonymous)"/utf8>>; + + {trace_module, Module@1, Function@2, _, _} when Function@2 =:= <<""/utf8>> -> + <<<<Module@1/binary, "."/utf8>>/binary, + "(anonymous)"/utf8>>; + + {trace, Function@3, _, _} -> + Function@3; + + {trace_module, Module@2, Function@4, _, _} -> + <<<<Module@2/binary, "."/utf8>>/binary, + Function@4/binary>> + end end) + end, + Stacktrace_rows = case Stacktrace of + [] -> + []; + + [First | Rest] -> + First_row = {some, + [{align_right, + {styled_content, + showtime@internal@reports@styles:heading_style( + <<"Stacktrace"/utf8>> + )}, + 2}, + {separator, <<": "/utf8>>}, + {align_left, + {styled_content, + showtime@internal@reports@styles:stacktrace_style( + First + )}, + 0}]}, + Rest_rows = begin + _pipe@1 = Rest, + gleam@list:map( + _pipe@1, + fun(Row) -> + {some, + [{align_right, {content, <<""/utf8>>}, 2}, + {separator, <<" "/utf8>>}, + {align_left, + {styled_content, + showtime@internal@reports@styles:stacktrace_style( + Row + )}, + 0}]} + end + ) + end, + [First_row | Rest_rows] + end, + Output_rows = case begin + _pipe@2 = Output_buffer, + _pipe@3 = gleam@list:reverse(_pipe@2), + gleam@list:map( + _pipe@3, + fun(Row@1) -> gleam@string:trim_right(Row@1) end + ) + end of + [] -> + []; + + [First@1 | Rest@1] -> + First_row@1 = {some, + [{align_right, + {styled_content, + showtime@internal@reports@styles:heading_style( + <<"Output"/utf8>> + )}, + 2}, + {separator, <<": "/utf8>>}, + {align_left_overflow, + {styled_content, + showtime@internal@reports@styles:stacktrace_style( + First@1 + )}, + 0}]}, + Rest_rows@1 = begin + _pipe@4 = Rest@1, + gleam@list:map( + _pipe@4, + fun(Row@2) -> + {some, + [{align_right, {content, <<""/utf8>>}, 2}, + {separator, <<" "/utf8>>}, + {align_left_overflow, + {styled_content, + showtime@internal@reports@styles:stacktrace_style( + Row@2 + )}, + 0}]} + end + ) + end, + [First_row@1 | Rest_rows@1] + end, + Line@1 = begin + _pipe@5 = erlang:element(7, Error), + _pipe@6 = gleam@option:map( + _pipe@5, + fun(Line) -> <<":"/utf8, (gleam@int:to_string(Line))/binary>> end + ), + gleam@option:unwrap(_pipe@6, <<""/utf8>>) + end, + Arrow = <<(gleam@string:join( + gleam@list:repeat( + <<"-"/utf8>>, + (gleam@string:length(Module) + 1) + ((gleam@string:length( + Function + ) + + gleam@string:length(Line@1)) + div 2) + ), + <<""/utf8>> + ))/binary, + "⌄"/utf8>>, + Standard_table_rows = [{some, + [{align_right, + {styled_content, + showtime@internal@reports@styles:error_style( + <<"Failed"/utf8>> + )}, + 2}, + {separator, <<": "/utf8>>}, + {align_left, {content, Arrow}, 0}]}, + {some, + [{align_right, + {styled_content, + showtime@internal@reports@styles:heading_style( + <<"Test"/utf8>> + )}, + 2}, + {separator, <<": "/utf8>>}, + {align_left, + {styled_content, + <<<<Module/binary, "."/utf8>>/binary, + (showtime@internal@reports@styles:function_style( + <<Function/binary, Line@1/binary>> + ))/binary>>}, + 0}]}, + Meta@1, + {some, + [{align_right, + {styled_content, + showtime@internal@reports@styles:heading_style( + <<"Expected"/utf8>> + )}, + 2}, + {separator, <<": "/utf8>>}, + {align_left_overflow, + {styled_content, erlang:element(5, Error)}, + 0}]}, + {some, + [{align_right, + {styled_content, + showtime@internal@reports@styles:heading_style( + <<"Got"/utf8>> + )}, + 2}, + {separator, <<": "/utf8>>}, + {align_left_overflow, + {styled_content, erlang:element(6, Error)}, + 0}]}], + _pipe@7 = Standard_table_rows, + _pipe@8 = gleam@list:append(_pipe@7, Stacktrace_rows), + _pipe@9 = gleam@list:append(_pipe@8, Output_rows), + _pipe@10 = gleam@list:append( + _pipe@9, + [{some, + [{align_right, {content, <<""/utf8>>}, 0}, + {align_right, {content, <<""/utf8>>}, 0}, + {align_right, {content, <<""/utf8>>}, 0}]}] + ), + gleam@list:filter_map( + _pipe@10, + fun(Row@3) -> gleam@option:to_result(Row@3, nil) end + ). + +-spec create_test_report( + gleam@dict:dict(binary(), gleam@dict:dict(binary(), showtime@internal@common@test_suite:test_run())) +) -> {binary(), integer()}. +create_test_report(Test_results) -> + All_test_runs = begin + _pipe = Test_results, + _pipe@1 = gleam@map:values(_pipe), + gleam@list:flat_map(_pipe@1, fun gleam@map:values/1) + end, + Failed_test_runs = begin + _pipe@2 = Test_results, + _pipe@3 = gleam@map:to_list(_pipe@2), + gleam@list:flat_map( + _pipe@3, + fun(Entry) -> + {Module_name, Test_module_results} = Entry, + _pipe@4 = Test_module_results, + _pipe@5 = gleam@map:values(_pipe@4), + gleam@list:filter_map(_pipe@5, fun(Test_run) -> case Test_run of + {completed_test_run, _, _, Result} -> + case Result of + {error, _} -> + {ok, + {module_and_test_run, + Module_name, + Test_run}}; + + {ok, {ignored, _}} -> + {error, nil}; + + {ok, _} -> + {error, nil} + end; + + _ -> + _pipe@6 = Test_run, + gleam@io:debug(_pipe@6), + {error, nil} + end end) + end + ) + end, + Ignored_test_runs = begin + _pipe@7 = Test_results, + _pipe@8 = gleam@map:to_list(_pipe@7), + gleam@list:flat_map( + _pipe@8, + fun(Entry@1) -> + {Module_name@1, Test_module_results@1} = Entry@1, + _pipe@9 = Test_module_results@1, + _pipe@10 = gleam@map:values(_pipe@9), + gleam@list:filter_map( + _pipe@10, + fun(Test_run@1) -> case Test_run@1 of + {completed_test_run, Test_function, _, Result@1} -> + case Result@1 of + {ok, {ignored, Reason}} -> + {ok, + {<<<<Module_name@1/binary, + "."/utf8>>/binary, + (erlang:element( + 2, + Test_function + ))/binary>>, + Reason}}; + + _ -> + {error, nil} + end; + + _ -> + {error, nil} + end end + ) + end + ) + end, + Failed_tests_report = begin + _pipe@11 = Failed_test_runs, + _pipe@12 = gleam@list:filter_map( + _pipe@11, + fun(Module_and_test_run) -> + case erlang:element(3, Module_and_test_run) of + {completed_test_run, Test_function@1, _, Result@2} -> + case Result@2 of + {error, Exception} -> + case erlang:element(3, Exception) of + {assert_equal, Reason_details} -> + {ok, + format_reason( + erlang_error_to_unified( + Reason_details, + {glee_unit_assert_equal, + <<"Assert equal"/utf8>>}, + erlang:element( + 2, + erlang:element( + 4, + Exception + ) + ) + ), + erlang:element( + 2, + Module_and_test_run + ), + erlang:element( + 2, + Test_function@1 + ), + erlang:element(5, Exception) + )}; + + {assert_not_equal, Reason_details@1} -> + {ok, + format_reason( + erlang_error_to_unified( + Reason_details@1, + {glee_unit_assert_not_equal, + <<"Assert not equal"/utf8>>}, + erlang:element( + 2, + erlang:element( + 4, + Exception + ) + ) + ), + erlang:element( + 2, + Module_and_test_run + ), + erlang:element( + 2, + Test_function@1 + ), + erlang:element(5, Exception) + )}; + + {assert_match, Reason_details@2} -> + {ok, + format_reason( + erlang_error_to_unified( + Reason_details@2, + {glee_unit_assert_match, + <<"Assert match"/utf8>>}, + erlang:element( + 2, + erlang:element( + 4, + Exception + ) + ) + ), + erlang:element( + 2, + Module_and_test_run + ), + erlang:element( + 2, + Test_function@1 + ), + erlang:element(5, Exception) + )}; + + {gleam_error, Reason@1} -> + {ok, + format_reason( + gleam_error_to_unified( + Reason@1, + erlang:element( + 2, + erlang:element( + 4, + Exception + ) + ) + ), + erlang:element( + 2, + Module_and_test_run + ), + erlang:element( + 2, + Test_function@1 + ), + erlang:element(5, Exception) + )}; + + {gleam_assert, Value, Line_no} -> + {ok, + format_reason( + {unified_error, + none, + <<"gleam assert"/utf8>>, + <<"Assert failed"/utf8>>, + <<"Patterns should match"/utf8>>, + showtime@internal@reports@styles:error_style( + gleam@string:inspect( + Value + ) + ), + {some, Line_no}, + erlang:element( + 2, + erlang:element( + 4, + Exception + ) + )}, + erlang:element( + 2, + Module_and_test_run + ), + erlang:element( + 2, + Test_function@1 + ), + erlang:element(5, Exception) + )}; + + {generic_exception, Value@1} -> + {ok, + format_reason( + {unified_error, + none, + <<"generic exception"/utf8>>, + <<"Test function threw an exception"/utf8>>, + <<"Exception in test function"/utf8>>, + showtime@internal@reports@styles:error_style( + gleam@string:inspect( + Value@1 + ) + ), + none, + erlang:element( + 2, + erlang:element( + 4, + Exception + ) + )}, + erlang:element( + 2, + Module_and_test_run + ), + erlang:element( + 2, + Test_function@1 + ), + erlang:element(5, Exception) + )}; + + Other -> + gleam@io:println( + <<"Other: "/utf8, + (gleam@string:inspect(Other))/binary>> + ), + erlang:error(#{gleam_error => panic, + message => <<"panic expression evaluated"/utf8>>, + module => <<"showtime/internal/reports/formatter"/utf8>>, + function => <<"create_test_report"/utf8>>, + line => 178}), + {error, nil} + end; + + _ -> + {error, nil} + end; + + _ -> + {error, nil} + end + end + ), + gleam@list:fold( + _pipe@12, + [], + fun(Rows, Test_rows) -> gleam@list:append(Rows, Test_rows) end + ) + end, + All_test_execution_time_reports = begin + _pipe@13 = All_test_runs, + gleam@list:filter_map(_pipe@13, fun(Test_run@2) -> case Test_run@2 of + {completed_test_run, Test_function@2, Total_time, _} -> + {ok, + <<<<<<(erlang:element(2, Test_function@2))/binary, + ": "/utf8>>/binary, + (gleam@int:to_string(Total_time))/binary>>/binary, + " ms"/utf8>>}; + + _ -> + {error, nil} + end end) + end, + _ = begin + _pipe@14 = All_test_execution_time_reports, + gleam@string:join(_pipe@14, <<"\n"/utf8>>) + end, + All_tests_count = begin + _pipe@15 = All_test_runs, + gleam@list:length(_pipe@15) + end, + Ignored_tests_count = begin + _pipe@16 = Ignored_test_runs, + gleam@list:length(_pipe@16) + end, + Failed_tests_count = begin + _pipe@17 = Failed_test_runs, + gleam@list:length(_pipe@17) + end, + Passed = showtime@internal@reports@styles:passed_style( + <<(gleam@int:to_string( + (All_tests_count - Failed_tests_count) - Ignored_tests_count + ))/binary, + " passed"/utf8>> + ), + Failed = showtime@internal@reports@styles:failed_style( + <<(gleam@int:to_string(Failed_tests_count))/binary, " failed"/utf8>> + ), + Ignored = case Ignored_tests_count of + 0 -> + <<""/utf8>>; + + _ -> + <<", "/utf8, + (showtime@internal@reports@styles:ignored_style( + <<(gleam@int:to_string(Ignored_tests_count))/binary, + " ignored"/utf8>> + ))/binary>> + end, + Failed_tests_table = begin + _pipe@18 = {table, none, Failed_tests_report}, + _pipe@19 = showtime@internal@reports@table:align_table(_pipe@18), + showtime@internal@reports@table:to_string(_pipe@19) + end, + Test_report = <<<<<<<<<<<<"\n"/utf8, Failed_tests_table/binary>>/binary, + "\n"/utf8>>/binary, + Passed/binary>>/binary, + ", "/utf8>>/binary, + Failed/binary>>/binary, + Ignored/binary>>, + {Test_report, Failed_tests_count}. diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache Binary files differnew file mode 100644 index 0000000..7dd3121 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache_meta Binary files differnew file mode 100644 index 0000000..c0078b3 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.erl new file mode 100644 index 0000000..ec6230c --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.erl @@ -0,0 +1,93 @@ +-module(showtime@internal@reports@styles). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([not_style/1, module_style/1, heading_style/1, stacktrace_style/1, failed_style/1, error_style/1, got_highlight/1, passed_style/1, expected_highlight/1, ignored_style/1, function_style/1, strip_style/1]). + +-spec not_style(binary()) -> binary(). +not_style(Text) -> + gleam_community@ansi:bold(Text). + +-spec module_style(binary()) -> binary(). +module_style(Text) -> + gleam_community@ansi:cyan(Text). + +-spec heading_style(binary()) -> binary(). +heading_style(Text) -> + gleam_community@ansi:cyan(Text). + +-spec stacktrace_style(binary()) -> binary(). +stacktrace_style(Text) -> + Text. + +-spec bold_red(binary()) -> binary(). +bold_red(Text) -> + gleam_community@ansi:bold(gleam_community@ansi:red(Text)). + +-spec failed_style(binary()) -> binary(). +failed_style(Text) -> + bold_red(Text). + +-spec error_style(binary()) -> binary(). +error_style(Text) -> + bold_red(Text). + +-spec got_highlight(binary()) -> binary(). +got_highlight(Text) -> + bold_red(Text). + +-spec bold_green(binary()) -> binary(). +bold_green(Text) -> + gleam_community@ansi:bold(gleam_community@ansi:green(Text)). + +-spec passed_style(binary()) -> binary(). +passed_style(Text) -> + bold_green(Text). + +-spec expected_highlight(binary()) -> binary(). +expected_highlight(Text) -> + bold_green(Text). + +-spec bold_yellow(binary()) -> binary(). +bold_yellow(Text) -> + gleam_community@ansi:bold(gleam_community@ansi:yellow(Text)). + +-spec ignored_style(binary()) -> binary(). +ignored_style(Text) -> + bold_yellow(Text). + +-spec bold_cyan(binary()) -> binary(). +bold_cyan(Text) -> + gleam_community@ansi:bold(gleam_community@ansi:cyan(Text)). + +-spec function_style(binary()) -> binary(). +function_style(Text) -> + bold_cyan(Text). + +-spec strip_style(binary()) -> binary(). +strip_style(Text) -> + {New_text, _} = begin + _pipe = Text, + _pipe@1 = gleam@string:to_graphemes(_pipe), + gleam@list:fold( + _pipe@1, + {<<""/utf8>>, false}, + fun(Acc, Char) -> + {Str, Removing} = Acc, + Bit_char = gleam_stdlib:identity(Char), + case {Bit_char, Removing} of + {<<16#1b>>, _} -> + {Str, true}; + + {<<16#6d>>, true} -> + {Str, false}; + + {_, true} -> + {Str, true}; + + {_, false} -> + {<<Str/binary, Char/binary>>, false} + end + end + ) + end, + New_text. diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache Binary files differnew file mode 100644 index 0000000..61c532d --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache_meta Binary files differnew file mode 100644 index 0000000..080524c --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.erl new file mode 100644 index 0000000..35dbba3 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.erl @@ -0,0 +1,229 @@ +-module(showtime@internal@reports@table). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([to_string/1, align_table/1]). +-export_type([content/0, col/0, table/0]). + +-type content() :: {content, binary()} | {styled_content, binary()}. + +-type col() :: {align_right, content(), integer()} | + {align_left, content(), integer()} | + {align_right_overflow, content(), integer()} | + {align_left_overflow, content(), integer()} | + {separator, binary()} | + {aligned, binary()}. + +-type table() :: {table, gleam@option:option(binary()), list(list(col()))}. + +-spec to_string(table()) -> binary(). +to_string(Table) -> + Rows = begin + _pipe = erlang:element(3, Table), + _pipe@3 = gleam@list:map(_pipe, fun(Row) -> _pipe@1 = Row, + _pipe@2 = gleam@list:filter_map(_pipe@1, fun(Col) -> case Col of + {separator, Char} -> + {ok, Char}; + + {aligned, Content} -> + {ok, Content}; + + _ -> + {error, nil} + end end), + gleam@string:join(_pipe@2, <<""/utf8>>) end), + gleam@string:join(_pipe@3, <<"\n"/utf8>>) + end, + Header@1 = begin + _pipe@4 = erlang:element(2, Table), + _pipe@5 = gleam@option:map( + _pipe@4, + fun(Header) -> <<Header/binary, "\n"/utf8>> end + ), + gleam@option:unwrap(_pipe@5, <<""/utf8>>) + end, + <<Header@1/binary, Rows/binary>>. + +-spec pad_left(binary(), integer(), binary()) -> binary(). +pad_left(Str, Num, Char) -> + Padding = begin + _pipe = gleam@list:repeat(Char, Num), + gleam@string:join(_pipe, <<""/utf8>>) + end, + <<Padding/binary, Str/binary>>. + +-spec pad_right(binary(), integer(), binary()) -> binary(). +pad_right(Str, Num, Char) -> + Padding = begin + _pipe = gleam@list:repeat(Char, Num), + gleam@string:join(_pipe, <<""/utf8>>) + end, + <<Str/binary, Padding/binary>>. + +-spec align_table(table()) -> table(). +align_table(Table) -> + Cols = begin + _pipe = erlang:element(3, Table), + gleam@list:transpose(_pipe) + end, + Col_width = begin + _pipe@1 = Cols, + gleam@list:map(_pipe@1, fun(Col) -> _pipe@2 = Col, + _pipe@3 = gleam@list:map( + _pipe@2, + fun(Content) -> case Content of + {align_right, {content, Unstyled}, _} -> + Unstyled; + + {align_right, {styled_content, Styled}, _} -> + showtime@internal@reports@styles:strip_style( + Styled + ); + + {align_left, {content, Unstyled@1}, _} -> + Unstyled@1; + + {align_left, {styled_content, Styled@1}, _} -> + showtime@internal@reports@styles:strip_style( + Styled@1 + ); + + {align_left_overflow, _, _} -> + <<""/utf8>>; + + {align_right_overflow, _, _} -> + <<""/utf8>>; + + {separator, Char} -> + Char; + + {aligned, Content@1} -> + Content@1 + end end + ), + gleam@list:fold( + _pipe@3, + 0, + fun(Max, Str) -> + gleam@int:max(Max, gleam@string:length(Str)) + end + ) end) + end, + Aligned_col = begin + _pipe@4 = Cols, + _pipe@5 = gleam@list:zip(_pipe@4, Col_width), + gleam@list:map( + _pipe@5, + fun(Col_and_width) -> + {Col@1, Width} = Col_and_width, + _pipe@6 = Col@1, + gleam@list:map(_pipe@6, fun(Content@2) -> case Content@2 of + {align_right, {content, Unstyled@2}, Margin} -> + {aligned, + pad_left( + Unstyled@2, + (Width + Margin) - gleam@string:length( + Unstyled@2 + ), + <<" "/utf8>> + )}; + + {align_right, {styled_content, Styled@2}, Margin@1} -> + {aligned, + pad_left( + Styled@2, + (Width + Margin@1) - gleam@string:length( + showtime@internal@reports@styles:strip_style( + Styled@2 + ) + ), + <<" "/utf8>> + )}; + + {align_right_overflow, + {content, Unstyled@3}, + Margin@2} -> + {aligned, + pad_left( + Unstyled@3, + (Width + Margin@2) - gleam@string:length( + Unstyled@3 + ), + <<" "/utf8>> + )}; + + {align_right_overflow, + {styled_content, Styled@3}, + Margin@3} -> + {aligned, + pad_left( + Styled@3, + (Width + Margin@3) - gleam@string:length( + showtime@internal@reports@styles:strip_style( + Styled@3 + ) + ), + <<" "/utf8>> + )}; + + {align_left, {content, Unstyled@4}, Margin@4} -> + {aligned, + pad_right( + Unstyled@4, + (Width + Margin@4) - gleam@string:length( + Unstyled@4 + ), + <<" "/utf8>> + )}; + + {align_left, {styled_content, Styled@4}, Margin@5} -> + {aligned, + pad_right( + Styled@4, + (Width + Margin@5) - gleam@string:length( + showtime@internal@reports@styles:strip_style( + Styled@4 + ) + ), + <<" "/utf8>> + )}; + + {align_left_overflow, + {content, Unstyled@5}, + Margin@6} -> + {aligned, + pad_right( + Unstyled@5, + (Width + Margin@6) - gleam@string:length( + Unstyled@5 + ), + <<" "/utf8>> + )}; + + {align_left_overflow, + {styled_content, Styled@5}, + Margin@7} -> + {aligned, + pad_right( + Styled@5, + (Width + Margin@7) - gleam@string:length( + showtime@internal@reports@styles:strip_style( + Styled@5 + ) + ), + <<" "/utf8>> + )}; + + {separator, Char@1} -> + {separator, Char@1}; + + {aligned, Content@3} -> + {aligned, Content@3} + end end) + end + ) + end, + Aligned_rows = begin + _pipe@7 = Aligned_col, + gleam@list:transpose(_pipe@7) + end, + erlang:setelement(3, Table, Aligned_rows). diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache Binary files differnew file mode 100644 index 0000000..4aa8df1 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache_meta Binary files differnew file mode 100644 index 0000000..7f1bdda --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.erl new file mode 100644 index 0000000..c975467 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.erl @@ -0,0 +1,8 @@ +-module(showtime@tests@meta). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export_type([meta/0]). + +-type meta() :: {meta, binary(), list(binary())}. + + diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache Binary files differnew file mode 100644 index 0000000..90d3838 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache_meta Binary files differnew file mode 100644 index 0000000..fcc4e8a --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.erl new file mode 100644 index 0000000..05bea8f --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.erl @@ -0,0 +1,143 @@ +-module(showtime@tests@should). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([evaluate/1, equal/2, equal_meta/3, not_equal/2, not_equal_meta/3, be_ok/1, be_ok_meta/2, be_error/1, be_error_meta/2, fail/0, fail_meta/1, be_true/1, be_true_meta/2, be_false/1, be_false_meta/2]). +-export_type([assertion/2]). + +-type assertion(MXN, MXO) :: {eq, + MXN, + MXN, + gleam@option:option(showtime@tests@meta:meta())} | + {not_eq, MXN, MXN, gleam@option:option(showtime@tests@meta:meta())} | + {is_ok, + {ok, MXN} | {error, MXO}, + gleam@option:option(showtime@tests@meta:meta())} | + {is_error, + {ok, MXN} | {error, MXO}, + gleam@option:option(showtime@tests@meta:meta())} | + {fail, gleam@option:option(showtime@tests@meta:meta())}. + +-spec evaluate(assertion(any(), any())) -> nil. +evaluate(Assertion) -> + case Assertion of + {eq, A, B, _} -> + case A =:= B of + true -> + nil; + + false -> + showtime_ffi:gleam_error({error, Assertion}) + end; + + {not_eq, A@1, B@1, _} -> + case A@1 /= B@1 of + true -> + nil; + + false -> + showtime_ffi:gleam_error({error, Assertion}) + end; + + {is_ok, A@2, _} -> + case A@2 of + {ok, _} -> + nil; + + {error, _} -> + showtime_ffi:gleam_error({error, Assertion}) + end; + + {is_error, A@3, _} -> + case A@3 of + {error, _} -> + nil; + + {ok, _} -> + showtime_ffi:gleam_error({error, Assertion}) + end; + + {fail, _} -> + showtime_ffi:gleam_error({error, Assertion}) + end. + +-spec equal(MXP, MXP) -> nil. +equal(A, B) -> + evaluate({eq, A, B, none}). + +-spec equal_meta(MXR, MXR, showtime@tests@meta:meta()) -> nil. +equal_meta(A, B, Meta) -> + evaluate({eq, A, B, {some, Meta}}). + +-spec not_equal(MXT, MXT) -> nil. +not_equal(A, B) -> + evaluate({not_eq, A, B, none}). + +-spec not_equal_meta(MXV, MXV, showtime@tests@meta:meta()) -> nil. +not_equal_meta(A, B, Meta) -> + evaluate({not_eq, A, B, {some, Meta}}). + +-spec be_ok({ok, MXX} | {error, any()}) -> MXX. +be_ok(A) -> + evaluate({is_ok, A, none}), + {ok, Value} = case A of + {ok, _} -> A; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime/tests/should"/utf8>>, + function => <<"be_ok"/utf8>>, + line => 30}) + end, + Value. + +-spec be_ok_meta({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil. +be_ok_meta(A, Meta) -> + evaluate({is_ok, A, {some, Meta}}). + +-spec be_error({ok, any()} | {error, MYI}) -> MYI. +be_error(A) -> + evaluate({is_error, A, none}), + {error, Value} = case A of + {error, _} -> A; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime/tests/should"/utf8>>, + function => <<"be_error"/utf8>>, + line => 40}) + end, + Value. + +-spec be_error_meta({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil. +be_error_meta(A, Meta) -> + evaluate({is_error, A, {some, Meta}}). + +-spec fail() -> nil. +fail() -> + evaluate({fail, none}). + +-spec fail_meta(showtime@tests@meta:meta()) -> nil. +fail_meta(Meta) -> + evaluate({fail, {some, Meta}}). + +-spec be_true(boolean()) -> nil. +be_true(A) -> + _pipe = A, + equal(_pipe, true). + +-spec be_true_meta(boolean(), showtime@tests@meta:meta()) -> nil. +be_true_meta(A, Meta) -> + _pipe = A, + equal_meta(_pipe, true, Meta). + +-spec be_false(boolean()) -> nil. +be_false(A) -> + _pipe = A, + equal(_pipe, false). + +-spec be_false_meta(boolean(), showtime@tests@meta:meta()) -> nil. +be_false_meta(A, Meta) -> + _pipe = A, + equal_meta(_pipe, false, Meta). diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache Binary files differnew file mode 100644 index 0000000..d07ea1b --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache_meta Binary files differnew file mode 100644 index 0000000..8354c6f --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache_meta diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.erl new file mode 100644 index 0000000..2f65614 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.erl @@ -0,0 +1,57 @@ +-module(showtime@tests@test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([test/2, equal/3, not_equal/3, with_meta/2, be_ok/2, be_error/2, fail/1, be_true/2, be_false/2]). +-export_type([test/0, meta_should/1]). + +-type test() :: {test, showtime@tests@meta:meta(), fun(() -> nil)}. + +-type meta_should(OKH) :: {meta_should, + fun((OKH, OKH) -> nil), + fun((OKH, OKH) -> nil)}. + +-spec test(showtime@tests@meta:meta(), fun((showtime@tests@meta:meta()) -> nil)) -> test(). +test(Meta, Test_function) -> + {test, Meta, fun() -> Test_function(Meta) end}. + +-spec equal(OKM, OKM, showtime@tests@meta:meta()) -> nil. +equal(A, B, Meta) -> + gleam@io:debug(A), + gleam@io:debug(B), + showtime@tests@should:equal_meta(A, B, Meta). + +-spec not_equal(OKO, OKO, showtime@tests@meta:meta()) -> nil. +not_equal(A, B, Meta) -> + showtime@tests@should:equal_meta(A, B, Meta). + +-spec with_meta(showtime@tests@meta:meta(), fun((meta_should(any())) -> nil)) -> test(). +with_meta(Meta, Test_function) -> + {test, + Meta, + fun() -> + Test_function( + {meta_should, + fun(A, B) -> equal(A, B, Meta) end, + fun(A@1, B@1) -> not_equal(A@1, B@1, Meta) end} + ) + end}. + +-spec be_ok({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil. +be_ok(A, Meta) -> + showtime@tests@should:be_ok_meta(A, Meta). + +-spec be_error({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil. +be_error(A, Meta) -> + showtime@tests@should:be_error_meta(A, Meta). + +-spec fail(showtime@tests@meta:meta()) -> nil. +fail(Meta) -> + showtime@tests@should:fail_meta(Meta). + +-spec be_true(boolean(), showtime@tests@meta:meta()) -> nil. +be_true(A, Meta) -> + showtime@tests@should:be_true_meta(A, Meta). + +-spec be_false(boolean(), showtime@tests@meta:meta()) -> nil. +be_false(A, Meta) -> + showtime@tests@should:be_false_meta(A, Meta). diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime_ffi.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime_ffi.erl new file mode 100644 index 0000000..3259623 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime_ffi.erl @@ -0,0 +1,187 @@ +-module(showtime_ffi). + +-export([run_test/4, functions/0, capture_output/1, gleam_error/1]). + +gleam_error(Value) -> + erlang:error(#{ + gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => Value, + module => <<"this/is/not/used"/utf8>>, + function => <<"gleam_error"/utf8>>, + % Not used + line => 0 + }). + +start_output_capture(Capture) -> + OldGroupLeader = group_leader(), + CapturePid = spawn(showtime_ffi, capture_output, [{[], {OldGroupLeader, Capture}}]), + group_leader(CapturePid, self()), + {CapturePid, OldGroupLeader}. + +stop_output_capture({CapturePid, OldGroupLeader}) -> + group_leader(OldGroupLeader, self()), + CapturePid ! {capture_done, self()}, + receive + Buffer -> + Buffer + end. + +capture_output({Buffer, {OldGroupLeader, Capture}}) -> + receive + {io_request, From, ReplyAs, {put_chars, unicode, BitString}} -> + case Capture of + yes -> + From ! {io_reply, ReplyAs, ok}, + capture_output({[BitString | Buffer], {OldGroupLeader, Capture}}); + mixed -> + OldGroupLeader ! {io_request, From, ReplyAs, {put_chars, unicode, BitString}}, + capture_output({[BitString | Buffer], {OldGroupLeader, Capture}}); + no -> + OldGroupLeader ! {io_request, From, ReplyAs, {put_chars, unicode, BitString}}, + capture_output({Buffer, {OldGroupLeader, Capture}}) + end; + {capture_done, SenderPid} -> + SenderPid ! Buffer; + OtherMessage -> + OldGroupLeader ! OtherMessage, + capture_output({Buffer, {OldGroupLeader, Capture}}) + end. + +run_test(Module, Function, IgnoreTags, Capture) -> + OutputCapture = start_output_capture(Capture), + try + Result = apply(Module, Function, []), + {ResultType, FinalResult} = + case Result of + {test, {meta, _Description, Tags}, TestFun} -> + case + lists:any( + fun(Tag) -> + lists:any(fun(IgnoreTag) -> IgnoreTag == Tag end, IgnoreTags) + end, + Tags + ) + of + true -> + {ignored, ignore}; + false -> + {test_function_return, TestFun()} + end; + DirectResult -> + {test_function_return, DirectResult} + end, + OutputCaptureBuffer = stop_output_capture(OutputCapture), + case ResultType of + ignored -> {ok, {ResultType, FinalResult}}; + _ -> {ok, {ResultType, FinalResult, OutputCaptureBuffer}} + end + catch + Class:Reason:Stacktrace -> + GleamReason = + case Reason of + {Assertion, ReasonList} -> + ErlangReasonList = + lists:map( + fun(ReasonDetail) -> + case ReasonDetail of + {line, LineNo} -> + {reason_line, LineNo}; + {expression, List} -> + {expression, list_to_binary(List)}; + {module, ModuleAtom} -> + {module, atom_to_binary(ModuleAtom)}; + {pattern, Pattern} -> + {pattern, list_to_binary(Pattern)}; + Other -> + Other + end + end, + ReasonList + ), + GleamAssertionType = + case Assertion of + assertEqual -> + assert_equal; + assertNotEqual -> + assert_not_equal; + assertMatch -> + assert_match; + OtherAssertionType -> + OtherAssertionType + end, + {GleamAssertionType, ErlangReasonList}; + #{ + function := GleamFunction, + gleam_error := GleamError, + line := Line, + message := Message, + module := GleamModule, + value := Value + } -> + case Value of + {error, {OkValue, _, _, _}} when OkValue == not_eq; OkValue == eq -> + {gleam_error, + {GleamError, GleamModule, GleamFunction, Line, Message, Value}}; + {error, {OkValue, _, _}} when OkValue == is_ok; OkValue == is_error -> + {gleam_error, + {GleamError, GleamModule, GleamFunction, Line, Message, Value}}; + {error, {OkValue, _}} when OkValue == fail -> + {gleam_error, + {GleamError, GleamModule, GleamFunction, Line, Message, Value}}; + _ -> + {gleam_assert, Value, Line} + end; + OtherReason -> + {generic_exception, OtherReason} + end, + GleamClass = + case Class of + error -> + erlang_error; + Other -> + Other + end, + GleamTraceList = + lists:map( + fun(Trace) -> + case Trace of + {ModuleName, FunctionName, Arity, ExtraInfoList} -> + {trace_module, atom_to_binary(ModuleName), + atom_to_binary(FunctionName), map_arity(Arity), + map_extra_info_list(ExtraInfoList)}; + {FunctionName, Arity, ExtraInfoList} -> + {trace, atom_to_binary(FunctionName), map_arity(Arity), + map_extra_info_list(ExtraInfoList)} + end + end, + Stacktrace + ), + OutputCaptureBufferCatch = stop_output_capture(OutputCapture), + {error, + {erlang_exception, GleamClass, GleamReason, {trace_list, GleamTraceList}, + OutputCaptureBufferCatch}} + end. + +map_extra_info_list(ExtraInfoList) -> + lists:map( + fun(ExtraInfo) -> + case ExtraInfo of + {file, FileNameList} -> {file, list_to_binary(FileNameList)}; + Other -> Other + end + end, + ExtraInfoList + ). + +map_arity(Arity) -> + if + is_list(Arity) -> + {arg_list, Arity}; + is_integer(Arity) -> + {num, Arity} + end. + +functions() -> + Funs = module_info(exports), + Funs. diff --git a/aoc2023/build/dev/erlang/adglent/ebin/adglent.app b/aoc2023/build/dev/erlang/adglent/ebin/adglent.app new file mode 100644 index 0000000..f8e1aa6 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/adglent.app @@ -0,0 +1,17 @@ +{application, adglent, [ + {vsn, "1.2.0"}, + {applications, [gap, + gleam_community_ansi, + gleam_erlang, + gleam_http, + gleam_httpc, + gleam_otp, + gleam_stdlib, + glint, + simplifile, + snag, + tom]}, + {description, "Advent of code helper - automating setup of tests, solution template and problem input"}, + {modules, []}, + {registered, []} +]}. diff --git a/aoc2023/build/dev/erlang/adglent/ebin/adglent.beam b/aoc2023/build/dev/erlang/adglent/ebin/adglent.beam Binary files differnew file mode 100644 index 0000000..c53eb59 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/adglent.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/adglent@day.beam b/aoc2023/build/dev/erlang/adglent/ebin/adglent@day.beam Binary files differnew file mode 100644 index 0000000..9ad63c2 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/adglent@day.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/adglent@init.beam b/aoc2023/build/dev/erlang/adglent/ebin/adglent@init.beam Binary files differnew file mode 100644 index 0000000..37d94e6 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/adglent@init.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/adglent_ffi.beam b/aoc2023/build/dev/erlang/adglent/ebin/adglent_ffi.beam Binary files differnew file mode 100644 index 0000000..259f958 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/adglent_ffi.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@aoc_client.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@aoc_client.beam Binary files differnew file mode 100644 index 0000000..9a78e8e --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@aoc_client.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@errors.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@errors.beam Binary files differnew file mode 100644 index 0000000..c97eda5 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@errors.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@prompt.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@prompt.beam Binary files differnew file mode 100644 index 0000000..50b7d68 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@prompt.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@template.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@template.beam Binary files differnew file mode 100644 index 0000000..cbe144e --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@template.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@solution.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@solution.beam Binary files differnew file mode 100644 index 0000000..54c7937 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@solution.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@test_main.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@test_main.beam Binary files differnew file mode 100644 index 0000000..7e35186 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@test_main.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@testfile_gleeunit.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@testfile_gleeunit.beam Binary files differnew file mode 100644 index 0000000..7acb10e --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@testfile_gleeunit.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@testfile_showtime.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@testfile_showtime.beam Binary files differnew file mode 100644 index 0000000..a77da82 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@testfile_showtime.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@toml.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@toml.beam Binary files differnew file mode 100644 index 0000000..1788e31 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@toml.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime.beam Binary files differnew file mode 100644 index 0000000..d3a477e --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@cli.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@cli.beam Binary files differnew file mode 100644 index 0000000..e9be51d --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@cli.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@common_event_handler.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@common_event_handler.beam Binary files differnew file mode 100644 index 0000000..de943fd --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@common_event_handler.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@test_result.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@test_result.beam Binary files differnew file mode 100644 index 0000000..f7b2f57 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@test_result.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@test_suite.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@test_suite.beam Binary files differnew file mode 100644 index 0000000..6146227 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@test_suite.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@discover.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@discover.beam Binary files differnew file mode 100644 index 0000000..4f28602 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@discover.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@event_handler.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@event_handler.beam Binary files differnew file mode 100644 index 0000000..ed9bbda --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@event_handler.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@module_handler.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@module_handler.beam Binary files differnew file mode 100644 index 0000000..75e190f --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@module_handler.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@runner.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@runner.beam Binary files differnew file mode 100644 index 0000000..d0a69a6 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@runner.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@compare.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@compare.beam Binary files differnew file mode 100644 index 0000000..dc16640 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@compare.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@formatter.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@formatter.beam Binary files differnew file mode 100644 index 0000000..7d6a27a --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@formatter.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@styles.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@styles.beam Binary files differnew file mode 100644 index 0000000..3a5c720 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@styles.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@table.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@table.beam Binary files differnew file mode 100644 index 0000000..7778cd8 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@table.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@meta.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@meta.beam Binary files differnew file mode 100644 index 0000000..2f911da --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@meta.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@should.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@should.beam Binary files differnew file mode 100644 index 0000000..14ead72 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@should.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@test.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@test.beam Binary files differnew file mode 100644 index 0000000..f3d21e6 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@test.beam diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime_ffi.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime_ffi.beam Binary files differnew file mode 100644 index 0000000..95c965e --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime_ffi.beam diff --git a/aoc2023/build/dev/erlang/adglent/include/adglent_Example.hrl b/aoc2023/build/dev/erlang/adglent/include/adglent_Example.hrl new file mode 100644 index 0000000..615e473 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/adglent_Example.hrl @@ -0,0 +1 @@ +-record(example, {input :: binary(), answer :: any()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/priv@toml_TomGetError.hrl b/aoc2023/build/dev/erlang/adglent/include/priv@toml_TomGetError.hrl new file mode 100644 index 0000000..4cd5ddd --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/priv@toml_TomGetError.hrl @@ -0,0 +1 @@ +-record(tom_get_error, {error :: tom:get_error()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/priv@toml_TomParseError.hrl b/aoc2023/build/dev/erlang/adglent/include/priv@toml_TomParseError.hrl new file mode 100644 index 0000000..7306934 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/priv@toml_TomParseError.hrl @@ -0,0 +1 @@ +-record(tom_parse_error, {error :: tom:parse_error()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@common_event_handler_Finished.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@common_event_handler_Finished.hrl new file mode 100644 index 0000000..7d24e52 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@common_event_handler_Finished.hrl @@ -0,0 +1 @@ +-record(finished, {num_modules :: integer()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@common_event_handler_HandlerState.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@common_event_handler_HandlerState.hrl new file mode 100644 index 0000000..3efcd39 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@common_event_handler_HandlerState.hrl @@ -0,0 +1,5 @@ +-record(handler_state, { + test_state :: showtime@internal@common@common_event_handler:test_state(), + num_done :: integer(), + events :: gleam@dict:dict(binary(), gleam@dict:dict(binary(), showtime@internal@common@test_suite:test_run())) +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ArgList.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ArgList.hrl new file mode 100644 index 0000000..79f34f8 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ArgList.hrl @@ -0,0 +1 @@ +-record(arg_list, {arg_list :: list(gleam@dynamic:dynamic_())}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertEqual.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertEqual.hrl new file mode 100644 index 0000000..c6458ba --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertEqual.hrl @@ -0,0 +1,3 @@ +-record(assert_equal, { + details :: list(showtime@internal@common@test_result:reason_detail()) +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertMatch.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertMatch.hrl new file mode 100644 index 0000000..4920304 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertMatch.hrl @@ -0,0 +1,3 @@ +-record(assert_match, { + details :: list(showtime@internal@common@test_result:reason_detail()) +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertNotEqual.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertNotEqual.hrl new file mode 100644 index 0000000..221c15f --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertNotEqual.hrl @@ -0,0 +1,3 @@ +-record(assert_not_equal, { + details :: list(showtime@internal@common@test_result:reason_detail()) +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ErlangException.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ErlangException.hrl new file mode 100644 index 0000000..9a31ba8 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ErlangException.hrl @@ -0,0 +1,6 @@ +-record(erlang_exception, { + class :: showtime@internal@common@test_result:class(), + reason :: showtime@internal@common@test_result:reason(), + stacktrace :: showtime@internal@common@test_result:trace_list(), + output_buffer :: list(binary()) +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ErrorInfo.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ErrorInfo.hrl new file mode 100644 index 0000000..4e0244d --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ErrorInfo.hrl @@ -0,0 +1,3 @@ +-record(error_info, { + error_info :: gleam@dict:dict(gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Expected.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Expected.hrl new file mode 100644 index 0000000..5e40ad3 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Expected.hrl @@ -0,0 +1 @@ +-record(expected, {value :: gleam@dynamic:dynamic_()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Expression.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Expression.hrl new file mode 100644 index 0000000..7aa0c35 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Expression.hrl @@ -0,0 +1 @@ +-record(expression, {expression :: binary()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_File.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_File.hrl new file mode 100644 index 0000000..1274b74 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_File.hrl @@ -0,0 +1 @@ +-record(file, {filename :: binary()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GenericException.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GenericException.hrl new file mode 100644 index 0000000..7c33d0d --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GenericException.hrl @@ -0,0 +1 @@ +-record(generic_exception, {value :: gleam@dynamic:dynamic_()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GleamAssert.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GleamAssert.hrl new file mode 100644 index 0000000..095748c --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GleamAssert.hrl @@ -0,0 +1 @@ +-record(gleam_assert, {value :: gleam@dynamic:dynamic_(), line_no :: integer()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GleamError.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GleamError.hrl new file mode 100644 index 0000000..68e6645 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GleamError.hrl @@ -0,0 +1,3 @@ +-record(gleam_error, { + details :: showtime@internal@common@test_result:gleam_error_detail() +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Ignored.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Ignored.hrl new file mode 100644 index 0000000..87b7e2f --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Ignored.hrl @@ -0,0 +1 @@ +-record(ignored, {reason :: showtime@internal@common@test_result:ignore_reason()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_LetAssert.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_LetAssert.hrl new file mode 100644 index 0000000..5f3f60d --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_LetAssert.hrl @@ -0,0 +1,7 @@ +-record(let_assert, { + module :: binary(), + function :: binary(), + line_no :: integer(), + message :: binary(), + value :: gleam@dynamic:dynamic_() +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Line.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Line.hrl new file mode 100644 index 0000000..9807df6 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Line.hrl @@ -0,0 +1 @@ +-record(line, {line_no :: integer()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Module.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Module.hrl new file mode 100644 index 0000000..8002c0c --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Module.hrl @@ -0,0 +1 @@ +-record(module, {name :: binary()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Num.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Num.hrl new file mode 100644 index 0000000..c36efa3 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Num.hrl @@ -0,0 +1 @@ +-record(num, {arity :: integer()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Pattern.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Pattern.hrl new file mode 100644 index 0000000..6aa9c84 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Pattern.hrl @@ -0,0 +1 @@ +-record(pattern, {pattern :: binary()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ReasonLine.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ReasonLine.hrl new file mode 100644 index 0000000..b7ad1ab --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ReasonLine.hrl @@ -0,0 +1 @@ +-record(reason_line, {line_no :: integer()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TestFunctionReturn.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TestFunctionReturn.hrl new file mode 100644 index 0000000..b0bc294 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TestFunctionReturn.hrl @@ -0,0 +1,4 @@ +-record(test_function_return, { + value :: gleam@dynamic:dynamic_(), + output_buffer :: list(binary()) +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Trace.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Trace.hrl new file mode 100644 index 0000000..4cb007c --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Trace.hrl @@ -0,0 +1,5 @@ +-record(trace, { + function :: binary(), + arity :: showtime@internal@common@test_result:arity_(), + extra_info :: list(showtime@internal@common@test_result:extra_info()) +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TraceList.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TraceList.hrl new file mode 100644 index 0000000..c1aa9c5 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TraceList.hrl @@ -0,0 +1,3 @@ +-record(trace_list, { + traces :: list(showtime@internal@common@test_result:trace()) +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TraceModule.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TraceModule.hrl new file mode 100644 index 0000000..595362f --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TraceModule.hrl @@ -0,0 +1,6 @@ +-record(trace_module, { + module :: binary(), + function :: binary(), + arity :: showtime@internal@common@test_result:arity_(), + extra_info :: list(showtime@internal@common@test_result:extra_info()) +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Value.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Value.hrl new file mode 100644 index 0000000..3a4b0dd --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Value.hrl @@ -0,0 +1 @@ +-record(value, {value :: gleam@dynamic:dynamic_()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_CompletedTestRun.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_CompletedTestRun.hrl new file mode 100644 index 0000000..927a0cf --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_CompletedTestRun.hrl @@ -0,0 +1,6 @@ +-record(completed_test_run, { + test_function :: showtime@internal@common@test_suite:test_function(), + total_time :: integer(), + result :: {ok, showtime@internal@common@test_result:test_return()} | + {error, showtime@internal@common@test_result:exception()} +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTest.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTest.hrl new file mode 100644 index 0000000..13df1bf --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTest.hrl @@ -0,0 +1,6 @@ +-record(end_test, { + test_module :: showtime@internal@common@test_suite:test_module(), + test_function :: showtime@internal@common@test_suite:test_function(), + result :: {ok, showtime@internal@common@test_result:test_return()} | + {error, showtime@internal@common@test_result:exception()} +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTestRun.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTestRun.hrl new file mode 100644 index 0000000..3f78991 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTestRun.hrl @@ -0,0 +1 @@ +-record(end_test_run, {num_modules :: integer()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTestSuite.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTestSuite.hrl new file mode 100644 index 0000000..a7f37b3 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTestSuite.hrl @@ -0,0 +1,3 @@ +-record(end_test_suite, { + test_module :: showtime@internal@common@test_suite:test_module() +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_OngoingTestRun.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_OngoingTestRun.hrl new file mode 100644 index 0000000..f52e5cc --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_OngoingTestRun.hrl @@ -0,0 +1,4 @@ +-record(ongoing_test_run, { + test_function :: showtime@internal@common@test_suite:test_function(), + started_at :: integer() +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_StartTest.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_StartTest.hrl new file mode 100644 index 0000000..d532609 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_StartTest.hrl @@ -0,0 +1,4 @@ +-record(start_test, { + test_module :: showtime@internal@common@test_suite:test_module(), + test_function :: showtime@internal@common@test_suite:test_function() +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_StartTestSuite.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_StartTestSuite.hrl new file mode 100644 index 0000000..d5a03d3 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_StartTestSuite.hrl @@ -0,0 +1,3 @@ +-record(start_test_suite, { + test_module :: showtime@internal@common@test_suite:test_module() +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestFunction.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestFunction.hrl new file mode 100644 index 0000000..a783ba4 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestFunction.hrl @@ -0,0 +1 @@ +-record(test_function, {name :: binary()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestModule.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestModule.hrl new file mode 100644 index 0000000..ee9baaf --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestModule.hrl @@ -0,0 +1 @@ +-record(test_module, {name :: binary(), path :: gleam@option:option(binary())}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestSuite.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestSuite.hrl new file mode 100644 index 0000000..253a946 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestSuite.hrl @@ -0,0 +1,4 @@ +-record(test_suite, { + module :: showtime@internal@common@test_suite:test_module(), + tests :: list(showtime@internal@common@test_suite:test_function()) +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignLeft.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignLeft.hrl new file mode 100644 index 0000000..ca52968 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignLeft.hrl @@ -0,0 +1,4 @@ +-record(align_left, { + content :: showtime@internal@reports@table:content(), + margin :: integer() +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignLeftOverflow.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignLeftOverflow.hrl new file mode 100644 index 0000000..8d5a673 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignLeftOverflow.hrl @@ -0,0 +1,4 @@ +-record(align_left_overflow, { + content :: showtime@internal@reports@table:content(), + margin :: integer() +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignRight.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignRight.hrl new file mode 100644 index 0000000..7f7a3f0 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignRight.hrl @@ -0,0 +1,4 @@ +-record(align_right, { + content :: showtime@internal@reports@table:content(), + margin :: integer() +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignRightOverflow.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignRightOverflow.hrl new file mode 100644 index 0000000..4fc4536 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignRightOverflow.hrl @@ -0,0 +1,4 @@ +-record(align_right_overflow, { + content :: showtime@internal@reports@table:content(), + margin :: integer() +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Aligned.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Aligned.hrl new file mode 100644 index 0000000..2343dfd --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Aligned.hrl @@ -0,0 +1 @@ +-record(aligned, {content :: binary()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Content.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Content.hrl new file mode 100644 index 0000000..044891b --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Content.hrl @@ -0,0 +1 @@ +-record(content, {unstyled_text :: binary()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Separator.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Separator.hrl new file mode 100644 index 0000000..db3f822 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Separator.hrl @@ -0,0 +1 @@ +-record(separator, {char :: binary()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_StyledContent.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_StyledContent.hrl new file mode 100644 index 0000000..ed500df --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_StyledContent.hrl @@ -0,0 +1 @@ +-record(styled_content, {styled_text :: binary()}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Table.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Table.hrl new file mode 100644 index 0000000..5b41bb1 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Table.hrl @@ -0,0 +1,4 @@ +-record(table, { + header :: gleam@option:option(binary()), + rows :: list(list(showtime@internal@reports@table:col())) +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@tests@meta_Meta.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@meta_Meta.hrl new file mode 100644 index 0000000..14184fb --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@meta_Meta.hrl @@ -0,0 +1 @@ +-record(meta, {description :: binary(), tags :: list(binary())}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_Eq.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_Eq.hrl new file mode 100644 index 0000000..6ebea34 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_Eq.hrl @@ -0,0 +1,5 @@ +-record(eq, { + a :: any(), + b :: any(), + meta :: gleam@option:option(showtime@tests@meta:meta()) +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_Fail.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_Fail.hrl new file mode 100644 index 0000000..cf06a3c --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_Fail.hrl @@ -0,0 +1 @@ +-record(fail, {meta :: gleam@option:option(showtime@tests@meta:meta())}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_IsError.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_IsError.hrl new file mode 100644 index 0000000..e9cabf3 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_IsError.hrl @@ -0,0 +1,4 @@ +-record(is_error, { + a :: {ok, any()} | {error, any()}, + meta :: gleam@option:option(showtime@tests@meta:meta()) +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_IsOk.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_IsOk.hrl new file mode 100644 index 0000000..37c24ca --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_IsOk.hrl @@ -0,0 +1,4 @@ +-record(is_ok, { + a :: {ok, any()} | {error, any()}, + meta :: gleam@option:option(showtime@tests@meta:meta()) +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_NotEq.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_NotEq.hrl new file mode 100644 index 0000000..2a6bf48 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_NotEq.hrl @@ -0,0 +1,5 @@ +-record(not_eq, { + a :: any(), + b :: any(), + meta :: gleam@option:option(showtime@tests@meta:meta()) +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@tests@test_MetaShould.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@test_MetaShould.hrl new file mode 100644 index 0000000..a814a93 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@test_MetaShould.hrl @@ -0,0 +1,4 @@ +-record(meta_should, { + equal :: fun((any(), any()) -> nil), + not_equal :: fun((any(), any()) -> nil) +}). diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@tests@test_Test.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@test_Test.hrl new file mode 100644 index 0000000..e75a0b7 --- /dev/null +++ b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@test_Test.hrl @@ -0,0 +1,4 @@ +-record(test, { + meta :: showtime@tests@meta:meta(), + test_function :: fun(() -> nil) +}). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.cache Binary files differnew file mode 100644 index 0000000..e31a66a --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.cache_meta Binary files differnew file mode 100644 index 0000000..7d66c62 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.erl new file mode 100644 index 0000000..12159d0 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.erl @@ -0,0 +1,21 @@ +-module(aoc2023). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([main/0]). + +-spec main() -> bitstring(). +main() -> + Trim = 8, + _assert_subject = gleam_stdlib:identity(<<"abcdefgh +abcdefgh"/utf8>>), + <<_:Trim/binary, "\n"/utf8, Rest/binary>> = case _assert_subject of + <<_:Trim/binary, "\n"/utf8, _/binary>> -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"aoc2023"/utf8>>, + function => <<"main"/utf8>>, + line => 9}) + end, + gleam@io:debug(Rest). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023@@main.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023@@main.erl new file mode 100644 index 0000000..ad291f1 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023@@main.erl @@ -0,0 +1,35 @@ +-module('aoc2023@@main'). + +-export([run/1]). + +run(Module) -> + io:setopts(standard_io, [binary, {encoding, utf8}]), + io:setopts(standard_error, [{encoding, utf8}]), + try + {ok, _} = application:ensure_all_started('aoc2023'), + erlang:process_flag(trap_exit, false), + Module:main(), + erlang:halt(0) + catch + Class:Reason:StackTrace -> + print_error(Class, Reason, StackTrace), + erlang:halt(127, [{flush, true}]) + end. + +print_error(Class, Reason, StackTrace) -> + E = erl_error:format_exception( + 1, Class, Reason, StackTrace, fun stack_filter/3, + fun print_stack_frame/2, unicode + ), + io:put_chars(E). + +stack_filter(Module, _F, _A) -> + case Module of + ?MODULE -> true; + erl_eval -> true; + init -> true; + _ -> false + end. + +print_stack_frame(Term, I) -> + io_lib:format("~." ++ integer_to_list(I) ++ "tP", [Term, 50]).
\ No newline at end of file diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache Binary files differnew file mode 100644 index 0000000..cb20c74 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache_meta Binary files differnew file mode 100644 index 0000000..f568aaf --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.erl new file mode 100644 index 0000000..7382e40 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.erl @@ -0,0 +1,8 @@ +-module(aoc2023_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([main/0]). + +-spec main() -> nil. +main() -> + showtime:main(). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache Binary files differnew file mode 100644 index 0000000..40fbdcf --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache_meta Binary files differnew file mode 100644 index 0000000..f13b8dc --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.erl new file mode 100644 index 0000000..5fd5c16 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.erl @@ -0,0 +1,52 @@ +-module(day10@day10_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, <<"7-F7- +.FJ|7 +SJLL7 +|F--J +LJ.LJ"/utf8>>, <<"8"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, <<"7-F7- +.FJ|7 +SJLL7 +|F--J +LJ.LJ"/utf8>>, <<"8"/utf8>>}], + fun(Example) -> _pipe@1 = day10@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [{example, + <<"........... +.S-------7. +.|F-----7|. +.||OOOOO||. +.||OOOOO||. +.|L-7OF-J|. +.|II|O|II|. +.L--JOL--J. +.....O....."/utf8>>, + <<"4"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"........... +.S-------7. +.|F-----7|. +.||OOOOO||. +.||OOOOO||. +.|L-7OF-J|. +.|II|O|II|. +.L--JOL--J. +.....O....."/utf8>>, + <<"4"/utf8>>}], + fun(Example) -> _pipe@1 = day10@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.cache Binary files differnew file mode 100644 index 0000000..65500d7 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.cache_meta Binary files differnew file mode 100644 index 0000000..51c9047 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.erl new file mode 100644 index 0000000..d6802a6 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.erl @@ -0,0 +1,340 @@ +-module(day10@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). +-export_type([posn/0]). + +-type posn() :: {posn, integer(), integer()}. + +-spec add_posns(posn(), posn()) -> posn(). +add_posns(P1, P2) -> + {posn, + erlang:element(2, P1) + erlang:element(2, P2), + erlang:element(3, P1) + erlang:element(3, P2)}. + +-spec pipe_neighbors(binary()) -> list(posn()). +pipe_neighbors(Pipe) -> + case Pipe of + <<"|"/utf8>> -> + [{posn, -1, 0}, {posn, 1, 0}]; + + <<"-"/utf8>> -> + [{posn, 0, 1}, {posn, 0, -1}]; + + <<"L"/utf8>> -> + [{posn, -1, 0}, {posn, 0, 1}]; + + <<"F"/utf8>> -> + [{posn, 1, 0}, {posn, 0, 1}]; + + <<"7"/utf8>> -> + [{posn, 1, 0}, {posn, 0, -1}]; + + <<"J"/utf8>> -> + [{posn, -1, 0}, {posn, 0, -1}]; + + _ -> + erlang:error(#{gleam_error => panic, + message => <<"bad pipe"/utf8>>, + module => <<"day10/solve"/utf8>>, + function => <<"pipe_neighbors"/utf8>>, + line => 44}) + end. + +-spec make_grid(binary()) -> gleam@dict:dict(posn(), binary()). +make_grid(Input) -> + _pipe = (gleam@list:index_map( + gleam@string:split(Input, <<"\n"/utf8>>), + fun(R, Row) -> + gleam@list:index_map( + gleam@string:to_graphemes(Row), + fun(C, Col) -> {{posn, R, C}, Col} end + ) + end + )), + _pipe@1 = gleam@list:flatten(_pipe), + gleam@dict:from_list(_pipe@1). + +-spec valid_start_direction(gleam@dict:dict(posn(), binary()), posn()) -> posn(). +valid_start_direction(Grid, S) -> + _assert_subject = (gleam@list:filter_map( + [{{posn, -1, 0}, [<<"|"/utf8>>, <<"7"/utf8>>, <<"F"/utf8>>]}, + {{posn, 1, 0}, [<<"|"/utf8>>, <<"J"/utf8>>, <<"L"/utf8>>]}, + {{posn, 0, 1}, [<<"-"/utf8>>, <<"J"/utf8>>, <<"7"/utf8>>]}, + {{posn, 0, -1}, [<<"-"/utf8>>, <<"F"/utf8>>, <<"L"/utf8>>]}], + fun(D) -> + {Delta, Valids} = D, + Neighbor = add_posns(S, Delta), + case gleam@dict:get(Grid, Neighbor) of + {ok, Pipe} -> + case gleam@list:contains(Valids, Pipe) of + true -> + {ok, Neighbor}; + + false -> + {error, nil} + end; + + {error, _} -> + {error, nil} + end + end + )), + [Dir | _] = case _assert_subject of + [_ | _] -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day10/solve"/utf8>>, + function => <<"valid_start_direction"/utf8>>, + line => 59}) + end, + Dir. + +-spec to_next_pipe(posn(), gleam@dict:dict(posn(), binary()), list(posn())) -> list(posn()). +to_next_pipe(Current, Grid, Acc) -> + [Prev | _] = case Acc of + [_ | _] -> Acc; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day10/solve"/utf8>>, + function => <<"to_next_pipe"/utf8>>, + line => 76}) + end, + _assert_subject = gleam@dict:get(Grid, Current), + {ok, Pipe} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day10/solve"/utf8>>, + function => <<"to_next_pipe"/utf8>>, + line => 77}) + end, + gleam@bool:guard( + Pipe =:= <<"S"/utf8>>, + [Current | Acc], + fun() -> + _assert_subject@1 = begin + _pipe = Pipe, + _pipe@1 = pipe_neighbors(_pipe), + gleam@list:filter_map( + _pipe@1, + fun(P) -> case add_posns(P, Current) of + Neighbor when Neighbor =:= Prev -> + {error, nil}; + + Neighbor@1 -> + {ok, Neighbor@1} + end end + ) + end, + [Next] = case _assert_subject@1 of + [_] -> _assert_subject@1; + _assert_fail@2 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@2, + module => <<"day10/solve"/utf8>>, + function => <<"to_next_pipe"/utf8>>, + line => 79}) + end, + to_next_pipe(Next, Grid, [Current | Acc]) + end + ). + +-spec part1(binary()) -> binary(). +part1(Input) -> + Grid = begin + _pipe = Input, + make_grid(_pipe) + end, + _assert_subject = begin + _pipe@1 = Grid, + _pipe@2 = gleam@dict:filter( + _pipe@1, + fun(_, V) -> V =:= <<"S"/utf8>> end + ), + _pipe@3 = gleam@dict:keys(_pipe@2), + gleam@list:first(_pipe@3) + end, + {ok, S} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day10/solve"/utf8>>, + function => <<"part1"/utf8>>, + line => 97}) + end, + _pipe@4 = Grid, + _pipe@5 = valid_start_direction(_pipe@4, S), + _pipe@6 = to_next_pipe(_pipe@5, Grid, [S]), + _pipe@7 = gleam@list:length(_pipe@6), + _pipe@8 = (fun(I) -> ((I - 1) div 2) end)(_pipe@7), + gleam@string:inspect(_pipe@8). + +-spec count_crossings( + posn(), + gleam@set:set(posn()), + gleam@dict:dict(posn(), binary()), + integer(), + binary() +) -> integer(). +count_crossings(P, Loop, Grid, Acc, Corner) -> + Maybe_cell = gleam@dict:get(Grid, P), + gleam@bool:guard( + Maybe_cell =:= {error, nil}, + Acc, + fun() -> + {ok, Cell} = case Maybe_cell of + {ok, _} -> Maybe_cell; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day10/solve"/utf8>>, + function => <<"count_crossings"/utf8>>, + line => 125}) + end, + Next = add_posns(P, {posn, 0, 1}), + case gleam@set:contains(Loop, P) of + false -> + count_crossings(Next, Loop, Grid, Acc, Corner); + + true -> + case {Corner, Cell} of + {_, <<"|"/utf8>>} -> + count_crossings(Next, Loop, Grid, Acc + 1, Corner); + + {_, <<"F"/utf8>>} -> + count_crossings(Next, Loop, Grid, Acc, Cell); + + {_, <<"L"/utf8>>} -> + count_crossings(Next, Loop, Grid, Acc, Cell); + + {<<"F"/utf8>>, <<"J"/utf8>>} -> + count_crossings( + Next, + Loop, + Grid, + Acc + 1, + <<""/utf8>> + ); + + {<<"L"/utf8>>, <<"7"/utf8>>} -> + count_crossings( + Next, + Loop, + Grid, + Acc + 1, + <<""/utf8>> + ); + + {<<"F"/utf8>>, <<"7"/utf8>>} -> + count_crossings(Next, Loop, Grid, Acc, <<""/utf8>>); + + {<<"L"/utf8>>, <<"J"/utf8>>} -> + count_crossings(Next, Loop, Grid, Acc, <<""/utf8>>); + + {_, _} -> + count_crossings(Next, Loop, Grid, Acc, Corner) + end + end + end + ). + +-spec trace_ray( + posn(), + gleam@set:set(posn()), + gleam@dict:dict(posn(), binary()) +) -> boolean(). +trace_ray(P, Loop, Grid) -> + gleam@bool:guard( + gleam@set:contains(Loop, P), + false, + fun() -> + gleam@int:is_odd(count_crossings(P, Loop, Grid, 0, <<""/utf8>>)) + end + ). + +-spec part2(binary()) -> binary(). +part2(Input) -> + Grid = begin + _pipe = Input, + make_grid(_pipe) + end, + _assert_subject = begin + _pipe@1 = Grid, + _pipe@2 = gleam@dict:filter( + _pipe@1, + fun(_, V) -> V =:= <<"S"/utf8>> end + ), + _pipe@3 = gleam@dict:keys(_pipe@2), + gleam@list:first(_pipe@3) + end, + {ok, S} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day10/solve"/utf8>>, + function => <<"part2"/utf8>>, + line => 145}) + end, + Loop_pipes = begin + _pipe@4 = Grid, + _pipe@5 = valid_start_direction(_pipe@4, S), + _pipe@6 = to_next_pipe(_pipe@5, Grid, [S]), + gleam@set:from_list(_pipe@6) + end, + _pipe@7 = Grid, + _pipe@8 = gleam@dict:keys(_pipe@7), + _pipe@9 = gleam@list:filter( + _pipe@8, + fun(_capture) -> trace_ray(_capture, Loop_pipes, Grid) end + ), + _pipe@10 = gleam@list:length(_pipe@9), + gleam@string:inspect(_pipe@10). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day10/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 165}) + end, + _assert_subject@1 = adglent:get_input(<<"10"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day10/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 166}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache Binary files differnew file mode 100644 index 0000000..dd328a5 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache_meta Binary files differnew file mode 100644 index 0000000..8698a6e --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.erl new file mode 100644 index 0000000..8190b1e --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.erl @@ -0,0 +1,68 @@ +-module(day11@day11_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#....."/utf8>>, + <<"374"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#....."/utf8>>, + <<"374"/utf8>>}], + fun(Example) -> _pipe@1 = day11@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [{example, + <<"...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#....."/utf8>>, + <<"8410"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#....."/utf8>>, + <<"8410"/utf8>>}], + fun(Example) -> _pipe@1 = day11@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.cache Binary files differnew file mode 100644 index 0000000..db28325 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.cache_meta Binary files differnew file mode 100644 index 0000000..3765d62 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.erl new file mode 100644 index 0000000..2dd8574 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.erl @@ -0,0 +1,130 @@ +-module(day11@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). +-export_type([posn/0]). + +-type posn() :: {posn, integer(), integer()}. + +-spec find_empty(list(list(binary()))) -> list(integer()). +find_empty(Grid) -> + gleam@list:index_fold( + Grid, + [], + fun(Acc, Row, R) -> case gleam@list:unique(Row) of + [<<"."/utf8>>] -> + [R | Acc]; + + _ -> + Acc + end end + ). + +-spec count_prior_empty_ranks(integer(), list(integer())) -> integer(). +count_prior_empty_ranks(Rank, Empty_ranks) -> + _pipe = Empty_ranks, + _pipe@1 = gleam@list:drop_while(_pipe, fun(R_empty) -> R_empty > Rank end), + gleam@list:length(_pipe@1). + +-spec parse_with_expansion(binary(), integer()) -> list(posn()). +parse_with_expansion(Input, Expansion) -> + Add = Expansion - 1, + Grid = begin + _pipe = Input, + _pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>), + gleam@list:map(_pipe@1, fun gleam@string:to_graphemes/1) + end, + Empty_row_list = find_empty(Grid), + Empty_col_list = find_empty(gleam@list:transpose(Grid)), + _pipe@2 = (gleam@list:index_map( + Grid, + fun(R, Row) -> + gleam@list:index_fold( + Row, + [], + fun(Acc, Cell, C) -> + P = {posn, R, C}, + Empty_r = count_prior_empty_ranks(R, Empty_row_list), + Empty_c = count_prior_empty_ranks(C, Empty_col_list), + case Cell of + <<"#"/utf8>> -> + [{posn, + erlang:element(2, P) + (Empty_r * Add), + erlang:element(3, P) + (Empty_c * Add)} | + Acc]; + + _ -> + Acc + end + end + ) + end + )), + gleam@list:flatten(_pipe@2). + +-spec all_distances(list(posn())) -> integer(). +all_distances(Stars) -> + gleam@list:fold( + gleam@list:combination_pairs(Stars), + 0, + fun(Acc, Pair) -> + {S1, S2} = Pair, + (Acc + gleam@int:absolute_value( + erlang:element(2, S1) - erlang:element(2, S2) + )) + + gleam@int:absolute_value( + erlang:element(3, S1) - erlang:element(3, S2) + ) + end + ). + +-spec find_distances(binary(), integer()) -> binary(). +find_distances(Input, Expand_by) -> + _pipe = Input, + _pipe@1 = parse_with_expansion(_pipe, Expand_by), + _pipe@2 = all_distances(_pipe@1), + gleam@string:inspect(_pipe@2). + +-spec part1(binary()) -> binary(). +part1(Input) -> + find_distances(Input, 2). + +-spec part2(binary()) -> binary(). +part2(Input) -> + find_distances(Input, 1000000). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day11/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 72}) + end, + _assert_subject@1 = adglent:get_input(<<"11"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day11/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 73}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache Binary files differnew file mode 100644 index 0000000..13fcba5 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache_meta Binary files differnew file mode 100644 index 0000000..d8d6ce0 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.erl new file mode 100644 index 0000000..fcbec4b --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.erl @@ -0,0 +1,38 @@ +-module(day12@day12_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"???.### 1,1,3 +.??..??...?##. 1,1,3 +?#?#?#?#?#?#?#? 1,3,1,6 +????.#...#... 4,1,1 +????.######..#####. 1,6,5 +?###???????? 3,2,1"/utf8>>, + <<"21"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"???.### 1,1,3 +.??..??...?##. 1,1,3 +?#?#?#?#?#?#?#? 1,3,1,6 +????.#...#... 4,1,1 +????.######..#####. 1,6,5 +?###???????? 3,2,1"/utf8>>, + <<"21"/utf8>>}], + fun(Example) -> _pipe@1 = day12@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [], + fun(Example) -> _pipe@1 = day12@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.cache Binary files differnew file mode 100644 index 0000000..380635a --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.cache_meta Binary files differnew file mode 100644 index 0000000..ba4b411 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.erl new file mode 100644 index 0000000..4ca87c8 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.erl @@ -0,0 +1,145 @@ +-module(day12@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). + +-spec parse_folds(binary(), integer()) -> list({binary(), list(integer())}). +parse_folds(Input, Folds) -> + Records = gleam@string:split(Input, <<"\n"/utf8>>), + gleam@list:map( + Records, + fun(Record) -> + _assert_subject = gleam@string:split_once(Record, <<" "/utf8>>), + {ok, {Template, Sets_str}} = case _assert_subject of + {ok, {_, _}} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day12/solve"/utf8>>, + function => <<"parse_folds"/utf8>>, + line => 15}) + end, + Template@1 = begin + _pipe = Template, + _pipe@1 = gleam@list:repeat(_pipe, Folds), + _pipe@2 = gleam@list:intersperse(_pipe@1, <<"?"/utf8>>), + gleam@string:concat(_pipe@2) + end, + Sets = begin + _pipe@3 = Sets_str, + _pipe@4 = gleam@string:split(_pipe@3, <<","/utf8>>), + _pipe@5 = gleam@list:map(_pipe@4, fun gleam@int:parse/1), + _pipe@6 = gleam@result:values(_pipe@5), + _pipe@7 = gleam@list:repeat(_pipe@6, Folds), + gleam@list:flatten(_pipe@7) + end, + {Template@1, Sets} + end + ). + +-spec do_count( + binary(), + list(integer()), + integer(), + boolean(), + utilities@memo:cache({binary(), list(integer()), integer(), boolean()}, integer()) +) -> integer(). +do_count(Template, Groups, Left, Gap, Cache) -> + utilities@memo:memoize( + Cache, + {Template, Groups, Left, Gap}, + fun() -> case {Template, Groups, Left, Gap} of + {<<""/utf8>>, [], 0, _} -> + 1; + + {<<"?"/utf8, T_rest/binary>>, [G | G_rest], 0, false} -> + do_count(T_rest, G_rest, G - 1, G =:= 1, Cache) + (do_count( + T_rest, + Groups, + 0, + false, + Cache + )); + + {<<"?"/utf8, T_rest@1/binary>>, [], 0, false} -> + do_count(T_rest@1, Groups, 0, false, Cache); + + {<<"?"/utf8, T_rest@1/binary>>, _, 0, true} -> + do_count(T_rest@1, Groups, 0, false, Cache); + + {<<"."/utf8, T_rest@1/binary>>, _, 0, _} -> + do_count(T_rest@1, Groups, 0, false, Cache); + + {<<"#"/utf8, T_rest@2/binary>>, [G@1 | G_rest@1], 0, false} -> + do_count(T_rest@2, G_rest@1, G@1 - 1, G@1 =:= 1, Cache); + + {<<"?"/utf8, T_rest@3/binary>>, Gs, L, false} -> + do_count(T_rest@3, Gs, L - 1, L =:= 1, Cache); + + {<<"#"/utf8, T_rest@3/binary>>, Gs, L, false} -> + do_count(T_rest@3, Gs, L - 1, L =:= 1, Cache); + + {_, _, _, _} -> + 0 + end end + ). + +-spec count_solutions(integer(), {binary(), list(integer())}) -> integer(). +count_solutions(Acc, Condition) -> + utilities@memo:create( + fun(Cache) -> + {Template, Groups} = Condition, + Acc + do_count(Template, Groups, 0, false, Cache) + end + ). + +-spec part1(binary()) -> binary(). +part1(Input) -> + _pipe = Input, + _pipe@1 = parse_folds(_pipe, 1), + _pipe@2 = gleam@list:fold(_pipe@1, 0, fun count_solutions/2), + gleam@string:inspect(_pipe@2). + +-spec part2(binary()) -> binary(). +part2(Input) -> + _pipe = Input, + _pipe@1 = parse_folds(_pipe, 5), + _pipe@2 = gleam@list:fold(_pipe@1, 0, fun count_solutions/2), + gleam@string:inspect(_pipe@2). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day12/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 79}) + end, + _assert_subject@1 = adglent:get_input(<<"12"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day12/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 80}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache Binary files differnew file mode 100644 index 0000000..dbe362b --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache_meta Binary files differnew file mode 100644 index 0000000..ccd4923 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.erl new file mode 100644 index 0000000..9aa0038 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.erl @@ -0,0 +1,88 @@ +-module(day13@day13_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"#.##..##. +..#.##.#. +##......# +##......# +..#.##.#. +..##..##. +#.#.##.#. + +#...##..# +#....#..# +..##..### +#####.##. +#####.##. +..##..### +#....#..#"/utf8>>, + <<"405"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"#.##..##. +..#.##.#. +##......# +##......# +..#.##.#. +..##..##. +#.#.##.#. + +#...##..# +#....#..# +..##..### +#####.##. +#####.##. +..##..### +#....#..#"/utf8>>, + <<"405"/utf8>>}], + fun(Example) -> _pipe@1 = day13@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [{example, + <<"#.##..##. +..#.##.#. +##......# +##......# +..#.##.#. +..##..##. +#.#.##.#. + +#...##..# +#....#..# +..##..### +#####.##. +#####.##. +..##..### +#....#..#"/utf8>>, + <<"400"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"#.##..##. +..#.##.#. +##......# +##......# +..#.##.#. +..##..##. +#.#.##.#. + +#...##..# +#....#..# +..##..### +#####.##. +#####.##. +..##..### +#....#..#"/utf8>>, + <<"400"/utf8>>}], + fun(Example) -> _pipe@1 = day13@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.cache Binary files differnew file mode 100644 index 0000000..001ba22 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.cache_meta Binary files differnew file mode 100644 index 0000000..543c3ff --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.erl new file mode 100644 index 0000000..5e94b0b --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.erl @@ -0,0 +1,149 @@ +-module(day13@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). +-export_type([symmetry_type/0]). + +-type symmetry_type() :: {horizontal, integer()} | {vertical, integer()}. + +-spec do_is_symmetric(list(list(BLS)), list(list(BLS)), integer()) -> {ok, + integer()} | + {error, nil}. +do_is_symmetric(Left, Right, Errors) -> + gleam@bool:guard( + gleam@list:is_empty(Right), + {error, nil}, + fun() -> + [H | T] = case Right of + [_ | _] -> Right; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day13/solve"/utf8>>, + function => <<"do_is_symmetric"/utf8>>, + line => 23}) + end, + Found_errors = begin + _pipe = gleam@list:zip( + gleam@list:flatten(Left), + gleam@list:flatten(Right) + ), + _pipe@1 = gleam@list:filter( + _pipe, + fun(Tup) -> + erlang:element(2, Tup) /= erlang:element(1, Tup) + end + ), + gleam@list:length(_pipe@1) + end, + case Found_errors =:= Errors of + true -> + {ok, gleam@list:length(Left)}; + + false -> + do_is_symmetric([H | Left], T, Errors) + end + end + ). + +-spec is_symmetric(list(list(any())), integer()) -> {ok, integer()} | + {error, nil}. +is_symmetric(Xss, Errs) -> + [Left | Right] = case Xss of + [_ | _] -> Xss; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day13/solve"/utf8>>, + function => <<"is_symmetric"/utf8>>, + line => 13}) + end, + do_is_symmetric([Left], Right, Errs). + +-spec get_symmetry_type(list(list(binary())), integer()) -> symmetry_type(). +get_symmetry_type(Xss, Errors) -> + case is_symmetric(Xss, Errors) of + {ok, N} -> + {horizontal, N}; + + _ -> + _assert_subject = is_symmetric(gleam@list:transpose(Xss), Errors), + {ok, N@1} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day13/solve"/utf8>>, + function => <<"get_symmetry_type"/utf8>>, + line => 38}) + end, + {vertical, N@1} + end. + +-spec summarize_notes(list(symmetry_type())) -> integer(). +summarize_notes(Symmetries) -> + gleam@list:fold(Symmetries, 0, fun(Acc, Note) -> case Note of + {horizontal, N} -> + 100 * N; + + {vertical, N@1} -> + N@1 + end + Acc end). + +-spec solve(binary(), integer()) -> binary(). +solve(Input, Errors) -> + _pipe = Input, + _pipe@1 = gleam@string:split(_pipe, <<"\n\n"/utf8>>), + _pipe@5 = gleam@list:map(_pipe@1, fun(Strs) -> _pipe@2 = Strs, + _pipe@3 = gleam@string:split(_pipe@2, <<"\n"/utf8>>), + _pipe@4 = gleam@list:map(_pipe@3, fun gleam@string:to_graphemes/1), + get_symmetry_type(_pipe@4, Errors) end), + _pipe@6 = summarize_notes(_pipe@5), + gleam@string:inspect(_pipe@6). + +-spec part1(binary()) -> binary(). +part1(Input) -> + solve(Input, 0). + +-spec part2(binary()) -> binary(). +part2(Input) -> + solve(Input, 1). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day13/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 74}) + end, + _assert_subject@1 = adglent:get_input(<<"13"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day13/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 75}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache Binary files differnew file mode 100644 index 0000000..4577a2b --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache_meta Binary files differnew file mode 100644 index 0000000..9b11f88 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.erl new file mode 100644 index 0000000..12ea788 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.erl @@ -0,0 +1,68 @@ +-module(day14@day14_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"O....#.... +O.OO#....# +.....##... +OO.#O....O +.O.....O#. +O.#..O.#.# +..O..#O..O +.......O.. +#....###.. +#OO..#...."/utf8>>, + <<"136"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"O....#.... +O.OO#....# +.....##... +OO.#O....O +.O.....O#. +O.#..O.#.# +..O..#O..O +.......O.. +#....###.. +#OO..#...."/utf8>>, + <<"136"/utf8>>}], + fun(Example) -> _pipe@1 = day14@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [{example, + <<"O....#.... +O.OO#....# +.....##... +OO.#O....O +.O.....O#. +O.#..O.#.# +..O..#O..O +.......O.. +#....###.. +#OO..#...."/utf8>>, + <<"64"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"O....#.... +O.OO#....# +.....##... +OO.#O....O +.O.....O#. +O.#..O.#.# +..O..#O..O +.......O.. +#....###.. +#OO..#...."/utf8>>, + <<"64"/utf8>>}], + fun(Example) -> _pipe@1 = day14@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.cache Binary files differnew file mode 100644 index 0000000..0c6bea3 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.cache_meta Binary files differnew file mode 100644 index 0000000..91ec775 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.erl new file mode 100644 index 0000000..6c370da --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.erl @@ -0,0 +1,149 @@ +-module(day14@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). + +-spec parse(binary()) -> list(list(binary())). +parse(Input) -> + _pipe = Input, + _pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>), + _pipe@2 = gleam@list:map(_pipe@1, fun gleam@string:to_graphemes/1), + gleam@list:transpose(_pipe@2). + +-spec roll_boulders(list(binary())) -> list(binary()). +roll_boulders(Strs) -> + _pipe = (gleam@list:map( + gleam@list:chunk( + Strs, + fun(C) -> (C =:= <<"O"/utf8>>) orelse (C =:= <<"."/utf8>>) end + ), + fun(Chunks) -> + gleam@list:sort( + Chunks, + gleam@order:reverse(fun gleam@string:compare/2) + ) + end + )), + gleam@list:flatten(_pipe). + +-spec score(list(list(binary()))) -> integer(). +score(Matrix) -> + gleam@list:fold( + Matrix, + 0, + fun(Acc, Col) -> + Acc + (gleam@list:index_fold( + gleam@list:reverse(Col), + 0, + fun(Col_acc, Char, N) -> case Char of + <<"O"/utf8>> -> + (Col_acc + N) + 1; + + _ -> + Col_acc + end end + )) + end + ). + +-spec part1(binary()) -> binary(). +part1(Input) -> + _pipe = Input, + _pipe@1 = parse(_pipe), + _pipe@2 = gleam@list:map(_pipe@1, fun roll_boulders/1), + _pipe@3 = score(_pipe@2), + gleam@string:inspect(_pipe@3). + +-spec rotate(list(list(BBU))) -> list(list(BBU)). +rotate(Matrix) -> + _pipe = Matrix, + _pipe@1 = gleam@list:map(_pipe, fun gleam@list:reverse/1), + gleam@list:transpose(_pipe@1). + +-spec spin(list(list(binary()))) -> list(list(binary())). +spin(Matrix) -> + gleam@list:fold(gleam@list:range(1, 4), Matrix, fun(Acc, _) -> _pipe = Acc, + _pipe@1 = gleam@list:map(_pipe, fun roll_boulders/1), + rotate(_pipe@1) end). + +-spec check_if_seen( + list(list(binary())), + gleam@dict:dict(list(list(binary())), integer()), + integer() +) -> integer(). +check_if_seen(Matrix, Cache, Count) -> + case gleam@dict:get(Cache, Matrix) of + {error, nil} -> + check_if_seen( + spin(Matrix), + gleam@dict:insert(Cache, Matrix, Count), + Count - 1 + ); + + {ok, N} -> + _assert_subject = gleam@int:modulo(Count, N - Count), + {ok, Extra} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day14/solve"/utf8>>, + function => <<"check_if_seen"/utf8>>, + line => 66}) + end, + _pipe = gleam@list:fold( + gleam@list:range(1, Extra), + Matrix, + fun(Acc, _) -> spin(Acc) end + ), + score(_pipe) + end. + +-spec spin_cycle(list(list(binary()))) -> integer(). +spin_cycle(Matrix) -> + Cache = gleam@dict:new(), + check_if_seen(Matrix, Cache, 1000000000). + +-spec part2(binary()) -> binary(). +part2(Input) -> + _pipe = Input, + _pipe@1 = parse(_pipe), + _pipe@2 = spin_cycle(_pipe@1), + gleam@string:inspect(_pipe@2). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day14/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 81}) + end, + _assert_subject@1 = adglent:get_input(<<"14"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day14/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 82}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache Binary files differnew file mode 100644 index 0000000..40f928f --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache_meta Binary files differnew file mode 100644 index 0000000..7571773 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.erl new file mode 100644 index 0000000..ad28e90 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.erl @@ -0,0 +1,32 @@ +-module(day15@day15_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7"/utf8>>, + <<"1320"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7"/utf8>>, + <<"1320"/utf8>>}], + fun(Example) -> _pipe@1 = day15@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [{example, + <<"rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7"/utf8>>, + <<"145"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7"/utf8>>, + <<"145"/utf8>>}], + fun(Example) -> _pipe@1 = day15@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.cache Binary files differnew file mode 100644 index 0000000..1b2e2ab --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.cache_meta Binary files differnew file mode 100644 index 0000000..8cfc051 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.erl new file mode 100644 index 0000000..623b454 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.erl @@ -0,0 +1,177 @@ +-module(day15@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). +-export_type([instruction/0]). + +-type instruction() :: {remove, binary()} | {insert, binary(), integer()}. + +-spec split(binary()) -> list(binary()). +split(Input) -> + _pipe = Input, + gleam@string:split(_pipe, <<","/utf8>>). + +-spec hash_algorithm(binary()) -> integer(). +hash_algorithm(Str) -> + Codepoints = begin + _pipe = Str, + _pipe@1 = gleam@string:to_utf_codepoints(_pipe), + gleam@list:map(_pipe@1, fun gleam@string:utf_codepoint_to_int/1) + end, + gleam@list:fold( + Codepoints, + 0, + fun(Acc, C) -> + _assert_subject = gleam@int:modulo((Acc + C) * 17, 256), + {ok, Acc@1} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day15/solve"/utf8>>, + function => <<"hash_algorithm"/utf8>>, + line => 20}) + end, + Acc@1 + end + ). + +-spec part1(binary()) -> binary(). +part1(Input) -> + _pipe = Input, + _pipe@1 = split(_pipe), + _pipe@2 = gleam@list:fold( + _pipe@1, + 0, + fun(Acc, Str) -> Acc + hash_algorithm(Str) end + ), + gleam@string:inspect(_pipe@2). + +-spec read_instruction(binary()) -> instruction(). +read_instruction(Str) -> + case gleam@string:split(Str, <<"="/utf8>>) of + [Label, Focal_str] -> + _assert_subject = gleam@int:parse(Focal_str), + {ok, Focal} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day15/solve"/utf8>>, + function => <<"read_instruction"/utf8>>, + line => 39}) + end, + {insert, Label, Focal}; + + _ -> + {remove, gleam@string:drop_right(Str, 1)} + end. + +-spec remove_lens(gleam@dict:dict(integer(), list({binary(), BPV})), binary()) -> gleam@dict:dict(integer(), list({binary(), + BPV})). +remove_lens(Boxes, Label) -> + gleam@dict:update(Boxes, hash_algorithm(Label), fun(V) -> case V of + {some, Lenses} -> + case gleam@list:key_pop(Lenses, Label) of + {ok, {_, Updated}} -> + Updated; + + {error, nil} -> + Lenses + end; + + none -> + [] + end end). + +-spec insert_lens( + gleam@dict:dict(integer(), list({binary(), BON})), + binary(), + BON +) -> gleam@dict:dict(integer(), list({binary(), BON})). +insert_lens(Boxes, Label, Focal) -> + gleam@dict:update(Boxes, hash_algorithm(Label), fun(V) -> case V of + {some, Lenses} -> + gleam@list:key_set(Lenses, Label, Focal); + + none -> + [{Label, Focal}] + end end). + +-spec parse_instructions(list(binary())) -> gleam@dict:dict(integer(), list({binary(), + integer()})). +parse_instructions(Insts) -> + gleam@list:fold( + Insts, + gleam@dict:new(), + fun(Acc, Inst) -> case read_instruction(Inst) of + {remove, Label} -> + remove_lens(Acc, Label); + + {insert, Label@1, Focal} -> + insert_lens(Acc, Label@1, Focal) + end end + ). + +-spec focusing_power(gleam@dict:dict(integer(), list({binary(), integer()}))) -> integer(). +focusing_power(Boxes) -> + gleam@dict:fold( + Boxes, + 0, + fun(Acc, K, V) -> + Box_acc = (gleam@list:index_fold( + V, + 0, + fun(Acc@1, Lens, I) -> + Acc@1 + (erlang:element(2, Lens) * (I + 1)) + end + )), + Acc + ((K + 1) * Box_acc) + end + ). + +-spec part2(binary()) -> binary(). +part2(Input) -> + _pipe = Input, + _pipe@1 = split(_pipe), + _pipe@2 = parse_instructions(_pipe@1), + _pipe@3 = focusing_power(_pipe@2), + gleam@string:inspect(_pipe@3). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day15/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 92}) + end, + _assert_subject@1 = adglent:get_input(<<"15"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day15/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 93}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache Binary files differnew file mode 100644 index 0000000..bc9a034 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache_meta Binary files differnew file mode 100644 index 0000000..2320e16 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.erl new file mode 100644 index 0000000..978ab14 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.erl @@ -0,0 +1,68 @@ +-module(day16@day16_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<".|...\\.... +|.-.\\..... +.....|-... +........|. +.......... +.........\\ +..../.\\\\.. +.-.-/..|.. +.|....-|.\\ +..//.|...."/utf8>>, + 46}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<".|...\\.... +|.-.\\..... +.....|-... +........|. +.......... +.........\\ +..../.\\\\.. +.-.-/..|.. +.|....-|.\\ +..//.|...."/utf8>>, + 46}], + fun(Example) -> _pipe@1 = day16@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [{example, + <<".|...\\.... +|.-.\\..... +.....|-... +........|. +.......... +.........\\ +..../.\\\\.. +.-.-/..|.. +.|....-|.\\ +..//.|...."/utf8>>, + 51}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<".|...\\.... +|.-.\\..... +.....|-... +........|. +.......... +.........\\ +..../.\\\\.. +.-.-/..|.. +.|....-|.\\ +..//.|...."/utf8>>, + 51}], + fun(Example) -> _pipe@1 = day16@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.cache Binary files differnew file mode 100644 index 0000000..359bdc2 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.cache_meta Binary files differnew file mode 100644 index 0000000..e7cf5c0 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.erl new file mode 100644 index 0000000..a07c02a --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.erl @@ -0,0 +1,253 @@ +-module(day16@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). +-export_type([direction/0, light/0]). + +-type direction() :: up | right | down | left. + +-type light() :: {light, utilities@array2d:posn(), direction()}. + +-spec move(light()) -> light(). +move(L) -> + {light, P, Dir} = L, + case Dir of + up -> + erlang:setelement( + 2, + L, + erlang:setelement(2, P, erlang:element(2, P) - 1) + ); + + down -> + erlang:setelement( + 2, + L, + erlang:setelement(2, P, erlang:element(2, P) + 1) + ); + + left -> + erlang:setelement( + 2, + L, + erlang:setelement(3, P, erlang:element(3, P) - 1) + ); + + right -> + erlang:setelement( + 2, + L, + erlang:setelement(3, P, erlang:element(3, P) + 1) + ) + end. + +-spec transform(light(), {ok, binary()} | {error, nil}) -> list(light()). +transform(L, Cell) -> + gleam@bool:guard( + gleam@result:is_error(Cell), + [], + fun() -> + {ok, C} = case Cell of + {ok, _} -> Cell; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day16/solve"/utf8>>, + function => <<"transform"/utf8>>, + line => 33}) + end, + {light, P, Dir} = L, + case {Dir, C} of + {_, <<"."/utf8>>} -> + [L]; + + {up, <<"|"/utf8>>} -> + [L]; + + {down, <<"|"/utf8>>} -> + [L]; + + {left, <<"-"/utf8>>} -> + [L]; + + {right, <<"-"/utf8>>} -> + [L]; + + {left, <<"/"/utf8>>} -> + [{light, P, down}]; + + {down, <<"/"/utf8>>} -> + [{light, P, left}]; + + {right, <<"/"/utf8>>} -> + [{light, P, up}]; + + {up, <<"/"/utf8>>} -> + [{light, P, right}]; + + {left, <<"\\"/utf8>>} -> + [{light, P, up}]; + + {up, <<"\\"/utf8>>} -> + [{light, P, left}]; + + {right, <<"\\"/utf8>>} -> + [{light, P, down}]; + + {down, <<"\\"/utf8>>} -> + [{light, P, right}]; + + {left, <<"|"/utf8>>} -> + [{light, P, up}, {light, P, down}]; + + {right, <<"|"/utf8>>} -> + [{light, P, up}, {light, P, down}]; + + {up, <<"-"/utf8>>} -> + [{light, P, left}, {light, P, right}]; + + {down, <<"-"/utf8>>} -> + [{light, P, left}, {light, P, right}]; + + {_, _} -> + erlang:error(#{gleam_error => panic, + message => <<"unrecognized cell type"/utf8>>, + module => <<"day16/solve"/utf8>>, + function => <<"transform"/utf8>>, + line => 50}) + end + end + ). + +-spec energize( + list(light()), + gleam@set:set(light()), + gleam@dict:dict(utilities@array2d:posn(), binary()) +) -> integer(). +energize(Lights, Visited, Grid) -> + Next_positions = begin + _pipe = Lights, + _pipe@1 = gleam@list:flat_map( + _pipe, + fun(L) -> + Next = move(L), + transform(Next, gleam@dict:get(Grid, erlang:element(2, Next))) + end + ), + gleam@list:filter( + _pipe@1, + fun(L@1) -> not gleam@set:contains(Visited, L@1) end + ) + end, + All_visited = gleam@set:union(gleam@set:from_list(Next_positions), Visited), + case Visited =:= All_visited of + true -> + _pipe@2 = gleam@set:fold( + Visited, + gleam@set:new(), + fun(Acc, L@2) -> + gleam@set:insert(Acc, erlang:element(2, L@2)) + end + ), + _pipe@3 = gleam@set:to_list(_pipe@2), + gleam@list:length(_pipe@3); + + false -> + energize(Next_positions, All_visited, Grid) + end. + +-spec part1(binary()) -> integer(). +part1(Input) -> + Grid = utilities@array2d:parse_grid(Input), + _pipe = [{light, {posn, 0, -1}, right}], + energize(_pipe, gleam@set:new(), Grid). + +-spec part2(binary()) -> integer(). +part2(Input) -> + Grid = utilities@array2d:parse_grid(Input), + {posn, Rows, Cols} = (gleam@list:fold( + gleam@dict:keys(Grid), + {posn, 0, 0}, + fun(Acc, P) -> + case (erlang:element(2, Acc) + erlang:element(3, Acc)) > (erlang:element( + 2, + P + ) + + erlang:element(3, P)) of + true -> + Acc; + + false -> + P + end + end + )), + All_starts = gleam@list:concat( + [gleam@list:map( + gleam@list:range(0, Rows), + fun(R) -> {light, {posn, R, -1}, right} end + ), + gleam@list:map( + gleam@list:range(0, Rows), + fun(R@1) -> {light, {posn, R@1, Cols + 1}, left} end + ), + gleam@list:map( + gleam@list:range(0, Cols), + fun(C) -> {light, {posn, -1, C}, down} end + ), + gleam@list:map( + gleam@list:range(0, Cols), + fun(C@1) -> {light, {posn, Rows + 1, C@1}, up} end + )] + ), + gleam@list:fold( + All_starts, + 0, + fun(Acc@1, P@1) -> + Energized = energize([P@1], gleam@set:new(), Grid), + case Acc@1 > Energized of + true -> + Acc@1; + + false -> + Energized + end + end + ). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day16/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 107}) + end, + _assert_subject@1 = adglent:get_input(<<"16"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day16/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 108}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache Binary files differnew file mode 100644 index 0000000..a6202af --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache_meta Binary files differnew file mode 100644 index 0000000..8198a7b --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.erl new file mode 100644 index 0000000..38e725d --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.erl @@ -0,0 +1,52 @@ +-module(day17@day17_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"2413432311323 +3215453535623 +3255245654254 +3446585845452 +4546657867536 +1438598798454 +4457876987766 +3637877979653 +4654967986887 +4564679986453 +1224686865563 +2546548887735 +4322674655533"/utf8>>, + <<"102"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"2413432311323 +3215453535623 +3255245654254 +3446585845452 +4546657867536 +1438598798454 +4457876987766 +3637877979653 +4654967986887 +4564679986453 +1224686865563 +2546548887735 +4322674655533"/utf8>>, + <<"102"/utf8>>}], + fun(Example) -> _pipe@1 = day17@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [], + fun(Example) -> _pipe@1 = day17@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.cache Binary files differnew file mode 100644 index 0000000..f57cf43 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.cache_meta Binary files differnew file mode 100644 index 0000000..de4425a --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.erl new file mode 100644 index 0000000..1eddde6 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.erl @@ -0,0 +1,231 @@ +-module(day17@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). +-export_type([state/0]). + +-type state() :: {state, + utilities@array2d:posn(), + integer(), + utilities@array2d:posn(), + list(utilities@array2d:posn())}. + +-spec same_dir(state()) -> list(utilities@array2d:posn()). +same_dir(S) -> + case erlang:element(5, S) of + [] -> + []; + + [First | _] = Deltas -> + _pipe = gleam@list:take_while(Deltas, fun(D) -> D =:= First end), + gleam@list:take(_pipe, 10) + end. + +-spec make_key(state()) -> {utilities@array2d:posn(), + list(utilities@array2d:posn())}. +make_key(S) -> + {erlang:element(2, S), same_dir(S)}. + +-spec is_goal(state(), integer(), utilities@array2d:posn()) -> boolean(). +is_goal(S, Min_run, Goal) -> + (Goal =:= erlang:element(2, S)) andalso (gleam@list:length(same_dir(S)) >= Min_run). + +-spec eliminate_bad_neighbors( + utilities@array2d:posn(), + state(), + integer(), + integer(), + gleam@dict:dict(utilities@array2d:posn(), any()) +) -> boolean(). +eliminate_bad_neighbors(D, S, Max, Min, Grid) -> + Neighbor = utilities@array2d:add_posns(D, erlang:element(2, S)), + gleam@bool:guard( + (Neighbor =:= erlang:element(4, S)) orelse not gleam@dict:has_key( + Grid, + Neighbor + ), + false, + fun() -> case {same_dir(S), gleam@list:length(same_dir(S))} of + {[Prev | _], L} when L =:= Max -> + D /= Prev; + + {_, 0} -> + true; + + {[Prev@1 | _], L@1} when L@1 < Min -> + D =:= Prev@1; + + {_, _} -> + true + end end + ). + +-spec make_state( + utilities@array2d:posn(), + state(), + gleam@dict:dict(utilities@array2d:posn(), integer()) +) -> state(). +make_state(D, S, Grid) -> + Neighbor = utilities@array2d:add_posns(D, erlang:element(2, S)), + _assert_subject = gleam@dict:get(Grid, Neighbor), + {ok, Heat_lost} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day17/solve"/utf8>>, + function => <<"make_state"/utf8>>, + line => 58}) + end, + {state, + Neighbor, + erlang:element(3, S) + Heat_lost, + erlang:element(2, S), + [D | erlang:element(5, S)]}. + +-spec find_good_neighbors( + integer(), + integer(), + state(), + gleam@dict:dict(utilities@array2d:posn(), integer()) +) -> list(state()). +find_good_neighbors(Max, Min, S, Grid) -> + _pipe = [{posn, -1, 0}, {posn, 1, 0}, {posn, 0, -1}, {posn, 0, 1}], + _pipe@1 = gleam@list:filter( + _pipe, + fun(_capture) -> + eliminate_bad_neighbors(_capture, S, Max, Min, Grid) + end + ), + gleam@list:map( + _pipe@1, + fun(_capture@1) -> make_state(_capture@1, S, Grid) end + ). + +-spec find_path( + gleam@dict:dict(utilities@array2d:posn(), integer()), + utilities@prioqueue:priority_queue(state()), + gleam@set:set({utilities@array2d:posn(), list(utilities@array2d:posn())}), + fun((state()) -> list(state())), + fun((state()) -> boolean()) +) -> integer(). +find_path(Grid, Queue, Seen, Get_neighbors, Is_goal) -> + _assert_subject = utilities@prioqueue:pop(Queue), + {ok, {State, Rest}} = case _assert_subject of + {ok, {_, _}} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day17/solve"/utf8>>, + function => <<"find_path"/utf8>>, + line => 74}) + end, + Key = make_key( + begin + _pipe = State, + gleam@io:debug(_pipe) + end + ), + case gleam@set:contains(Seen, Key) of + true -> + find_path(Grid, Rest, Seen, Get_neighbors, Is_goal); + + false -> + Now_seen = gleam@set:insert(Seen, Key), + Neighbors = Get_neighbors(State), + case gleam@list:find(Neighbors, Is_goal) of + {ok, Final} -> + erlang:element(3, Final); + + _ -> + Now_queue = gleam@list:fold( + Neighbors, + Rest, + fun(Acc, N) -> + utilities@prioqueue:insert( + Acc, + N, + erlang:element(3, N) + ) + end + ), + find_path(Grid, Now_queue, Now_seen, Get_neighbors, Is_goal) + end + end. + +-spec part1(binary()) -> binary(). +part1(Input) -> + Raw_grid = begin + _pipe = Input, + utilities@array2d:to_list_of_lists(_pipe) + end, + Grid = utilities@array2d:to_2d_intarray(Raw_grid), + Rmax = gleam@list:length(Raw_grid), + _assert_subject = begin + _pipe@1 = Raw_grid, + _pipe@2 = gleam@list:first(_pipe@1), + gleam@result:map(_pipe@2, fun gleam@list:length/1) + end, + {ok, Cmax} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day17/solve"/utf8>>, + function => <<"part1"/utf8>>, + line => 107}) + end, + Start = {state, {posn, 0, 0}, 0, {posn, 0, 0}, []}, + Goal = {posn, Rmax, Cmax}, + _pipe@3 = find_path( + Grid, + utilities@prioqueue:insert(utilities@prioqueue:new(), Start, 0), + gleam@set:new(), + fun(_capture) -> find_good_neighbors(0, 3, _capture, Grid) end, + fun(_capture@1) -> is_goal(_capture@1, 1, Goal) end + ), + gleam@string:inspect(_pipe@3). + +-spec part2(binary()) -> binary(). +part2(Input) -> + _pipe = Input, + gleam@string:inspect(_pipe). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day17/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 131}) + end, + _assert_subject@1 = adglent:get_input(<<"17"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day17/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 132}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache Binary files differnew file mode 100644 index 0000000..03f5c97 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache_meta Binary files differnew file mode 100644 index 0000000..4d0ad03 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.erl new file mode 100644 index 0000000..9763a38 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.erl @@ -0,0 +1,84 @@ +-module(day18@day18_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"R 6 (#70c710) +D 5 (#0dc571) +L 2 (#5713f0) +D 2 (#d2c081) +R 2 (#59c680) +D 2 (#411b91) +L 5 (#8ceee2) +U 2 (#caa173) +L 1 (#1b58a2) +U 2 (#caa171) +R 2 (#7807d2) +U 3 (#a77fa3) +L 2 (#015232) +U 2 (#7a21e3)"/utf8>>, + <<"62"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"R 6 (#70c710) +D 5 (#0dc571) +L 2 (#5713f0) +D 2 (#d2c081) +R 2 (#59c680) +D 2 (#411b91) +L 5 (#8ceee2) +U 2 (#caa173) +L 1 (#1b58a2) +U 2 (#caa171) +R 2 (#7807d2) +U 3 (#a77fa3) +L 2 (#015232) +U 2 (#7a21e3)"/utf8>>, + <<"62"/utf8>>}], + fun(Example) -> _pipe@1 = day18@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [{example, + <<"R 6 (#70c710) +D 5 (#0dc571) +L 2 (#5713f0) +D 2 (#d2c081) +R 2 (#59c680) +D 2 (#411b91) +L 5 (#8ceee2) +U 2 (#caa173) +L 1 (#1b58a2) +U 2 (#caa171) +R 2 (#7807d2) +U 3 (#a77fa3) +L 2 (#015232) +U 2 (#7a21e3)"/utf8>>, + <<"952408144115"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"R 6 (#70c710) +D 5 (#0dc571) +L 2 (#5713f0) +D 2 (#d2c081) +R 2 (#59c680) +D 2 (#411b91) +L 5 (#8ceee2) +U 2 (#caa173) +L 1 (#1b58a2) +U 2 (#caa171) +R 2 (#7807d2) +U 3 (#a77fa3) +L 2 (#015232) +U 2 (#7a21e3)"/utf8>>, + <<"952408144115"/utf8>>}], + fun(Example) -> _pipe@1 = day18@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.cache Binary files differnew file mode 100644 index 0000000..6fa850f --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.cache_meta Binary files differnew file mode 100644 index 0000000..5a4d476 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.erl new file mode 100644 index 0000000..3dc5e00 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.erl @@ -0,0 +1,218 @@ +-module(day18@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). +-export_type([coord/0, direction/0, dig/0]). + +-type coord() :: {coord, integer(), integer()}. + +-type direction() :: up | right | down | left. + +-type dig() :: {dig, direction(), integer()}. + +-spec to_direction(binary()) -> direction(). +to_direction(C) -> + case C of + <<"R"/utf8>> -> + right; + + <<"0"/utf8>> -> + right; + + <<"D"/utf8>> -> + down; + + <<"1"/utf8>> -> + down; + + <<"L"/utf8>> -> + left; + + <<"2"/utf8>> -> + left; + + <<"U"/utf8>> -> + up; + + <<"3"/utf8>> -> + up; + + _ -> + erlang:error(#{gleam_error => panic, + message => <<"panic expression evaluated"/utf8>>, + module => <<"day18/solve"/utf8>>, + function => <<"to_direction"/utf8>>, + line => 30}) + end. + +-spec parse_front(binary()) -> dig(). +parse_front(Line) -> + _assert_subject = gleam@regex:from_string(<<"(.) (.*) \\(.*\\)"/utf8>>), + {ok, Re} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day18/solve"/utf8>>, + function => <<"parse_front"/utf8>>, + line => 35}) + end, + _assert_subject@1 = gleam@regex:scan(Re, Line), + [{match, _, [{some, Dir}, {some, Dist}]}] = case _assert_subject@1 of + [{match, _, [{some, _}, {some, _}]}] -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day18/solve"/utf8>>, + function => <<"parse_front"/utf8>>, + line => 36}) + end, + _assert_subject@2 = gleam@int:parse(Dist), + {ok, N} = case _assert_subject@2 of + {ok, _} -> _assert_subject@2; + _assert_fail@2 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@2, + module => <<"day18/solve"/utf8>>, + function => <<"parse_front"/utf8>>, + line => 38}) + end, + {dig, to_direction(Dir), N}. + +-spec parse_hex(binary()) -> dig(). +parse_hex(Line) -> + _assert_subject = gleam@regex:from_string(<<"\\(#(.....)(.)\\)"/utf8>>), + {ok, Re} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day18/solve"/utf8>>, + function => <<"parse_hex"/utf8>>, + line => 43}) + end, + _assert_subject@1 = gleam@regex:scan(Re, Line), + [{match, _, [{some, Dist}, {some, Dir}]}] = case _assert_subject@1 of + [{match, _, [{some, _}, {some, _}]}] -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day18/solve"/utf8>>, + function => <<"parse_hex"/utf8>>, + line => 44}) + end, + _assert_subject@2 = gleam@int:base_parse(Dist, 16), + {ok, N} = case _assert_subject@2 of + {ok, _} -> _assert_subject@2; + _assert_fail@2 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@2, + module => <<"day18/solve"/utf8>>, + function => <<"parse_hex"/utf8>>, + line => 46}) + end, + {dig, to_direction(Dir), N}. + +-spec go(coord(), dig()) -> coord(). +go(Current, Dig) -> + case Dig of + {dig, up, N} -> + {coord, erlang:element(2, Current), erlang:element(3, Current) + N}; + + {dig, right, N@1} -> + {coord, + erlang:element(2, Current) + N@1, + erlang:element(3, Current)}; + + {dig, down, N@2} -> + {coord, + erlang:element(2, Current), + erlang:element(3, Current) - N@2}; + + {dig, left, N@3} -> + {coord, + erlang:element(2, Current) - N@3, + erlang:element(3, Current)} + end. + +-spec double_triangle(coord(), coord()) -> integer(). +double_triangle(C1, C2) -> + (erlang:element(2, C1) * erlang:element(3, C2)) - (erlang:element(2, C2) * erlang:element( + 3, + C1 + )). + +-spec do_next_dig(list(dig()), coord(), integer(), integer()) -> integer(). +do_next_dig(Digs, Current, Area, Perimeter) -> + case Digs of + [] -> + ((gleam@int:absolute_value(Area) div 2) + (Perimeter div 2)) + 1; + + [Dig | Rest] -> + Next = go(Current, Dig), + Area@1 = Area + double_triangle(Current, Next), + Perimeter@1 = Perimeter + erlang:element(3, Dig), + do_next_dig(Rest, Next, Area@1, Perimeter@1) + end. + +-spec start_dig(list(dig())) -> integer(). +start_dig(Digs) -> + do_next_dig(Digs, {coord, 0, 0}, 0, 0). + +-spec solve_with(binary(), fun((binary()) -> dig())) -> binary(). +solve_with(Input, F) -> + _pipe = Input, + _pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>), + _pipe@2 = gleam@list:map(_pipe@1, F), + _pipe@3 = start_dig(_pipe@2), + gleam@string:inspect(_pipe@3). + +-spec part1(binary()) -> binary(). +part1(Input) -> + solve_with(Input, fun parse_front/1). + +-spec part2(binary()) -> binary(). +part2(Input) -> + solve_with(Input, fun parse_hex/1). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day18/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 101}) + end, + _assert_subject@1 = adglent:get_input(<<"18"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day18/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 102}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache Binary files differnew file mode 100644 index 0000000..3b5eab2 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache_meta Binary files differnew file mode 100644 index 0000000..e633833 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.erl new file mode 100644 index 0000000..2404595 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.erl @@ -0,0 +1,96 @@ +-module(day19@day19_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"px{a<2006:qkq,m>2090:A,rfg} +pv{a>1716:R,A} +lnx{m>1548:A,A} +rfg{s<537:gd,x>2440:R,A} +qs{s>3448:A,lnx} +qkq{x<1416:A,crn} +crn{x>2662:A,R} +in{s<1351:px,qqz} +qqz{s>2770:qs,m<1801:hdj,R} +gd{a>3333:R,R} +hdj{m>838:A,pv} + +{x=787,m=2655,a=1222,s=2876} +{x=1679,m=44,a=2067,s=496} +{x=2036,m=264,a=79,s=2244} +{x=2461,m=1339,a=466,s=291} +{x=2127,m=1623,a=2188,s=1013}"/utf8>>, + <<"19114"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"px{a<2006:qkq,m>2090:A,rfg} +pv{a>1716:R,A} +lnx{m>1548:A,A} +rfg{s<537:gd,x>2440:R,A} +qs{s>3448:A,lnx} +qkq{x<1416:A,crn} +crn{x>2662:A,R} +in{s<1351:px,qqz} +qqz{s>2770:qs,m<1801:hdj,R} +gd{a>3333:R,R} +hdj{m>838:A,pv} + +{x=787,m=2655,a=1222,s=2876} +{x=1679,m=44,a=2067,s=496} +{x=2036,m=264,a=79,s=2244} +{x=2461,m=1339,a=466,s=291} +{x=2127,m=1623,a=2188,s=1013}"/utf8>>, + <<"19114"/utf8>>}], + fun(Example) -> _pipe@1 = day19@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [{example, + <<"px{a<2006:qkq,m>2090:A,rfg} +pv{a>1716:R,A} +lnx{m>1548:A,A} +rfg{s<537:gd,x>2440:R,A} +qs{s>3448:A,lnx} +qkq{x<1416:A,crn} +crn{x>2662:A,R} +in{s<1351:px,qqz} +qqz{s>2770:qs,m<1801:hdj,R} +gd{a>3333:R,R} +hdj{m>838:A,pv} + +{x=787,m=2655,a=1222,s=2876} +{x=1679,m=44,a=2067,s=496} +{x=2036,m=264,a=79,s=2244} +{x=2461,m=1339,a=466,s=291} +{x=2127,m=1623,a=2188,s=1013}"/utf8>>, + <<"167409079868000"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"px{a<2006:qkq,m>2090:A,rfg} +pv{a>1716:R,A} +lnx{m>1548:A,A} +rfg{s<537:gd,x>2440:R,A} +qs{s>3448:A,lnx} +qkq{x<1416:A,crn} +crn{x>2662:A,R} +in{s<1351:px,qqz} +qqz{s>2770:qs,m<1801:hdj,R} +gd{a>3333:R,R} +hdj{m>838:A,pv} + +{x=787,m=2655,a=1222,s=2876} +{x=1679,m=44,a=2067,s=496} +{x=2036,m=264,a=79,s=2244} +{x=2461,m=1339,a=466,s=291} +{x=2127,m=1623,a=2188,s=1013}"/utf8>>, + <<"167409079868000"/utf8>>}], + fun(Example) -> _pipe@1 = day19@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.cache Binary files differnew file mode 100644 index 0000000..c7e00e3 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.cache_meta Binary files differnew file mode 100644 index 0000000..0424b05 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.erl new file mode 100644 index 0000000..242bd74 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.erl @@ -0,0 +1,459 @@ +-module(day19@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). +-export_type([rating/0, part/0, action/0, rule/0, interval/0, part_range/0]). + +-type rating() :: xtremely_cool | musical | aerodynamic | shiny. + +-type part() :: {part, integer(), integer(), integer(), integer()}. + +-type action() :: accept | reject | {send_to, binary()}. + +-type rule() :: {'if', rating(), gleam@order:order(), integer(), action()} | + {just, action()}. + +-type interval() :: {interval, integer(), integer()}. + +-type part_range() :: {part_range, + interval(), + interval(), + interval(), + interval()}. + +-spec to_instruction(binary()) -> action(). +to_instruction(Rule) -> + case Rule of + <<"A"/utf8>> -> + accept; + + <<"R"/utf8>> -> + reject; + + Name -> + {send_to, Name} + end. + +-spec to_rating(binary()) -> rating(). +to_rating(Rating) -> + case Rating of + <<"x"/utf8>> -> + xtremely_cool; + + <<"m"/utf8>> -> + musical; + + <<"a"/utf8>> -> + aerodynamic; + + _ -> + shiny + end. + +-spec get_rating(part(), rating()) -> integer(). +get_rating(Part, Rating) -> + case Rating of + xtremely_cool -> + erlang:element(2, Part); + + musical -> + erlang:element(3, Part); + + aerodynamic -> + erlang:element(4, Part); + + shiny -> + erlang:element(5, Part) + end. + +-spec to_comp(binary()) -> gleam@order:order(). +to_comp(Comp) -> + case Comp of + <<"<"/utf8>> -> + lt; + + _ -> + gt + end. + +-spec to_val(binary()) -> integer(). +to_val(Val) -> + _assert_subject = gleam@int:parse(Val), + {ok, N} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day19/solve"/utf8>>, + function => <<"to_val"/utf8>>, + line => 100}) + end, + N. + +-spec parse_rules(list(binary())) -> list(rule()). +parse_rules(Rules) -> + _assert_subject = gleam@regex:from_string(<<"(.*)(>|<)(.*):(.*)"/utf8>>), + {ok, Re_rule} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day19/solve"/utf8>>, + function => <<"parse_rules"/utf8>>, + line => 57}) + end, + gleam@list:map(Rules, fun(Rule) -> case gleam@regex:scan(Re_rule, Rule) of + [{match, _, [{some, R}, {some, C}, {some, T}, {some, I}]}] -> + {'if', + to_rating(R), + to_comp(C), + to_val(T), + to_instruction(I)}; + + _ -> + {just, to_instruction(Rule)} + end end). + +-spec parse_workflow(binary()) -> gleam@dict:dict(binary(), list(rule())). +parse_workflow(Input) -> + _assert_subject = gleam@regex:from_string(<<"(.*){(.*)}"/utf8>>), + {ok, Re} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day19/solve"/utf8>>, + function => <<"parse_workflow"/utf8>>, + line => 45}) + end, + gleam@list:fold( + gleam@string:split(Input, <<"\n"/utf8>>), + gleam@dict:new(), + fun(Acc, Line) -> + _assert_subject@1 = gleam@regex:scan(Re, Line), + [{match, _, [{some, Name}, {some, All_rules}]}] = case _assert_subject@1 of + [{match, _, [{some, _}, {some, _}]}] -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day19/solve"/utf8>>, + function => <<"parse_workflow"/utf8>>, + line => 48}) + end, + Rules = begin + _pipe = gleam@string:split(All_rules, <<","/utf8>>), + parse_rules(_pipe) + end, + gleam@dict:insert(Acc, Name, Rules) + end + ). + +-spec parse_parts(binary()) -> list(part()). +parse_parts(Input) -> + _assert_subject = gleam@regex:from_string( + <<"{x=(.*),m=(.*),a=(.*),s=(.*)}"/utf8>> + ), + {ok, Re} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day19/solve"/utf8>>, + function => <<"parse_parts"/utf8>>, + line => 105}) + end, + gleam@list:map( + gleam@string:split(Input, <<"\n"/utf8>>), + fun(Part) -> + _assert_subject@1 = gleam@regex:scan(Re, Part), + [{match, _, [{some, X}, {some, M}, {some, A}, {some, S}]}] = case _assert_subject@1 of + [{match, _, [{some, _}, {some, _}, {some, _}, {some, _}]}] -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day19/solve"/utf8>>, + function => <<"parse_parts"/utf8>>, + line => 108}) + end, + {part, to_val(X), to_val(M), to_val(A), to_val(S)} + end + ). + +-spec evaluate_rules(part(), list(rule())) -> action(). +evaluate_rules(Part, Rules) -> + case Rules of + [] -> + erlang:error(#{gleam_error => panic, + message => <<"panic expression evaluated"/utf8>>, + module => <<"day19/solve"/utf8>>, + function => <<"evaluate_rules"/utf8>>, + line => 128}); + + [{just, Do} | _] -> + Do; + + [{'if', Rating, Comparison, Threshold, Do@1} | Rest] -> + case gleam@int:compare(get_rating(Part, Rating), Threshold) =:= Comparison of + true -> + Do@1; + + false -> + evaluate_rules(Part, Rest) + end + end. + +-spec evaluate_workflow( + part(), + binary(), + gleam@dict:dict(binary(), list(rule())) +) -> integer(). +evaluate_workflow(Part, Name, Workflow) -> + _assert_subject = gleam@dict:get(Workflow, Name), + {ok, Rules} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day19/solve"/utf8>>, + function => <<"evaluate_workflow"/utf8>>, + line => 118}) + end, + case evaluate_rules(Part, Rules) of + accept -> + ((erlang:element(2, Part) + erlang:element(3, Part)) + erlang:element( + 4, + Part + )) + + erlang:element(5, Part); + + reject -> + 0; + + {send_to, Name@1} -> + evaluate_workflow(Part, Name@1, Workflow) + end. + +-spec start_evaluating_workflow(part(), gleam@dict:dict(binary(), list(rule()))) -> integer(). +start_evaluating_workflow(Part, Workflow) -> + evaluate_workflow(Part, <<"in"/utf8>>, Workflow). + +-spec part1(binary()) -> binary(). +part1(Input) -> + _assert_subject = gleam@string:split_once(Input, <<"\n\n"/utf8>>), + {ok, {Workflows_str, Parts_str}} = case _assert_subject of + {ok, {_, _}} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day19/solve"/utf8>>, + function => <<"part1"/utf8>>, + line => 139}) + end, + Workflows = parse_workflow(Workflows_str), + Parts = parse_parts(Parts_str), + _pipe = gleam@list:map( + Parts, + fun(_capture) -> start_evaluating_workflow(_capture, Workflows) end + ), + _pipe@1 = gleam@int:sum(_pipe), + gleam@string:inspect(_pipe@1). + +-spec size(interval()) -> integer(). +size(Interval) -> + (erlang:element(3, Interval) - erlang:element(2, Interval)) + 1. + +-spec all_in_range(part_range()) -> integer(). +all_in_range(Pr) -> + ((size(erlang:element(2, Pr)) * size(erlang:element(3, Pr))) * size( + erlang:element(4, Pr) + )) + * size(erlang:element(5, Pr)). + +-spec get_partrange(part_range(), rating()) -> interval(). +get_partrange(Pr, Rating) -> + case Rating of + xtremely_cool -> + erlang:element(2, Pr); + + musical -> + erlang:element(3, Pr); + + aerodynamic -> + erlang:element(4, Pr); + + shiny -> + erlang:element(5, Pr) + end. + +-spec update_partrange(part_range(), rating(), interval()) -> part_range(). +update_partrange(Pr, Rating, I) -> + case Rating of + xtremely_cool -> + erlang:setelement(2, Pr, I); + + musical -> + erlang:setelement(3, Pr, I); + + aerodynamic -> + erlang:setelement(4, Pr, I); + + shiny -> + erlang:setelement(5, Pr, I) + end. + +-spec evaluate_rules_on_range( + part_range(), + list(rule()), + gleam@dict:dict(binary(), list(rule())) +) -> integer(). +evaluate_rules_on_range(Pr, Rules, Workflow) -> + case Rules of + [{just, accept} | _] -> + all_in_range(Pr); + + [{just, reject} | _] -> + 0; + + [{just, {send_to, Name}} | _] -> + evaluate_workflow_on_range(Pr, Name, Workflow); + + [{'if', Rating, Comparison, T, Action} | Rest] -> + Mod_i = get_partrange(Pr, Rating), + case Comparison of + lt -> + split_range( + update_partrange( + Pr, + Rating, + {interval, erlang:element(2, Mod_i), T - 1} + ), + Action, + update_partrange( + Pr, + Rating, + {interval, T, erlang:element(3, Mod_i)} + ), + Rest, + Workflow + ); + + _ -> + split_range( + update_partrange( + Pr, + Rating, + {interval, T + 1, erlang:element(3, Mod_i)} + ), + Action, + update_partrange( + Pr, + Rating, + {interval, erlang:element(2, Mod_i), T} + ), + Rest, + Workflow + ) + end; + + [] -> + erlang:error(#{gleam_error => panic, + message => <<"panic expression evaluated"/utf8>>, + module => <<"day19/solve"/utf8>>, + function => <<"evaluate_rules_on_range"/utf8>>, + line => 225}) + end. + +-spec evaluate_workflow_on_range( + part_range(), + binary(), + gleam@dict:dict(binary(), list(rule())) +) -> integer(). +evaluate_workflow_on_range(Pr, Name, Workflow) -> + _assert_subject = gleam@dict:get(Workflow, Name), + {ok, Rules} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day19/solve"/utf8>>, + function => <<"evaluate_workflow_on_range"/utf8>>, + line => 191}) + end, + evaluate_rules_on_range(Pr, Rules, Workflow). + +-spec part2(binary()) -> binary(). +part2(Input) -> + _assert_subject = gleam@string:split_once(Input, <<"\n\n"/utf8>>), + {ok, {Workflows_str, _}} = case _assert_subject of + {ok, {_, _}} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day19/solve"/utf8>>, + function => <<"part2"/utf8>>, + line => 176}) + end, + Workflow = parse_workflow(Workflows_str), + Start = {interval, 1, 4000}, + _pipe = {part_range, Start, Start, Start, Start}, + _pipe@1 = evaluate_workflow_on_range(_pipe, <<"in"/utf8>>, Workflow), + gleam@string:inspect(_pipe@1). + +-spec split_range( + part_range(), + action(), + part_range(), + list(rule()), + gleam@dict:dict(binary(), list(rule())) +) -> integer(). +split_range(Keep, Action, Pass, Rest, Workflow) -> + gleam@int:add( + evaluate_rules_on_range(Keep, [{just, Action}], Workflow), + evaluate_rules_on_range(Pass, Rest, Workflow) + ). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day19/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 243}) + end, + _assert_subject@1 = adglent:get_input(<<"19"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day19/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 244}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache Binary files differnew file mode 100644 index 0000000..67b16ce --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache_meta Binary files differnew file mode 100644 index 0000000..54af03d --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.erl new file mode 100644 index 0000000..8c7ab53 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.erl @@ -0,0 +1,50 @@ +-module(day1@day1_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"1abc2 +pqr3stu8vwx +a1b2c3d4e5f +treb7uchet"/utf8>>, + <<"142"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"1abc2 +pqr3stu8vwx +a1b2c3d4e5f +treb7uchet"/utf8>>, + <<"142"/utf8>>}], + fun(Example) -> _pipe@1 = day1@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [{example, + <<"two1nine +eightwothree +abcone2threexyz +xtwone3four +4nineeightseven2 +zoneight234 +7pqrstsixteen"/utf8>>, + <<"281"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"two1nine +eightwothree +abcone2threexyz +xtwone3four +4nineeightseven2 +zoneight234 +7pqrstsixteen"/utf8>>, + <<"281"/utf8>>}], + fun(Example) -> _pipe@1 = day1@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.cache Binary files differnew file mode 100644 index 0000000..ea9b785 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.cache_meta Binary files differnew file mode 100644 index 0000000..8291feb --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.erl new file mode 100644 index 0000000..15dd24e --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.erl @@ -0,0 +1,118 @@ +-module(day1@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). + +-spec part1(binary()) -> binary(). +part1(Input) -> + _assert_subject = gleam@regex:from_string(<<"[1-9]"/utf8>>), + {ok, Re} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day1/solve"/utf8>>, + function => <<"part1"/utf8>>, + line => 9}) + end, + _pipe = Input, + _pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>), + _pipe@2 = gleam@list:fold( + _pipe@1, + 0, + fun(Acc, S) -> + Matches = gleam@regex:scan(Re, S), + _assert_subject@1 = gleam@list:first(Matches), + {ok, {match, First, _}} = case _assert_subject@1 of + {ok, {match, _, _}} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day1/solve"/utf8>>, + function => <<"part1"/utf8>>, + line => 18}) + end, + _assert_subject@2 = gleam@list:last(Matches), + {ok, {match, Last, _}} = case _assert_subject@2 of + {ok, {match, _, _}} -> _assert_subject@2; + _assert_fail@2 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@2, + module => <<"day1/solve"/utf8>>, + function => <<"part1"/utf8>>, + line => 19}) + end, + _assert_subject@3 = gleam@int:parse(<<First/binary, Last/binary>>), + {ok, I} = case _assert_subject@3 of + {ok, _} -> _assert_subject@3; + _assert_fail@3 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@3, + module => <<"day1/solve"/utf8>>, + function => <<"part1"/utf8>>, + line => 20}) + end, + Acc + I + end + ), + gleam@string:inspect(_pipe@2). + +-spec part2(binary()) -> binary(). +part2(Input) -> + _pipe = gleam@list:fold( + [{<<"one"/utf8>>, <<"o1e"/utf8>>}, + {<<"two"/utf8>>, <<"t2o"/utf8>>}, + {<<"three"/utf8>>, <<"t3e"/utf8>>}, + {<<"four"/utf8>>, <<"4"/utf8>>}, + {<<"five"/utf8>>, <<"5e"/utf8>>}, + {<<"six"/utf8>>, <<"6"/utf8>>}, + {<<"seven"/utf8>>, <<"7n"/utf8>>}, + {<<"eight"/utf8>>, <<"e8t"/utf8>>}, + {<<"nine"/utf8>>, <<"n9e"/utf8>>}], + Input, + fun(Acc, Sub) -> + {From, To} = Sub, + gleam@string:replace(Acc, From, To) + end + ), + part1(_pipe). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day1/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 52}) + end, + _assert_subject@1 = adglent:get_input(<<"1"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day1/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 53}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache Binary files differnew file mode 100644 index 0000000..7b0c4ff --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache_meta Binary files differnew file mode 100644 index 0000000..684b2f3 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.erl new file mode 100644 index 0000000..145fc1c --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.erl @@ -0,0 +1,52 @@ +-module(day20@day20_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"broadcaster -> a, b, c +%a -> b +%b -> c +%c -> inv +&inv -> a"/utf8>>, + <<"32000000"/utf8>>}, + {example, + <<"broadcaster -> a +%a -> inv, con +&inv -> b +%b -> con +&con -> output +output -> "/utf8>>, + <<"11687500"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"broadcaster -> a, b, c +%a -> b +%b -> c +%c -> inv +&inv -> a"/utf8>>, + <<"32000000"/utf8>>}, + {example, + <<"broadcaster -> a +%a -> inv, con +&inv -> b +%b -> con +&con -> output +output -> "/utf8>>, + <<"11687500"/utf8>>}], + fun(Example) -> _pipe@1 = day20@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [], + fun(Example) -> _pipe@1 = day20@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.cache Binary files differnew file mode 100644 index 0000000..74900a3 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.cache_meta Binary files differnew file mode 100644 index 0000000..e37bfb8 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.erl new file mode 100644 index 0000000..a4442a0 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.erl @@ -0,0 +1,237 @@ +-module(day20@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). +-export_type([node_/0, tone/0, power/0, tone_pitch/0]). + +-type node_() :: {broadcaster, list(binary())} | + {flipflop, list(binary()), power()} | + {conjunction, list(binary()), gleam@dict:dict(binary(), tone_pitch())} | + {ground, list(binary())}. + +-type tone() :: {tone, binary(), binary(), tone_pitch()}. + +-type power() :: on | off. + +-type tone_pitch() :: low | high. + +-spec flip_power(power()) -> power(). +flip_power(P) -> + case P of + on -> + off; + + off -> + on + end. + +-spec flip_flop_pitch(power()) -> tone_pitch(). +flip_flop_pitch(P) -> + case P of + off -> + high; + + on -> + low + end. + +-spec parse_node(binary()) -> {binary(), node_()}. +parse_node(Input) -> + _assert_subject = gleam@string:split(Input, <<" -> "/utf8>>), + [Full_name, Children_str] = case _assert_subject of + [_, _] -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day20/solve"/utf8>>, + function => <<"parse_node"/utf8>>, + line => 45}) + end, + Children = gleam@string:split(Children_str, <<", "/utf8>>), + case Full_name of + <<"%"/utf8, Name/binary>> -> + {Name, {flipflop, Children, off}}; + + <<"&"/utf8, Name@1/binary>> -> + {Name@1, {conjunction, Children, gleam@dict:new()}}; + + <<"broadcaster"/utf8>> -> + {<<"broadcaster"/utf8>>, {broadcaster, Children}}; + + Name@2 -> + {Name@2, {ground, []}} + end. + +-spec to_initial_state(list({binary(), node_()})) -> gleam@dict:dict(binary(), node_()). +to_initial_state(Nodes) -> + Node_dict = gleam@dict:from_list(Nodes), + Node_names = gleam@dict:keys(Node_dict), + gleam@dict:map_values(Node_dict, fun(Name, Node) -> case Node of + {conjunction, Chs, _} -> + _pipe = Node_names, + _pipe@1 = gleam@list:filter( + _pipe, + fun(N) -> + _assert_subject = gleam@dict:get(Node_dict, N), + {ok, Node@1} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day20/solve"/utf8>>, + function => <<"to_initial_state"/utf8>>, + line => 65}) + end, + gleam@list:contains(erlang:element(2, Node@1), Name) + end + ), + _pipe@2 = gleam@list:map( + _pipe@1, + fun(N@1) -> {N@1, low} end + ), + _pipe@3 = gleam@dict:from_list(_pipe@2), + (fun(Dict) -> {conjunction, Chs, Dict} end)(_pipe@3); + + Other -> + Other + end end). + +-spec press_button_once( + {gleam@dict:dict(binary(), node_()), integer(), integer()}, + gleam@queue:queue(tone()) +) -> {gleam@dict:dict(binary(), node_()), integer(), integer()}. +press_button_once(Initial, Queue) -> + {Nodes, High, Low} = Initial, + gleam@bool:guard( + gleam@queue:is_empty(Queue), + Initial, + fun() -> + _assert_subject = gleam@queue:pop_front(Queue), + {ok, {{tone, From_name, To_name, Pitch} = Tone, Rest}} = case _assert_subject of + {ok, {{tone, _, _, _}, _}} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day20/solve"/utf8>>, + function => <<"press_button_once"/utf8>>, + line => 81}) + end, + gleam@io:debug(Tone), + _assert_subject@1 = gleam@dict:get(Nodes, To_name), + {ok, To_node} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day20/solve"/utf8>>, + function => <<"press_button_once"/utf8>>, + line => 84}) + end, + case To_node of + {broadcaster, Children} -> + _pipe = gleam@list:fold( + Children, + Rest, + fun(Acc, C) -> + gleam@queue:push_back( + Acc, + {tone, To_name, C, Pitch} + ) + end + ), + press_button_once(Initial, _pipe); + + {conjunction, _, _} -> + press_button_once(Initial, Rest); + + {flipflop, _, _} when Pitch =:= high -> + press_button_once(Initial, Rest); + + {flipflop, Children@1, State} -> + Updated_nodes = gleam@dict:insert( + Nodes, + To_name, + {flipflop, Children@1, flip_power(State)} + ), + Updated_queue = gleam@list:fold( + Children@1, + Rest, + fun(Acc@1, C@1) -> + gleam@queue:push_back( + Acc@1, + {tone, To_name, C@1, flip_flop_pitch(State)} + ) + end + ), + press_button_once({Updated_nodes, 0, 0}, Updated_queue); + + {ground, _} -> + press_button_once(Initial, Rest) + end + end + ). + +-spec part1(binary()) -> binary(). +part1(Input) -> + Initial_state = begin + _pipe = Input, + _pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>), + _pipe@2 = gleam@list:map(_pipe@1, fun parse_node/1), + to_initial_state(_pipe@2) + end, + press_button_once( + {Initial_state, 0, 1}, + begin + _pipe@3 = [{tone, <<"button"/utf8>>, <<"broadcaster"/utf8>>, low}], + gleam@queue:from_list(_pipe@3) + end + ), + <<"1"/utf8>>. + +-spec part2(binary()) -> any(). +part2(Input) -> + erlang:error(#{gleam_error => todo, + message => <<"Implement solution to part 2"/utf8>>, + module => <<"day20/solve"/utf8>>, + function => <<"part2"/utf8>>, + line => 130}). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day20/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 134}) + end, + _assert_subject@1 = adglent:get_input(<<"20"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day20/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 135}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache Binary files differnew file mode 100644 index 0000000..8014a5c --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache_meta Binary files differnew file mode 100644 index 0000000..7f44851 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.erl new file mode 100644 index 0000000..8795f58 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.erl @@ -0,0 +1,54 @@ +-module(day2@day2_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red +Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red +Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green"/utf8>>, + 8}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red +Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red +Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green"/utf8>>, + 8}], + fun(Example) -> _pipe@1 = day2@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [{example, + <<"Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red +Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red +Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green"/utf8>>, + 2286}, + {example, + <<"Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green"/utf8>>, + 48}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red +Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red +Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green"/utf8>>, + 2286}, + {example, + <<"Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green"/utf8>>, + 48}], + fun(Example) -> _pipe@1 = day2@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.cache Binary files differnew file mode 100644 index 0000000..7533395 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.cache_meta Binary files differnew file mode 100644 index 0000000..237d90e --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.erl new file mode 100644 index 0000000..0cd8105 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.erl @@ -0,0 +1,166 @@ +-module(day2@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). +-export_type([game/0]). + +-type game() :: {game, integer(), integer(), integer()}. + +-spec parse(binary()) -> list(list(game())). +parse(Input) -> + gleam@list:map( + gleam@string:split(Input, <<"\n"/utf8>>), + fun(Line) -> + _assert_subject = gleam@string:split(Line, <<": "/utf8>>), + [_, Rounds] = case _assert_subject of + [_, _] -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day2/solve"/utf8>>, + function => <<"parse"/utf8>>, + line => 13}) + end, + gleam@list:map( + gleam@string:split(Rounds, <<"; "/utf8>>), + fun(Match) -> + gleam@list:fold( + gleam@string:split(Match, <<", "/utf8>>), + {game, 0, 0, 0}, + fun(Acc, Draw) -> + _assert_subject@1 = gleam@string:split_once( + Draw, + <<" "/utf8>> + ), + {ok, {N_str, Color}} = case _assert_subject@1 of + {ok, {_, _}} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day2/solve"/utf8>>, + function => <<"parse"/utf8>>, + line => 19}) + end, + _assert_subject@2 = gleam@int:parse(N_str), + {ok, N} = case _assert_subject@2 of + {ok, _} -> _assert_subject@2; + _assert_fail@2 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@2, + module => <<"day2/solve"/utf8>>, + function => <<"parse"/utf8>>, + line => 20}) + end, + case Color of + <<"red"/utf8>> -> + erlang:setelement(2, Acc, N); + + <<"blue"/utf8>> -> + erlang:setelement(3, Acc, N); + + <<"green"/utf8>> -> + erlang:setelement(4, Acc, N); + + _ -> + erlang:error(#{gleam_error => panic, + message => <<"unrecognized color"/utf8>>, + module => <<"day2/solve"/utf8>>, + function => <<"parse"/utf8>>, + line => 25}) + end + end + ) + end + ) + end + ). + +-spec part1(binary()) -> integer(). +part1(Input) -> + gleam@list:index_fold( + parse(Input), + 0, + fun(Acc, Game, I) -> + case gleam@list:any( + Game, + fun(M) -> + ((erlang:element(2, M) > 12) orelse (erlang:element(4, M) > 13)) + orelse (erlang:element(3, M) > 14) + end + ) of + false -> + (Acc + I) + 1; + + true -> + Acc + end + end + ). + +-spec part2(binary()) -> integer(). +part2(Input) -> + _pipe = (gleam@list:map( + parse(Input), + fun(Game) -> + gleam@list:fold( + Game, + {game, 0, 0, 0}, + fun(Acc, Match) -> + {game, Red, Blue, Green} = Match, + {game, + gleam@int:max(Red, erlang:element(2, Acc)), + gleam@int:max(Blue, erlang:element(3, Acc)), + gleam@int:max(Green, erlang:element(4, Acc))} + end + ) + end + )), + gleam@list:fold( + _pipe, + 0, + fun(Acc@1, G) -> + Acc@1 + ((erlang:element(2, G) * erlang:element(3, G)) * erlang:element( + 4, + G + )) + end + ). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day2/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 55}) + end, + _assert_subject@1 = adglent:get_input(<<"2"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day2/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 56}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache Binary files differnew file mode 100644 index 0000000..a3b1377 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache_meta Binary files differnew file mode 100644 index 0000000..f603e6b --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.erl new file mode 100644 index 0000000..31de387 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.erl @@ -0,0 +1,68 @@ +-module(day3@day3_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"467..114.. +...*...... +..35..633. +......#... +617*...... +.....+.58. +..592..... +......755. +...$.*.... +.664.598.."/utf8>>, + 4361}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"467..114.. +...*...... +..35..633. +......#... +617*...... +.....+.58. +..592..... +......755. +...$.*.... +.664.598.."/utf8>>, + 4361}], + fun(Example) -> _pipe@1 = day3@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [{example, + <<"467..114.. +...*...... +..35..633. +......#... +617*...... +.....+.58. +..592..... +......755. +...$.*.... +.664.598.."/utf8>>, + 467835}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"467..114.. +...*...... +..35..633. +......#... +617*...... +.....+.58. +..592..... +......755. +...$.*.... +.664.598.."/utf8>>, + 467835}], + fun(Example) -> _pipe@1 = day3@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.cache Binary files differnew file mode 100644 index 0000000..13bc7af --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.cache_meta Binary files differnew file mode 100644 index 0000000..7961cc1 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.erl new file mode 100644 index 0000000..d4df3d6 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.erl @@ -0,0 +1,254 @@ +-module(day3@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). +-export_type([coord/0, symbol_kind/0, symbol/0, cell/0, part/0]). + +-type coord() :: {coord, integer(), integer()}. + +-type symbol_kind() :: gear | something_else. + +-type symbol() :: {number, integer()} | {symbol, symbol_kind()} | empty. + +-type cell() :: {cell, coord(), symbol()}. + +-type part() :: {part, list(coord()), integer()}. + +-spec to_symbol(binary()) -> symbol(). +to_symbol(C) -> + case {gleam@int:parse(C), C} of + {{ok, N}, _} -> + {number, N}; + + {_, <<"."/utf8>>} -> + empty; + + {_, <<"*"/utf8>>} -> + {symbol, gear}; + + {_, _} -> + {symbol, something_else} + end. + +-spec to_board(binary()) -> gleam@dict:dict(coord(), symbol()). +to_board(Input) -> + _pipe = (gleam@list:index_map( + gleam@string:split(Input, <<"\n"/utf8>>), + fun(Y, R) -> + gleam@list:index_map( + gleam@string:to_graphemes(R), + fun(X, C) -> {{coord, X, Y}, to_symbol(C)} end + ) + end + )), + _pipe@1 = gleam@list:flatten(_pipe), + gleam@dict:from_list(_pipe@1). + +-spec cell_compare(cell(), cell()) -> gleam@order:order(). +cell_compare(A, B) -> + case gleam@int:compare( + erlang:element(3, erlang:element(2, A)), + erlang:element(3, erlang:element(2, B)) + ) of + eq -> + gleam@int:compare( + erlang:element(2, erlang:element(2, A)), + erlang:element(2, erlang:element(2, B)) + ); + + Other -> + Other + end. + +-spec find_all_part_digits(gleam@dict:dict(coord(), symbol())) -> list(cell()). +find_all_part_digits(B) -> + _pipe = B, + _pipe@1 = gleam@dict:filter(_pipe, fun(_, V) -> case V of + {number, _} -> + true; + + _ -> + false + end end), + _pipe@2 = gleam@dict:to_list(_pipe@1), + _pipe@3 = gleam@list:map( + _pipe@2, + fun(Tup) -> {cell, erlang:element(1, Tup), erlang:element(2, Tup)} end + ), + gleam@list:sort(_pipe@3, fun cell_compare/2). + +-spec do_parts(list(cell()), list(part())) -> list(part()). +do_parts(Cells, Parts) -> + case Cells of + [] -> + Parts; + + [{cell, Next, {number, N}} | T] -> + case Parts of + [] -> + do_parts(T, [{part, [Next], N} | Parts]); + + [{part, [Prev | _] = Coords, N0} | Rest_parts] -> + case {(erlang:element(2, Next) - erlang:element(2, Prev)), + (erlang:element(3, Next) - erlang:element(3, Prev))} of + {1, 0} -> + do_parts( + T, + [{part, [Next | Coords], (N0 * 10) + N} | + Rest_parts] + ); + + {_, _} -> + do_parts(T, [{part, [Next], N} | Parts]) + end; + + _ -> + erlang:error(#{gleam_error => panic, + message => <<"panic expression evaluated"/utf8>>, + module => <<"day3/solve"/utf8>>, + function => <<"do_parts"/utf8>>, + line => 90}) + end; + + _ -> + erlang:error(#{gleam_error => panic, + message => <<"panic expression evaluated"/utf8>>, + module => <<"day3/solve"/utf8>>, + function => <<"do_parts"/utf8>>, + line => 93}) + end. + +-spec to_parts(list(cell())) -> list(part()). +to_parts(Cells) -> + do_parts(Cells, []). + +-spec all_neighbors(coord()) -> list(coord()). +all_neighbors(C) -> + gleam@list:flat_map( + [-1, 0, 1], + fun(Dx) -> gleam@list:filter_map([-1, 0, 1], fun(Dy) -> case {Dx, Dy} of + {0, 0} -> + {error, nil}; + + {_, _} -> + {ok, + {coord, + erlang:element(2, C) + Dx, + erlang:element(3, C) + Dy}} + end end) end + ). + +-spec sum_valid_parts(integer(), part(), gleam@dict:dict(coord(), symbol())) -> integer(). +sum_valid_parts(Acc, Part, Board) -> + Neighbors = begin + _pipe = erlang:element(2, Part), + _pipe@1 = gleam@list:flat_map(_pipe, fun all_neighbors/1), + gleam@list:unique(_pipe@1) + end, + Sym = [{ok, {symbol, gear}}, {ok, {symbol, something_else}}], + case gleam@list:any( + Neighbors, + fun(C) -> gleam@list:contains(Sym, gleam@dict:get(Board, C)) end + ) of + true -> + Acc + erlang:element(3, Part); + + false -> + Acc + end. + +-spec part1(binary()) -> integer(). +part1(Input) -> + Board = to_board(Input), + _pipe = Board, + _pipe@1 = find_all_part_digits(_pipe), + _pipe@2 = to_parts(_pipe@1), + gleam@list:fold( + _pipe@2, + 0, + fun(Acc, P) -> sum_valid_parts(Acc, P, Board) end + ). + +-spec to_part_with_neighbors(part()) -> part(). +to_part_with_neighbors(Part) -> + _pipe = erlang:element(2, Part), + _pipe@1 = gleam@list:flat_map(_pipe, fun all_neighbors/1), + _pipe@2 = gleam@list:unique(_pipe@1), + {part, _pipe@2, erlang:element(3, Part)}. + +-spec find_part_numbers_near_gear(coord(), list(part())) -> list(integer()). +find_part_numbers_near_gear(Gear, Parts) -> + gleam@list:filter_map( + Parts, + fun(Part) -> case gleam@list:contains(erlang:element(2, Part), Gear) of + true -> + {ok, erlang:element(3, Part)}; + + false -> + {error, nil} + end end + ). + +-spec to_sum_of_gear_ratios(list(list(integer()))) -> integer(). +to_sum_of_gear_ratios(Adjacent_parts) -> + gleam@list:fold(Adjacent_parts, 0, fun(Acc, Ps) -> case Ps of + [P1, P2] -> + Acc + (P1 * P2); + + _ -> + Acc + end end). + +-spec part2(binary()) -> integer(). +part2(Input) -> + Board = to_board(Input), + Parts = begin + _pipe = Board, + _pipe@1 = find_all_part_digits(_pipe), + _pipe@2 = to_parts(_pipe@1), + gleam@list:map(_pipe@2, fun to_part_with_neighbors/1) + end, + _pipe@3 = Board, + _pipe@4 = gleam@dict:filter(_pipe@3, fun(_, V) -> V =:= {symbol, gear} end), + _pipe@5 = gleam@dict:keys(_pipe@4), + _pipe@6 = gleam@list:map( + _pipe@5, + fun(_capture) -> find_part_numbers_near_gear(_capture, Parts) end + ), + to_sum_of_gear_ratios(_pipe@6). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day3/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 168}) + end, + _assert_subject@1 = adglent:get_input(<<"3"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day3/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 169}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache Binary files differnew file mode 100644 index 0000000..0e2ffd5 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache_meta Binary files differnew file mode 100644 index 0000000..5874661 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.erl new file mode 100644 index 0000000..6044cef --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.erl @@ -0,0 +1,52 @@ +-module(day4@day4_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53 +Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19 +Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1 +Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83 +Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36 +Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11"/utf8>>, + 13}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53 +Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19 +Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1 +Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83 +Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36 +Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11"/utf8>>, + 13}], + fun(Example) -> _pipe@1 = day4@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [{example, + <<"Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53 +Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19 +Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1 +Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83 +Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36 +Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11"/utf8>>, + 30}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53 +Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19 +Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1 +Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83 +Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36 +Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11"/utf8>>, + 30}], + fun(Example) -> _pipe@1 = day4@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.cache Binary files differnew file mode 100644 index 0000000..b49cc67 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.cache_meta Binary files differnew file mode 100644 index 0000000..e4e4c35 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.erl new file mode 100644 index 0000000..8feb45a --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.erl @@ -0,0 +1,169 @@ +-module(day4@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). +-export_type([card/0]). + +-type card() :: {card, integer(), integer()}. + +-spec numbers_to_set(binary()) -> gleam@set:set(integer()). +numbers_to_set(Str) -> + _pipe = Str, + _pipe@1 = gleam@string:split(_pipe, <<" "/utf8>>), + _pipe@2 = gleam@list:map(_pipe@1, fun gleam@int:parse/1), + _pipe@3 = gleam@result:values(_pipe@2), + gleam@set:from_list(_pipe@3). + +-spec parse_card(binary()) -> card(). +parse_card(Card) -> + _assert_subject = gleam@string:split_once(Card, <<": "/utf8>>), + {ok, {<<"Card"/utf8, N_str/binary>>, Rest}} = case _assert_subject of + {ok, {<<"Card"/utf8, _/binary>>, _}} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day4/solve"/utf8>>, + function => <<"parse_card"/utf8>>, + line => 25}) + end, + _assert_subject@1 = gleam@string:split_once(Rest, <<" | "/utf8>>), + {ok, {Winning_str, Has_str}} = case _assert_subject@1 of + {ok, {_, _}} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day4/solve"/utf8>>, + function => <<"parse_card"/utf8>>, + line => 26}) + end, + _assert_subject@2 = gleam@int:parse(gleam@string:trim(N_str)), + {ok, N} = case _assert_subject@2 of + {ok, _} -> _assert_subject@2; + _assert_fail@2 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@2, + module => <<"day4/solve"/utf8>>, + function => <<"parse_card"/utf8>>, + line => 27}) + end, + Winning = numbers_to_set(Winning_str), + Has = numbers_to_set(Has_str), + Winners = gleam@set:size(gleam@set:intersection(Winning, Has)), + {card, N, Winners}. + +-spec win_points(integer()) -> integer(). +win_points(N) -> + gleam@bool:guard(N < 2, N, fun() -> 2 * win_points(N - 1) end). + +-spec part1(binary()) -> integer(). +part1(Input) -> + gleam@list:fold( + gleam@string:split(Input, <<"\n"/utf8>>), + 0, + fun(Acc, C) -> _pipe = C, + _pipe@1 = parse_card(_pipe), + _pipe@2 = (fun(C@1) -> win_points(erlang:element(3, C@1)) end)( + _pipe@1 + ), + gleam@int:add(_pipe@2, Acc) end + ). + +-spec update_counts(integer(), card(), gleam@dict:dict(integer(), integer())) -> gleam@dict:dict(integer(), integer()). +update_counts(N, Card, Count) -> + _assert_subject = gleam@dict:get(Count, erlang:element(2, Card)), + {ok, Bonus} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day4/solve"/utf8>>, + function => <<"update_counts"/utf8>>, + line => 65}) + end, + gleam@list:fold( + gleam@list:range( + erlang:element(2, Card) + 1, + erlang:element(2, Card) + N + ), + Count, + fun(Acc, N@1) -> gleam@dict:update(Acc, N@1, fun(C) -> case C of + {some, I} -> + I + Bonus; + + none -> + erlang:error(#{gleam_error => panic, + message => <<"won a card that doesn't exist in the card pile"/utf8>>, + module => <<"day4/solve"/utf8>>, + function => <<"update_counts"/utf8>>, + line => 70}) + end end) end + ). + +-spec win_more_cards(list(binary()), gleam@dict:dict(integer(), integer())) -> integer(). +win_more_cards(Cards, Count) -> + case Cards of + [] -> + _pipe = Count, + _pipe@1 = gleam@dict:values(_pipe), + gleam@int:sum(_pipe@1); + + [Raw_card | Rest] -> + Card = parse_card(Raw_card), + case erlang:element(3, Card) of + 0 -> + win_more_cards(Rest, Count); + + N -> + win_more_cards(Rest, update_counts(N, Card, Count)) + end + end. + +-spec part2(binary()) -> integer(). +part2(Input) -> + Cards = gleam@string:split(Input, <<"\n"/utf8>>), + Count = begin + _pipe = gleam@list:range(1, gleam@list:length(Cards)), + _pipe@1 = gleam@list:map(_pipe, fun(N) -> {N, 1} end), + gleam@dict:from_list(_pipe@1) + end, + win_more_cards(Cards, Count). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day4/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 86}) + end, + _assert_subject@1 = adglent:get_input(<<"4"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day4/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 87}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache Binary files differnew file mode 100644 index 0000000..0b18c75 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache_meta Binary files differnew file mode 100644 index 0000000..4224316 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.erl new file mode 100644 index 0000000..c3fe14d --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.erl @@ -0,0 +1,160 @@ +-module(day5@day5_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"seeds: 79 14 55 13 + +seed-to-soil map: +50 98 2 +52 50 48 + +soil-to-fertilizer map: +0 15 37 +37 52 2 +39 0 15 + +fertilizer-to-water map: +49 53 8 +0 11 42 +42 0 7 +57 7 4 + +water-to-light map: +88 18 7 +18 25 70 + +light-to-temperature map: +45 77 23 +81 45 19 +68 64 13 + +temperature-to-humidity map: +0 69 1 +1 0 69 + +humidity-to-location map: +60 56 37 +56 93 4"/utf8>>, + <<"35"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"seeds: 79 14 55 13 + +seed-to-soil map: +50 98 2 +52 50 48 + +soil-to-fertilizer map: +0 15 37 +37 52 2 +39 0 15 + +fertilizer-to-water map: +49 53 8 +0 11 42 +42 0 7 +57 7 4 + +water-to-light map: +88 18 7 +18 25 70 + +light-to-temperature map: +45 77 23 +81 45 19 +68 64 13 + +temperature-to-humidity map: +0 69 1 +1 0 69 + +humidity-to-location map: +60 56 37 +56 93 4"/utf8>>, + <<"35"/utf8>>}], + fun(Example) -> _pipe@1 = day5@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [{example, + <<"seeds: 79 14 55 13 + +seed-to-soil map: +50 98 2 +52 50 48 + +soil-to-fertilizer map: +0 15 37 +37 52 2 +39 0 15 + +fertilizer-to-water map: +49 53 8 +0 11 42 +42 0 7 +57 7 4 + +water-to-light map: +88 18 7 +18 25 70 + +light-to-temperature map: +45 77 23 +81 45 19 +68 64 13 + +temperature-to-humidity map: +0 69 1 +1 0 69 + +humidity-to-location map: +60 56 37 +56 93 4"/utf8>>, + <<"46"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"seeds: 79 14 55 13 + +seed-to-soil map: +50 98 2 +52 50 48 + +soil-to-fertilizer map: +0 15 37 +37 52 2 +39 0 15 + +fertilizer-to-water map: +49 53 8 +0 11 42 +42 0 7 +57 7 4 + +water-to-light map: +88 18 7 +18 25 70 + +light-to-temperature map: +45 77 23 +81 45 19 +68 64 13 + +temperature-to-humidity map: +0 69 1 +1 0 69 + +humidity-to-location map: +60 56 37 +56 93 4"/utf8>>, + <<"46"/utf8>>}], + fun(Example) -> _pipe@1 = day5@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.cache Binary files differnew file mode 100644 index 0000000..b5e7372 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.cache_meta Binary files differnew file mode 100644 index 0000000..8a8b5b8 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.erl new file mode 100644 index 0000000..f47ab25 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.erl @@ -0,0 +1,269 @@ +-module(day5@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). +-export_type([almanac/0, mapping_range/0, seed_range/0]). + +-type almanac() :: {almanac, list(integer()), list(list(mapping_range()))}. + +-type mapping_range() :: {m_range, integer(), integer(), integer()}. + +-type seed_range() :: {s_range, integer(), integer()}. + +-spec string_to_int_list(binary()) -> list(integer()). +string_to_int_list(Str) -> + _pipe = Str, + _pipe@1 = gleam@string:split(_pipe, <<" "/utf8>>), + _pipe@2 = gleam@list:map(_pipe@1, fun gleam@int:parse/1), + gleam@result:values(_pipe@2). + +-spec parse_mrange(binary()) -> mapping_range(). +parse_mrange(Str) -> + _assert_subject = string_to_int_list(Str), + [Destination, Source, Range_width] = case _assert_subject of + [_, _, _] -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day5/solve"/utf8>>, + function => <<"parse_mrange"/utf8>>, + line => 55}) + end, + {m_range, Source, (Source + Range_width) - 1, Destination - Source}. + +-spec parse_mapper(list(binary())) -> list(mapping_range()). +parse_mapper(Strs) -> + [_ | Raw_ranges] = case Strs of + [_ | _] -> Strs; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day5/solve"/utf8>>, + function => <<"parse_mapper"/utf8>>, + line => 49}) + end, + _pipe = gleam@list:map(Raw_ranges, fun parse_mrange/1), + gleam@list:sort( + _pipe, + fun(A, B) -> + gleam@int:compare(erlang:element(2, A), erlang:element(2, B)) + end + ). + +-spec parse_input(binary()) -> almanac(). +parse_input(Input) -> + _assert_subject = gleam@string:split(Input, <<"\n\n"/utf8>>), + [<<"seeds: "/utf8, Raw_seeds/binary>> | Raw_mappers] = case _assert_subject of + [<<"seeds: "/utf8, _/binary>> | _] -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day5/solve"/utf8>>, + function => <<"parse_input"/utf8>>, + line => 29}) + end, + Seeds = string_to_int_list(Raw_seeds), + Mappers = gleam@list:map( + Raw_mappers, + gleam@function:compose( + fun(_capture) -> gleam@string:split(_capture, <<"\n"/utf8>>) end, + fun parse_mapper/1 + ) + ), + {almanac, Seeds, Mappers}. + +-spec correspond(integer(), list(mapping_range())) -> integer(). +correspond(N, Mapper) -> + gleam@list:fold_until( + Mapper, + N, + fun(Acc, Mrange) -> + case (erlang:element(2, Mrange) =< Acc) andalso (Acc =< erlang:element( + 3, + Mrange + )) of + true -> + {stop, Acc + erlang:element(4, Mrange)}; + + false -> + {continue, Acc} + end + end + ). + +-spec part1(binary()) -> binary(). +part1(Input) -> + {almanac, Seeds, Mappers} = parse_input(Input), + _pipe = gleam@list:map( + Seeds, + fun(_capture) -> + gleam@list:fold(Mappers, _capture, fun correspond/2) + end + ), + _pipe@1 = gleam@list:reduce(_pipe, fun gleam@int:min/2), + _pipe@2 = gleam@result:unwrap(_pipe@1, 0), + gleam@string:inspect(_pipe@2). + +-spec transform_range(seed_range(), mapping_range()) -> seed_range(). +transform_range(R, Mapper) -> + {s_range, + erlang:element(2, R) + erlang:element(4, Mapper), + erlang:element(3, R) + erlang:element(4, Mapper)}. + +-spec do_remap_range(seed_range(), list(mapping_range()), list(seed_range())) -> list(seed_range()). +do_remap_range(R, Mapper, Acc) -> + case Mapper of + [] -> + [R | Acc]; + + [M | _] when erlang:element(3, R) < erlang:element(2, M) -> + [R | Acc]; + + [M@1 | Ms] when erlang:element(2, R) > erlang:element(3, M@1) -> + do_remap_range(R, Ms, Acc); + + [M@2 | _] when (erlang:element(2, R) >= erlang:element(2, M@2)) andalso (erlang:element( + 3, + R + ) =< erlang:element(3, M@2)) -> + [transform_range(R, M@2) | Acc]; + + [M@3 | _] when (erlang:element(2, R) < erlang:element(2, M@3)) andalso (erlang:element( + 3, + R + ) =< erlang:element(3, M@3)) -> + [{s_range, erlang:element(2, R), erlang:element(2, M@3) - 1}, + transform_range( + {s_range, erlang:element(2, M@3), erlang:element(3, R)}, + M@3 + ) | + Acc]; + + [M@4 | Ms@1] when (erlang:element(2, R) >= erlang:element(2, M@4)) andalso (erlang:element( + 3, + R + ) > erlang:element(3, M@4)) -> + do_remap_range( + {s_range, erlang:element(3, M@4) + 1, erlang:element(3, R)}, + Ms@1, + [transform_range( + {s_range, erlang:element(2, R), erlang:element(3, M@4)}, + M@4 + ) | + Acc] + ); + + [M@5 | Ms@2] -> + do_remap_range( + {s_range, erlang:element(3, M@5) + 1, erlang:element(3, R)}, + Ms@2, + [{s_range, erlang:element(2, R), erlang:element(2, M@5) - 1}, + transform_range( + {s_range, + erlang:element(2, M@5), + erlang:element(3, M@5)}, + M@5 + ) | + Acc] + ) + end. + +-spec remap_range(seed_range(), list(mapping_range())) -> list(seed_range()). +remap_range(R, Mapper) -> + do_remap_range(R, Mapper, []). + +-spec remap_all_seed_ranges(list(seed_range()), list(list(mapping_range()))) -> list(seed_range()). +remap_all_seed_ranges(Srs, Mappers) -> + case Mappers of + [] -> + Srs; + + [Mapper | Rest] -> + _pipe = gleam@list:flat_map( + Srs, + fun(_capture) -> remap_range(_capture, Mapper) end + ), + remap_all_seed_ranges(_pipe, Rest) + end. + +-spec part2(binary()) -> binary(). +part2(Input) -> + {almanac, Seeds, Mappers} = parse_input(Input), + _assert_subject = begin + _pipe = Seeds, + _pipe@1 = gleam@list:sized_chunk(_pipe, 2), + _pipe@3 = gleam@list:map( + _pipe@1, + fun(Chunk) -> + [Start, Length] = case Chunk of + [_, _] -> Chunk; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day5/solve"/utf8>>, + function => <<"part2"/utf8>>, + line => 87}) + end, + _pipe@2 = [{s_range, Start, (Start + Length) - 1}], + remap_all_seed_ranges(_pipe@2, Mappers) + end + ), + _pipe@4 = gleam@list:flatten(_pipe@3), + gleam@list:sort( + _pipe@4, + fun(A, B) -> + gleam@int:compare(erlang:element(2, A), erlang:element(2, B)) + end + ) + end, + [{s_range, Answer, _} | _] = case _assert_subject of + [{s_range, _, _} | _] -> _assert_subject; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day5/solve"/utf8>>, + function => <<"part2"/utf8>>, + line => 83}) + end, + gleam@string:inspect(Answer). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day5/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 155}) + end, + _assert_subject@1 = adglent:get_input(<<"5"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day5/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 156}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache Binary files differnew file mode 100644 index 0000000..ebca7b3 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache_meta Binary files differnew file mode 100644 index 0000000..f9fa286 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.erl new file mode 100644 index 0000000..a306363 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.erl @@ -0,0 +1,36 @@ +-module(day6@day6_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"Time: 7 15 30 +Distance: 9 40 200"/utf8>>, + <<"288"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"Time: 7 15 30 +Distance: 9 40 200"/utf8>>, + <<"288"/utf8>>}], + fun(Example) -> _pipe@1 = day6@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [{example, + <<"Time: 7 15 30 +Distance: 9 40 200"/utf8>>, + <<"71503"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"Time: 7 15 30 +Distance: 9 40 200"/utf8>>, + <<"71503"/utf8>>}], + fun(Example) -> _pipe@1 = day6@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.cache Binary files differnew file mode 100644 index 0000000..2fa1771 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.cache_meta Binary files differnew file mode 100644 index 0000000..a546033 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.erl new file mode 100644 index 0000000..86a8033 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.erl @@ -0,0 +1,131 @@ +-module(day6@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). +-export_type([race/0]). + +-type race() :: {race, integer(), integer()}. + +-spec parse_with_bad_kerning(binary()) -> list(race()). +parse_with_bad_kerning(Input) -> + _pipe = Input, + _pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>), + _pipe@5 = gleam@list:map(_pipe@1, fun(Str) -> _pipe@2 = Str, + _pipe@3 = gleam@string:split(_pipe@2, <<" "/utf8>>), + _pipe@4 = gleam@list:map(_pipe@3, fun gleam@int:parse/1), + gleam@result:values(_pipe@4) end), + _pipe@6 = gleam@list:transpose(_pipe@5), + gleam@list:map( + _pipe@6, + fun(Ns) -> + [T, D] = case Ns of + [_, _] -> Ns; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day6/solve"/utf8>>, + function => <<"parse_with_bad_kerning"/utf8>>, + line => 23}) + end, + {race, T, D} + end + ). + +-spec find_bound(race(), integer(), integer()) -> integer(). +find_bound(Race, Button_time, Step) -> + Travel_time = erlang:element(2, Race) - Button_time, + case (Button_time * Travel_time) > erlang:element(3, Race) of + true -> + Button_time; + + false -> + find_bound(Race, Button_time + Step, Step) + end. + +-spec lower_bound(race()) -> integer(). +lower_bound(Race) -> + find_bound(Race, 1, 1). + +-spec upper_bound(race()) -> integer(). +upper_bound(Race) -> + find_bound(Race, erlang:element(2, Race), -1). + +-spec part1(binary()) -> binary(). +part1(Input) -> + _pipe = (gleam@list:fold( + parse_with_bad_kerning(Input), + 1, + fun(Acc, Race) -> + Acc * ((upper_bound(Race) - lower_bound(Race)) + 1) + end + )), + gleam@string:inspect(_pipe). + +-spec parse_properly(binary()) -> list(integer()). +parse_properly(Input) -> + _pipe = Input, + _pipe@1 = gleam@string:replace(_pipe, <<" "/utf8>>, <<""/utf8>>), + _pipe@2 = gleam@string:split(_pipe@1, <<"\n"/utf8>>), + _pipe@3 = gleam@list:flat_map( + _pipe@2, + fun(_capture) -> gleam@string:split(_capture, <<":"/utf8>>) end + ), + _pipe@4 = gleam@list:map(_pipe@3, fun gleam@int:parse/1), + gleam@result:values(_pipe@4). + +-spec part2(binary()) -> binary(). +part2(Input) -> + _assert_subject = begin + _pipe = Input, + parse_properly(_pipe) + end, + [Time, Distance] = case _assert_subject of + [_, _] -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day6/solve"/utf8>>, + function => <<"part2"/utf8>>, + line => 62}) + end, + Race = {race, Time, Distance}, + _pipe@1 = (upper_bound(Race) - lower_bound(Race)) + 1, + gleam@string:inspect(_pipe@1). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day6/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 73}) + end, + _assert_subject@1 = adglent:get_input(<<"6"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day6/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 74}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache Binary files differnew file mode 100644 index 0000000..44b76c4 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache_meta Binary files differnew file mode 100644 index 0000000..416021b --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.erl new file mode 100644 index 0000000..917a57e --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.erl @@ -0,0 +1,48 @@ +-module(day7@day7_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"32T3K 765 +T55J5 684 +KK677 28 +KTJJT 220 +QQQJA 483"/utf8>>, + <<"6440"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"32T3K 765 +T55J5 684 +KK677 28 +KTJJT 220 +QQQJA 483"/utf8>>, + <<"6440"/utf8>>}], + fun(Example) -> _pipe@1 = day7@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [{example, + <<"32T3K 765 +T55J5 684 +KK677 28 +KTJJT 220 +QQQJA 483"/utf8>>, + <<"5905"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"32T3K 765 +T55J5 684 +KK677 28 +KTJJT 220 +QQQJA 483"/utf8>>, + <<"5905"/utf8>>}], + fun(Example) -> _pipe@1 = day7@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.cache Binary files differnew file mode 100644 index 0000000..5603a95 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.cache_meta Binary files differnew file mode 100644 index 0000000..c381778 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.erl new file mode 100644 index 0000000..7666e16 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.erl @@ -0,0 +1,242 @@ +-module(day7@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). +-export_type([hand/0]). + +-type hand() :: {hand, list(integer()), integer()}. + +-spec card_counts(hand()) -> list(integer()). +card_counts(Hand) -> + _pipe = erlang:element(2, Hand), + _pipe@1 = gleam@list:sort(_pipe, fun gleam@int:compare/2), + _pipe@2 = gleam@list:chunk(_pipe@1, fun gleam@function:identity/1), + _pipe@3 = gleam@list:map(_pipe@2, fun gleam@list:length/1), + gleam@list:sort(_pipe@3, fun gleam@int:compare/2). + +-spec classify_hand(hand()) -> integer(). +classify_hand(Hand) -> + case {gleam@list:length(gleam@list:unique(erlang:element(2, Hand))), + card_counts(Hand)} of + {1, _} -> + 8; + + {2, [1, 4]} -> + 7; + + {2, [2, 3]} -> + 6; + + {3, [1, 1, 3]} -> + 5; + + {3, [1, 2, 2]} -> + 4; + + {4, _} -> + 3; + + {5, _} -> + 2; + + {_, _} -> + 1 + end. + +-spec card_rank(binary()) -> integer(). +card_rank(Card) -> + case {gleam@int:parse(Card), Card} of + {{ok, N}, _} -> + N; + + {_, <<"A"/utf8>>} -> + 14; + + {_, <<"K"/utf8>>} -> + 13; + + {_, <<"Q"/utf8>>} -> + 12; + + {_, <<"J"/utf8>>} -> + 11; + + {_, <<"T"/utf8>>} -> + 10; + + {_, _} -> + 1 + end. + +-spec parse_hand(binary()) -> hand(). +parse_hand(Str) -> + _assert_subject = gleam@string:split(Str, <<" "/utf8>>), + [Cards, Wager] = case _assert_subject of + [_, _] -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day7/solve"/utf8>>, + function => <<"parse_hand"/utf8>>, + line => 19}) + end, + Cards@1 = begin + _pipe = gleam@string:to_graphemes(Cards), + gleam@list:map(_pipe, fun card_rank/1) + end, + _assert_subject@1 = gleam@int:parse(Wager), + {ok, Wager@1} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day7/solve"/utf8>>, + function => <<"parse_hand"/utf8>>, + line => 23}) + end, + {hand, Cards@1, Wager@1}. + +-spec compare_top_card(list(integer()), list(integer())) -> gleam@order:order(). +compare_top_card(Cards1, Cards2) -> + gleam@bool:guard( + (Cards1 =:= []) orelse (Cards2 =:= []), + eq, + fun() -> + [C1 | Rest1] = case Cards1 of + [_ | _] -> Cards1; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day7/solve"/utf8>>, + function => <<"compare_top_card"/utf8>>, + line => 70}) + end, + [C2 | Rest2] = case Cards2 of + [_ | _] -> Cards2; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day7/solve"/utf8>>, + function => <<"compare_top_card"/utf8>>, + line => 71}) + end, + case gleam@int:compare(C1, C2) of + eq -> + compare_top_card(Rest1, Rest2); + + Other -> + Other + end + end + ). + +-spec compare_hands(hand(), hand(), fun((hand()) -> integer())) -> gleam@order:order(). +compare_hands(Hand1, Hand2, Using) -> + case gleam@int:compare(Using(Hand1), Using(Hand2)) of + eq -> + compare_top_card(erlang:element(2, Hand1), erlang:element(2, Hand2)); + + Other -> + Other + end. + +-spec part(binary(), fun((hand(), hand()) -> gleam@order:order())) -> binary(). +part(Input, Comparator) -> + _pipe = Input, + _pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>), + _pipe@2 = gleam@list:map(_pipe@1, fun parse_hand/1), + _pipe@3 = gleam@list:sort(_pipe@2, Comparator), + _pipe@4 = gleam@list:index_map( + _pipe@3, + fun(I, H) -> (I + 1) * erlang:element(3, H) end + ), + _pipe@5 = gleam@int:sum(_pipe@4), + gleam@string:inspect(_pipe@5). + +-spec compare_without_wilds(hand(), hand()) -> gleam@order:order(). +compare_without_wilds(Hand1, Hand2) -> + compare_hands(Hand1, Hand2, fun classify_hand/1). + +-spec part1(binary()) -> binary(). +part1(Input) -> + part(Input, fun compare_without_wilds/2). + +-spec find_best_joker_substitution(hand()) -> hand(). +find_best_joker_substitution(Hand) -> + gleam@list:fold( + gleam@list:range(2, 14), + {hand, [], 0}, + fun(Acc, Card) -> + Subbed_cards = (gleam@list:map( + erlang:element(2, Hand), + fun(C) -> case C of + 1 -> + Card; + + Other -> + Other + end end + )), + Subbed_hand = erlang:setelement(2, Hand, Subbed_cards), + case compare_hands(Acc, Subbed_hand, fun classify_hand/1) of + lt -> + Subbed_hand; + + _ -> + Acc + end + end + ). + +-spec compare_hands_considering_jokers(hand(), hand()) -> gleam@order:order(). +compare_hands_considering_jokers(Hand1, Hand2) -> + compare_hands(Hand1, Hand2, fun(Hand) -> _pipe = Hand, + _pipe@1 = find_best_joker_substitution(_pipe), + classify_hand(_pipe@1) end). + +-spec part2(binary()) -> binary(). +part2(Input) -> + part( + gleam@string:replace(Input, <<"J"/utf8>>, <<"*"/utf8>>), + fun compare_hands_considering_jokers/2 + ). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day7/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 128}) + end, + _assert_subject@1 = adglent:get_input(<<"7"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day7/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 129}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache Binary files differnew file mode 100644 index 0000000..9a04fc8 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache_meta Binary files differnew file mode 100644 index 0000000..ec825d2 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.erl new file mode 100644 index 0000000..2da8521 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.erl @@ -0,0 +1,58 @@ +-module(day8@day8_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"LLR + +AAA = (BBB, BBB) +BBB = (AAA, ZZZ) +ZZZ = (ZZZ, ZZZ)"/utf8>>, + 6}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"LLR + +AAA = (BBB, BBB) +BBB = (AAA, ZZZ) +ZZZ = (ZZZ, ZZZ)"/utf8>>, + 6}], + fun(Example) -> _pipe@1 = day8@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [{example, + <<"LR + +11A = (11B, XXX) +11B = (XXX, 11Z) +11Z = (11B, XXX) +22A = (22B, XXX) +22B = (22C, 22C) +22C = (22Z, 22Z) +22Z = (22B, 22B) +XXX = (XXX, XXX)"/utf8>>, + 6}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"LR + +11A = (11B, XXX) +11B = (XXX, 11Z) +11Z = (11B, XXX) +22A = (22B, XXX) +22B = (22C, 22C) +22C = (22Z, 22Z) +22Z = (22B, 22B) +XXX = (XXX, XXX)"/utf8>>, + 6}], + fun(Example) -> _pipe@1 = day8@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.cache Binary files differnew file mode 100644 index 0000000..34f5889 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.cache_meta Binary files differnew file mode 100644 index 0000000..b8df5b2 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.erl new file mode 100644 index 0000000..6ac3b18 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.erl @@ -0,0 +1,179 @@ +-module(day8@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). +-export_type([paths/0]). + +-type paths() :: {paths, binary(), binary()}. + +-spec parse(binary()) -> {gleam@iterator:iterator(binary()), + gleam@dict:dict(binary(), paths())}. +parse(Input) -> + _assert_subject = gleam@string:split(Input, <<"\n\n"/utf8>>), + [Directions_str, Maze_str] = case _assert_subject of + [_, _] -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day8/solve"/utf8>>, + function => <<"parse"/utf8>>, + line => 20}) + end, + Directions = begin + _pipe = Directions_str, + _pipe@1 = gleam@string:to_graphemes(_pipe), + _pipe@2 = gleam@iterator:from_list(_pipe@1), + gleam@iterator:cycle(_pipe@2) + end, + _assert_subject@1 = gleam@regex:from_string( + <<"(...) = \\((...), (...)\\)"/utf8>> + ), + {ok, Re} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day8/solve"/utf8>>, + function => <<"parse"/utf8>>, + line => 28}) + end, + Maze = begin + _pipe@3 = Maze_str, + _pipe@4 = gleam@string:split(_pipe@3, <<"\n"/utf8>>), + _pipe@5 = gleam@list:map( + _pipe@4, + fun(Str) -> + _assert_subject@2 = gleam@regex:scan(Re, Str), + [{match, _, [{some, Name}, {some, Left}, {some, Right}]}] = case _assert_subject@2 of + [{match, _, [{some, _}, {some, _}, {some, _}]}] -> _assert_subject@2; + _assert_fail@2 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@2, + module => <<"day8/solve"/utf8>>, + function => <<"parse"/utf8>>, + line => 33}) + end, + {Name, {paths, Left, Right}} + end + ), + gleam@dict:from_list(_pipe@5) + end, + {Directions, Maze}. + +-spec to_next_step( + binary(), + binary(), + integer(), + gleam@iterator:iterator(binary()), + gleam@dict:dict(binary(), paths()) +) -> integer(). +to_next_step(Current, Stop_at, Count, Directions, Maze) -> + gleam@bool:guard( + gleam@string:ends_with(Current, Stop_at), + Count, + fun() -> + _assert_subject = gleam@iterator:step(Directions), + {next, Next_direction, Rest_directions} = case _assert_subject of + {next, _, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day8/solve"/utf8>>, + function => <<"to_next_step"/utf8>>, + line => 50}) + end, + _assert_subject@1 = gleam@dict:get(Maze, Current), + {ok, Paths} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day8/solve"/utf8>>, + function => <<"to_next_step"/utf8>>, + line => 51}) + end, + _pipe = case Next_direction of + <<"L"/utf8>> -> + erlang:element(2, Paths); + + <<"R"/utf8>> -> + erlang:element(3, Paths); + + _ -> + erlang:error(#{gleam_error => panic, + message => <<"bad direction"/utf8>>, + module => <<"day8/solve"/utf8>>, + function => <<"to_next_step"/utf8>>, + line => 55}) + end, + to_next_step(_pipe, Stop_at, Count + 1, Rest_directions, Maze) + end + ). + +-spec part1(binary()) -> integer(). +part1(Input) -> + {Directions, Maze} = parse(Input), + to_next_step(<<"AAA"/utf8>>, <<"ZZZ"/utf8>>, 0, Directions, Maze). + +-spec part2(binary()) -> integer(). +part2(Input) -> + {Directions, Maze} = parse(Input), + gleam@list:fold( + gleam@dict:keys(Maze), + 1, + fun(Acc, Name) -> case gleam@string:ends_with(Name, <<"A"/utf8>>) of + false -> + Acc; + + true -> + _pipe = to_next_step( + Name, + <<"Z"/utf8>>, + 0, + Directions, + Maze + ), + gleam_community@maths@arithmetics:lcm(_pipe, Acc) + end end + ). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day8/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 79}) + end, + _assert_subject@1 = adglent:get_input(<<"8"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day8/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 80}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache Binary files differnew file mode 100644 index 0000000..dac9de5 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache_meta Binary files differnew file mode 100644 index 0000000..8e61830 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.erl new file mode 100644 index 0000000..da0f25e --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.erl @@ -0,0 +1,40 @@ +-module(day9@day9_test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1_test/0, part2_test/0]). + +-spec part1_test() -> list(nil). +part1_test() -> + _pipe = [{example, + <<"0 3 6 9 12 15 +1 3 6 10 15 21 +10 13 16 21 30 45"/utf8>>, + <<"114"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"0 3 6 9 12 15 +1 3 6 10 15 21 +10 13 16 21 30 45"/utf8>>, + <<"114"/utf8>>}], + fun(Example) -> _pipe@1 = day9@solve:part1(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). + +-spec part2_test() -> list(nil). +part2_test() -> + _pipe = [{example, + <<"0 3 6 9 12 15 +1 3 6 10 15 21 +10 13 16 21 30 45"/utf8>>, + <<"2"/utf8>>}], + showtime@tests@should:not_equal(_pipe, []), + gleam@list:map( + [{example, + <<"0 3 6 9 12 15 +1 3 6 10 15 21 +10 13 16 21 30 45"/utf8>>, + <<"2"/utf8>>}], + fun(Example) -> _pipe@1 = day9@solve:part2(erlang:element(2, Example)), + showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end + ). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.cache Binary files differnew file mode 100644 index 0000000..d5b2b24 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.cache_meta Binary files differnew file mode 100644 index 0000000..7378356 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.erl new file mode 100644 index 0000000..8bef41b --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.erl @@ -0,0 +1,133 @@ +-module(day9@solve). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([part1/1, part2/1, main/0]). + +-spec maybe_backwards(list(QXJ), boolean()) -> list(QXJ). +maybe_backwards(Xs, Backwards) -> + case Backwards of + false -> + gleam@list:reverse(Xs); + + true -> + Xs + end. + +-spec parse(binary(), boolean()) -> list(list(integer())). +parse(Input, Backwards) -> + gleam@list:map( + gleam@string:split(Input, <<"\n"/utf8>>), + fun(Line) -> + gleam@list:map( + maybe_backwards( + gleam@string:split(Line, <<" "/utf8>>), + Backwards + ), + fun(N_str) -> + _assert_subject = gleam@int:parse(N_str), + {ok, N} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day9/solve"/utf8>>, + function => <<"parse"/utf8>>, + line => 10}) + end, + N + end + ) + end + ). + +-spec is_constant(list(integer())) -> boolean(). +is_constant(Ns) -> + case gleam@list:unique(Ns) of + [_] -> + true; + + _ -> + false + end. + +-spec take_derivative(list(integer())) -> list(integer()). +take_derivative(Ns) -> + _pipe = Ns, + _pipe@1 = gleam@list:window_by_2(_pipe), + gleam@list:map( + _pipe@1, + fun(Tup) -> erlang:element(1, Tup) - erlang:element(2, Tup) end + ). + +-spec extrapolate(list(integer())) -> integer(). +extrapolate(Ns) -> + case {is_constant(Ns), Ns} of + {true, [N | _]} -> + N; + + {false, [N@1 | _]} -> + N@1 + extrapolate(take_derivative(Ns)); + + {_, _} -> + erlang:error(#{gleam_error => panic, + message => <<"list empty when it shouldn't be"/utf8>>, + module => <<"day9/solve"/utf8>>, + function => <<"extrapolate"/utf8>>, + line => 38}) + end. + +-spec part(binary(), boolean()) -> binary(). +part(Input, Backwards) -> + _pipe = Input, + _pipe@1 = parse(_pipe, Backwards), + _pipe@2 = gleam@list:fold( + _pipe@1, + 0, + fun(Acc, Ns) -> extrapolate(Ns) + Acc end + ), + gleam@string:inspect(_pipe@2). + +-spec part1(binary()) -> binary(). +part1(Input) -> + part(Input, false). + +-spec part2(binary()) -> binary(). +part2(Input) -> + part(Input, true). + +-spec main() -> nil. +main() -> + _assert_subject = adglent:get_part(), + {ok, Part} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"day9/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 58}) + end, + _assert_subject@1 = adglent:get_input(<<"9"/utf8>>), + {ok, Input} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"day9/solve"/utf8>>, + function => <<"main"/utf8>>, + line => 59}) + end, + case Part of + first -> + _pipe = part1(Input), + _pipe@1 = adglent:inspect(_pipe), + gleam@io:println(_pipe@1); + + second -> + _pipe@2 = part2(Input), + _pipe@3 = adglent:inspect(_pipe@2), + gleam@io:println(_pipe@3) + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/gleam@@compile.erl new file mode 100644 index 0000000..543db88 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/gleam@@compile.erl @@ -0,0 +1,157 @@ +#!/usr/bin/env escript + +% TODO: Don't concurrently print warnings and errors +% TODO: Some tests + +-record(arguments, {lib = "./", out = "./", modules = []}). + +main(Args) -> + #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args), + IsElixirModule = fun(Module) -> + filename:extension(Module) =:= ".ex" + end, + {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules), + ok = configure_logging(), + ok = add_lib_to_erlang_path(Lib), + ok = filelib:ensure_dir([Out, $/]), + {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out), + {ElixirOk, _ElixirBeams} = case ErlangOk of + true -> compile_elixir(ElixirModules, Out); + false -> {false, []} + end, + case ErlangOk and ElixirOk of + true -> ok; + false -> erlang:halt(1) + end. + +compile_erlang(Modules, Out) -> + Workers = start_compiler_workers(Out), + ok = producer_loop(Modules, Workers), + collect_results({true, []}). + +collect_results(Acc = {Result, Beams}) -> + receive + {compiled, Beam} -> collect_results({Result, [Beam | Beams]}); + failed -> collect_results({false, Beams}) + after 0 -> Acc + end. + +producer_loop([], 0) -> + ok; +producer_loop([], Workers) -> + receive + {work_please, _} -> producer_loop([], Workers - 1) + end; +producer_loop([Module | Modules], Workers) -> + receive + {work_please, Worker} -> + erlang:send(Worker, {module, Module}), + producer_loop(Modules, Workers) + end. + +start_compiler_workers(Out) -> + Parent = self(), + NumSchedulers = erlang:system_info(schedulers), + SpawnWorker = fun(_) -> + erlang:spawn_link(fun() -> worker_loop(Parent, Out) end) + end, + lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)), + NumSchedulers. + +worker_loop(Parent, Out) -> + Options = [report_errors, report_warnings, debug_info, {outdir, Out}], + erlang:send(Parent, {work_please, self()}), + receive + {module, Module} -> + log({compiling, Module}), + case compile:file(Module, Options) of + {ok, ModuleName} -> + Beam = filename:join(Out, ModuleName) ++ ".beam", + Message = {compiled, Beam}, + log(Message), + erlang:send(Parent, Message); + error -> + log({failed, Module}), + erlang:send(Parent, failed) + end, + worker_loop(Parent, Out) + end. + +compile_elixir(Modules, Out) -> + Error = [ + "The program elixir was not found. Is it installed?", + $\n, + "Documentation for installing Elixir can be viewed here:", + $\n, + "https://elixir-lang.org/install.html" + ], + case Modules of + [] -> {true, []}; + _ -> + log({starting, "compiler.app"}), + ok = application:start(compiler), + log({starting, "elixir.app"}), + case application:start(elixir) of + ok -> do_compile_elixir(Modules, Out); + _ -> + io:put_chars(standard_error, [Error, $\n]), + {false, []} + end + end. + +do_compile_elixir(Modules, Out) -> + ModuleBins = lists:map(fun(Module) -> + log({compiling, Module}), + list_to_binary(Module) + end, Modules), + OutBin = list_to_binary(Out), + Options = [{dest, OutBin}], + % Silence "redefining module" warnings. + % Compiled modules in the build directory are added to the code path. + % These warnings result from recompiling loaded modules. + % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation. + 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]), + case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of + {ok, ModuleAtoms, _} -> + ToBeam = fun(ModuleAtom) -> + Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam", + log({compiled, Beam}), + Beam + end, + {true, lists:map(ToBeam, ModuleAtoms)}; + {error, Errors, _} -> + % Log all filenames associated with modules that failed to compile. + % Note: The compiler prints compilation errors upon encountering them. + ErrorFiles = lists:usort([File || {File, _, _} <- Errors]), + Log = fun(File) -> + log({failed, binary_to_list(File)}) + end, + lists:foreach(Log, ErrorFiles), + {false, []}; + _ -> {false, []} + end. + +add_lib_to_erlang_path(Lib) -> + code:add_paths(filelib:wildcard([Lib, "/*/ebin"])). + +parse(Args) -> + parse(Args, #arguments{}). + +parse([], Arguments) -> + Arguments; +parse(["--lib", Lib | Rest], Arguments) -> + parse(Rest, Arguments#arguments{lib = Lib}); +parse(["--out", Out | Rest], Arguments) -> + parse(Rest, Arguments#arguments{out = Out}); +parse([Module | Rest], Arguments = #arguments{modules = Modules}) -> + parse(Rest, Arguments#arguments{modules = [Module | Modules]}). + +configure_logging() -> + Enabled = os:getenv("GLEAM_LOG") /= false, + persistent_term:put(gleam_logging_enabled, Enabled). + +log(Term) -> + case persistent_term:get(gleam_logging_enabled) of + true -> erlang:display(Term), ok; + false -> ok + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache Binary files differnew file mode 100644 index 0000000..c060355 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache_meta Binary files differnew file mode 100644 index 0000000..0e78598 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.erl new file mode 100644 index 0000000..8e6753e --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.erl @@ -0,0 +1,64 @@ +-module(utilities@array2d). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([add_posns/2, to_2d_array/1, to_2d_intarray/1, to_list_of_lists/1, parse_grid/1]). +-export_type([posn/0]). + +-type posn() :: {posn, integer(), integer()}. + +-spec add_posns(posn(), posn()) -> posn(). +add_posns(P1, P2) -> + case {P1, P2} of + {{posn, R1, C1}, {posn, R2, C2}} -> + {posn, R1 + R2, C1 + C2} + end. + +-spec to_2d_array(list(list(BDY))) -> gleam@dict:dict(posn(), BDY). +to_2d_array(Xss) -> + _pipe = (gleam@list:index_map( + Xss, + fun(R, Row) -> + gleam@list:index_map(Row, fun(C, Cell) -> {{posn, R, C}, Cell} end) + end + )), + _pipe@1 = gleam@list:flatten(_pipe), + gleam@dict:from_list(_pipe@1). + +-spec to_2d_intarray(list(list(binary()))) -> gleam@dict:dict(posn(), integer()). +to_2d_intarray(Xss) -> + _pipe = (gleam@list:index_map( + Xss, + fun(R, Row) -> + gleam@list:index_map( + Row, + fun(C, Cell) -> + _assert_subject = gleam@int:parse(Cell), + {ok, N} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"utilities/array2d"/utf8>>, + function => <<"to_2d_intarray"/utf8>>, + line => 33}) + end, + {{posn, R, C}, N} + end + ) + end + )), + _pipe@1 = gleam@list:flatten(_pipe), + gleam@dict:from_list(_pipe@1). + +-spec to_list_of_lists(binary()) -> list(list(binary())). +to_list_of_lists(Str) -> + _pipe = Str, + _pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>), + gleam@list:map(_pipe@1, fun gleam@string:to_graphemes/1). + +-spec parse_grid(binary()) -> gleam@dict:dict(posn(), binary()). +parse_grid(Str) -> + _pipe = Str, + _pipe@1 = to_list_of_lists(_pipe), + to_2d_array(_pipe@1). diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache Binary files differnew file mode 100644 index 0000000..f8e9862 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache_meta Binary files differnew file mode 100644 index 0000000..9452d09 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.erl new file mode 100644 index 0000000..2c7b126 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.erl @@ -0,0 +1,70 @@ +-module(utilities@memo). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([create/1, set/3, get/2, memoize/3]). +-export_type([message/2, cache/2]). + +-type message(BEO, BEP) :: shutdown | + {get, BEO, gleam@erlang@process:subject({ok, BEP} | {error, nil})} | + {set, BEO, BEP}. + +-opaque cache(BEQ, BER) :: {cache, + gleam@erlang@process:subject(message(BEQ, BER))}. + +-spec handle_message(message(BEX, BEY), gleam@dict:dict(BEX, BEY)) -> gleam@otp@actor:next(message(BEX, BEY), gleam@dict:dict(BEX, BEY)). +handle_message(Message, Dict) -> + case Message of + shutdown -> + {stop, normal}; + + {get, Key, Client} -> + gleam@erlang@process:send(Client, gleam@dict:get(Dict, Key)), + {continue, Dict, none}; + + {set, Key@1, Value} -> + {continue, gleam@dict:insert(Dict, Key@1, Value), none} + end. + +-spec create(fun((cache(any(), any())) -> BFN)) -> BFN. +create(Fun) -> + _assert_subject = gleam@otp@actor:start( + gleam@dict:new(), + fun handle_message/2 + ), + {ok, Server} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"utilities/memo"/utf8>>, + function => <<"create"/utf8>>, + line => 36}) + end, + Result = Fun({cache, Server}), + gleam@erlang@process:send(Server, shutdown), + Result. + +-spec set(cache(BFO, BFP), BFO, BFP) -> nil. +set(Cache, Key, Value) -> + gleam@erlang@process:send(erlang:element(2, Cache), {set, Key, Value}). + +-spec get(cache(BFS, BFT), BFS) -> {ok, BFT} | {error, nil}. +get(Cache, Key) -> + gleam@erlang@process:call( + erlang:element(2, Cache), + fun(C) -> {get, Key, C} end, + 1000 + ). + +-spec memoize(cache(BFY, BFZ), BFY, fun(() -> BFZ)) -> BFZ. +memoize(Cache, Key, Fun) -> + Result = case get(Cache, Key) of + {ok, Value} -> + Value; + + {error, nil} -> + Fun() + end, + set(Cache, Key, Result), + Result. diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache Binary files differnew file mode 100644 index 0000000..c9c4130 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache_meta Binary files differnew file mode 100644 index 0000000..274b278 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache_meta diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.erl new file mode 100644 index 0000000..e97eff6 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.erl @@ -0,0 +1,60 @@ +-module(utilities@prioqueue). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([new/0, insert/3, pop/1]). +-export_type([ref/0, p_queue/1, priority_queue/1, out_result/1]). + +-type ref() :: any(). + +-type p_queue(BBO) :: any() | {gleam_phantom, BBO}. + +-opaque priority_queue(BBP) :: {priority_queue, + p_queue({BBP, ref()}), + gleam@dict:dict(BBP, ref())}. + +-type out_result(BBQ) :: empty | {value, BBQ, integer()}. + +-spec new() -> priority_queue(any()). +new() -> + {priority_queue, pqueue2:new(), gleam@dict:new()}. + +-spec insert(priority_queue(BCC), BCC, integer()) -> priority_queue(BCC). +insert(Queue, Value, Priority) -> + Ref = erlang:make_ref(), + Refs = begin + _pipe = erlang:element(3, Queue), + gleam@dict:insert(_pipe, Value, Ref) + end, + {priority_queue, + pqueue2:in({Value, Ref}, Priority, erlang:element(2, Queue)), + Refs}. + +-spec pop(priority_queue(BCF)) -> {ok, {BCF, priority_queue(BCF)}} | + {error, nil}. +pop(Queue) -> + case pqueue2:pout(erlang:element(2, Queue)) of + {{value, {Value, Ref}, _}, Pqueue} -> + _assert_subject = gleam@dict:get(erlang:element(3, Queue), Value), + {ok, Recently_enqueued_ref} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"utilities/prioqueue"/utf8>>, + function => <<"pop"/utf8>>, + line => 52}) + end, + case Recently_enqueued_ref =:= Ref of + true -> + {ok, + {Value, + {priority_queue, Pqueue, erlang:element(3, Queue)}}}; + + false -> + pop({priority_queue, Pqueue, erlang:element(3, Queue)}) + end; + + {empty, _} -> + {error, nil} + end. diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023.app b/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023.app new file mode 100644 index 0000000..1d9ebe0 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023.app @@ -0,0 +1,15 @@ +{application, aoc2023, [ + {vsn, "0.1.0"}, + {applications, [adglent, + gleam_community_maths, + gleam_erlang, + gleam_otp, + gleam_stdlib, + gleeunit, + pqueue, + simplifile]}, + {description, ""}, + {modules, [day20@day20_test, + day20@solve]}, + {registered, []} +]}. diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023.beam Binary files differnew file mode 100644 index 0000000..5ef8b6b --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023@@main.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023@@main.beam Binary files differnew file mode 100644 index 0000000..c4d93c5 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023@@main.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023_test.beam Binary files differnew file mode 100644 index 0000000..a77846a --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day10@day10_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day10@day10_test.beam Binary files differnew file mode 100644 index 0000000..30b4854 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day10@day10_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day10@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day10@solve.beam Binary files differnew file mode 100644 index 0000000..d9c6ff3 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day10@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day11@day11_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day11@day11_test.beam Binary files differnew file mode 100644 index 0000000..dac7343 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day11@day11_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day11@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day11@solve.beam Binary files differnew file mode 100644 index 0000000..ed49a37 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day11@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day12@day12_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day12@day12_test.beam Binary files differnew file mode 100644 index 0000000..513d1a9 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day12@day12_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day12@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day12@solve.beam Binary files differnew file mode 100644 index 0000000..21f1e8b --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day12@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day13@day13_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day13@day13_test.beam Binary files differnew file mode 100644 index 0000000..67e62de --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day13@day13_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day13@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day13@solve.beam Binary files differnew file mode 100644 index 0000000..a9eb3a5 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day13@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day14@day14_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day14@day14_test.beam Binary files differnew file mode 100644 index 0000000..5a6c67e --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day14@day14_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day14@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day14@solve.beam Binary files differnew file mode 100644 index 0000000..8db7efd --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day14@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day15@day15_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day15@day15_test.beam Binary files differnew file mode 100644 index 0000000..f8e4a5f --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day15@day15_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day15@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day15@solve.beam Binary files differnew file mode 100644 index 0000000..2bf8472 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day15@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day16@day16_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day16@day16_test.beam Binary files differnew file mode 100644 index 0000000..091829f --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day16@day16_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day16@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day16@solve.beam Binary files differnew file mode 100644 index 0000000..78a3f8c --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day16@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day17@day17_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day17@day17_test.beam Binary files differnew file mode 100644 index 0000000..5624a2f --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day17@day17_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day17@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day17@solve.beam Binary files differnew file mode 100644 index 0000000..ca194b3 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day17@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day18@day18_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day18@day18_test.beam Binary files differnew file mode 100644 index 0000000..2f9a32a --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day18@day18_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day18@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day18@solve.beam Binary files differnew file mode 100644 index 0000000..326ca15 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day18@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day19@day19_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day19@day19_test.beam Binary files differnew file mode 100644 index 0000000..f5cc6c3 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day19@day19_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day19@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day19@solve.beam Binary files differnew file mode 100644 index 0000000..7ea70a3 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day19@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day1@day1_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day1@day1_test.beam Binary files differnew file mode 100644 index 0000000..c01f17e --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day1@day1_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day1@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day1@solve.beam Binary files differnew file mode 100644 index 0000000..d2decc9 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day1@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day20@day20_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day20@day20_test.beam Binary files differnew file mode 100644 index 0000000..5bb689f --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day20@day20_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day20@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day20@solve.beam Binary files differnew file mode 100644 index 0000000..2a7a3b3 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day20@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day2@day2_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day2@day2_test.beam Binary files differnew file mode 100644 index 0000000..f10ea16 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day2@day2_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day2@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day2@solve.beam Binary files differnew file mode 100644 index 0000000..19a27da --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day2@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day3@day3_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day3@day3_test.beam Binary files differnew file mode 100644 index 0000000..a082170 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day3@day3_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day3@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day3@solve.beam Binary files differnew file mode 100644 index 0000000..803c647 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day3@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day4@day4_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day4@day4_test.beam Binary files differnew file mode 100644 index 0000000..35f5046 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day4@day4_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day4@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day4@solve.beam Binary files differnew file mode 100644 index 0000000..3278158 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day4@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day5@day5_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day5@day5_test.beam Binary files differnew file mode 100644 index 0000000..b03baf2 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day5@day5_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day5@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day5@solve.beam Binary files differnew file mode 100644 index 0000000..67980d7 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day5@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day6@day6_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day6@day6_test.beam Binary files differnew file mode 100644 index 0000000..5d8c4d4 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day6@day6_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day6@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day6@solve.beam Binary files differnew file mode 100644 index 0000000..8d47586 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day6@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day7@day7_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day7@day7_test.beam Binary files differnew file mode 100644 index 0000000..ae993b1 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day7@day7_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day7@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day7@solve.beam Binary files differnew file mode 100644 index 0000000..54ef711 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day7@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day8@day8_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day8@day8_test.beam Binary files differnew file mode 100644 index 0000000..e8adca4 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day8@day8_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day8@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day8@solve.beam Binary files differnew file mode 100644 index 0000000..c208dac --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day8@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day9@day9_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day9@day9_test.beam Binary files differnew file mode 100644 index 0000000..fac9c16 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day9@day9_test.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day9@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day9@solve.beam Binary files differnew file mode 100644 index 0000000..0f48b99 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day9@solve.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@array2d.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@array2d.beam Binary files differnew file mode 100644 index 0000000..d30c73d --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@array2d.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@memo.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@memo.beam Binary files differnew file mode 100644 index 0000000..3bba319 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@memo.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@prioqueue.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@prioqueue.beam Binary files differnew file mode 100644 index 0000000..8cd709b --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@prioqueue.beam diff --git a/aoc2023/build/dev/erlang/aoc2023/include/day2@solve_Game.hrl b/aoc2023/build/dev/erlang/aoc2023/include/day2@solve_Game.hrl new file mode 100644 index 0000000..7babf61 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/include/day2@solve_Game.hrl @@ -0,0 +1 @@ +-record(game, {red :: integer(), blue :: integer(), green :: integer()}). diff --git a/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_Almanac.hrl b/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_Almanac.hrl new file mode 100644 index 0000000..5c3086c --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_Almanac.hrl @@ -0,0 +1,4 @@ +-record(almanac, { + seeds :: list(integer()), + mappers :: list(list(day5@solve:mapping_range())) +}). diff --git a/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_MRange.hrl b/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_MRange.hrl new file mode 100644 index 0000000..999313f --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_MRange.hrl @@ -0,0 +1 @@ +-record(m_range, {start :: integer(), 'end' :: integer(), offset :: integer()}). diff --git a/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_SRange.hrl b/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_SRange.hrl new file mode 100644 index 0000000..56c67cd --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_SRange.hrl @@ -0,0 +1 @@ +-record(s_range, {start :: integer(), 'end' :: integer()}). diff --git a/aoc2023/build/dev/erlang/aoc2023/include/utilities@array2d_Posn.hrl b/aoc2023/build/dev/erlang/aoc2023/include/utilities@array2d_Posn.hrl new file mode 100644 index 0000000..94da3d5 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/include/utilities@array2d_Posn.hrl @@ -0,0 +1 @@ +-record(posn, {r :: integer(), c :: integer()}). diff --git a/aoc2023/build/dev/erlang/aoc2023/include/utilities@memo_Cache.hrl b/aoc2023/build/dev/erlang/aoc2023/include/utilities@memo_Cache.hrl new file mode 100644 index 0000000..941b746 --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/include/utilities@memo_Cache.hrl @@ -0,0 +1,3 @@ +-record(cache, { + server :: gleam@erlang@process:subject(utilities@memo:message(any(), any())) +}). diff --git a/aoc2023/build/dev/erlang/aoc2023/include/utilities@prioqueue_PriorityQueue.hrl b/aoc2023/build/dev/erlang/aoc2023/include/utilities@prioqueue_PriorityQueue.hrl new file mode 100644 index 0000000..0e12dca --- /dev/null +++ b/aoc2023/build/dev/erlang/aoc2023/include/utilities@prioqueue_PriorityQueue.hrl @@ -0,0 +1,4 @@ +-record(priority_queue, { + queue :: utilities@prioqueue:p_queue({any(), utilities@prioqueue:ref()}), + refs :: gleam@dict:dict(any(), utilities@prioqueue:ref()) +}). diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.cache b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.cache Binary files differnew file mode 100644 index 0000000..5e9f51b --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.cache diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.cache_meta b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.cache_meta Binary files differnew file mode 100644 index 0000000..3a247a0 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.cache_meta diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.erl b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.erl new file mode 100644 index 0000000..f28094b --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.erl @@ -0,0 +1,538 @@ +-module(gap). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([to_styled/1, compare_strings_with_algorithm/3, compare_lists_with_algorithm/3, myers/2, compare_lists/2, compare_strings/2, lcs/2]). +-export_type([score/1]). + +-type score(GBX) :: {score, integer(), gleam@option:option(GBX)}. + +-spec to_styled(gap@comparison:comparison(any())) -> gap@styled_comparison:styled_comparison(). +to_styled(Comparison) -> + _pipe = Comparison, + _pipe@1 = gap@styling:from_comparison(_pipe), + _pipe@2 = gap@styling:highlight( + _pipe@1, + fun gap@styling:first_highlight_default/1, + fun gap@styling:second_highlight_default/1, + fun gap@styling:no_highlight/1 + ), + gap@styling:to_styled_comparison(_pipe@2). + +-spec compare_strings_with_algorithm( + binary(), + binary(), + fun((list(binary()), list(binary())) -> gap@comparison:comparison(binary())) +) -> gap@comparison:comparison(binary()). +compare_strings_with_algorithm(First, Second, Algorithm) -> + Comparison = Algorithm( + gleam@string:to_graphemes(First), + gleam@string:to_graphemes(Second) + ), + case Comparison of + {list_comparison, First@1, Second@1} -> + {string_comparison, First@1, Second@1}; + + {string_comparison, First@2, Second@2} -> + {string_comparison, First@2, Second@2} + end. + +-spec compare_lists_with_algorithm( + list(GCM), + list(GCM), + fun((list(GCM), list(GCM)) -> gap@comparison:comparison(GCM)) +) -> gap@comparison:comparison(GCM). +compare_lists_with_algorithm(First_sequence, Second_sequence, Algorithm) -> + Algorithm(First_sequence, Second_sequence). + +-spec myers(list(GCR), list(GCR)) -> gap@comparison:comparison(GCR). +myers(First_sequence, Second_sequence) -> + Edits = gap@myers:difference(First_sequence, Second_sequence), + _pipe = Edits, + _pipe@1 = gleam@list:reverse(_pipe), + gleam@list:fold( + _pipe@1, + {list_comparison, [], []}, + fun(Comparison, Edit) -> case Comparison of + {list_comparison, First, Second} -> + case Edit of + {eq, Segment} -> + {list_comparison, + [{match, Segment} | First], + [{match, Segment} | Second]}; + + {ins, Segment@1} -> + {list_comparison, + First, + [{no_match, Segment@1} | Second]}; + + {del, Segment@2} -> + {list_comparison, + [{no_match, Segment@2} | First], + Second} + end; + + {string_comparison, _, _} -> + Comparison + end end + ). + +-spec compare_lists(list(GCI), list(GCI)) -> gap@comparison:comparison(GCI). +compare_lists(First_sequence, Second_sequence) -> + myers(First_sequence, Second_sequence). + +-spec compare_strings(binary(), binary()) -> gap@comparison:comparison(binary()). +compare_strings(First, Second) -> + Comparison = compare_lists( + gleam@string:to_graphemes(First), + gleam@string:to_graphemes(Second) + ), + case Comparison of + {list_comparison, First@1, Second@1} -> + {string_comparison, First@1, Second@1}; + + {string_comparison, First@2, Second@2} -> + {string_comparison, First@2, Second@2} + end. + +-spec prepend_and_merge( + list(gap@comparison:match(list(GCZ))), + gap@comparison:match(list(GCZ)) +) -> list(gap@comparison:match(list(GCZ))). +prepend_and_merge(Matches, Match) -> + case {Matches, Match} of + {[], _} -> + [Match]; + + {[{match, First_match} | Rest], {match, _}} -> + [{match, + begin + _pipe = erlang:element(2, Match), + gleam@list:append(_pipe, First_match) + end} | + Rest]; + + {[{no_match, First_match@1} | Rest@1], {no_match, _}} -> + [{no_match, + begin + _pipe@1 = erlang:element(2, Match), + gleam@list:append(_pipe@1, First_match@1) + end} | + Rest@1]; + + {Matches@1, Match@1} -> + [Match@1 | Matches@1] + end. + +-spec append_and_merge( + list(gap@comparison:match(list(GDI))), + gap@comparison:match(list(GDI)) +) -> list(gap@comparison:match(list(GDI))). +append_and_merge(Matches, Match) -> + _pipe@3 = case {begin + _pipe = Matches, + gleam@list:reverse(_pipe) + end, + Match} of + {[], _} -> + [Match]; + + {[{match, First_match} | Rest], {match, _}} -> + [{match, + begin + _pipe@1 = First_match, + gleam@list:append(_pipe@1, erlang:element(2, Match)) + end} | + Rest]; + + {[{no_match, First_match@1} | Rest@1], {no_match, _}} -> + [{no_match, + begin + _pipe@2 = First_match@1, + gleam@list:append(_pipe@2, erlang:element(2, Match)) + end} | + Rest@1]; + + {Matches@1, Match@1} -> + [Match@1 | Matches@1] + end, + gleam@list:reverse(_pipe@3). + +-spec collect_matches( + gleam@dict:dict(GHJ, any()), + list(GDS), + fun((GHJ) -> integer()) +) -> list(gap@comparison:match(list(GDS))). +collect_matches(Tracking, Str, Extract_fun) -> + Matching_indexes = begin + _pipe = gleam@map:keys(Tracking), + _pipe@1 = gleam@list:map(_pipe, Extract_fun), + gleam@set:from_list(_pipe@1) + end, + Matches = begin + _pipe@2 = Str, + gleam@list:index_map( + _pipe@2, + fun(Index, Item) -> + case gleam@set:contains(Matching_indexes, Index) of + true -> + {match, Item}; + + false -> + {no_match, Item} + end + end + ) + end, + _pipe@3 = Matches, + _pipe@4 = gleam@list:chunk(_pipe@3, fun(Match) -> case Match of + {match, _} -> + true; + + {no_match, _} -> + false + end end), + gleam@list:map(_pipe@4, fun(Match_list) -> case Match_list of + [{match, _} | _] -> + {match, + gleam@list:filter_map( + Match_list, + fun(Match@1) -> case Match@1 of + {match, Item@1} -> + {ok, Item@1}; + + {no_match, _} -> + {error, nil} + end end + )}; + + [{no_match, _} | _] -> + {no_match, + gleam@list:filter_map( + Match_list, + fun(Match@2) -> case Match@2 of + {no_match, Item@2} -> + {ok, Item@2}; + + {match, _} -> + {error, nil} + end end + )} + end end). + +-spec back_track( + gleam@dict:dict({integer(), integer()}, score(GDW)), + integer(), + integer(), + list({{integer(), integer()}, GDW}) +) -> list({{integer(), integer()}, GDW}). +back_track(Diff_map, First_index, Second_index, Stack) -> + case (First_index =:= 0) orelse (Second_index =:= 0) of + true -> + This_score = begin + _pipe = gleam@map:get(Diff_map, {First_index, Second_index}), + gleam@result:unwrap(_pipe, {score, 0, none}) + end, + case This_score of + {score, _, {some, Item}} -> + [{{First_index, Second_index}, Item} | Stack]; + + _ -> + case {First_index, Second_index} of + {0, A} when A > 0 -> + back_track( + Diff_map, + First_index, + Second_index - 1, + Stack + ); + + {A@1, 0} when A@1 > 0 -> + back_track( + Diff_map, + First_index - 1, + Second_index, + Stack + ); + + {0, 0} -> + Stack; + + {_, _} -> + back_track( + Diff_map, + First_index - 1, + Second_index, + Stack + ) + end + end; + + false -> + This_score@1 = begin + _pipe@1 = gleam@map:get(Diff_map, {First_index, Second_index}), + gleam@result:unwrap(_pipe@1, {score, 0, none}) + end, + case This_score@1 of + {score, _, {some, Item@1}} -> + back_track( + Diff_map, + First_index - 1, + Second_index - 1, + [{{First_index, Second_index}, Item@1} | Stack] + ); + + {score, _, none} -> + Up = begin + _pipe@2 = gleam@map:get( + Diff_map, + {First_index, Second_index - 1} + ), + gleam@result:unwrap(_pipe@2, {score, 0, none}) + end, + Back = begin + _pipe@3 = gleam@map:get( + Diff_map, + {First_index - 1, Second_index} + ), + gleam@result:unwrap(_pipe@3, {score, 0, none}) + end, + case gleam@int:compare( + erlang:element(2, Up), + erlang:element(2, Back) + ) of + gt -> + back_track( + Diff_map, + First_index, + Second_index - 1, + Stack + ); + + lt -> + back_track( + Diff_map, + First_index - 1, + Second_index, + Stack + ); + + eq -> + case {First_index, Second_index} of + {0, A@2} when A@2 > 0 -> + back_track( + Diff_map, + First_index, + Second_index - 1, + Stack + ); + + {A@3, 0} when A@3 > 0 -> + back_track( + Diff_map, + First_index - 1, + Second_index, + Stack + ); + + {0, 0} -> + Stack; + + {_, _} -> + back_track( + Diff_map, + First_index - 1, + Second_index, + Stack + ) + end + end + end + end. + +-spec build_diff_map( + GEC, + integer(), + GEC, + integer(), + gleam@dict:dict({integer(), integer()}, score(GEC)) +) -> gleam@dict:dict({integer(), integer()}, score(GEC)). +build_diff_map(First_item, First_index, Second_item, Second_index, Diff_map) -> + Prev_score = begin + _pipe = gleam@map:get(Diff_map, {First_index - 1, Second_index - 1}), + gleam@result:unwrap(_pipe, {score, 0, none}) + end, + Derived_score_up = begin + _pipe@1 = Diff_map, + _pipe@2 = gleam@map:get(_pipe@1, {First_index, Second_index - 1}), + gleam@result:unwrap(_pipe@2, {score, 0, none}) + end, + Derived_score_back = begin + _pipe@3 = Diff_map, + _pipe@4 = gleam@map:get(_pipe@3, {First_index - 1, Second_index}), + gleam@result:unwrap(_pipe@4, {score, 0, none}) + end, + Derived_score = gleam@int:max( + erlang:element(2, Derived_score_up), + erlang:element(2, Derived_score_back) + ), + This_score = case First_item =:= Second_item of + true -> + {score, erlang:element(2, Prev_score) + 1, {some, First_item}}; + + false -> + {score, Derived_score, none} + end, + _pipe@5 = Diff_map, + gleam@map:insert(_pipe@5, {First_index, Second_index}, This_score). + +-spec lcs(list(GCV), list(GCV)) -> gap@comparison:comparison(GCV). +lcs(First_sequence, Second_sequence) -> + Leading_matches = begin + _pipe = gleam@list:zip(First_sequence, Second_sequence), + _pipe@1 = gleam@list:take_while( + _pipe, + fun(Pair) -> erlang:element(1, Pair) =:= erlang:element(2, Pair) end + ), + gleam@list:map(_pipe@1, fun gleam@pair:first/1) + end, + Num_leading_matches = gleam@list:length(Leading_matches), + Trailing_matches = begin + _pipe@2 = gleam@list:zip( + gleam@list:reverse(First_sequence), + gleam@list:reverse(Second_sequence) + ), + _pipe@3 = gleam@list:take_while( + _pipe@2, + fun(Pair@1) -> + erlang:element(1, Pair@1) =:= erlang:element(2, Pair@1) + end + ), + _pipe@4 = gleam@list:map(_pipe@3, fun gleam@pair:first/1), + gleam@list:reverse(_pipe@4) + end, + Num_trailing_matches = gleam@list:length(Trailing_matches), + First_sequence_to_diff = begin + _pipe@5 = First_sequence, + _pipe@6 = gleam@list:drop(_pipe@5, Num_leading_matches), + gleam@list:take( + _pipe@6, + (gleam@list:length(First_sequence) - Num_leading_matches) - Num_trailing_matches + ) + end, + Second_sequence_to_diff = begin + _pipe@7 = Second_sequence, + _pipe@8 = gleam@list:drop(_pipe@7, Num_leading_matches), + gleam@list:take( + _pipe@8, + (gleam@list:length(Second_sequence) - Num_leading_matches) - Num_trailing_matches + ) + end, + Diff_map@2 = begin + _pipe@9 = Second_sequence_to_diff, + gleam@list:index_fold( + _pipe@9, + gleam@map:new(), + fun(Diff_map, Item_second, Index_second) -> + _pipe@10 = First_sequence_to_diff, + gleam@list:index_fold( + _pipe@10, + Diff_map, + fun(Diff_map@1, Item_first, Index_first) -> + build_diff_map( + Item_first, + Index_first, + Item_second, + Index_second, + Diff_map@1 + ) + end + ) + end + ) + end, + {First_segments@1, Second_segments@1} = case {First_sequence_to_diff, + Second_sequence_to_diff} of + {[], []} -> + {[], []}; + + {First_matching, []} -> + {[{no_match, First_matching}], []}; + + {[], Second_matching} -> + {[], [{no_match, Second_matching}]}; + + {First_sequence_to_diff@1, Second_sequence_to_diff@1} -> + Tracking = begin + _pipe@11 = back_track( + Diff_map@2, + gleam@list:length(First_sequence_to_diff@1) - 1, + gleam@list:length(Second_sequence_to_diff@1) - 1, + [] + ), + gleam@map:from_list(_pipe@11) + end, + First_segments = collect_matches( + Tracking, + First_sequence_to_diff@1, + fun(Key) -> + {First, _} = Key, + First + end + ), + Second_segments = collect_matches( + Tracking, + Second_sequence_to_diff@1, + fun(Key@1) -> + {_, Second} = Key@1, + Second + end + ), + {First_segments, Second_segments} + end, + {First_segments_with_leading_trailing, + Second_segments_with_leading_trailing} = case {Leading_matches, + Trailing_matches} of + {[], []} -> + {First_segments@1, Second_segments@1}; + + {[], Trailing_matches@1} -> + {begin + _pipe@12 = First_segments@1, + append_and_merge(_pipe@12, {match, Trailing_matches@1}) + end, + begin + _pipe@13 = Second_segments@1, + append_and_merge(_pipe@13, {match, Trailing_matches@1}) + end}; + + {Leading_matches@1, []} -> + {begin + _pipe@14 = First_segments@1, + prepend_and_merge(_pipe@14, {match, Leading_matches@1}) + end, + begin + _pipe@15 = Second_segments@1, + prepend_and_merge(_pipe@15, {match, Leading_matches@1}) + end}; + + {Leading_matches@2, Trailing_matches@2} -> + {begin + _pipe@16 = First_segments@1, + _pipe@17 = prepend_and_merge( + _pipe@16, + {match, Leading_matches@2} + ), + append_and_merge(_pipe@17, {match, Trailing_matches@2}) + end, + begin + _pipe@18 = Second_segments@1, + _pipe@19 = prepend_and_merge( + _pipe@18, + {match, Leading_matches@2} + ), + append_and_merge(_pipe@19, {match, Trailing_matches@2}) + end} + end, + {list_comparison, + First_segments_with_leading_trailing, + Second_segments_with_leading_trailing}. diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.cache b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.cache Binary files differnew file mode 100644 index 0000000..f754345 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.cache diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.cache_meta b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.cache_meta Binary files differnew file mode 100644 index 0000000..e3f3599 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.cache_meta diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.erl b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.erl new file mode 100644 index 0000000..76c0ff2 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.erl @@ -0,0 +1,15 @@ +-module(gap@comparison). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export_type([comparison/1, match/1]). + +-type comparison(FSE) :: {list_comparison, + list(match(list(FSE))), + list(match(list(FSE)))} | + {string_comparison, + list(match(list(binary()))), + list(match(list(binary())))}. + +-type match(FSF) :: {match, FSF} | {no_match, FSF}. + + diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.cache b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.cache Binary files differnew file mode 100644 index 0000000..8935f36 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.cache diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.cache_meta b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.cache_meta Binary files differnew file mode 100644 index 0000000..6d51dd1 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.cache_meta diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.erl b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.erl new file mode 100644 index 0000000..ea26472 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.erl @@ -0,0 +1,156 @@ +-module(gap@myers). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([difference/2]). +-export_type([edit/1, path/1, status/1]). + +-type edit(FWG) :: {eq, list(FWG)} | {del, list(FWG)} | {ins, list(FWG)}. + +-type path(FWH) :: {path, + integer(), + integer(), + list(FWH), + list(FWH), + list(edit(FWH))}. + +-type status(FWI) :: {done, list(edit(FWI))} | + {next, list(path(FWI))} | + {cont, path(FWI)}. + +-spec compact_reverse(list(edit(FWS)), list(edit(FWS))) -> list(edit(FWS)). +compact_reverse(Edits, Acc) -> + case {Edits, Acc} of + {[], Acc@1} -> + Acc@1; + + {[{eq, Elem} | Rest], [{eq, Result} | Acc_rest]} -> + compact_reverse( + Rest, + [{eq, gleam@list:flatten([Elem, Result])} | Acc_rest] + ); + + {[{del, Elem@1} | Rest@1], [{del, Result@1} | Acc_rest@1]} -> + compact_reverse( + Rest@1, + [{del, gleam@list:flatten([Elem@1, Result@1])} | Acc_rest@1] + ); + + {[{ins, Elem@2} | Rest@2], [{ins, Result@2} | Acc_rest@2]} -> + compact_reverse( + Rest@2, + [{ins, gleam@list:flatten([Elem@2, Result@2])} | Acc_rest@2] + ); + + {[{eq, Elem@3} | Rest@3], Acc@2} -> + compact_reverse(Rest@3, [{eq, Elem@3} | Acc@2]); + + {[{del, Elem@4} | Rest@4], Acc@3} -> + compact_reverse(Rest@4, [{del, Elem@4} | Acc@3]); + + {[{ins, Elem@5} | Rest@5], Acc@4} -> + compact_reverse(Rest@5, [{ins, Elem@5} | Acc@4]) + end. + +-spec move_right(path(FXL)) -> path(FXL). +move_right(Path) -> + case Path of + {path, X, Y, List1, [Elem | Rest], Edits} -> + {path, X + 1, Y, List1, Rest, [{ins, [Elem]} | Edits]}; + + {path, X@1, Y@1, List1@1, [], Edits@1} -> + {path, X@1 + 1, Y@1, List1@1, [], Edits@1} + end. + +-spec move_down(path(FXO)) -> path(FXO). +move_down(Path) -> + case Path of + {path, X, Y, [Elem | Rest], List2, Edits} -> + {path, X, Y + 1, Rest, List2, [{del, [Elem]} | Edits]}; + + {path, X@1, Y@1, [], List2@1, Edits@1} -> + {path, X@1, Y@1 + 1, [], List2@1, Edits@1} + end. + +-spec proceed_path(integer(), integer(), list(path(FXF))) -> {path(FXF), + list(path(FXF))}. +proceed_path(Diag, Limit, Paths) -> + Neg_limit = - Limit, + case {Diag, Limit, Paths} of + {0, 0, [Path]} -> + {Path, []}; + + {Diag@1, _, [Path@1 | _] = Paths@1} when Diag@1 =:= Neg_limit -> + {move_down(Path@1), Paths@1}; + + {Diag@2, Limit@1, [Path@2 | _] = Paths@2} when Diag@2 =:= Limit@1 -> + {move_right(Path@2), Paths@2}; + + {_, _, [Path1, Path2 | Rest]} -> + case erlang:element(3, Path1) > erlang:element(3, Path2) of + true -> + {move_right(Path1), [Path2 | Rest]}; + + false -> + {move_down(Path2), [Path2 | Rest]} + end + end. + +-spec follow_snake(path(FXR)) -> status(FXR). +follow_snake(Path) -> + case Path of + {path, X, Y, [Elem1 | Rest1], [Elem2 | Rest2], Edits} when Elem1 =:= Elem2 -> + follow_snake( + {path, X + 1, Y + 1, Rest1, Rest2, [{eq, [Elem1]} | Edits]} + ); + + {path, _, _, [], [], Edits@1} -> + {done, Edits@1}; + + _ -> + {cont, Path} + end. + +-spec each_diagonal(integer(), integer(), list(path(FWZ)), list(path(FWZ))) -> status(FWZ). +each_diagonal(Diag, Limit, Paths, Next_paths) -> + case Diag > Limit of + true -> + {next, gleam@list:reverse(Next_paths)}; + + false -> + {Path, Rest} = proceed_path(Diag, Limit, Paths), + case follow_snake(Path) of + {cont, Path@1} -> + each_diagonal(Diag + 2, Limit, Rest, [Path@1 | Next_paths]); + + Other -> + Other + end + end. + +-spec find_script(integer(), integer(), list(path(FWO))) -> list(edit(FWO)). +find_script(Envelope, Max, Paths) -> + case Envelope > Max of + true -> + []; + + false -> + case each_diagonal(- Envelope, Envelope, Paths, []) of + {done, Edits} -> + compact_reverse(Edits, []); + + {next, Paths@1} -> + find_script(Envelope + 1, Max, Paths@1); + + _ -> + erlang:error(#{gleam_error => panic, + message => <<"Didn't expect a Cont here"/utf8>>, + module => <<"gap/myers"/utf8>>, + function => <<"find_script"/utf8>>, + line => 35}) + end + end. + +-spec difference(list(FWJ), list(FWJ)) -> list(edit(FWJ)). +difference(List1, List2) -> + Path = {path, 0, 0, List1, List2, []}, + find_script(0, gleam@list:length(List1) + gleam@list:length(List2), [Path]). diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache Binary files differnew file mode 100644 index 0000000..d7dfd29 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache_meta b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache_meta Binary files differnew file mode 100644 index 0000000..dc9ffd0 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache_meta diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.erl b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.erl new file mode 100644 index 0000000..14cc390 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.erl @@ -0,0 +1,8 @@ +-module(gap@styled_comparison). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export_type([styled_comparison/0]). + +-type styled_comparison() :: {styled_comparison, binary(), binary()}. + + diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.cache b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.cache Binary files differnew file mode 100644 index 0000000..7ff8b7f --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.cache diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.cache_meta b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.cache_meta Binary files differnew file mode 100644 index 0000000..f580983 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.cache_meta diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.erl b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.erl new file mode 100644 index 0000000..4c14974 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.erl @@ -0,0 +1,202 @@ +-module(gap@styling). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([from_comparison/1, highlight/4, serialize/2, first_highlight_default/1, second_highlight_default/1, no_highlight/1, mk_generic_serializer/2, to_styled_comparison/1]). +-export_type([part/1, highlighters/0, styling/1]). + +-type part(FSP) :: {part, binary(), list(FSP), fun((binary()) -> binary())} | + {all, binary()}. + +-type highlighters() :: {highlighters, + fun((binary()) -> binary()), + fun((binary()) -> binary()), + fun((binary()) -> binary())}. + +-opaque styling(FSQ) :: {styling, + gap@comparison:comparison(FSQ), + gleam@option:option(fun((part(FSQ)) -> binary())), + gleam@option:option(highlighters())}. + +-spec from_comparison(gap@comparison:comparison(FST)) -> styling(FST). +from_comparison(Comparison) -> + {styling, Comparison, none, none}. + +-spec highlight( + styling(FSW), + fun((binary()) -> binary()), + fun((binary()) -> binary()), + fun((binary()) -> binary()) +) -> styling(FSW). +highlight(Styling, First, Second, Matching) -> + erlang:setelement( + 4, + Styling, + {some, {highlighters, First, Second, Matching}} + ). + +-spec serialize(styling(FSZ), fun((part(FSZ)) -> binary())) -> styling(FSZ). +serialize(Styling, Serializer) -> + erlang:setelement(3, Styling, {some, Serializer}). + +-spec first_highlight_default(binary()) -> binary(). +first_highlight_default(String) -> + case String of + <<" "/utf8>> -> + _pipe = String, + _pipe@1 = gleam_community@ansi:underline(_pipe), + _pipe@2 = gleam_community@ansi:bold(_pipe@1), + gleam_community@ansi:green(_pipe@2); + + _ -> + _pipe@3 = String, + _pipe@4 = gleam_community@ansi:green(_pipe@3), + gleam_community@ansi:bold(_pipe@4) + end. + +-spec second_highlight_default(binary()) -> binary(). +second_highlight_default(String) -> + case String of + <<" "/utf8>> -> + _pipe = String, + _pipe@1 = gleam_community@ansi:underline(_pipe), + _pipe@2 = gleam_community@ansi:bold(_pipe@1), + gleam_community@ansi:red(_pipe@2); + + _ -> + _pipe@3 = String, + _pipe@4 = gleam_community@ansi:red(_pipe@3), + gleam_community@ansi:bold(_pipe@4) + end. + +-spec no_highlight(binary()) -> binary(). +no_highlight(String) -> + String. + +-spec string_serializer(part(binary())) -> binary(). +string_serializer(Part) -> + case Part of + {part, Acc, Sequence, Highlight} -> + <<Acc/binary, + (begin + _pipe = Sequence, + _pipe@1 = gleam@list:map(_pipe, Highlight), + gleam@string:join(_pipe@1, <<""/utf8>>) + end)/binary>>; + + {all, String} -> + String + end. + +-spec mk_generic_serializer(binary(), fun((binary()) -> binary())) -> fun((part(any())) -> binary()). +mk_generic_serializer(Separator, Around) -> + fun(Part) -> case Part of + {part, Acc, Sequence, Highlight} -> + Segment_separator = case Acc of + <<""/utf8>> -> + <<""/utf8>>; + + _ -> + Separator + end, + <<<<Acc/binary, Segment_separator/binary>>/binary, + (begin + _pipe = Sequence, + _pipe@1 = gleam@list:map( + _pipe, + fun gleam@string:inspect/1 + ), + _pipe@2 = gleam@list:map(_pipe@1, Highlight), + gleam@string:join(_pipe@2, Separator) + end)/binary>>; + + {all, String} -> + Around(String) + end end. + +-spec generic_serializer(part(any())) -> binary(). +generic_serializer(Part) -> + (mk_generic_serializer( + <<", "/utf8>>, + fun(All) -> <<<<"["/utf8, All/binary>>/binary, "]"/utf8>> end + ))(Part). + +-spec to_strings( + list(gap@comparison:match(list(FTJ))), + list(gap@comparison:match(list(FTJ))), + fun((part(FTJ)) -> binary()), + fun((binary()) -> binary()), + fun((binary()) -> binary()), + fun((binary()) -> binary()) +) -> gap@styled_comparison:styled_comparison(). +to_strings( + First, + Second, + Serializer, + First_highlight, + Second_highlight, + No_highlight +) -> + First_styled = begin + _pipe = First, + gleam@list:fold(_pipe, <<""/utf8>>, fun(Str, Match) -> case Match of + {match, Item} -> + Serializer({part, Str, Item, No_highlight}); + + {no_match, Item@1} -> + Serializer({part, Str, Item@1, First_highlight}) + end end) + end, + Second_styled = begin + _pipe@1 = Second, + gleam@list:fold( + _pipe@1, + <<""/utf8>>, + fun(Str@1, Match@1) -> case Match@1 of + {match, Item@2} -> + Serializer({part, Str@1, Item@2, No_highlight}); + + {no_match, Item@3} -> + Serializer({part, Str@1, Item@3, Second_highlight}) + end end + ) + end, + {styled_comparison, + Serializer({all, First_styled}), + Serializer({all, Second_styled})}. + +-spec to_styled_comparison(styling(any())) -> gap@styled_comparison:styled_comparison(). +to_styled_comparison(Styling) -> + Highlight = begin + _pipe = erlang:element(4, Styling), + gleam@option:unwrap( + _pipe, + {highlighters, + fun first_highlight_default/1, + fun second_highlight_default/1, + fun no_highlight/1} + ) + end, + case erlang:element(2, Styling) of + {string_comparison, First, Second} -> + to_strings( + First, + Second, + fun string_serializer/1, + erlang:element(2, Highlight), + erlang:element(3, Highlight), + erlang:element(4, Highlight) + ); + + {list_comparison, First@1, Second@1} -> + to_strings( + First@1, + Second@1, + gleam@option:unwrap( + erlang:element(3, Styling), + fun generic_serializer/1 + ), + erlang:element(2, Highlight), + erlang:element(3, Highlight), + erlang:element(4, Highlight) + ) + end. diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap_ffi.mjs b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap_ffi.mjs new file mode 100644 index 0000000..235c80b --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap_ffi.mjs @@ -0,0 +1,431 @@ +import { + Error, + List, + Ok, + inspect, + toList, + makeError, + isEqual, +} from "./gleam.mjs"; +import * as $option from "../gleam_stdlib/gleam/option.mjs"; + +const HASHCODE_CACHE = new WeakMap(); +const Nil = undefined; + +class MutableMap { + static #hashcode_cache = new WeakMap(); + + static hash(value) { + let existing = this.#hashcode_cache.get(value); + if (existing) { + return existing; + } else if (value instanceof Object) { + let hashcode = inspect(value); + HASHCODE_CACHE.set(value, hashcode); + return hashcode; + } else { + return value.toString(); + } + } + + constructor() { + this.entries = new globalThis.Map(); + } + + get size() { + return this.entries.size; + } + + inspect() { + let entries = [...this.entries.values()] + .map((pair) => inspect(pair)) + .join(", "); + return `map.from_list([${entries}])`; + } + + toList() { + return List.fromArray([...this.entries.values()]); + } + + insert(k, v) { + this.entries.set(MutableMap.hash(k), [k, v]); + return this; + } + + delete(k) { + this.entries.delete(MutableMap.hash(k)); + return this; + } + + get(key) { + let code = MutableMap.hash(key); + if (this.entries.has(code)) { + return new Ok(this.entries.get(code)[1]); + } else { + return new Error(Nil); + } + } +} + +export function new_mutable_map() { + return new MutableMap(); +} + +export function mutable_map_size(map) { + return map.size; +} + +export function mutable_map_to_list(map) { + return map.toList(); +} + +export function mutable_map_remove(k, map) { + return map.delete(k); +} + +export function mutable_map_get(map, key) { + return map.get(key); +} + +export function mutable_map_insert(key, value, map) { + return map.insert(key, value); +} + +// From map.mjs + +export function size(map) { + return mutable_map_size(map); +} + +export function to_list(map) { + return mutable_map_to_list(map); +} + +export function new$() { + return new_mutable_map(); +} + +export function get(from, get) { + return mutable_map_get(from, get); +} + +function do_has_key(key, map) { + return !isEqual(get(map, key), new Error(undefined)); +} + +export function has_key(map, key) { + return do_has_key(key, map); +} + +export function insert(map, key, value) { + return mutable_map_insert(key, value, map); +} + +function insert_pair(map, pair) { + return insert(map, pair[0], pair[1]); +} + +export function update(map, key, fun) { + let _pipe = map; + let _pipe$1 = get(_pipe, key); + let _pipe$2 = $option.from_result(_pipe$1); + let _pipe$3 = fun(_pipe$2); + return ((_capture) => { + return insert(map, key, _capture); + })(_pipe$3); +} + +export function delete$(map, key) { + return mutable_map_remove(key, map); +} + +function fold_list_of_pair(loop$list, loop$initial) { + while (true) { + let list = loop$list; + let initial = loop$initial; + if (list.hasLength(0)) { + return initial; + } else if (list.atLeastLength(1)) { + let x = list.head; + let rest = list.tail; + loop$list = rest; + loop$initial = insert(initial, x[0], x[1]); + } else { + throw makeError( + "case_no_match", + "gleam/map", + 98, + "fold_list_of_pair", + "No case clause matched", + { values: [list] } + ); + } + } +} + +function do_from_list(list) { + return fold_list_of_pair(list, new$()); +} + +export function from_list(list) { + return do_from_list(list); +} + +function do_fold(loop$list, loop$initial, loop$fun) { + while (true) { + let list = loop$list; + let initial = loop$initial; + let fun = loop$fun; + if (list.hasLength(0)) { + return initial; + } else if (list.atLeastLength(1)) { + let k = list.head[0]; + let v = list.head[1]; + let tail = list.tail; + loop$list = tail; + loop$initial = fun(initial, k, v); + loop$fun = fun; + } else { + throw makeError( + "case_no_match", + "gleam/map", + 558, + "do_fold", + "No case clause matched", + { values: [list] } + ); + } + } +} + +export function fold(map, initial, fun) { + let _pipe = map; + let _pipe$1 = to_list(_pipe); + return do_fold(_pipe$1, initial, fun); +} + +function do_map_values(f, map) { + let f$1 = (map, k, v) => { + return insert(map, k, f(k, v)); + }; + let _pipe = map; + return fold(_pipe, new$(), f$1); +} + +export function map_values(map, fun) { + return do_map_values(fun, map); +} + +function do_filter(f, map) { + let insert$1 = (map, k, v) => { + let $ = f(k, v); + if ($) { + return insert(map, k, v); + } else { + return map; + } + }; + let _pipe = map; + return fold(_pipe, new$(), insert$1); +} + +export function filter(map, property) { + return do_filter(property, map); +} + +function do_keys_acc(loop$list, loop$acc) { + while (true) { + let list = loop$list; + let acc = loop$acc; + if (list.hasLength(0)) { + return reverse_and_concat(acc, toList([])); + } else if (list.atLeastLength(1)) { + let x = list.head; + let xs = list.tail; + loop$list = xs; + loop$acc = toList([x[0]], acc); + } else { + throw makeError( + "case_no_match", + "gleam/map", + 276, + "do_keys_acc", + "No case clause matched", + { values: [list] } + ); + } + } +} + +function do_keys(map) { + let list_of_pairs = (() => { + let _pipe = map; + return to_list(_pipe); + })(); + return do_keys_acc(list_of_pairs, toList([])); +} + +export function keys(map) { + return do_keys(map); +} + +function reverse_and_concat(loop$remaining, loop$accumulator) { + while (true) { + let remaining = loop$remaining; + let accumulator = loop$accumulator; + if (remaining.hasLength(0)) { + return accumulator; + } else if (remaining.atLeastLength(1)) { + let item = remaining.head; + let rest = remaining.tail; + loop$remaining = rest; + loop$accumulator = toList([item], accumulator); + } else { + throw makeError( + "case_no_match", + "gleam/map", + 269, + "reverse_and_concat", + "No case clause matched", + { values: [remaining] } + ); + } + } +} + +function do_values_acc(loop$list, loop$acc) { + while (true) { + let list = loop$list; + let acc = loop$acc; + if (list.hasLength(0)) { + return reverse_and_concat(acc, toList([])); + } else if (list.atLeastLength(1)) { + let x = list.head; + let xs = list.tail; + loop$list = xs; + loop$acc = toList([x[1]], acc); + } else { + throw makeError( + "case_no_match", + "gleam/map", + 314, + "do_values_acc", + "No case clause matched", + { values: [list] } + ); + } + } +} + +function do_values(map) { + let list_of_pairs = (() => { + let _pipe = map; + return to_list(_pipe); + })(); + return do_values_acc(list_of_pairs, toList([])); +} + +export function values(map) { + return do_values(map); +} + +function insert_taken(loop$map, loop$desired_keys, loop$acc) { + while (true) { + let map = loop$map; + let desired_keys = loop$desired_keys; + let acc = loop$acc; + let insert$1 = (taken, key) => { + let $ = get(map, key); + if ($.isOk()) { + let value = $[0]; + return insert(taken, key, value); + } else { + return taken; + } + }; + if (desired_keys.hasLength(0)) { + return acc; + } else if (desired_keys.atLeastLength(1)) { + let x = desired_keys.head; + let xs = desired_keys.tail; + loop$map = map; + loop$desired_keys = xs; + loop$acc = insert$1(acc, x); + } else { + throw makeError( + "case_no_match", + "gleam/map", + 411, + "insert_taken", + "No case clause matched", + { values: [desired_keys] } + ); + } + } +} + +function do_take(desired_keys, map) { + return insert_taken(map, desired_keys, new$()); +} + +export function take(map, desired_keys) { + return do_take(desired_keys, map); +} + +function fold_inserts(loop$new_entries, loop$map) { + while (true) { + let new_entries = loop$new_entries; + let map = loop$map; + if (new_entries.hasLength(0)) { + return map; + } else if (new_entries.atLeastLength(1)) { + let x = new_entries.head; + let xs = new_entries.tail; + loop$new_entries = xs; + loop$map = insert_pair(map, x); + } else { + throw makeError( + "case_no_match", + "gleam/map", + 451, + "fold_inserts", + "No case clause matched", + { values: [new_entries] } + ); + } + } +} + +function do_merge(map, new_entries) { + let _pipe = new_entries; + let _pipe$1 = to_list(_pipe); + return fold_inserts(_pipe$1, map); +} + +export function merge(map, new_entries) { + return do_merge(map, new_entries); +} + +export function drop(loop$map, loop$disallowed_keys) { + while (true) { + let map = loop$map; + let disallowed_keys = loop$disallowed_keys; + if (disallowed_keys.hasLength(0)) { + return map; + } else if (disallowed_keys.atLeastLength(1)) { + let x = disallowed_keys.head; + let xs = disallowed_keys.tail; + loop$map = delete$(map, x); + loop$disallowed_keys = xs; + } else { + throw makeError( + "case_no_match", + "gleam/map", + 514, + "drop", + "No case clause matched", + { values: [disallowed_keys] } + ); + } + } +} diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gleam@@compile.erl new file mode 100644 index 0000000..543db88 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gleam@@compile.erl @@ -0,0 +1,157 @@ +#!/usr/bin/env escript + +% TODO: Don't concurrently print warnings and errors +% TODO: Some tests + +-record(arguments, {lib = "./", out = "./", modules = []}). + +main(Args) -> + #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args), + IsElixirModule = fun(Module) -> + filename:extension(Module) =:= ".ex" + end, + {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules), + ok = configure_logging(), + ok = add_lib_to_erlang_path(Lib), + ok = filelib:ensure_dir([Out, $/]), + {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out), + {ElixirOk, _ElixirBeams} = case ErlangOk of + true -> compile_elixir(ElixirModules, Out); + false -> {false, []} + end, + case ErlangOk and ElixirOk of + true -> ok; + false -> erlang:halt(1) + end. + +compile_erlang(Modules, Out) -> + Workers = start_compiler_workers(Out), + ok = producer_loop(Modules, Workers), + collect_results({true, []}). + +collect_results(Acc = {Result, Beams}) -> + receive + {compiled, Beam} -> collect_results({Result, [Beam | Beams]}); + failed -> collect_results({false, Beams}) + after 0 -> Acc + end. + +producer_loop([], 0) -> + ok; +producer_loop([], Workers) -> + receive + {work_please, _} -> producer_loop([], Workers - 1) + end; +producer_loop([Module | Modules], Workers) -> + receive + {work_please, Worker} -> + erlang:send(Worker, {module, Module}), + producer_loop(Modules, Workers) + end. + +start_compiler_workers(Out) -> + Parent = self(), + NumSchedulers = erlang:system_info(schedulers), + SpawnWorker = fun(_) -> + erlang:spawn_link(fun() -> worker_loop(Parent, Out) end) + end, + lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)), + NumSchedulers. + +worker_loop(Parent, Out) -> + Options = [report_errors, report_warnings, debug_info, {outdir, Out}], + erlang:send(Parent, {work_please, self()}), + receive + {module, Module} -> + log({compiling, Module}), + case compile:file(Module, Options) of + {ok, ModuleName} -> + Beam = filename:join(Out, ModuleName) ++ ".beam", + Message = {compiled, Beam}, + log(Message), + erlang:send(Parent, Message); + error -> + log({failed, Module}), + erlang:send(Parent, failed) + end, + worker_loop(Parent, Out) + end. + +compile_elixir(Modules, Out) -> + Error = [ + "The program elixir was not found. Is it installed?", + $\n, + "Documentation for installing Elixir can be viewed here:", + $\n, + "https://elixir-lang.org/install.html" + ], + case Modules of + [] -> {true, []}; + _ -> + log({starting, "compiler.app"}), + ok = application:start(compiler), + log({starting, "elixir.app"}), + case application:start(elixir) of + ok -> do_compile_elixir(Modules, Out); + _ -> + io:put_chars(standard_error, [Error, $\n]), + {false, []} + end + end. + +do_compile_elixir(Modules, Out) -> + ModuleBins = lists:map(fun(Module) -> + log({compiling, Module}), + list_to_binary(Module) + end, Modules), + OutBin = list_to_binary(Out), + Options = [{dest, OutBin}], + % Silence "redefining module" warnings. + % Compiled modules in the build directory are added to the code path. + % These warnings result from recompiling loaded modules. + % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation. + 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]), + case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of + {ok, ModuleAtoms, _} -> + ToBeam = fun(ModuleAtom) -> + Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam", + log({compiled, Beam}), + Beam + end, + {true, lists:map(ToBeam, ModuleAtoms)}; + {error, Errors, _} -> + % Log all filenames associated with modules that failed to compile. + % Note: The compiler prints compilation errors upon encountering them. + ErrorFiles = lists:usort([File || {File, _, _} <- Errors]), + Log = fun(File) -> + log({failed, binary_to_list(File)}) + end, + lists:foreach(Log, ErrorFiles), + {false, []}; + _ -> {false, []} + end. + +add_lib_to_erlang_path(Lib) -> + code:add_paths(filelib:wildcard([Lib, "/*/ebin"])). + +parse(Args) -> + parse(Args, #arguments{}). + +parse([], Arguments) -> + Arguments; +parse(["--lib", Lib | Rest], Arguments) -> + parse(Rest, Arguments#arguments{lib = Lib}); +parse(["--out", Out | Rest], Arguments) -> + parse(Rest, Arguments#arguments{out = Out}); +parse([Module | Rest], Arguments = #arguments{modules = Modules}) -> + parse(Rest, Arguments#arguments{modules = [Module | Modules]}). + +configure_logging() -> + Enabled = os:getenv("GLEAM_LOG") /= false, + persistent_term:put(gleam_logging_enabled, Enabled). + +log(Term) -> + case persistent_term:get(gleam_logging_enabled) of + true -> erlang:display(Term), ok; + false -> ok + end. diff --git a/aoc2023/build/dev/erlang/gap/ebin/gap.app b/aoc2023/build/dev/erlang/gap/ebin/gap.app new file mode 100644 index 0000000..ae37254 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/ebin/gap.app @@ -0,0 +1,8 @@ +{application, gap, [ + {vsn, "1.0.1"}, + {applications, [gleam_community_ansi, + gleam_stdlib]}, + {description, "A Gleam library for comparing strings/lists and producing a textual (styled) representation of the differences."}, + {modules, []}, + {registered, []} +]}. diff --git a/aoc2023/build/dev/erlang/gap/ebin/gap.beam b/aoc2023/build/dev/erlang/gap/ebin/gap.beam Binary files differnew file mode 100644 index 0000000..e819167 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/ebin/gap.beam diff --git a/aoc2023/build/dev/erlang/gap/ebin/gap@comparison.beam b/aoc2023/build/dev/erlang/gap/ebin/gap@comparison.beam Binary files differnew file mode 100644 index 0000000..50227cb --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/ebin/gap@comparison.beam diff --git a/aoc2023/build/dev/erlang/gap/ebin/gap@myers.beam b/aoc2023/build/dev/erlang/gap/ebin/gap@myers.beam Binary files differnew file mode 100644 index 0000000..248a896 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/ebin/gap@myers.beam diff --git a/aoc2023/build/dev/erlang/gap/ebin/gap@styled_comparison.beam b/aoc2023/build/dev/erlang/gap/ebin/gap@styled_comparison.beam Binary files differnew file mode 100644 index 0000000..5d56885 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/ebin/gap@styled_comparison.beam diff --git a/aoc2023/build/dev/erlang/gap/ebin/gap@styling.beam b/aoc2023/build/dev/erlang/gap/ebin/gap@styling.beam Binary files differnew file mode 100644 index 0000000..d2d0cc3 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/ebin/gap@styling.beam diff --git a/aoc2023/build/dev/erlang/gap/include/gap@comparison_ListComparison.hrl b/aoc2023/build/dev/erlang/gap/include/gap@comparison_ListComparison.hrl new file mode 100644 index 0000000..5e4b20d --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/include/gap@comparison_ListComparison.hrl @@ -0,0 +1,4 @@ +-record(list_comparison, { + first :: list(gap@comparison:match(list(any()))), + second :: list(gap@comparison:match(list(any()))) +}). diff --git a/aoc2023/build/dev/erlang/gap/include/gap@comparison_Match.hrl b/aoc2023/build/dev/erlang/gap/include/gap@comparison_Match.hrl new file mode 100644 index 0000000..f1225dd --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/include/gap@comparison_Match.hrl @@ -0,0 +1 @@ +-record(match, {item :: any()}). diff --git a/aoc2023/build/dev/erlang/gap/include/gap@comparison_NoMatch.hrl b/aoc2023/build/dev/erlang/gap/include/gap@comparison_NoMatch.hrl new file mode 100644 index 0000000..742783b --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/include/gap@comparison_NoMatch.hrl @@ -0,0 +1 @@ +-record(no_match, {item :: any()}). diff --git a/aoc2023/build/dev/erlang/gap/include/gap@comparison_StringComparison.hrl b/aoc2023/build/dev/erlang/gap/include/gap@comparison_StringComparison.hrl new file mode 100644 index 0000000..c0b1a75 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/include/gap@comparison_StringComparison.hrl @@ -0,0 +1,4 @@ +-record(string_comparison, { + first :: list(gap@comparison:match(list(binary()))), + second :: list(gap@comparison:match(list(binary()))) +}). diff --git a/aoc2023/build/dev/erlang/gap/include/gap@styled_comparison_StyledComparison.hrl b/aoc2023/build/dev/erlang/gap/include/gap@styled_comparison_StyledComparison.hrl new file mode 100644 index 0000000..0e7c64a --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/include/gap@styled_comparison_StyledComparison.hrl @@ -0,0 +1 @@ +-record(styled_comparison, {first :: binary(), second :: binary()}). diff --git a/aoc2023/build/dev/erlang/gap/include/gap@styling_All.hrl b/aoc2023/build/dev/erlang/gap/include/gap@styling_All.hrl new file mode 100644 index 0000000..c11a9a6 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/include/gap@styling_All.hrl @@ -0,0 +1 @@ +-record(all, {all :: binary()}). diff --git a/aoc2023/build/dev/erlang/gap/include/gap@styling_Highlighters.hrl b/aoc2023/build/dev/erlang/gap/include/gap@styling_Highlighters.hrl new file mode 100644 index 0000000..6e073b3 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/include/gap@styling_Highlighters.hrl @@ -0,0 +1,5 @@ +-record(highlighters, { + first :: fun((binary()) -> binary()), + second :: fun((binary()) -> binary()), + matching :: fun((binary()) -> binary()) +}). diff --git a/aoc2023/build/dev/erlang/gap/include/gap@styling_Part.hrl b/aoc2023/build/dev/erlang/gap/include/gap@styling_Part.hrl new file mode 100644 index 0000000..db45796 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/include/gap@styling_Part.hrl @@ -0,0 +1,5 @@ +-record(part, { + acc :: binary(), + part :: list(any()), + highlight :: fun((binary()) -> binary()) +}). diff --git a/aoc2023/build/dev/erlang/gap/include/gap@styling_Styling.hrl b/aoc2023/build/dev/erlang/gap/include/gap@styling_Styling.hrl new file mode 100644 index 0000000..a7341c6 --- /dev/null +++ b/aoc2023/build/dev/erlang/gap/include/gap@styling_Styling.hrl @@ -0,0 +1,5 @@ +-record(styling, { + comparison :: gap@comparison:comparison(any()), + serializer :: gleam@option:option(fun((gap@styling:part(any())) -> binary())), + highlight :: gleam@option:option(gap@styling:highlighters()) +}). diff --git a/aoc2023/build/dev/erlang/gleam.lock b/aoc2023/build/dev/erlang/gleam.lock new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam.lock diff --git a/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam@@compile.erl new file mode 100644 index 0000000..543db88 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam@@compile.erl @@ -0,0 +1,157 @@ +#!/usr/bin/env escript + +% TODO: Don't concurrently print warnings and errors +% TODO: Some tests + +-record(arguments, {lib = "./", out = "./", modules = []}). + +main(Args) -> + #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args), + IsElixirModule = fun(Module) -> + filename:extension(Module) =:= ".ex" + end, + {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules), + ok = configure_logging(), + ok = add_lib_to_erlang_path(Lib), + ok = filelib:ensure_dir([Out, $/]), + {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out), + {ElixirOk, _ElixirBeams} = case ErlangOk of + true -> compile_elixir(ElixirModules, Out); + false -> {false, []} + end, + case ErlangOk and ElixirOk of + true -> ok; + false -> erlang:halt(1) + end. + +compile_erlang(Modules, Out) -> + Workers = start_compiler_workers(Out), + ok = producer_loop(Modules, Workers), + collect_results({true, []}). + +collect_results(Acc = {Result, Beams}) -> + receive + {compiled, Beam} -> collect_results({Result, [Beam | Beams]}); + failed -> collect_results({false, Beams}) + after 0 -> Acc + end. + +producer_loop([], 0) -> + ok; +producer_loop([], Workers) -> + receive + {work_please, _} -> producer_loop([], Workers - 1) + end; +producer_loop([Module | Modules], Workers) -> + receive + {work_please, Worker} -> + erlang:send(Worker, {module, Module}), + producer_loop(Modules, Workers) + end. + +start_compiler_workers(Out) -> + Parent = self(), + NumSchedulers = erlang:system_info(schedulers), + SpawnWorker = fun(_) -> + erlang:spawn_link(fun() -> worker_loop(Parent, Out) end) + end, + lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)), + NumSchedulers. + +worker_loop(Parent, Out) -> + Options = [report_errors, report_warnings, debug_info, {outdir, Out}], + erlang:send(Parent, {work_please, self()}), + receive + {module, Module} -> + log({compiling, Module}), + case compile:file(Module, Options) of + {ok, ModuleName} -> + Beam = filename:join(Out, ModuleName) ++ ".beam", + Message = {compiled, Beam}, + log(Message), + erlang:send(Parent, Message); + error -> + log({failed, Module}), + erlang:send(Parent, failed) + end, + worker_loop(Parent, Out) + end. + +compile_elixir(Modules, Out) -> + Error = [ + "The program elixir was not found. Is it installed?", + $\n, + "Documentation for installing Elixir can be viewed here:", + $\n, + "https://elixir-lang.org/install.html" + ], + case Modules of + [] -> {true, []}; + _ -> + log({starting, "compiler.app"}), + ok = application:start(compiler), + log({starting, "elixir.app"}), + case application:start(elixir) of + ok -> do_compile_elixir(Modules, Out); + _ -> + io:put_chars(standard_error, [Error, $\n]), + {false, []} + end + end. + +do_compile_elixir(Modules, Out) -> + ModuleBins = lists:map(fun(Module) -> + log({compiling, Module}), + list_to_binary(Module) + end, Modules), + OutBin = list_to_binary(Out), + Options = [{dest, OutBin}], + % Silence "redefining module" warnings. + % Compiled modules in the build directory are added to the code path. + % These warnings result from recompiling loaded modules. + % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation. + 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]), + case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of + {ok, ModuleAtoms, _} -> + ToBeam = fun(ModuleAtom) -> + Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam", + log({compiled, Beam}), + Beam + end, + {true, lists:map(ToBeam, ModuleAtoms)}; + {error, Errors, _} -> + % Log all filenames associated with modules that failed to compile. + % Note: The compiler prints compilation errors upon encountering them. + ErrorFiles = lists:usort([File || {File, _, _} <- Errors]), + Log = fun(File) -> + log({failed, binary_to_list(File)}) + end, + lists:foreach(Log, ErrorFiles), + {false, []}; + _ -> {false, []} + end. + +add_lib_to_erlang_path(Lib) -> + code:add_paths(filelib:wildcard([Lib, "/*/ebin"])). + +parse(Args) -> + parse(Args, #arguments{}). + +parse([], Arguments) -> + Arguments; +parse(["--lib", Lib | Rest], Arguments) -> + parse(Rest, Arguments#arguments{lib = Lib}); +parse(["--out", Out | Rest], Arguments) -> + parse(Rest, Arguments#arguments{out = Out}); +parse([Module | Rest], Arguments = #arguments{modules = Modules}) -> + parse(Rest, Arguments#arguments{modules = [Module | Modules]}). + +configure_logging() -> + Enabled = os:getenv("GLEAM_LOG") /= false, + persistent_term:put(gleam_logging_enabled, Enabled). + +log(Term) -> + case persistent_term:get(gleam_logging_enabled) of + true -> erlang:display(Term), ok; + false -> ok + end. diff --git a/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache b/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache Binary files differnew file mode 100644 index 0000000..d77f2c9 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache diff --git a/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache_meta b/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache_meta Binary files differnew file mode 100644 index 0000000..a01f4e8 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.erl b/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.erl new file mode 100644 index 0000000..8b7a4c9 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.erl @@ -0,0 +1,263 @@ +-module(gleam_community@ansi). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([reset/1, bold/1, dim/1, italic/1, underline/1, inverse/1, hidden/1, strikethrough/1, black/1, red/1, green/1, yellow/1, blue/1, magenta/1, cyan/1, white/1, bright_black/1, grey/1, gray/1, bright_red/1, bright_green/1, bright_yellow/1, bright_blue/1, bright_magenta/1, bright_cyan/1, bright_white/1, hex/2, pink/1, colour/2, color/2, bg_black/1, bg_red/1, bg_green/1, bg_yellow/1, bg_blue/1, bg_magenta/1, bg_cyan/1, bg_white/1, bg_bright_black/1, bg_bright_red/1, bg_bright_green/1, bg_bright_yellow/1, bg_bright_blue/1, bg_bright_magenta/1, bg_bright_cyan/1, bg_bright_white/1, bg_hex/2, bg_pink/1, bg_colour/2, bg_color/2]). +-export_type([code/0]). + +-type code() :: {code, binary(), binary(), binary()}. + +-spec code(list(integer()), integer()) -> code(). +code(Open, Close) -> + Close_str = gleam@int:to_string(Close), + Open_strs = gleam@list:map(Open, fun gleam@int:to_string/1), + {code, + <<<<<<""/utf8, "["/utf8>>/binary, + (gleam@string:join(Open_strs, <<";"/utf8>>))/binary>>/binary, + "m"/utf8>>, + <<<<<<""/utf8, "["/utf8>>/binary, Close_str/binary>>/binary, "m"/utf8>>, + <<<<<<""/utf8, "["/utf8>>/binary, Close_str/binary>>/binary, "m"/utf8>>}. + +-spec run(binary(), code()) -> binary(). +run(Text, Code) -> + <<<<(erlang:element(2, Code))/binary, + (gleam@string:replace( + Text, + erlang:element(4, Code), + erlang:element(2, Code) + ))/binary>>/binary, + (erlang:element(3, Code))/binary>>. + +-spec reset(binary()) -> binary(). +reset(Text) -> + run(Text, code([0], 0)). + +-spec bold(binary()) -> binary(). +bold(Text) -> + run(Text, code([1], 22)). + +-spec dim(binary()) -> binary(). +dim(Text) -> + run(Text, code([2], 22)). + +-spec italic(binary()) -> binary(). +italic(Text) -> + run(Text, code([3], 23)). + +-spec underline(binary()) -> binary(). +underline(Text) -> + run(Text, code([4], 24)). + +-spec inverse(binary()) -> binary(). +inverse(Text) -> + run(Text, code([7], 27)). + +-spec hidden(binary()) -> binary(). +hidden(Text) -> + run(Text, code([8], 28)). + +-spec strikethrough(binary()) -> binary(). +strikethrough(Text) -> + run(Text, code([9], 29)). + +-spec black(binary()) -> binary(). +black(Text) -> + run(Text, code([30], 39)). + +-spec red(binary()) -> binary(). +red(Text) -> + run(Text, code([31], 39)). + +-spec green(binary()) -> binary(). +green(Text) -> + run(Text, code([32], 39)). + +-spec yellow(binary()) -> binary(). +yellow(Text) -> + run(Text, code([33], 39)). + +-spec blue(binary()) -> binary(). +blue(Text) -> + run(Text, code([34], 39)). + +-spec magenta(binary()) -> binary(). +magenta(Text) -> + run(Text, code([35], 39)). + +-spec cyan(binary()) -> binary(). +cyan(Text) -> + run(Text, code([36], 39)). + +-spec white(binary()) -> binary(). +white(Text) -> + run(Text, code([37], 39)). + +-spec bright_black(binary()) -> binary(). +bright_black(Text) -> + run(Text, code([90], 39)). + +-spec grey(binary()) -> binary(). +grey(Text) -> + bright_black(Text). + +-spec gray(binary()) -> binary(). +gray(Text) -> + bright_black(Text). + +-spec bright_red(binary()) -> binary(). +bright_red(Text) -> + run(Text, code([91], 39)). + +-spec bright_green(binary()) -> binary(). +bright_green(Text) -> + run(Text, code([92], 39)). + +-spec bright_yellow(binary()) -> binary(). +bright_yellow(Text) -> + run(Text, code([93], 39)). + +-spec bright_blue(binary()) -> binary(). +bright_blue(Text) -> + run(Text, code([94], 39)). + +-spec bright_magenta(binary()) -> binary(). +bright_magenta(Text) -> + run(Text, code([95], 39)). + +-spec bright_cyan(binary()) -> binary(). +bright_cyan(Text) -> + run(Text, code([96], 39)). + +-spec bright_white(binary()) -> binary(). +bright_white(Text) -> + run(Text, code([97], 39)). + +-spec hex(binary(), integer()) -> binary(). +hex(Text, Colour) -> + Colour@1 = gleam@int:clamp(Colour, 16#0, 16#ffffff), + run( + Text, + code( + [38, + 2, + begin + _pipe = erlang:'bsr'(Colour@1, 16), + erlang:'band'(_pipe, 16#ff) + end, + begin + _pipe@1 = erlang:'bsr'(Colour@1, 8), + erlang:'band'(_pipe@1, 16#ff) + end, + erlang:'band'(Colour@1, 16#ff)], + 39 + ) + ). + +-spec pink(binary()) -> binary(). +pink(Text) -> + hex(Text, 16#ffaff3). + +-spec colour(binary(), gleam_community@colour:colour()) -> binary(). +colour(Text, Colour) -> + Hex_colour = gleam_community@colour:to_rgb_hex(Colour), + hex(Text, Hex_colour). + +-spec color(binary(), gleam_community@colour:colour()) -> binary(). +color(Text, Color) -> + colour(Text, Color). + +-spec bg_black(binary()) -> binary(). +bg_black(Text) -> + run(Text, code([40], 49)). + +-spec bg_red(binary()) -> binary(). +bg_red(Text) -> + run(Text, code([41], 49)). + +-spec bg_green(binary()) -> binary(). +bg_green(Text) -> + run(Text, code([42], 49)). + +-spec bg_yellow(binary()) -> binary(). +bg_yellow(Text) -> + run(Text, code([43], 49)). + +-spec bg_blue(binary()) -> binary(). +bg_blue(Text) -> + run(Text, code([44], 49)). + +-spec bg_magenta(binary()) -> binary(). +bg_magenta(Text) -> + run(Text, code([45], 49)). + +-spec bg_cyan(binary()) -> binary(). +bg_cyan(Text) -> + run(Text, code([46], 49)). + +-spec bg_white(binary()) -> binary(). +bg_white(Text) -> + run(Text, code([47], 49)). + +-spec bg_bright_black(binary()) -> binary(). +bg_bright_black(Text) -> + run(Text, code([100], 49)). + +-spec bg_bright_red(binary()) -> binary(). +bg_bright_red(Text) -> + run(Text, code([101], 49)). + +-spec bg_bright_green(binary()) -> binary(). +bg_bright_green(Text) -> + run(Text, code([102], 49)). + +-spec bg_bright_yellow(binary()) -> binary(). +bg_bright_yellow(Text) -> + run(Text, code([103], 49)). + +-spec bg_bright_blue(binary()) -> binary(). +bg_bright_blue(Text) -> + run(Text, code([104], 49)). + +-spec bg_bright_magenta(binary()) -> binary(). +bg_bright_magenta(Text) -> + run(Text, code([105], 49)). + +-spec bg_bright_cyan(binary()) -> binary(). +bg_bright_cyan(Text) -> + run(Text, code([106], 49)). + +-spec bg_bright_white(binary()) -> binary(). +bg_bright_white(Text) -> + run(Text, code([107], 49)). + +-spec bg_hex(binary(), integer()) -> binary(). +bg_hex(Text, Colour) -> + run( + Text, + code( + [48, + 2, + begin + _pipe = erlang:'bsr'(Colour, 16), + erlang:'band'(_pipe, 16#ff) + end, + begin + _pipe@1 = erlang:'bsr'(Colour, 8), + erlang:'band'(_pipe@1, 16#ff) + end, + erlang:'band'(Colour, 16#ff)], + 49 + ) + ). + +-spec bg_pink(binary()) -> binary(). +bg_pink(Text) -> + bg_hex(Text, 16#ffaff3). + +-spec bg_colour(binary(), gleam_community@colour:colour()) -> binary(). +bg_colour(Text, Colour) -> + Hex_colour = gleam_community@colour:to_rgb_hex(Colour), + bg_hex(Text, Hex_colour). + +-spec bg_color(binary(), gleam_community@colour:colour()) -> binary(). +bg_color(Text, Colour) -> + bg_colour(Text, Colour). diff --git a/aoc2023/build/dev/erlang/gleam_community_ansi/ebin/gleam_community@ansi.beam b/aoc2023/build/dev/erlang/gleam_community_ansi/ebin/gleam_community@ansi.beam Binary files differnew file mode 100644 index 0000000..f59ef96 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_ansi/ebin/gleam_community@ansi.beam diff --git a/aoc2023/build/dev/erlang/gleam_community_ansi/ebin/gleam_community_ansi.app b/aoc2023/build/dev/erlang/gleam_community_ansi/ebin/gleam_community_ansi.app new file mode 100644 index 0000000..90e4d4a --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_ansi/ebin/gleam_community_ansi.app @@ -0,0 +1,8 @@ +{application, gleam_community_ansi, [ + {vsn, "1.2.0"}, + {applications, [gleam_community_colour, + gleam_stdlib]}, + {description, "ANSI colours, formatting, and control codes"}, + {modules, []}, + {registered, []} +]}. diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam@@compile.erl new file mode 100644 index 0000000..543db88 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam@@compile.erl @@ -0,0 +1,157 @@ +#!/usr/bin/env escript + +% TODO: Don't concurrently print warnings and errors +% TODO: Some tests + +-record(arguments, {lib = "./", out = "./", modules = []}). + +main(Args) -> + #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args), + IsElixirModule = fun(Module) -> + filename:extension(Module) =:= ".ex" + end, + {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules), + ok = configure_logging(), + ok = add_lib_to_erlang_path(Lib), + ok = filelib:ensure_dir([Out, $/]), + {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out), + {ElixirOk, _ElixirBeams} = case ErlangOk of + true -> compile_elixir(ElixirModules, Out); + false -> {false, []} + end, + case ErlangOk and ElixirOk of + true -> ok; + false -> erlang:halt(1) + end. + +compile_erlang(Modules, Out) -> + Workers = start_compiler_workers(Out), + ok = producer_loop(Modules, Workers), + collect_results({true, []}). + +collect_results(Acc = {Result, Beams}) -> + receive + {compiled, Beam} -> collect_results({Result, [Beam | Beams]}); + failed -> collect_results({false, Beams}) + after 0 -> Acc + end. + +producer_loop([], 0) -> + ok; +producer_loop([], Workers) -> + receive + {work_please, _} -> producer_loop([], Workers - 1) + end; +producer_loop([Module | Modules], Workers) -> + receive + {work_please, Worker} -> + erlang:send(Worker, {module, Module}), + producer_loop(Modules, Workers) + end. + +start_compiler_workers(Out) -> + Parent = self(), + NumSchedulers = erlang:system_info(schedulers), + SpawnWorker = fun(_) -> + erlang:spawn_link(fun() -> worker_loop(Parent, Out) end) + end, + lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)), + NumSchedulers. + +worker_loop(Parent, Out) -> + Options = [report_errors, report_warnings, debug_info, {outdir, Out}], + erlang:send(Parent, {work_please, self()}), + receive + {module, Module} -> + log({compiling, Module}), + case compile:file(Module, Options) of + {ok, ModuleName} -> + Beam = filename:join(Out, ModuleName) ++ ".beam", + Message = {compiled, Beam}, + log(Message), + erlang:send(Parent, Message); + error -> + log({failed, Module}), + erlang:send(Parent, failed) + end, + worker_loop(Parent, Out) + end. + +compile_elixir(Modules, Out) -> + Error = [ + "The program elixir was not found. Is it installed?", + $\n, + "Documentation for installing Elixir can be viewed here:", + $\n, + "https://elixir-lang.org/install.html" + ], + case Modules of + [] -> {true, []}; + _ -> + log({starting, "compiler.app"}), + ok = application:start(compiler), + log({starting, "elixir.app"}), + case application:start(elixir) of + ok -> do_compile_elixir(Modules, Out); + _ -> + io:put_chars(standard_error, [Error, $\n]), + {false, []} + end + end. + +do_compile_elixir(Modules, Out) -> + ModuleBins = lists:map(fun(Module) -> + log({compiling, Module}), + list_to_binary(Module) + end, Modules), + OutBin = list_to_binary(Out), + Options = [{dest, OutBin}], + % Silence "redefining module" warnings. + % Compiled modules in the build directory are added to the code path. + % These warnings result from recompiling loaded modules. + % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation. + 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]), + case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of + {ok, ModuleAtoms, _} -> + ToBeam = fun(ModuleAtom) -> + Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam", + log({compiled, Beam}), + Beam + end, + {true, lists:map(ToBeam, ModuleAtoms)}; + {error, Errors, _} -> + % Log all filenames associated with modules that failed to compile. + % Note: The compiler prints compilation errors upon encountering them. + ErrorFiles = lists:usort([File || {File, _, _} <- Errors]), + Log = fun(File) -> + log({failed, binary_to_list(File)}) + end, + lists:foreach(Log, ErrorFiles), + {false, []}; + _ -> {false, []} + end. + +add_lib_to_erlang_path(Lib) -> + code:add_paths(filelib:wildcard([Lib, "/*/ebin"])). + +parse(Args) -> + parse(Args, #arguments{}). + +parse([], Arguments) -> + Arguments; +parse(["--lib", Lib | Rest], Arguments) -> + parse(Rest, Arguments#arguments{lib = Lib}); +parse(["--out", Out | Rest], Arguments) -> + parse(Rest, Arguments#arguments{out = Out}); +parse([Module | Rest], Arguments = #arguments{modules = Modules}) -> + parse(Rest, Arguments#arguments{modules = [Module | Modules]}). + +configure_logging() -> + Enabled = os:getenv("GLEAM_LOG") /= false, + persistent_term:put(gleam_logging_enabled, Enabled). + +log(Term) -> + case persistent_term:get(gleam_logging_enabled) of + true -> erlang:display(Term), ok; + false -> ok + end. diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache Binary files differnew file mode 100644 index 0000000..7de2dd3 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache_meta b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache_meta Binary files differnew file mode 100644 index 0000000..3584f7e --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.erl b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.erl new file mode 100644 index 0000000..ceaaaaa --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.erl @@ -0,0 +1,513 @@ +-module(gleam_community@colour). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([from_rgb255/3, from_rgb/3, from_rgba/4, from_hsla/4, from_hsl/3, from_rgb_hex/1, from_rgb_hex_string/1, from_rgba_hex/1, from_rgba_hex_string/1, to_rgba/1, to_hsla/1, to_css_rgba_string/1, to_rgba_hex/1, to_rgba_hex_string/1, to_rgb_hex/1, to_rgb_hex_string/1]). +-export_type([colour/0]). + +-opaque colour() :: {rgba, float(), float(), float(), float()} | + {hsla, float(), float(), float(), float()}. + +-spec valid_colour_value(float()) -> {ok, float()} | {error, nil}. +valid_colour_value(C) -> + case (C > 1.0) orelse (C < +0.0) of + true -> + {error, nil}; + + false -> + {ok, C} + end. + +-spec hue_to_rgb(float(), float(), float()) -> float(). +hue_to_rgb(Hue, M1, M2) -> + H = case Hue of + _ when Hue < +0.0 -> + Hue + 1.0; + + _ when Hue > 1.0 -> + Hue - 1.0; + + _ -> + Hue + end, + H_t_6 = H * 6.0, + H_t_2 = H * 2.0, + H_t_3 = H * 3.0, + case H of + _ when H_t_6 < 1.0 -> + M1 + (((M2 - M1) * H) * 6.0); + + _ when H_t_2 < 1.0 -> + M2; + + _ when H_t_3 < 2.0 -> + M1 + (((M2 - M1) * ((2.0 / 3.0) - H)) * 6.0); + + _ -> + M1 + end. + +-spec hex_string_to_int(binary()) -> {ok, integer()} | {error, nil}. +hex_string_to_int(Hex_string) -> + Hex = case Hex_string of + <<"#"/utf8, Hex_number/binary>> -> + Hex_number; + + <<"0x"/utf8, Hex_number@1/binary>> -> + Hex_number@1; + + _ -> + Hex_string + end, + _pipe = Hex, + _pipe@1 = gleam@string:lowercase(_pipe), + _pipe@2 = gleam@string:to_graphemes(_pipe@1), + _pipe@3 = gleam@list:reverse(_pipe@2), + gleam@list:index_fold( + _pipe@3, + {ok, 0}, + fun(Total, Char, Index) -> case Total of + {error, nil} -> + {error, nil}; + + {ok, V} -> + gleam@result:then(case Char of + <<"a"/utf8>> -> + {ok, 10}; + + <<"b"/utf8>> -> + {ok, 11}; + + <<"c"/utf8>> -> + {ok, 12}; + + <<"d"/utf8>> -> + {ok, 13}; + + <<"e"/utf8>> -> + {ok, 14}; + + <<"f"/utf8>> -> + {ok, 15}; + + _ -> + gleam@int:parse(Char) + end, fun(Num) -> + gleam@result:then( + gleam@int:power(16, gleam@int:to_float(Index)), + fun(Base) -> + {ok, + V + gleam@float:round( + gleam@int:to_float(Num) * Base + )} + end + ) + end) + end end + ). + +-spec hsla_to_rgba(float(), float(), float(), float()) -> {float(), + float(), + float(), + float()}. +hsla_to_rgba(H, S, L, A) -> + M2 = case L =< 0.5 of + true -> + L * (S + 1.0); + + false -> + (L + S) - (L * S) + end, + M1 = (L * 2.0) - M2, + R = hue_to_rgb(H + (1.0 / 3.0), M1, M2), + G = hue_to_rgb(H, M1, M2), + B = hue_to_rgb(H - (1.0 / 3.0), M1, M2), + {R, G, B, A}. + +-spec rgba_to_hsla(float(), float(), float(), float()) -> {float(), + float(), + float(), + float()}. +rgba_to_hsla(R, G, B, A) -> + Min_colour = gleam@float:min(R, gleam@float:min(G, B)), + Max_colour = gleam@float:max(R, gleam@float:max(G, B)), + H1 = case true of + _ when Max_colour =:= R -> + gleam@float:divide(G - B, Max_colour - Min_colour); + + _ when Max_colour =:= G -> + _pipe = gleam@float:divide(B - R, Max_colour - Min_colour), + gleam@result:then(_pipe, fun(D) -> {ok, 2.0 + D} end); + + _ -> + _pipe@1 = gleam@float:divide(R - G, Max_colour - Min_colour), + gleam@result:then(_pipe@1, fun(D@1) -> {ok, 4.0 + D@1} end) + end, + H2 = case H1 of + {ok, V} -> + {ok, V * (1.0 / 6.0)}; + + _ -> + H1 + end, + H3 = case H2 of + {ok, V@1} when V@1 < +0.0 -> + V@1 + 1.0; + + {ok, V@2} -> + V@2; + + _ -> + +0.0 + end, + L = (Min_colour + Max_colour) / 2.0, + S = case true of + _ when Min_colour =:= Max_colour -> + +0.0; + + _ when L < 0.5 -> + case (Max_colour + Min_colour) of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> (Max_colour - Min_colour) / Gleam@denominator + end; + + _ -> + case ((2.0 - Max_colour) - Min_colour) of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator@1 -> (Max_colour - Min_colour) / Gleam@denominator@1 + end + end, + {H3, S, L, A}. + +-spec from_rgb255(integer(), integer(), integer()) -> {ok, colour()} | + {error, nil}. +from_rgb255(Red, Green, Blue) -> + gleam@result:then( + begin + _pipe = Red, + _pipe@1 = gleam@int:to_float(_pipe), + _pipe@2 = gleam@float:divide(_pipe@1, 255.0), + gleam@result:then(_pipe@2, fun valid_colour_value/1) + end, + fun(R) -> + gleam@result:then( + begin + _pipe@3 = Green, + _pipe@4 = gleam@int:to_float(_pipe@3), + _pipe@5 = gleam@float:divide(_pipe@4, 255.0), + gleam@result:then(_pipe@5, fun valid_colour_value/1) + end, + fun(G) -> + gleam@result:then( + begin + _pipe@6 = Blue, + _pipe@7 = gleam@int:to_float(_pipe@6), + _pipe@8 = gleam@float:divide(_pipe@7, 255.0), + gleam@result:then(_pipe@8, fun valid_colour_value/1) + end, + fun(B) -> {ok, {rgba, R, G, B, 1.0}} end + ) + end + ) + end + ). + +-spec from_rgb(float(), float(), float()) -> {ok, colour()} | {error, nil}. +from_rgb(Red, Green, Blue) -> + gleam@result:then( + valid_colour_value(Red), + fun(R) -> + gleam@result:then( + valid_colour_value(Green), + fun(G) -> + gleam@result:then( + valid_colour_value(Blue), + fun(B) -> {ok, {rgba, R, G, B, 1.0}} end + ) + end + ) + end + ). + +-spec from_rgba(float(), float(), float(), float()) -> {ok, colour()} | + {error, nil}. +from_rgba(Red, Green, Blue, Alpha) -> + gleam@result:then( + valid_colour_value(Red), + fun(R) -> + gleam@result:then( + valid_colour_value(Green), + fun(G) -> + gleam@result:then( + valid_colour_value(Blue), + fun(B) -> + gleam@result:then( + valid_colour_value(Alpha), + fun(A) -> {ok, {rgba, R, G, B, A}} end + ) + end + ) + end + ) + end + ). + +-spec from_hsla(float(), float(), float(), float()) -> {ok, colour()} | + {error, nil}. +from_hsla(Hue, Saturation, Lightness, Alpha) -> + gleam@result:then( + valid_colour_value(Hue), + fun(H) -> + gleam@result:then( + valid_colour_value(Saturation), + fun(S) -> + gleam@result:then( + valid_colour_value(Lightness), + fun(L) -> + gleam@result:then( + valid_colour_value(Alpha), + fun(A) -> {ok, {hsla, H, S, L, A}} end + ) + end + ) + end + ) + end + ). + +-spec from_hsl(float(), float(), float()) -> {ok, colour()} | {error, nil}. +from_hsl(Hue, Saturation, Lightness) -> + from_hsla(Hue, Saturation, Lightness, 1.0). + +-spec from_rgb_hex(integer()) -> {ok, colour()} | {error, nil}. +from_rgb_hex(Hex) -> + case (Hex > 16#ffffff) orelse (Hex < 0) of + true -> + {error, nil}; + + false -> + R = begin + _pipe = erlang:'bsr'(Hex, 16), + erlang:'band'(_pipe, 16#ff) + end, + G = begin + _pipe@1 = erlang:'bsr'(Hex, 8), + erlang:'band'(_pipe@1, 16#ff) + end, + B = erlang:'band'(Hex, 16#ff), + from_rgb255(R, G, B) + end. + +-spec from_rgb_hex_string(binary()) -> {ok, colour()} | {error, nil}. +from_rgb_hex_string(Hex_string) -> + gleam@result:then( + hex_string_to_int(Hex_string), + fun(Hex_int) -> from_rgb_hex(Hex_int) end + ). + +-spec from_rgba_hex(integer()) -> {ok, colour()} | {error, nil}. +from_rgba_hex(Hex) -> + case (Hex > 16#ffffffff) orelse (Hex < 0) of + true -> + {error, nil}; + + false -> + _assert_subject = begin + _pipe = erlang:'bsr'(Hex, 24), + _pipe@1 = erlang:'band'(_pipe, 16#ff), + _pipe@2 = gleam@int:to_float(_pipe@1), + gleam@float:divide(_pipe@2, 255.0) + end, + {ok, R} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/colour"/utf8>>, + function => <<"from_rgba_hex"/utf8>>, + line => 588}) + end, + _assert_subject@1 = begin + _pipe@3 = erlang:'bsr'(Hex, 16), + _pipe@4 = erlang:'band'(_pipe@3, 16#ff), + _pipe@5 = gleam@int:to_float(_pipe@4), + gleam@float:divide(_pipe@5, 255.0) + end, + {ok, G} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/colour"/utf8>>, + function => <<"from_rgba_hex"/utf8>>, + line => 594}) + end, + _assert_subject@2 = begin + _pipe@6 = erlang:'bsr'(Hex, 8), + _pipe@7 = erlang:'band'(_pipe@6, 16#ff), + _pipe@8 = gleam@int:to_float(_pipe@7), + gleam@float:divide(_pipe@8, 255.0) + end, + {ok, B} = case _assert_subject@2 of + {ok, _} -> _assert_subject@2; + _assert_fail@2 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@2, + module => <<"gleam_community/colour"/utf8>>, + function => <<"from_rgba_hex"/utf8>>, + line => 600}) + end, + _assert_subject@3 = begin + _pipe@9 = erlang:'band'(Hex, 16#ff), + _pipe@10 = gleam@int:to_float(_pipe@9), + gleam@float:divide(_pipe@10, 255.0) + end, + {ok, A} = case _assert_subject@3 of + {ok, _} -> _assert_subject@3; + _assert_fail@3 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@3, + module => <<"gleam_community/colour"/utf8>>, + function => <<"from_rgba_hex"/utf8>>, + line => 606}) + end, + from_rgba(R, G, B, A) + end. + +-spec from_rgba_hex_string(binary()) -> {ok, colour()} | {error, nil}. +from_rgba_hex_string(Hex_string) -> + gleam@result:then( + hex_string_to_int(Hex_string), + fun(Hex_int) -> from_rgba_hex(Hex_int) end + ). + +-spec to_rgba(colour()) -> {float(), float(), float(), float()}. +to_rgba(Colour) -> + case Colour of + {rgba, R, G, B, A} -> + {R, G, B, A}; + + {hsla, H, S, L, A@1} -> + hsla_to_rgba(H, S, L, A@1) + end. + +-spec to_hsla(colour()) -> {float(), float(), float(), float()}. +to_hsla(Colour) -> + case Colour of + {hsla, H, S, L, A} -> + {H, S, L, A}; + + {rgba, R, G, B, A@1} -> + rgba_to_hsla(R, G, B, A@1) + end. + +-spec to_css_rgba_string(colour()) -> binary(). +to_css_rgba_string(Colour) -> + {R, G, B, A} = to_rgba(Colour), + Percent = fun(X) -> + _assert_subject = begin + _pipe = X, + _pipe@1 = gleam@float:multiply(_pipe, 10000.0), + _pipe@2 = gleam@float:round(_pipe@1), + _pipe@3 = gleam@int:to_float(_pipe@2), + gleam@float:divide(_pipe@3, 100.0) + end, + {ok, P} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/colour"/utf8>>, + function => <<"to_css_rgba_string"/utf8>>, + line => 704}) + end, + P + end, + Round_to = fun(X@1) -> + _assert_subject@1 = begin + _pipe@4 = X@1, + _pipe@5 = gleam@float:multiply(_pipe@4, 1000.0), + _pipe@6 = gleam@float:round(_pipe@5), + _pipe@7 = gleam@int:to_float(_pipe@6), + gleam@float:divide(_pipe@7, 1000.0) + end, + {ok, R@1} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/colour"/utf8>>, + function => <<"to_css_rgba_string"/utf8>>, + line => 716}) + end, + R@1 + end, + gleam@string:join( + [<<"rgba("/utf8>>, + <<(gleam@float:to_string(Percent(R)))/binary, "%,"/utf8>>, + <<(gleam@float:to_string(Percent(G)))/binary, "%,"/utf8>>, + <<(gleam@float:to_string(Percent(B)))/binary, "%,"/utf8>>, + gleam@float:to_string(Round_to(A)), + <<")"/utf8>>], + <<""/utf8>> + ). + +-spec to_rgba_hex(colour()) -> integer(). +to_rgba_hex(Colour) -> + {R, G, B, A} = to_rgba(Colour), + Red = begin + _pipe = R * 255.0, + _pipe@1 = gleam@float:round(_pipe), + erlang:'bsl'(_pipe@1, 24) + end, + Green = begin + _pipe@2 = G * 255.0, + _pipe@3 = gleam@float:round(_pipe@2), + erlang:'bsl'(_pipe@3, 16) + end, + Blue = begin + _pipe@4 = B * 255.0, + _pipe@5 = gleam@float:round(_pipe@4), + erlang:'bsl'(_pipe@5, 8) + end, + Alpha = begin + _pipe@6 = A * 255.0, + gleam@float:round(_pipe@6) + end, + ((Red + Green) + Blue) + Alpha. + +-spec to_rgba_hex_string(colour()) -> binary(). +to_rgba_hex_string(Colour) -> + _pipe = to_rgba_hex(Colour), + gleam@int:to_base16(_pipe). + +-spec to_rgb_hex(colour()) -> integer(). +to_rgb_hex(Colour) -> + {R, G, B, _} = to_rgba(Colour), + Red = begin + _pipe = R * 255.0, + _pipe@1 = gleam@float:round(_pipe), + erlang:'bsl'(_pipe@1, 16) + end, + Green = begin + _pipe@2 = G * 255.0, + _pipe@3 = gleam@float:round(_pipe@2), + erlang:'bsl'(_pipe@3, 8) + end, + Blue = begin + _pipe@4 = B * 255.0, + gleam@float:round(_pipe@4) + end, + (Red + Green) + Blue. + +-spec to_rgb_hex_string(colour()) -> binary(). +to_rgb_hex_string(Colour) -> + _pipe = to_rgb_hex(Colour), + gleam@int:to_base16(_pipe). diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache Binary files differnew file mode 100644 index 0000000..0154b0b --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache_meta b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache_meta Binary files differnew file mode 100644 index 0000000..0c78df4 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.erl b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.erl new file mode 100644 index 0000000..28ed9fd --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.erl @@ -0,0 +1,75 @@ +-module(gleam_community@colour@accessibility). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([luminance/1, contrast_ratio/2, maximum_contrast/2]). + +-spec intensity(float()) -> float(). +intensity(Colour_value) -> + case true of + _ when Colour_value =< 0.03928 -> + Colour_value / 12.92; + + _ -> + _assert_subject = gleam@float:power( + (Colour_value + 0.055) / 1.055, + 2.4 + ), + {ok, I} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/colour/accessibility"/utf8>>, + function => <<"intensity"/utf8>>, + line => 62}) + end, + I + end. + +-spec luminance(gleam_community@colour:colour()) -> float(). +luminance(Colour) -> + {R, G, B, _} = gleam_community@colour:to_rgba(Colour), + R_intensity = intensity(R), + G_intensity = intensity(G), + B_intensity = intensity(B), + ((0.2126 * R_intensity) + (0.7152 * G_intensity)) + (0.0722 * B_intensity). + +-spec contrast_ratio( + gleam_community@colour:colour(), + gleam_community@colour:colour() +) -> float(). +contrast_ratio(Colour_a, Colour_b) -> + Luminance_a = luminance(Colour_a) + 0.05, + Luminance_b = luminance(Colour_b) + 0.05, + case Luminance_a > Luminance_b of + true -> + case Luminance_b of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> Luminance_a / Gleam@denominator + end; + + false -> + case Luminance_a of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator@1 -> Luminance_b / Gleam@denominator@1 + end + end. + +-spec maximum_contrast( + gleam_community@colour:colour(), + list(gleam_community@colour:colour()) +) -> {ok, gleam_community@colour:colour()} | {error, nil}. +maximum_contrast(Base, Colours) -> + _pipe = Colours, + _pipe@1 = gleam@list:sort( + _pipe, + fun(Colour_a, Colour_b) -> + Contrast_a = contrast_ratio(Base, Colour_a), + Contrast_b = contrast_ratio(Base, Colour_b), + gleam@float:compare(Contrast_b, Contrast_a) + end + ), + gleam@list:first(_pipe@1). diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community@colour.beam b/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community@colour.beam Binary files differnew file mode 100644 index 0000000..e25d425 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community@colour.beam diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community@colour@accessibility.beam b/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community@colour@accessibility.beam Binary files differnew file mode 100644 index 0000000..e599de6 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community@colour@accessibility.beam diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community_colour.app b/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community_colour.app new file mode 100644 index 0000000..51800d3 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community_colour.app @@ -0,0 +1,7 @@ +{application, gleam_community_colour, [ + {vsn, "1.2.0"}, + {applications, [gleam_stdlib]}, + {description, "Colour types, conversions, and other utilities"}, + {modules, []}, + {registered, []} +]}. diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/include/gleam_community@colour_Hsla.hrl b/aoc2023/build/dev/erlang/gleam_community_colour/include/gleam_community@colour_Hsla.hrl new file mode 100644 index 0000000..06116df --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_colour/include/gleam_community@colour_Hsla.hrl @@ -0,0 +1 @@ +-record(hsla, {h :: float(), s :: float(), l :: float(), a :: float()}). diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/include/gleam_community@colour_Rgba.hrl b/aoc2023/build/dev/erlang/gleam_community_colour/include/gleam_community@colour_Rgba.hrl new file mode 100644 index 0000000..fff139e --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_colour/include/gleam_community@colour_Rgba.hrl @@ -0,0 +1 @@ +-record(rgba, {r :: float(), g :: float(), b :: float(), a :: float()}). diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam@@compile.erl new file mode 100644 index 0000000..543db88 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam@@compile.erl @@ -0,0 +1,157 @@ +#!/usr/bin/env escript + +% TODO: Don't concurrently print warnings and errors +% TODO: Some tests + +-record(arguments, {lib = "./", out = "./", modules = []}). + +main(Args) -> + #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args), + IsElixirModule = fun(Module) -> + filename:extension(Module) =:= ".ex" + end, + {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules), + ok = configure_logging(), + ok = add_lib_to_erlang_path(Lib), + ok = filelib:ensure_dir([Out, $/]), + {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out), + {ElixirOk, _ElixirBeams} = case ErlangOk of + true -> compile_elixir(ElixirModules, Out); + false -> {false, []} + end, + case ErlangOk and ElixirOk of + true -> ok; + false -> erlang:halt(1) + end. + +compile_erlang(Modules, Out) -> + Workers = start_compiler_workers(Out), + ok = producer_loop(Modules, Workers), + collect_results({true, []}). + +collect_results(Acc = {Result, Beams}) -> + receive + {compiled, Beam} -> collect_results({Result, [Beam | Beams]}); + failed -> collect_results({false, Beams}) + after 0 -> Acc + end. + +producer_loop([], 0) -> + ok; +producer_loop([], Workers) -> + receive + {work_please, _} -> producer_loop([], Workers - 1) + end; +producer_loop([Module | Modules], Workers) -> + receive + {work_please, Worker} -> + erlang:send(Worker, {module, Module}), + producer_loop(Modules, Workers) + end. + +start_compiler_workers(Out) -> + Parent = self(), + NumSchedulers = erlang:system_info(schedulers), + SpawnWorker = fun(_) -> + erlang:spawn_link(fun() -> worker_loop(Parent, Out) end) + end, + lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)), + NumSchedulers. + +worker_loop(Parent, Out) -> + Options = [report_errors, report_warnings, debug_info, {outdir, Out}], + erlang:send(Parent, {work_please, self()}), + receive + {module, Module} -> + log({compiling, Module}), + case compile:file(Module, Options) of + {ok, ModuleName} -> + Beam = filename:join(Out, ModuleName) ++ ".beam", + Message = {compiled, Beam}, + log(Message), + erlang:send(Parent, Message); + error -> + log({failed, Module}), + erlang:send(Parent, failed) + end, + worker_loop(Parent, Out) + end. + +compile_elixir(Modules, Out) -> + Error = [ + "The program elixir was not found. Is it installed?", + $\n, + "Documentation for installing Elixir can be viewed here:", + $\n, + "https://elixir-lang.org/install.html" + ], + case Modules of + [] -> {true, []}; + _ -> + log({starting, "compiler.app"}), + ok = application:start(compiler), + log({starting, "elixir.app"}), + case application:start(elixir) of + ok -> do_compile_elixir(Modules, Out); + _ -> + io:put_chars(standard_error, [Error, $\n]), + {false, []} + end + end. + +do_compile_elixir(Modules, Out) -> + ModuleBins = lists:map(fun(Module) -> + log({compiling, Module}), + list_to_binary(Module) + end, Modules), + OutBin = list_to_binary(Out), + Options = [{dest, OutBin}], + % Silence "redefining module" warnings. + % Compiled modules in the build directory are added to the code path. + % These warnings result from recompiling loaded modules. + % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation. + 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]), + case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of + {ok, ModuleAtoms, _} -> + ToBeam = fun(ModuleAtom) -> + Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam", + log({compiled, Beam}), + Beam + end, + {true, lists:map(ToBeam, ModuleAtoms)}; + {error, Errors, _} -> + % Log all filenames associated with modules that failed to compile. + % Note: The compiler prints compilation errors upon encountering them. + ErrorFiles = lists:usort([File || {File, _, _} <- Errors]), + Log = fun(File) -> + log({failed, binary_to_list(File)}) + end, + lists:foreach(Log, ErrorFiles), + {false, []}; + _ -> {false, []} + end. + +add_lib_to_erlang_path(Lib) -> + code:add_paths(filelib:wildcard([Lib, "/*/ebin"])). + +parse(Args) -> + parse(Args, #arguments{}). + +parse([], Arguments) -> + Arguments; +parse(["--lib", Lib | Rest], Arguments) -> + parse(Rest, Arguments#arguments{lib = Lib}); +parse(["--out", Out | Rest], Arguments) -> + parse(Rest, Arguments#arguments{out = Out}); +parse([Module | Rest], Arguments = #arguments{modules = Modules}) -> + parse(Rest, Arguments#arguments{modules = [Module | Modules]}). + +configure_logging() -> + Enabled = os:getenv("GLEAM_LOG") /= false, + persistent_term:put(gleam_logging_enabled, Enabled). + +log(Term) -> + case persistent_term:get(gleam_logging_enabled) of + true -> erlang:display(Term), ok; + false -> ok + end. diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache Binary files differnew file mode 100644 index 0000000..c8def84 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache_meta Binary files differnew file mode 100644 index 0000000..23d4726 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.erl new file mode 100644 index 0000000..9cdaccb --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.erl @@ -0,0 +1,172 @@ +-module(gleam_community@maths@arithmetics). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([gcd/2, lcm/2, divisors/1, proper_divisors/1, float_sum/1, int_sum/1, float_product/1, int_product/1, float_cumulative_sum/1, int_cumulative_sum/1, float_cumumlative_product/1, int_cumulative_product/1]). + +-spec do_gcd(integer(), integer()) -> integer(). +do_gcd(X, Y) -> + case X =:= 0 of + true -> + Y; + + false -> + _assert_subject = gleam@int:modulo(Y, X), + {ok, Z} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/arithmetics"/utf8>>, + function => <<"do_gcd"/utf8>>, + line => 93}) + end, + do_gcd(Z, X) + end. + +-spec gcd(integer(), integer()) -> integer(). +gcd(X, Y) -> + Absx = gleam_community@maths@piecewise:int_absolute_value(X), + Absy = gleam_community@maths@piecewise:int_absolute_value(Y), + do_gcd(Absx, Absy). + +-spec lcm(integer(), integer()) -> integer(). +lcm(X, Y) -> + Absx = gleam_community@maths@piecewise:int_absolute_value(X), + Absy = gleam_community@maths@piecewise:int_absolute_value(Y), + case do_gcd(Absx, Absy) of + 0 -> 0; + Gleam@denominator -> Absx * Absy div Gleam@denominator + end. + +-spec find_divisors(integer()) -> list(integer()). +find_divisors(N) -> + Nabs = gleam_community@maths@piecewise:float_absolute_value( + gleam_community@maths@conversion:int_to_float(N) + ), + _assert_subject = gleam_community@maths@elementary:square_root(Nabs), + {ok, Sqrt_result} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/arithmetics"/utf8>>, + function => <<"find_divisors"/utf8>>, + line => 176}) + end, + Max = gleam_community@maths@conversion:float_to_int(Sqrt_result) + 1, + _pipe = gleam@list:range(2, Max), + _pipe@1 = gleam@list:fold(_pipe, [1, N], fun(Acc, I) -> case (case I of + 0 -> 0; + Gleam@denominator -> N rem Gleam@denominator + end) =:= 0 of + true -> + [I, case I of + 0 -> 0; + Gleam@denominator@1 -> N div Gleam@denominator@1 + end | Acc]; + + false -> + Acc + end end), + _pipe@2 = gleam@list:unique(_pipe@1), + gleam@list:sort(_pipe@2, fun gleam@int:compare/2). + +-spec divisors(integer()) -> list(integer()). +divisors(N) -> + find_divisors(N). + +-spec proper_divisors(integer()) -> list(integer()). +proper_divisors(N) -> + Divisors = find_divisors(N), + _pipe = Divisors, + gleam@list:take(_pipe, gleam@list:length(Divisors) - 1). + +-spec float_sum(list(float())) -> float(). +float_sum(Arr) -> + case Arr of + [] -> + +0.0; + + _ -> + _pipe = Arr, + gleam@list:fold(_pipe, +0.0, fun(Acc, A) -> A + Acc end) + end. + +-spec int_sum(list(integer())) -> integer(). +int_sum(Arr) -> + case Arr of + [] -> + 0; + + _ -> + _pipe = Arr, + gleam@list:fold(_pipe, 0, fun(Acc, A) -> A + Acc end) + end. + +-spec float_product(list(float())) -> float(). +float_product(Arr) -> + case Arr of + [] -> + 1.0; + + _ -> + _pipe = Arr, + gleam@list:fold(_pipe, 1.0, fun(Acc, A) -> A * Acc end) + end. + +-spec int_product(list(integer())) -> integer(). +int_product(Arr) -> + case Arr of + [] -> + 1; + + _ -> + _pipe = Arr, + gleam@list:fold(_pipe, 1, fun(Acc, A) -> A * Acc end) + end. + +-spec float_cumulative_sum(list(float())) -> list(float()). +float_cumulative_sum(Arr) -> + case Arr of + [] -> + []; + + _ -> + _pipe = Arr, + gleam@list:scan(_pipe, +0.0, fun(Acc, A) -> A + Acc end) + end. + +-spec int_cumulative_sum(list(integer())) -> list(integer()). +int_cumulative_sum(Arr) -> + case Arr of + [] -> + []; + + _ -> + _pipe = Arr, + gleam@list:scan(_pipe, 0, fun(Acc, A) -> A + Acc end) + end. + +-spec float_cumumlative_product(list(float())) -> list(float()). +float_cumumlative_product(Arr) -> + case Arr of + [] -> + []; + + _ -> + _pipe = Arr, + gleam@list:scan(_pipe, 1.0, fun(Acc, A) -> A * Acc end) + end. + +-spec int_cumulative_product(list(integer())) -> list(integer()). +int_cumulative_product(Arr) -> + case Arr of + [] -> + []; + + _ -> + _pipe = Arr, + gleam@list:scan(_pipe, 1, fun(Acc, A) -> A * Acc end) + end. diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache Binary files differnew file mode 100644 index 0000000..3fffb45 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache_meta Binary files differnew file mode 100644 index 0000000..f8262ee --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.erl new file mode 100644 index 0000000..d600fbe --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.erl @@ -0,0 +1,218 @@ +-module(gleam_community@maths@combinatorics). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([combination/2, factorial/1, permutation/2, list_combination/2, list_permutation/1, cartesian_product/2]). + +-spec combination(integer(), integer()) -> {ok, integer()} | {error, binary()}. +combination(N, K) -> + case N < 0 of + true -> + _pipe = <<"Invalid input argument: n < 0. Valid input is n > 0."/utf8>>, + {error, _pipe}; + + false -> + case (K < 0) orelse (K > N) of + true -> + _pipe@1 = 0, + {ok, _pipe@1}; + + false -> + case (K =:= 0) orelse (K =:= N) of + true -> + _pipe@2 = 1, + {ok, _pipe@2}; + + false -> + Min = case K < (N - K) of + true -> + K; + + false -> + N - K + end, + _pipe@3 = gleam@list:range(1, Min), + _pipe@4 = gleam@list:fold( + _pipe@3, + 1, + fun(Acc, X) -> case X of + 0 -> 0; + Gleam@denominator -> Acc * ((N + 1) - X) + div Gleam@denominator + end end + ), + {ok, _pipe@4} + end + end + end. + +-spec factorial(integer()) -> {ok, integer()} | {error, binary()}. +factorial(N) -> + case N < 0 of + true -> + _pipe = <<"Invalid input argument: n < 0. Valid input is n > 0."/utf8>>, + {error, _pipe}; + + false -> + case N of + 0 -> + _pipe@1 = 1, + {ok, _pipe@1}; + + 1 -> + _pipe@2 = 1, + {ok, _pipe@2}; + + _ -> + _pipe@3 = gleam@list:range(1, N), + _pipe@4 = gleam@list:fold( + _pipe@3, + 1, + fun(Acc, X) -> Acc * X end + ), + {ok, _pipe@4} + end + end. + +-spec permutation(integer(), integer()) -> {ok, integer()} | {error, binary()}. +permutation(N, K) -> + case N < 0 of + true -> + _pipe = <<"Invalid input argument: n < 0. Valid input is n > 0."/utf8>>, + {error, _pipe}; + + false -> + case (K < 0) orelse (K > N) of + true -> + _pipe@1 = 0, + {ok, _pipe@1}; + + false -> + case K =:= N of + true -> + _pipe@2 = 1, + {ok, _pipe@2}; + + false -> + _assert_subject = factorial(N), + {ok, V1} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/combinatorics"/utf8>>, + function => <<"permutation"/utf8>>, + line => 241}) + end, + _assert_subject@1 = factorial(N - K), + {ok, V2} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/combinatorics"/utf8>>, + function => <<"permutation"/utf8>>, + line => 242}) + end, + _pipe@3 = case V2 of + 0 -> 0; + Gleam@denominator -> V1 div Gleam@denominator + end, + {ok, _pipe@3} + end + end + end. + +-spec do_list_combination(list(ORJ), integer(), list(ORJ)) -> list(list(ORJ)). +do_list_combination(Arr, K, Prefix) -> + case K of + 0 -> + [gleam@list:reverse(Prefix)]; + + _ -> + case Arr of + [] -> + []; + + [X | Xs] -> + With_x = do_list_combination(Xs, K - 1, [X | Prefix]), + Without_x = do_list_combination(Xs, K, Prefix), + gleam@list:append(With_x, Without_x) + end + end. + +-spec list_combination(list(ORD), integer()) -> {ok, list(list(ORD))} | + {error, binary()}. +list_combination(Arr, K) -> + case K < 0 of + true -> + _pipe = <<"Invalid input argument: k < 0. Valid input is k > 0."/utf8>>, + {error, _pipe}; + + false -> + case K > gleam@list:length(Arr) of + true -> + _pipe@1 = <<"Invalid input argument: k > length(arr). Valid input is 0 < k <= length(arr)."/utf8>>, + {error, _pipe@1}; + + false -> + _pipe@2 = do_list_combination(Arr, K, []), + {ok, _pipe@2} + end + end. + +-spec list_permutation(list(ORO)) -> list(list(ORO)). +list_permutation(Arr) -> + case Arr of + [] -> + [[]]; + + _ -> + gleam@list:flat_map( + Arr, + fun(X) -> + _assert_subject = gleam@list:pop(Arr, fun(Y) -> X =:= Y end), + {ok, {_, Remaining}} = case _assert_subject of + {ok, {_, _}} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/combinatorics"/utf8>>, + function => <<"list_permutation"/utf8>>, + line => 373}) + end, + gleam@list:map( + list_permutation(Remaining), + fun(Perm) -> [X | Perm] end + ) + end + ) + end. + +-spec cartesian_product(list(ORS), list(ORS)) -> list({ORS, ORS}). +cartesian_product(Xarr, Yarr) -> + Xset = begin + _pipe = Xarr, + gleam@set:from_list(_pipe) + end, + Yset = begin + _pipe@1 = Yarr, + gleam@set:from_list(_pipe@1) + end, + _pipe@2 = Xset, + _pipe@3 = gleam@set:fold( + _pipe@2, + gleam@set:new(), + fun(Accumulator0, Member0) -> + gleam@set:fold( + Yset, + Accumulator0, + fun(Accumulator1, Member1) -> + gleam@set:insert(Accumulator1, {Member0, Member1}) + end + ) + end + ), + gleam@set:to_list(_pipe@3). diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache Binary files differnew file mode 100644 index 0000000..a95ea4b --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache_meta Binary files differnew file mode 100644 index 0000000..374a6fb --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.erl new file mode 100644 index 0000000..4923523 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.erl @@ -0,0 +1,24 @@ +-module(gleam_community@maths@conversion). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([int_to_float/1, float_to_int/1, degrees_to_radians/1, radians_to_degrees/1]). + +-spec int_to_float(integer()) -> float(). +int_to_float(X) -> + gleam@int:to_float(X). + +-spec float_to_int(float()) -> integer(). +float_to_int(X) -> + erlang:trunc(X). + +-spec degrees_to_radians(float()) -> float(). +degrees_to_radians(X) -> + (X * math:pi()) / 180.0. + +-spec radians_to_degrees(float()) -> float(). +radians_to_degrees(X) -> + case math:pi() of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> X * 180.0 / Gleam@denominator + end. diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache Binary files differnew file mode 100644 index 0000000..8b9e7ca --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache_meta Binary files differnew file mode 100644 index 0000000..8a3590f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.erl new file mode 100644 index 0000000..15d6abc --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.erl @@ -0,0 +1,286 @@ +-module(gleam_community@maths@elementary). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([acos/1, acosh/1, asin/1, asinh/1, atan/1, atan2/2, atanh/1, cos/1, cosh/1, sin/1, sinh/1, tan/1, tanh/1, exponential/1, natural_logarithm/1, logarithm_2/1, logarithm_10/1, logarithm/2, power/2, square_root/1, cube_root/1, nth_root/2, pi/0, tau/0, e/0]). + +-spec acos(float()) -> {ok, float()} | {error, binary()}. +acos(X) -> + case (X >= -1.0) andalso (X =< 1.0) of + true -> + _pipe = math:acos(X), + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invalid input argument: x >= -1 or x <= 1. Valid input is -1. <= x <= 1."/utf8>>, + {error, _pipe@1} + end. + +-spec acosh(float()) -> {ok, float()} | {error, binary()}. +acosh(X) -> + case X >= 1.0 of + true -> + _pipe = math:acosh(X), + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invalid input argument: x < 1. Valid input is x >= 1."/utf8>>, + {error, _pipe@1} + end. + +-spec asin(float()) -> {ok, float()} | {error, binary()}. +asin(X) -> + case (X >= -1.0) andalso (X =< 1.0) of + true -> + _pipe = math:asin(X), + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invalid input argument: x >= -1 or x <= 1. Valid input is -1. <= x <= 1."/utf8>>, + {error, _pipe@1} + end. + +-spec asinh(float()) -> float(). +asinh(X) -> + math:asinh(X). + +-spec atan(float()) -> float(). +atan(X) -> + math:atan(X). + +-spec atan2(float(), float()) -> float(). +atan2(Y, X) -> + math:atan2(Y, X). + +-spec atanh(float()) -> {ok, float()} | {error, binary()}. +atanh(X) -> + case (X > -1.0) andalso (X < 1.0) of + true -> + _pipe = math:atanh(X), + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invalid input argument: x > -1 or x < 1. Valid input is -1. < x < 1."/utf8>>, + {error, _pipe@1} + end. + +-spec cos(float()) -> float(). +cos(X) -> + math:cos(X). + +-spec cosh(float()) -> float(). +cosh(X) -> + math:cosh(X). + +-spec sin(float()) -> float(). +sin(X) -> + math:sin(X). + +-spec sinh(float()) -> float(). +sinh(X) -> + math:sinh(X). + +-spec tan(float()) -> float(). +tan(X) -> + math:tan(X). + +-spec tanh(float()) -> float(). +tanh(X) -> + math:tanh(X). + +-spec exponential(float()) -> float(). +exponential(X) -> + math:exp(X). + +-spec natural_logarithm(float()) -> {ok, float()} | {error, binary()}. +natural_logarithm(X) -> + case X > +0.0 of + true -> + _pipe = math:log(X), + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invalid input argument: x <= 0. Valid input is x > 0."/utf8>>, + {error, _pipe@1} + end. + +-spec logarithm_2(float()) -> {ok, float()} | {error, binary()}. +logarithm_2(X) -> + case X > +0.0 of + true -> + _pipe = math:log2(X), + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invalid input argument: x <= 0. Valid input is x > 0."/utf8>>, + {error, _pipe@1} + end. + +-spec logarithm_10(float()) -> {ok, float()} | {error, binary()}. +logarithm_10(X) -> + case X > +0.0 of + true -> + _pipe = math:log10(X), + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invalid input argument: x <= 0. Valid input is x > 0."/utf8>>, + {error, _pipe@1} + end. + +-spec logarithm(float(), gleam@option:option(float())) -> {ok, float()} | + {error, binary()}. +logarithm(X, Base) -> + case X > +0.0 of + true -> + case Base of + {some, A} -> + case (A > +0.0) andalso (A /= 1.0) of + true -> + _assert_subject = logarithm_10(X), + {ok, Numerator} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/elementary"/utf8>>, + function => <<"logarithm"/utf8>>, + line => 820}) + end, + _assert_subject@1 = logarithm_10(A), + {ok, Denominator} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/elementary"/utf8>>, + function => <<"logarithm"/utf8>>, + line => 821}) + end, + _pipe = case Denominator of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> Numerator / Gleam@denominator + end, + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invalid input argument: base <= 0 or base == 1. Valid input is base > 0 and base != 1."/utf8>>, + {error, _pipe@1} + end; + + _ -> + _pipe@2 = <<"Invalid input argument: base <= 0 or base == 1. Valid input is base > 0 and base != 1."/utf8>>, + {error, _pipe@2} + end; + + _ -> + _pipe@3 = <<"Invalid input argument: x <= 0. Valid input is x > 0."/utf8>>, + {error, _pipe@3} + end. + +-spec power(float(), float()) -> {ok, float()} | {error, binary()}. +power(X, Y) -> + Fractional = (math:ceil(Y) - Y) > +0.0, + case ((X < +0.0) andalso Fractional) orelse ((X =:= +0.0) andalso (Y < +0.0)) of + true -> + _pipe = <<"Invalid input argument: x < 0 and y is fractional or x = 0 and y < 0."/utf8>>, + {error, _pipe}; + + false -> + _pipe@1 = math:pow(X, Y), + {ok, _pipe@1} + end. + +-spec square_root(float()) -> {ok, float()} | {error, binary()}. +square_root(X) -> + case X < +0.0 of + true -> + _pipe = <<"Invalid input argument: x < 0."/utf8>>, + {error, _pipe}; + + false -> + _assert_subject = power(X, 1.0 / 2.0), + {ok, Result} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/elementary"/utf8>>, + function => <<"square_root"/utf8>>, + line => 1066}) + end, + _pipe@1 = Result, + {ok, _pipe@1} + end. + +-spec cube_root(float()) -> {ok, float()} | {error, binary()}. +cube_root(X) -> + case X < +0.0 of + true -> + _pipe = <<"Invalid input argument: x < 0."/utf8>>, + {error, _pipe}; + + false -> + _assert_subject = power(X, 1.0 / 3.0), + {ok, Result} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/elementary"/utf8>>, + function => <<"cube_root"/utf8>>, + line => 1118}) + end, + _pipe@1 = Result, + {ok, _pipe@1} + end. + +-spec nth_root(float(), integer()) -> {ok, float()} | {error, binary()}. +nth_root(X, N) -> + case X < +0.0 of + true -> + _pipe = <<"Invalid input argument: x < 0. Valid input is x > 0"/utf8>>, + {error, _pipe}; + + false -> + case N >= 1 of + true -> + _assert_subject = power(X, case gleam@int:to_float(N) of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> 1.0 / Gleam@denominator + end), + {ok, Result} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/elementary"/utf8>>, + function => <<"nth_root"/utf8>>, + line => 1175}) + end, + _pipe@1 = Result, + {ok, _pipe@1}; + + false -> + _pipe@2 = <<"Invalid input argument: n < 1. Valid input is n >= 2."/utf8>>, + {error, _pipe@2} + end + end. + +-spec pi() -> float(). +pi() -> + math:pi(). + +-spec tau() -> float(). +tau() -> + 2.0 * pi(). + +-spec e() -> float(). +e() -> + exponential(1.0). diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache Binary files differnew file mode 100644 index 0000000..fc137ef --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache_meta Binary files differnew file mode 100644 index 0000000..ad6a7f1 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.erl new file mode 100644 index 0000000..9b0c432 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.erl @@ -0,0 +1,281 @@ +-module(gleam_community@maths@metrics). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([norm/2, minkowski_distance/3, manhatten_distance/2, euclidean_distance/2, mean/1, median/1, variance/2, standard_deviation/2]). + +-spec norm(list(float()), float()) -> float(). +norm(Arr, P) -> + case Arr of + [] -> + +0.0; + + _ -> + Agg = begin + _pipe = Arr, + gleam@list:fold( + _pipe, + +0.0, + fun(Acc, A) -> + _assert_subject = gleam_community@maths@elementary:power( + gleam_community@maths@piecewise:float_absolute_value( + A + ), + P + ), + {ok, Result} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"norm"/utf8>>, + line => 101}) + end, + Result + Acc + end + ) + end, + _assert_subject@1 = gleam_community@maths@elementary:power( + Agg, + case P of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> 1.0 / Gleam@denominator + end + ), + {ok, Result@1} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"norm"/utf8>>, + line => 106}) + end, + Result@1 + end. + +-spec minkowski_distance(list(float()), list(float()), float()) -> {ok, float()} | + {error, binary()}. +minkowski_distance(Xarr, Yarr, P) -> + Xlen = gleam@list:length(Xarr), + Ylen = gleam@list:length(Yarr), + case Xlen =:= Ylen of + false -> + _pipe = <<"Invalid input argument: length(xarr) != length(yarr). Valid input is when length(xarr) == length(yarr)."/utf8>>, + {error, _pipe}; + + true -> + case P < 1.0 of + true -> + _pipe@1 = <<"Invalid input argument: p < 1. Valid input is p >= 1."/utf8>>, + {error, _pipe@1}; + + false -> + _pipe@2 = gleam@list:zip(Xarr, Yarr), + _pipe@3 = gleam@list:map( + _pipe@2, + fun(Tuple) -> + gleam@pair:first(Tuple) - gleam@pair:second(Tuple) + end + ), + _pipe@4 = norm(_pipe@3, P), + {ok, _pipe@4} + end + end. + +-spec manhatten_distance(list(float()), list(float())) -> {ok, float()} | + {error, binary()}. +manhatten_distance(Xarr, Yarr) -> + minkowski_distance(Xarr, Yarr, 1.0). + +-spec euclidean_distance(list(float()), list(float())) -> {ok, float()} | + {error, binary()}. +euclidean_distance(Xarr, Yarr) -> + minkowski_distance(Xarr, Yarr, 2.0). + +-spec mean(list(float())) -> {ok, float()} | {error, binary()}. +mean(Arr) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + _pipe@1 = Arr, + _pipe@2 = gleam_community@maths@arithmetics:float_sum(_pipe@1), + _pipe@3 = (fun(A) -> + case gleam_community@maths@conversion:int_to_float( + gleam@list:length(Arr) + ) of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> A / Gleam@denominator + end + end)(_pipe@2), + {ok, _pipe@3} + end. + +-spec median(list(float())) -> {ok, float()} | {error, binary()}. +median(Arr) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + Count = gleam@list:length(Arr), + Mid = gleam@list:length(Arr) div 2, + Sorted = gleam@list:sort(Arr, fun gleam@float:compare/2), + case gleam_community@maths@predicates:is_odd(Count) of + true -> + _assert_subject = gleam@list:at(Sorted, Mid), + {ok, Val0} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"median"/utf8>>, + line => 402}) + end, + _pipe@1 = Val0, + {ok, _pipe@1}; + + false -> + _assert_subject@1 = gleam@list:at(Sorted, Mid - 1), + {ok, Val0@1} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"median"/utf8>>, + line => 409}) + end, + _assert_subject@2 = gleam@list:at(Sorted, Mid), + {ok, Val1} = case _assert_subject@2 of + {ok, _} -> _assert_subject@2; + _assert_fail@2 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@2, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"median"/utf8>>, + line => 410}) + end, + _pipe@2 = [Val0@1, Val1], + mean(_pipe@2) + end + end. + +-spec variance(list(float()), integer()) -> {ok, float()} | {error, binary()}. +variance(Arr, Ddof) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + case Ddof < 0 of + true -> + _pipe@1 = <<"Invalid input argument: ddof < 0. Valid input is ddof >= 0."/utf8>>, + {error, _pipe@1}; + + false -> + _assert_subject = mean(Arr), + {ok, Mean} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"variance"/utf8>>, + line => 475}) + end, + _pipe@2 = Arr, + _pipe@3 = gleam@list:map( + _pipe@2, + fun(A) -> + _assert_subject@1 = gleam_community@maths@elementary:power( + A - Mean, + 2.0 + ), + {ok, Result} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"variance"/utf8>>, + line => 478}) + end, + Result + end + ), + _pipe@4 = gleam_community@maths@arithmetics:float_sum( + _pipe@3 + ), + _pipe@5 = (fun(A@1) -> + case (gleam_community@maths@conversion:int_to_float( + gleam@list:length(Arr) + ) + - gleam_community@maths@conversion:int_to_float(Ddof)) of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> A@1 / Gleam@denominator + end + end)(_pipe@4), + {ok, _pipe@5} + end + end. + +-spec standard_deviation(list(float()), integer()) -> {ok, float()} | + {error, binary()}. +standard_deviation(Arr, Ddof) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + case Ddof < 0 of + true -> + _pipe@1 = <<"Invalid input argument: ddof < 0. Valid input is ddof >= 0."/utf8>>, + {error, _pipe@1}; + + false -> + _assert_subject = variance(Arr, Ddof), + {ok, Variance} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"standard_deviation"/utf8>>, + line => 551}) + end, + _assert_subject@1 = gleam_community@maths@elementary:square_root( + Variance + ), + {ok, Stdev} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"standard_deviation"/utf8>>, + line => 554}) + end, + _pipe@2 = Stdev, + {ok, _pipe@2} + end + end. diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache Binary files differnew file mode 100644 index 0000000..e056dbf --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache_meta Binary files differnew file mode 100644 index 0000000..21c97d4 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.erl new file mode 100644 index 0000000..85fc290 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.erl @@ -0,0 +1,563 @@ +-module(gleam_community@maths@piecewise). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([float_absolute_value/1, int_absolute_value/1, float_absolute_difference/2, int_absolute_difference/2, float_sign/1, round/3, ceiling/2, floor/2, truncate/2, int_sign/1, float_flip_sign/1, float_copy_sign/2, int_flip_sign/1, int_copy_sign/2, minimum/3, maximum/3, minmax/3, list_minimum/2, list_maximum/2, arg_minimum/2, arg_maximum/2, extrema/2]). +-export_type([rounding_mode/0]). + +-type rounding_mode() :: round_nearest | + round_ties_away | + round_ties_up | + round_to_zero | + round_down | + round_up. + +-spec truncate_float(float()) -> float(). +truncate_float(X) -> + erlang:trunc(X). + +-spec round_to_zero(float(), float()) -> float(). +round_to_zero(P, X) -> + case P of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> truncate_float(X * P) / Gleam@denominator + end. + +-spec round_down(float(), float()) -> float(). +round_down(P, X) -> + case P of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> math:floor(X * P) / Gleam@denominator + end. + +-spec round_up(float(), float()) -> float(). +round_up(P, X) -> + case P of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> math:ceil(X * P) / Gleam@denominator + end. + +-spec float_absolute_value(float()) -> float(). +float_absolute_value(X) -> + case X > +0.0 of + true -> + X; + + false -> + -1.0 * X + end. + +-spec int_absolute_value(integer()) -> integer(). +int_absolute_value(X) -> + case X > 0 of + true -> + X; + + false -> + -1 * X + end. + +-spec float_absolute_difference(float(), float()) -> float(). +float_absolute_difference(A, B) -> + _pipe = A - B, + float_absolute_value(_pipe). + +-spec int_absolute_difference(integer(), integer()) -> integer(). +int_absolute_difference(A, B) -> + _pipe = A - B, + int_absolute_value(_pipe). + +-spec do_float_sign(float()) -> float(). +do_float_sign(X) -> + case X < +0.0 of + true -> + -1.0; + + false -> + case X =:= +0.0 of + true -> + +0.0; + + false -> + 1.0 + end + end. + +-spec float_sign(float()) -> float(). +float_sign(X) -> + do_float_sign(X). + +-spec round_to_nearest(float(), float()) -> float(). +round_to_nearest(P, X) -> + Xabs = float_absolute_value(X) * P, + Xabs_truncated = truncate_float(Xabs), + Remainder = Xabs - Xabs_truncated, + case Remainder of + _ when Remainder > 0.5 -> + case P of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> float_sign(X) * truncate_float(Xabs + 1.0) + / Gleam@denominator + end; + + _ when Remainder =:= 0.5 -> + _assert_subject = gleam@int:modulo( + gleam_community@maths@conversion:float_to_int(Xabs), + 2 + ), + {ok, Is_even} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/piecewise"/utf8>>, + function => <<"round_to_nearest"/utf8>>, + line => 423}) + end, + case Is_even =:= 0 of + true -> + case P of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator@1 -> float_sign(X) * Xabs_truncated / Gleam@denominator@1 + end; + + false -> + case P of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator@2 -> float_sign(X) * truncate_float( + Xabs + 1.0 + ) + / Gleam@denominator@2 + end + end; + + _ -> + case P of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator@3 -> float_sign(X) * Xabs_truncated / Gleam@denominator@3 + end + end. + +-spec round_ties_away(float(), float()) -> float(). +round_ties_away(P, X) -> + Xabs = float_absolute_value(X) * P, + Remainder = Xabs - truncate_float(Xabs), + case Remainder of + _ when Remainder >= 0.5 -> + case P of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> float_sign(X) * truncate_float(Xabs + 1.0) + / Gleam@denominator + end; + + _ -> + case P of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator@1 -> float_sign(X) * truncate_float(Xabs) / Gleam@denominator@1 + end + end. + +-spec round_ties_up(float(), float()) -> float(). +round_ties_up(P, X) -> + Xabs = float_absolute_value(X) * P, + Xabs_truncated = truncate_float(Xabs), + Remainder = Xabs - Xabs_truncated, + case Remainder of + _ when (Remainder >= 0.5) andalso (X >= +0.0) -> + case P of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> float_sign(X) * truncate_float(Xabs + 1.0) + / Gleam@denominator + end; + + _ -> + case P of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator@1 -> float_sign(X) * Xabs_truncated / Gleam@denominator@1 + end + end. + +-spec do_round(float(), float(), gleam@option:option(rounding_mode())) -> {ok, + float()} | + {error, binary()}. +do_round(P, X, Mode) -> + case Mode of + {some, round_nearest} -> + _pipe = round_to_nearest(P, X), + {ok, _pipe}; + + {some, round_ties_away} -> + _pipe@1 = round_ties_away(P, X), + {ok, _pipe@1}; + + {some, round_ties_up} -> + _pipe@2 = round_ties_up(P, X), + {ok, _pipe@2}; + + {some, round_to_zero} -> + _pipe@3 = round_to_zero(P, X), + {ok, _pipe@3}; + + {some, round_down} -> + _pipe@4 = round_down(P, X), + {ok, _pipe@4}; + + {some, round_up} -> + _pipe@5 = round_up(P, X), + {ok, _pipe@5}; + + none -> + _pipe@6 = round_to_nearest(P, X), + {ok, _pipe@6} + end. + +-spec round( + float(), + gleam@option:option(integer()), + gleam@option:option(rounding_mode()) +) -> {ok, float()} | {error, binary()}. +round(X, Digits, Mode) -> + case Digits of + {some, A} -> + _assert_subject = gleam_community@maths@elementary:power( + 10.0, + gleam_community@maths@conversion:int_to_float(A) + ), + {ok, P} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/piecewise"/utf8>>, + function => <<"round"/utf8>>, + line => 366}) + end, + do_round(P, X, Mode); + + none -> + do_round(1.0, X, Mode) + end. + +-spec ceiling(float(), gleam@option:option(integer())) -> {ok, float()} | + {error, binary()}. +ceiling(X, Digits) -> + round(X, Digits, {some, round_up}). + +-spec floor(float(), gleam@option:option(integer())) -> {ok, float()} | + {error, binary()}. +floor(X, Digits) -> + round(X, Digits, {some, round_down}). + +-spec truncate(float(), gleam@option:option(integer())) -> {ok, float()} | + {error, binary()}. +truncate(X, Digits) -> + round(X, Digits, {some, round_to_zero}). + +-spec do_int_sign(integer()) -> integer(). +do_int_sign(X) -> + case X < 0 of + true -> + -1; + + false -> + case X =:= 0 of + true -> + 0; + + false -> + 1 + end + end. + +-spec int_sign(integer()) -> integer(). +int_sign(X) -> + do_int_sign(X). + +-spec float_flip_sign(float()) -> float(). +float_flip_sign(X) -> + -1.0 * X. + +-spec float_copy_sign(float(), float()) -> float(). +float_copy_sign(X, Y) -> + case float_sign(X) =:= float_sign(Y) of + true -> + X; + + false -> + float_flip_sign(X) + end. + +-spec int_flip_sign(integer()) -> integer(). +int_flip_sign(X) -> + -1 * X. + +-spec int_copy_sign(integer(), integer()) -> integer(). +int_copy_sign(X, Y) -> + case int_sign(X) =:= int_sign(Y) of + true -> + X; + + false -> + int_flip_sign(X) + end. + +-spec minimum(PCO, PCO, fun((PCO, PCO) -> gleam@order:order())) -> PCO. +minimum(X, Y, Compare) -> + case Compare(X, Y) of + lt -> + X; + + eq -> + X; + + gt -> + Y + end. + +-spec maximum(PCP, PCP, fun((PCP, PCP) -> gleam@order:order())) -> PCP. +maximum(X, Y, Compare) -> + case Compare(X, Y) of + lt -> + Y; + + eq -> + Y; + + gt -> + X + end. + +-spec minmax(PCQ, PCQ, fun((PCQ, PCQ) -> gleam@order:order())) -> {PCQ, PCQ}. +minmax(X, Y, Compare) -> + {minimum(X, Y, Compare), maximum(X, Y, Compare)}. + +-spec list_minimum(list(PCR), fun((PCR, PCR) -> gleam@order:order())) -> {ok, + PCR} | + {error, binary()}. +list_minimum(Arr, Compare) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + _assert_subject = gleam@list:at(Arr, 0), + {ok, Val0} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/piecewise"/utf8>>, + function => <<"list_minimum"/utf8>>, + line => 945}) + end, + _pipe@1 = Arr, + _pipe@2 = gleam@list:fold( + _pipe@1, + Val0, + fun(Acc, Element) -> case Compare(Element, Acc) of + lt -> + Element; + + _ -> + Acc + end end + ), + {ok, _pipe@2} + end. + +-spec list_maximum(list(PCV), fun((PCV, PCV) -> gleam@order:order())) -> {ok, + PCV} | + {error, binary()}. +list_maximum(Arr, Compare) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + _assert_subject = gleam@list:at(Arr, 0), + {ok, Val0} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/piecewise"/utf8>>, + function => <<"list_maximum"/utf8>>, + line => 1004}) + end, + _pipe@1 = Arr, + _pipe@2 = gleam@list:fold( + _pipe@1, + Val0, + fun(Acc, Element) -> case Compare(Acc, Element) of + lt -> + Element; + + _ -> + Acc + end end + ), + {ok, _pipe@2} + end. + +-spec arg_minimum(list(PCZ), fun((PCZ, PCZ) -> gleam@order:order())) -> {ok, + list(integer())} | + {error, binary()}. +arg_minimum(Arr, Compare) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + _assert_subject = begin + _pipe@1 = Arr, + list_minimum(_pipe@1, Compare) + end, + {ok, Min} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/piecewise"/utf8>>, + function => <<"arg_minimum"/utf8>>, + line => 1069}) + end, + _pipe@2 = Arr, + _pipe@3 = gleam@list:index_map( + _pipe@2, + fun(Index, Element) -> case Compare(Element, Min) of + eq -> + Index; + + _ -> + -1 + end end + ), + _pipe@4 = gleam@list:filter(_pipe@3, fun(Index@1) -> case Index@1 of + -1 -> + false; + + _ -> + true + end end), + {ok, _pipe@4} + end. + +-spec arg_maximum(list(PDE), fun((PDE, PDE) -> gleam@order:order())) -> {ok, + list(integer())} | + {error, binary()}. +arg_maximum(Arr, Compare) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + _assert_subject = begin + _pipe@1 = Arr, + list_maximum(_pipe@1, Compare) + end, + {ok, Max} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/piecewise"/utf8>>, + function => <<"arg_maximum"/utf8>>, + line => 1139}) + end, + _pipe@2 = Arr, + _pipe@3 = gleam@list:index_map( + _pipe@2, + fun(Index, Element) -> case Compare(Element, Max) of + eq -> + Index; + + _ -> + -1 + end end + ), + _pipe@4 = gleam@list:filter(_pipe@3, fun(Index@1) -> case Index@1 of + -1 -> + false; + + _ -> + true + end end), + {ok, _pipe@4} + end. + +-spec extrema(list(PDJ), fun((PDJ, PDJ) -> gleam@order:order())) -> {ok, + {PDJ, PDJ}} | + {error, binary()}. +extrema(Arr, Compare) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + _assert_subject = gleam@list:at(Arr, 0), + {ok, Val_max} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/piecewise"/utf8>>, + function => <<"extrema"/utf8>>, + line => 1209}) + end, + _assert_subject@1 = gleam@list:at(Arr, 0), + {ok, Val_min} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/piecewise"/utf8>>, + function => <<"extrema"/utf8>>, + line => 1210}) + end, + _pipe@1 = Arr, + _pipe@2 = gleam@list:fold( + _pipe@1, + {Val_min, Val_max}, + fun(Acc, Element) -> + First = gleam@pair:first(Acc), + Second = gleam@pair:second(Acc), + case {Compare(Element, First), Compare(Second, Element)} of + {lt, lt} -> + {Element, Element}; + + {lt, _} -> + {Element, Second}; + + {_, lt} -> + {First, Element}; + + {_, _} -> + {First, Second} + end + end + ), + {ok, _pipe@2} + end. diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache Binary files differnew file mode 100644 index 0000000..e9d8d6b --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache_meta Binary files differnew file mode 100644 index 0000000..549041c --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.erl new file mode 100644 index 0000000..d991d89 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.erl @@ -0,0 +1,118 @@ +-module(gleam_community@maths@predicates). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([is_close/4, all_close/4, is_fractional/1, is_power/2, is_perfect/1, is_even/1, is_odd/1]). + +-spec float_absolute_value(float()) -> float(). +float_absolute_value(X) -> + case X > +0.0 of + true -> + X; + + false -> + -1.0 * X + end. + +-spec float_absolute_difference(float(), float()) -> float(). +float_absolute_difference(A, B) -> + _pipe = A - B, + float_absolute_value(_pipe). + +-spec is_close(float(), float(), float(), float()) -> boolean(). +is_close(A, B, Rtol, Atol) -> + X = float_absolute_difference(A, B), + Y = Atol + (Rtol * float_absolute_value(B)), + case X =< Y of + true -> + true; + + false -> + false + end. + +-spec all_close(list(float()), list(float()), float(), float()) -> {ok, + list(boolean())} | + {error, binary()}. +all_close(Xarr, Yarr, Rtol, Atol) -> + Xlen = gleam@list:length(Xarr), + Ylen = gleam@list:length(Yarr), + case Xlen =:= Ylen of + false -> + _pipe = <<"Invalid input argument: length(xarr) != length(yarr). Valid input is when length(xarr) == length(yarr)."/utf8>>, + {error, _pipe}; + + true -> + _pipe@1 = gleam@list:zip(Xarr, Yarr), + _pipe@2 = gleam@list:map( + _pipe@1, + fun(Z) -> + is_close( + gleam@pair:first(Z), + gleam@pair:second(Z), + Rtol, + Atol + ) + end + ), + {ok, _pipe@2} + end. + +-spec is_fractional(float()) -> boolean(). +is_fractional(X) -> + (math:ceil(X) - X) > +0.0. + +-spec is_power(integer(), integer()) -> boolean(). +is_power(X, Y) -> + _assert_subject = gleam_community@maths@elementary:logarithm( + gleam@int:to_float(X), + {some, gleam@int:to_float(Y)} + ), + {ok, Value} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/predicates"/utf8>>, + function => <<"is_power"/utf8>>, + line => 241}) + end, + _assert_subject@1 = gleam_community@maths@piecewise:truncate( + Value, + {some, 0} + ), + {ok, Truncated} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/predicates"/utf8>>, + function => <<"is_power"/utf8>>, + line => 243}) + end, + Rem = Value - Truncated, + Rem =:= +0.0. + +-spec do_sum(list(integer())) -> integer(). +do_sum(Arr) -> + case Arr of + [] -> + 0; + + _ -> + _pipe = Arr, + gleam@list:fold(_pipe, 0, fun(Acc, A) -> A + Acc end) + end. + +-spec is_perfect(integer()) -> boolean(). +is_perfect(N) -> + do_sum(gleam_community@maths@arithmetics:proper_divisors(N)) =:= N. + +-spec is_even(integer()) -> boolean(). +is_even(X) -> + (X rem 2) =:= 0. + +-spec is_odd(integer()) -> boolean(). +is_odd(X) -> + (X rem 2) /= 0. diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache Binary files differnew file mode 100644 index 0000000..5542bd9 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache_meta Binary files differnew file mode 100644 index 0000000..3a025a2 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.erl new file mode 100644 index 0000000..a080286 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.erl @@ -0,0 +1,202 @@ +-module(gleam_community@maths@sequences). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([arange/3, linear_space/4, logarithmic_space/5, geometric_space/4]). + +-spec arange(float(), float(), float()) -> list(float()). +arange(Start, Stop, Step) -> + case ((Start >= Stop) andalso (Step > +0.0)) orelse ((Start =< Stop) andalso (Step + < +0.0)) of + true -> + []; + + false -> + Direction = case Start =< Stop of + true -> + 1.0; + + false -> + -1.0 + end, + Step_abs = gleam_community@maths@piecewise:float_absolute_value( + Step + ), + Num = case Step_abs of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> gleam_community@maths@piecewise:float_absolute_value( + Start - Stop + ) + / Gleam@denominator + end, + _pipe = gleam@list:range( + 0, + gleam_community@maths@conversion:float_to_int(Num) - 1 + ), + gleam@list:map( + _pipe, + fun(I) -> + Start + ((gleam_community@maths@conversion:int_to_float(I) * Step_abs) + * Direction) + end + ) + end. + +-spec linear_space(float(), float(), integer(), boolean()) -> {ok, + list(float())} | + {error, binary()}. +linear_space(Start, Stop, Num, Endpoint) -> + Direction = case Start =< Stop of + true -> + 1.0; + + false -> + -1.0 + end, + case Num > 0 of + true -> + case Endpoint of + true -> + Increment = case gleam_community@maths@conversion:int_to_float( + Num - 1 + ) of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> gleam_community@maths@piecewise:float_absolute_value( + Start - Stop + ) + / Gleam@denominator + end, + _pipe = gleam@list:range(0, Num - 1), + _pipe@1 = gleam@list:map( + _pipe, + fun(I) -> + Start + ((gleam_community@maths@conversion:int_to_float( + I + ) + * Increment) + * Direction) + end + ), + {ok, _pipe@1}; + + false -> + Increment@1 = case gleam_community@maths@conversion:int_to_float( + Num + ) of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator@1 -> gleam_community@maths@piecewise:float_absolute_value( + Start - Stop + ) + / Gleam@denominator@1 + end, + _pipe@2 = gleam@list:range(0, Num - 1), + _pipe@3 = gleam@list:map( + _pipe@2, + fun(I@1) -> + Start + ((gleam_community@maths@conversion:int_to_float( + I@1 + ) + * Increment@1) + * Direction) + end + ), + {ok, _pipe@3} + end; + + false -> + _pipe@4 = <<"Invalid input: num < 0. Valid input is num > 0."/utf8>>, + {error, _pipe@4} + end. + +-spec logarithmic_space(float(), float(), integer(), boolean(), float()) -> {ok, + list(float())} | + {error, binary()}. +logarithmic_space(Start, Stop, Num, Endpoint, Base) -> + case Num > 0 of + true -> + _assert_subject = linear_space(Start, Stop, Num, Endpoint), + {ok, Linspace} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/sequences"/utf8>>, + function => <<"logarithmic_space"/utf8>>, + line => 221}) + end, + _pipe = Linspace, + _pipe@1 = gleam@list:map( + _pipe, + fun(I) -> + _assert_subject@1 = gleam_community@maths@elementary:power( + Base, + I + ), + {ok, Result} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/sequences"/utf8>>, + function => <<"logarithmic_space"/utf8>>, + line => 224}) + end, + Result + end + ), + {ok, _pipe@1}; + + false -> + _pipe@2 = <<"Invalid input: num < 0. Valid input is num > 0."/utf8>>, + {error, _pipe@2} + end. + +-spec geometric_space(float(), float(), integer(), boolean()) -> {ok, + list(float())} | + {error, binary()}. +geometric_space(Start, Stop, Num, Endpoint) -> + case (Start =:= +0.0) orelse (Stop =:= +0.0) of + true -> + _pipe = <<""/utf8>>, + {error, _pipe}; + + false -> + case Num > 0 of + true -> + _assert_subject = gleam_community@maths@elementary:logarithm_10( + Start + ), + {ok, Log_start} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/sequences"/utf8>>, + function => <<"geometric_space"/utf8>>, + line => 293}) + end, + _assert_subject@1 = gleam_community@maths@elementary:logarithm_10( + Stop + ), + {ok, Log_stop} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/sequences"/utf8>>, + function => <<"geometric_space"/utf8>>, + line => 294}) + end, + logarithmic_space(Log_start, Log_stop, Num, Endpoint, 10.0); + + false -> + _pipe@1 = <<"Invalid input: num < 0. Valid input is num > 0."/utf8>>, + {error, _pipe@1} + end + end. diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache Binary files differnew file mode 100644 index 0000000..7093e86 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache_meta Binary files differnew file mode 100644 index 0000000..3c21994 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.erl new file mode 100644 index 0000000..ff0307f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.erl @@ -0,0 +1,163 @@ +-module(gleam_community@maths@special). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([erf/1, gamma/1, beta/2, incomplete_gamma/2]). + +-spec erf(float()) -> float(). +erf(X) -> + _assert_subject = [0.254829592, + -0.284496736, + 1.421413741, + -1.453152027, + 1.061405429], + [A1, A2, A3, A4, A5] = case _assert_subject of + [_, _, _, _, _] -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/special"/utf8>>, + function => <<"erf"/utf8>>, + line => 79}) + end, + P = 0.3275911, + Sign = gleam_community@maths@piecewise:float_sign(X), + X@1 = gleam_community@maths@piecewise:float_absolute_value(X), + T = case (1.0 + (P * X@1)) of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> 1.0 / Gleam@denominator + end, + Y = 1.0 - ((((((((((A5 * T) + A4) * T) + A3) * T) + A2) * T) + A1) * T) * gleam_community@maths@elementary:exponential( + (-1.0 * X@1) * X@1 + )), + Sign * Y. + +-spec gamma_lanczos(float()) -> float(). +gamma_lanczos(X) -> + case X < 0.5 of + true -> + case (gleam_community@maths@elementary:sin( + gleam_community@maths@elementary:pi() * X + ) + * gamma_lanczos(1.0 - X)) of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> gleam_community@maths@elementary:pi() / Gleam@denominator + end; + + false -> + Z = X - 1.0, + X@1 = gleam@list:index_fold( + [0.99999999999980993, + 676.5203681218851, + -1259.1392167224028, + 771.32342877765313, + -176.61502916214059, + 12.507343278686905, + -0.13857109526572012, + 0.0000099843695780195716, + 0.00000015056327351493116], + +0.0, + fun(Acc, V, Index) -> case Index > 0 of + true -> + Acc + (case (Z + gleam_community@maths@conversion:int_to_float( + Index + )) of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator@1 -> V / Gleam@denominator@1 + end); + + false -> + V + end end + ), + T = (Z + 7.0) + 0.5, + _assert_subject = gleam_community@maths@elementary:power( + 2.0 * gleam_community@maths@elementary:pi(), + 0.5 + ), + {ok, V1} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/special"/utf8>>, + function => <<"gamma_lanczos"/utf8>>, + line => 146}) + end, + _assert_subject@1 = gleam_community@maths@elementary:power( + T, + Z + 0.5 + ), + {ok, V2} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/special"/utf8>>, + function => <<"gamma_lanczos"/utf8>>, + line => 147}) + end, + ((V1 * V2) * gleam_community@maths@elementary:exponential(-1.0 * T)) + * X@1 + end. + +-spec gamma(float()) -> float(). +gamma(X) -> + gamma_lanczos(X). + +-spec beta(float(), float()) -> float(). +beta(X, Y) -> + case gamma(X + Y) of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> gamma(X) * gamma(Y) / Gleam@denominator + end. + +-spec incomplete_gamma_sum(float(), float(), float(), float(), float()) -> float(). +incomplete_gamma_sum(A, X, T, S, N) -> + case T of + +0.0 -> + S; + + _ -> + Ns = S + T, + Nt = T * (case (A + N) of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> X / Gleam@denominator + end), + incomplete_gamma_sum(A, X, Nt, Ns, N + 1.0) + end. + +-spec incomplete_gamma(float(), float()) -> {ok, float()} | {error, binary()}. +incomplete_gamma(A, X) -> + case (A > +0.0) andalso (X >= +0.0) of + true -> + _assert_subject = gleam_community@maths@elementary:power(X, A), + {ok, V} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/special"/utf8>>, + function => <<"incomplete_gamma"/utf8>>, + line => 173}) + end, + _pipe = (V * gleam_community@maths@elementary:exponential(-1.0 * X)) + * incomplete_gamma_sum(A, X, case A of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> 1.0 / Gleam@denominator + end, +0.0, 1.0), + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invlaid input argument: a <= 0 or x < 0. Valid input is a > 0 and x >= 0."/utf8>>, + {error, _pipe@1} + end. diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/maths.mjs b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/maths.mjs new file mode 100644 index 0000000..5c5ab31 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/maths.mjs @@ -0,0 +1,95 @@ +export function sin(float) { + return Math.sin(float) +} + +export function pi() { + return Math.PI +} + +export function acos(float) { + return Math.acos(float) +} + +export function acosh(float) { + return Math.acosh(float) +} + +export function asin(float) { + return Math.asin(float) +} + +export function asinh(float) { + return Math.asinh(float) +} + +export function atan(float) { + return Math.atan(float) +} + +export function tan(float) { + return Math.tan(float) +} + +export function atan2(floaty, floatx) { + return Math.atan2(floaty, floatx) +} + +export function atanh(float) { + return Math.atanh(float) +} + +export function cos(float) { + return Math.cos(float) +} + +export function cosh(float) { + return Math.cosh(float) +} + +export function exponential(float) { + return Math.exp(float) +} + +export function ceiling(float) { + return Math.ceil(float) +} + +export function floor(float) { + return Math.floor(float) +} + +export function power(base, exponent) { + return Math.pow(base, exponent) +} + +export function logarithm(float) { + return Math.log(float) +} + +export function logarithm_10(float) { + return Math.log10(float) +} + +export function logarithm_2(float) { + return Math.log2(float) +} + +export function sinh(float) { + return Math.sinh(float) +} + +export function tanh(float) { + return Math.tanh(float) +} + +export function sign(float) { + return Math.sign(float) +} + +export function truncate(float) { + return Math.trunc(float) +} + +export function to_int(float) { + return Math.trunc(float) +} diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@arithmetics.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@arithmetics.beam Binary files differnew file mode 100644 index 0000000..42d317f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@arithmetics.beam diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@combinatorics.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@combinatorics.beam Binary files differnew file mode 100644 index 0000000..5b0dcc5 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@combinatorics.beam diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@conversion.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@conversion.beam Binary files differnew file mode 100644 index 0000000..8e6afb8 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@conversion.beam diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@elementary.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@elementary.beam Binary files differnew file mode 100644 index 0000000..a54c3a0 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@elementary.beam diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@metrics.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@metrics.beam Binary files differnew file mode 100644 index 0000000..f55fdc0 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@metrics.beam diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@piecewise.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@piecewise.beam Binary files differnew file mode 100644 index 0000000..ca3947b --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@piecewise.beam diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@predicates.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@predicates.beam Binary files differnew file mode 100644 index 0000000..8a5ecf4 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@predicates.beam diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@sequences.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@sequences.beam Binary files differnew file mode 100644 index 0000000..d9defae --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@sequences.beam diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@special.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@special.beam Binary files differnew file mode 100644 index 0000000..edfa64a --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@special.beam diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community_maths.app b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community_maths.app new file mode 100644 index 0000000..b24eaf7 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community_maths.app @@ -0,0 +1,7 @@ +{application, gleam_community_maths, [ + {vsn, "1.0.1"}, + {applications, [gleam_stdlib]}, + {description, "A basic maths library"}, + {modules, []}, + {registered, []} +]}. diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@@compile.erl new file mode 100644 index 0000000..543db88 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@@compile.erl @@ -0,0 +1,157 @@ +#!/usr/bin/env escript + +% TODO: Don't concurrently print warnings and errors +% TODO: Some tests + +-record(arguments, {lib = "./", out = "./", modules = []}). + +main(Args) -> + #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args), + IsElixirModule = fun(Module) -> + filename:extension(Module) =:= ".ex" + end, + {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules), + ok = configure_logging(), + ok = add_lib_to_erlang_path(Lib), + ok = filelib:ensure_dir([Out, $/]), + {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out), + {ElixirOk, _ElixirBeams} = case ErlangOk of + true -> compile_elixir(ElixirModules, Out); + false -> {false, []} + end, + case ErlangOk and ElixirOk of + true -> ok; + false -> erlang:halt(1) + end. + +compile_erlang(Modules, Out) -> + Workers = start_compiler_workers(Out), + ok = producer_loop(Modules, Workers), + collect_results({true, []}). + +collect_results(Acc = {Result, Beams}) -> + receive + {compiled, Beam} -> collect_results({Result, [Beam | Beams]}); + failed -> collect_results({false, Beams}) + after 0 -> Acc + end. + +producer_loop([], 0) -> + ok; +producer_loop([], Workers) -> + receive + {work_please, _} -> producer_loop([], Workers - 1) + end; +producer_loop([Module | Modules], Workers) -> + receive + {work_please, Worker} -> + erlang:send(Worker, {module, Module}), + producer_loop(Modules, Workers) + end. + +start_compiler_workers(Out) -> + Parent = self(), + NumSchedulers = erlang:system_info(schedulers), + SpawnWorker = fun(_) -> + erlang:spawn_link(fun() -> worker_loop(Parent, Out) end) + end, + lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)), + NumSchedulers. + +worker_loop(Parent, Out) -> + Options = [report_errors, report_warnings, debug_info, {outdir, Out}], + erlang:send(Parent, {work_please, self()}), + receive + {module, Module} -> + log({compiling, Module}), + case compile:file(Module, Options) of + {ok, ModuleName} -> + Beam = filename:join(Out, ModuleName) ++ ".beam", + Message = {compiled, Beam}, + log(Message), + erlang:send(Parent, Message); + error -> + log({failed, Module}), + erlang:send(Parent, failed) + end, + worker_loop(Parent, Out) + end. + +compile_elixir(Modules, Out) -> + Error = [ + "The program elixir was not found. Is it installed?", + $\n, + "Documentation for installing Elixir can be viewed here:", + $\n, + "https://elixir-lang.org/install.html" + ], + case Modules of + [] -> {true, []}; + _ -> + log({starting, "compiler.app"}), + ok = application:start(compiler), + log({starting, "elixir.app"}), + case application:start(elixir) of + ok -> do_compile_elixir(Modules, Out); + _ -> + io:put_chars(standard_error, [Error, $\n]), + {false, []} + end + end. + +do_compile_elixir(Modules, Out) -> + ModuleBins = lists:map(fun(Module) -> + log({compiling, Module}), + list_to_binary(Module) + end, Modules), + OutBin = list_to_binary(Out), + Options = [{dest, OutBin}], + % Silence "redefining module" warnings. + % Compiled modules in the build directory are added to the code path. + % These warnings result from recompiling loaded modules. + % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation. + 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]), + case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of + {ok, ModuleAtoms, _} -> + ToBeam = fun(ModuleAtom) -> + Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam", + log({compiled, Beam}), + Beam + end, + {true, lists:map(ToBeam, ModuleAtoms)}; + {error, Errors, _} -> + % Log all filenames associated with modules that failed to compile. + % Note: The compiler prints compilation errors upon encountering them. + ErrorFiles = lists:usort([File || {File, _, _} <- Errors]), + Log = fun(File) -> + log({failed, binary_to_list(File)}) + end, + lists:foreach(Log, ErrorFiles), + {false, []}; + _ -> {false, []} + end. + +add_lib_to_erlang_path(Lib) -> + code:add_paths(filelib:wildcard([Lib, "/*/ebin"])). + +parse(Args) -> + parse(Args, #arguments{}). + +parse([], Arguments) -> + Arguments; +parse(["--lib", Lib | Rest], Arguments) -> + parse(Rest, Arguments#arguments{lib = Lib}); +parse(["--out", Out | Rest], Arguments) -> + parse(Rest, Arguments#arguments{out = Out}); +parse([Module | Rest], Arguments = #arguments{modules = Modules}) -> + parse(Rest, Arguments#arguments{modules = [Module | Modules]}). + +configure_logging() -> + Enabled = os:getenv("GLEAM_LOG") /= false, + persistent_term:put(gleam_logging_enabled, Enabled). + +log(Term) -> + case persistent_term:get(gleam_logging_enabled) of + true -> erlang:display(Term), ok; + false -> ok + end. diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache Binary files differnew file mode 100644 index 0000000..d44adcc --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache_meta b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache_meta Binary files differnew file mode 100644 index 0000000..12933b2 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.erl new file mode 100644 index 0000000..2889892 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.erl @@ -0,0 +1,90 @@ +-module(gleam@erlang). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([format/1, term_to_binary/1, get_line/1, system_time/1, erlang_timestamp/0, rescue/1, binary_to_term/1, unsafe_binary_to_term/1, start_arguments/0, ensure_all_started/1, make_reference/0, priv_directory/1]). +-export_type([safe/0, get_line_error/0, time_unit/0, crash/0, ensure_all_started_error/0, reference_/0]). + +-type safe() :: safe. + +-type get_line_error() :: eof | no_data. + +-type time_unit() :: second | millisecond | microsecond | nanosecond. + +-type crash() :: {exited, gleam@dynamic:dynamic_()} | + {thrown, gleam@dynamic:dynamic_()} | + {errored, gleam@dynamic:dynamic_()}. + +-type ensure_all_started_error() :: {unknown_application, + gleam@erlang@atom:atom_()} | + {application_failed_to_start, + gleam@erlang@atom:atom_(), + gleam@dynamic:dynamic_()}. + +-type reference_() :: any(). + +-spec format(any()) -> binary(). +format(Term) -> + unicode:characters_to_binary(io_lib:format(<<"~p"/utf8>>, [Term])). + +-spec term_to_binary(any()) -> bitstring(). +term_to_binary(A) -> + erlang:term_to_binary(A). + +-spec get_line(binary()) -> {ok, binary()} | {error, get_line_error()}. +get_line(Prompt) -> + gleam_erlang_ffi:get_line(Prompt). + +-spec system_time(time_unit()) -> integer(). +system_time(A) -> + os:system_time(A). + +-spec erlang_timestamp() -> {integer(), integer(), integer()}. +erlang_timestamp() -> + os:timestamp(). + +-spec rescue(fun(() -> GQE)) -> {ok, GQE} | {error, crash()}. +rescue(A) -> + gleam_erlang_ffi:rescue(A). + +-spec binary_to_term(bitstring()) -> {ok, gleam@dynamic:dynamic_()} | + {error, nil}. +binary_to_term(Binary) -> + case gleam_erlang_ffi:rescue( + fun() -> erlang:binary_to_term(Binary, [safe]) end + ) of + {ok, Term} -> + {ok, Term}; + + {error, _} -> + {error, nil} + end. + +-spec unsafe_binary_to_term(bitstring()) -> {ok, gleam@dynamic:dynamic_()} | + {error, nil}. +unsafe_binary_to_term(Binary) -> + case gleam_erlang_ffi:rescue(fun() -> erlang:binary_to_term(Binary, []) end) of + {ok, Term} -> + {ok, Term}; + + {error, _} -> + {error, nil} + end. + +-spec start_arguments() -> list(binary()). +start_arguments() -> + _pipe = init:get_plain_arguments(), + gleam@list:map(_pipe, fun unicode:characters_to_binary/1). + +-spec ensure_all_started(gleam@erlang@atom:atom_()) -> {ok, + list(gleam@erlang@atom:atom_())} | + {error, ensure_all_started_error()}. +ensure_all_started(Application) -> + gleam_erlang_ffi:ensure_all_started(Application). + +-spec make_reference() -> reference_(). +make_reference() -> + erlang:make_ref(). + +-spec priv_directory(binary()) -> {ok, binary()} | {error, nil}. +priv_directory(Name) -> + gleam_erlang_ffi:priv_directory(Name). diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache Binary files differnew file mode 100644 index 0000000..858e310 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_meta b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_meta Binary files differnew file mode 100644 index 0000000..be33011 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.erl new file mode 100644 index 0000000..e9ad530 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.erl @@ -0,0 +1,26 @@ +-module(gleam@erlang@atom). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([from_string/1, create_from_string/1, to_string/1, from_dynamic/1]). +-export_type([atom_/0, from_string_error/0]). + +-type atom_() :: any(). + +-type from_string_error() :: atom_not_loaded. + +-spec from_string(binary()) -> {ok, atom_()} | {error, from_string_error()}. +from_string(A) -> + gleam_erlang_ffi:atom_from_string(A). + +-spec create_from_string(binary()) -> atom_(). +create_from_string(A) -> + erlang:binary_to_atom(A). + +-spec to_string(atom_()) -> binary(). +to_string(A) -> + erlang:atom_to_binary(A). + +-spec from_dynamic(gleam@dynamic:dynamic_()) -> {ok, atom_()} | + {error, list(gleam@dynamic:decode_error())}. +from_dynamic(From) -> + gleam_erlang_ffi:atom_from_dynamic(From). diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache Binary files differnew file mode 100644 index 0000000..707598f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_meta b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_meta Binary files differnew file mode 100644 index 0000000..82cfdb5 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.erl new file mode 100644 index 0000000..9f9c0fa --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.erl @@ -0,0 +1,15 @@ +-module(gleam@erlang@charlist). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([to_string/1, from_string/1]). +-export_type([charlist/0]). + +-type charlist() :: any(). + +-spec to_string(charlist()) -> binary(). +to_string(A) -> + unicode:characters_to_binary(A). + +-spec from_string(binary()) -> charlist(). +from_string(A) -> + unicode:characters_to_list(A). diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache Binary files differnew file mode 100644 index 0000000..3083885 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache_meta b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache_meta Binary files differnew file mode 100644 index 0000000..1cb342b --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.erl new file mode 100644 index 0000000..1fe6628 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.erl @@ -0,0 +1,190 @@ +-module(gleam@erlang@file). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([file_info/1, link_info/1, is_directory/1, is_regular/1, file_exists/1, link_exists/1, make_directory/1, list_directory/1, delete_directory/1, recursive_delete/1, read/1, read_bits/1, write/2, write_bits/2, append/2, append_bits/2, delete/1]). +-export_type([reason/0, file_type/0, access/0, file_info/0]). + +-type reason() :: eacces | + eagain | + ebadf | + ebadmsg | + ebusy | + edeadlk | + edeadlock | + edquot | + eexist | + efault | + efbig | + eftype | + eintr | + einval | + eio | + eisdir | + eloop | + emfile | + emlink | + emultihop | + enametoolong | + enfile | + enobufs | + enodev | + enolck | + enolink | + enoent | + enomem | + enospc | + enosr | + enostr | + enosys | + enotblk | + enotdir | + enotsup | + enxio | + eopnotsupp | + eoverflow | + eperm | + epipe | + erange | + erofs | + espipe | + esrch | + estale | + etxtbsy | + exdev | + not_utf8. + +-type file_type() :: device | directory | other | regular | symlink. + +-type access() :: no_access | read | read_write | write. + +-type file_info() :: {file_info, + integer(), + file_type(), + access(), + integer(), + integer(), + integer(), + integer(), + integer(), + integer(), + integer(), + integer(), + integer(), + integer()}. + +-spec file_info(binary()) -> {ok, file_info()} | {error, reason()}. +file_info(A) -> + gleam_erlang_ffi:file_info(A). + +-spec link_info(binary()) -> {ok, file_info()} | {error, reason()}. +link_info(A) -> + gleam_erlang_ffi:link_info(A). + +-spec is_directory(binary()) -> {ok, boolean()} | {error, reason()}. +is_directory(Path) -> + gleam@result:map( + gleam_erlang_ffi:file_info(Path), + fun(_use0) -> + {file_info, _, File_type, _, _, _, _, _, _, _, _, _, _, _} = _use0, + File_type =:= directory + end + ). + +-spec is_regular(binary()) -> {ok, boolean()} | {error, reason()}. +is_regular(Path) -> + gleam@result:map( + gleam_erlang_ffi:file_info(Path), + fun(_use0) -> + {file_info, _, File_type, _, _, _, _, _, _, _, _, _, _, _} = _use0, + File_type =:= regular + end + ). + +-spec file_exists(binary()) -> {ok, boolean()} | {error, reason()}. +file_exists(Path) -> + Result = begin + _pipe = Path, + _pipe@1 = gleam_erlang_ffi:file_info(_pipe), + gleam@result:replace(_pipe@1, true) + end, + case Result of + {error, enoent} -> + {ok, false}; + + _ -> + Result + end. + +-spec link_exists(binary()) -> {ok, boolean()} | {error, reason()}. +link_exists(Path) -> + Result = begin + _pipe = Path, + _pipe@1 = gleam_erlang_ffi:link_info(_pipe), + gleam@result:replace(_pipe@1, true) + end, + case Result of + {error, enoent} -> + {ok, false}; + + _ -> + Result + end. + +-spec make_directory(binary()) -> {ok, nil} | {error, reason()}. +make_directory(A) -> + gleam_erlang_ffi:make_directory(A). + +-spec list_directory(binary()) -> {ok, list(binary())} | {error, reason()}. +list_directory(A) -> + gleam_erlang_ffi:list_directory(A). + +-spec delete_directory(binary()) -> {ok, nil} | {error, reason()}. +delete_directory(A) -> + gleam_erlang_ffi:delete_directory(A). + +-spec recursive_delete(binary()) -> {ok, nil} | {error, reason()}. +recursive_delete(A) -> + gleam_erlang_ffi:recursive_delete(A). + +-spec read(binary()) -> {ok, binary()} | {error, reason()}. +read(Path) -> + _pipe = Path, + _pipe@1 = gleam_erlang_ffi:read_file(_pipe), + gleam@result:then( + _pipe@1, + fun(Content) -> case gleam@bit_array:to_string(Content) of + {ok, String} -> + {ok, String}; + + {error, nil} -> + {error, not_utf8} + end end + ). + +-spec read_bits(binary()) -> {ok, bitstring()} | {error, reason()}. +read_bits(Path) -> + gleam_erlang_ffi:read_file(Path). + +-spec write(binary(), binary()) -> {ok, nil} | {error, reason()}. +write(Contents, Path) -> + _pipe = Contents, + _pipe@1 = gleam_stdlib:identity(_pipe), + gleam_erlang_ffi:write_file(_pipe@1, Path). + +-spec write_bits(bitstring(), binary()) -> {ok, nil} | {error, reason()}. +write_bits(Contents, Path) -> + gleam_erlang_ffi:write_file(Contents, Path). + +-spec append(binary(), binary()) -> {ok, nil} | {error, reason()}. +append(Contents, Path) -> + _pipe = Contents, + _pipe@1 = gleam_stdlib:identity(_pipe), + gleam_erlang_ffi:append_file(_pipe@1, Path). + +-spec append_bits(bitstring(), binary()) -> {ok, nil} | {error, reason()}. +append_bits(Contents, Path) -> + gleam_erlang_ffi:append_file(Contents, Path). + +-spec delete(binary()) -> {ok, nil} | {error, reason()}. +delete(A) -> + gleam_erlang_ffi:delete_file(A). diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache Binary files differnew file mode 100644 index 0000000..6c2ad69 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_meta b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_meta Binary files differnew file mode 100644 index 0000000..085886a --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.erl new file mode 100644 index 0000000..f57d029 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.erl @@ -0,0 +1,33 @@ +-module(gleam@erlang@node). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([self/0, visible/0, connect/1, send/3, to_atom/1]). +-export_type([node_/0, do_not_leak/0, connect_error/0]). + +-type node_() :: any(). + +-type do_not_leak() :: any(). + +-type connect_error() :: failed_to_connect | local_node_is_not_alive. + +-spec self() -> node_(). +self() -> + erlang:node(). + +-spec visible() -> list(node_()). +visible() -> + erlang:nodes(). + +-spec connect(gleam@erlang@atom:atom_()) -> {ok, node_()} | + {error, connect_error()}. +connect(Node) -> + gleam_erlang_ffi:connect_node(Node). + +-spec send(node_(), gleam@erlang@atom:atom_(), any()) -> nil. +send(Node, Name, Message) -> + erlang:send({Name, Node}, Message), + nil. + +-spec to_atom(node_()) -> gleam@erlang@atom:atom_(). +to_atom(Node) -> + gleam_erlang_ffi:identity(Node). diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache Binary files differnew file mode 100644 index 0000000..38dabf7 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache_meta b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache_meta Binary files differnew file mode 100644 index 0000000..1d5fa83 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.erl new file mode 100644 index 0000000..c05e6c3 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.erl @@ -0,0 +1,27 @@ +-module(gleam@erlang@os). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([get_all_env/0, get_env/1, set_env/2, unset_env/1, family/0]). +-export_type([os_family/0]). + +-type os_family() :: windows_nt | linux | darwin | free_bsd | {other, binary()}. + +-spec get_all_env() -> gleam@dict:dict(binary(), binary()). +get_all_env() -> + gleam_erlang_ffi:get_all_env(). + +-spec get_env(binary()) -> {ok, binary()} | {error, nil}. +get_env(Name) -> + gleam_erlang_ffi:get_env(Name). + +-spec set_env(binary(), binary()) -> nil. +set_env(Name, Value) -> + gleam_erlang_ffi:set_env(Name, Value). + +-spec unset_env(binary()) -> nil. +unset_env(Name) -> + gleam_erlang_ffi:unset_env(Name). + +-spec family() -> os_family(). +family() -> + gleam_erlang_ffi:os_family(). diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache Binary files differnew file mode 100644 index 0000000..57cc2e6 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_meta b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_meta Binary files differnew file mode 100644 index 0000000..ad9209c --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.erl new file mode 100644 index 0000000..abb7144 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.erl @@ -0,0 +1,374 @@ +-module(gleam@erlang@process). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([self/0, start/2, new_subject/0, subject_owner/1, send/2, new_selector/0, select/2, select_forever/1, map_selector/2, merge_selector/2, flush_messages/0, selecting_trapped_exits/2, selecting/3, 'receive'/2, selecting_record2/3, selecting_record3/3, selecting_record4/3, selecting_record5/3, selecting_record6/3, selecting_record7/3, selecting_record8/3, selecting_anything/2, sleep/1, sleep_forever/0, is_alive/1, monitor_process/1, selecting_process_down/3, demonitor_process/1, try_call/3, call/3, link/1, unlink/1, send_after/3, cancel_timer/1, kill/1, send_exit/1, send_abnormal_exit/2, trap_exits/1, register/2, unregister/1, named/1]). +-export_type([pid_/0, subject/1, do_not_leak/0, selector/1, exit_message/0, exit_reason/0, anything_selector_tag/0, process_monitor_flag/0, process_monitor/0, process_down/0, call_error/1, timer/0, cancelled/0, kill_flag/0]). + +-type pid_() :: any(). + +-opaque subject(GSA) :: {subject, pid_(), gleam@erlang:reference_()} | + {gleam_phantom, GSA}. + +-type do_not_leak() :: any(). + +-type selector(GSB) :: any() | {gleam_phantom, GSB}. + +-type exit_message() :: {exit_message, pid_(), exit_reason()}. + +-type exit_reason() :: normal | killed | {abnormal, binary()}. + +-type anything_selector_tag() :: anything. + +-type process_monitor_flag() :: process. + +-opaque process_monitor() :: {process_monitor, gleam@erlang:reference_()}. + +-type process_down() :: {process_down, pid_(), gleam@dynamic:dynamic_()}. + +-type call_error(GSC) :: {callee_down, gleam@dynamic:dynamic_()} | + call_timeout | + {gleam_phantom, GSC}. + +-type timer() :: any(). + +-type cancelled() :: timer_not_found | {cancelled, integer()}. + +-type kill_flag() :: kill. + +-spec self() -> pid_(). +self() -> + erlang:self(). + +-spec start(fun(() -> any()), boolean()) -> pid_(). +start(Implementation, Link) -> + case Link of + true -> + erlang:spawn_link(Implementation); + + false -> + erlang:spawn(Implementation) + end. + +-spec new_subject() -> subject(any()). +new_subject() -> + {subject, erlang:self(), erlang:make_ref()}. + +-spec subject_owner(subject(any())) -> pid_(). +subject_owner(Subject) -> + erlang:element(2, Subject). + +-spec send(subject(GSL), GSL) -> nil. +send(Subject, Message) -> + erlang:send( + erlang:element(2, Subject), + {erlang:element(3, Subject), Message} + ), + nil. + +-spec new_selector() -> selector(any()). +new_selector() -> + gleam_erlang_ffi:new_selector(). + +-spec select(selector(GST), integer()) -> {ok, GST} | {error, nil}. +select(From, Within) -> + gleam_erlang_ffi:select(From, Within). + +-spec select_forever(selector(GSX)) -> GSX. +select_forever(From) -> + gleam_erlang_ffi:select(From). + +-spec map_selector(selector(GSZ), fun((GSZ) -> GTB)) -> selector(GTB). +map_selector(A, B) -> + gleam_erlang_ffi:map_selector(A, B). + +-spec merge_selector(selector(GTD), selector(GTD)) -> selector(GTD). +merge_selector(A, B) -> + gleam_erlang_ffi:merge_selector(A, B). + +-spec flush_messages() -> nil. +flush_messages() -> + gleam_erlang_ffi:flush_messages(). + +-spec selecting_trapped_exits(selector(GTH), fun((exit_message()) -> GTH)) -> selector(GTH). +selecting_trapped_exits(Selector, Handler) -> + Tag = erlang:binary_to_atom(<<"EXIT"/utf8>>), + Handler@1 = fun(Message) -> + Reason = erlang:element(3, Message), + Normal = gleam@dynamic:from(normal), + Killed = gleam@dynamic:from(killed), + Reason@2 = case gleam@dynamic:string(Reason) of + _ when Reason =:= Normal -> + normal; + + _ when Reason =:= Killed -> + killed; + + {ok, Reason@1} -> + {abnormal, Reason@1}; + + {error, _} -> + {abnormal, gleam@string:inspect(Reason)} + end, + Handler({exit_message, erlang:element(2, Message), Reason@2}) + end, + gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 3}, Handler@1). + +-spec selecting(selector(GTK), subject(GTM), fun((GTM) -> GTK)) -> selector(GTK). +selecting(Selector, Subject, Transform) -> + Handler = fun(Message) -> Transform(erlang:element(2, Message)) end, + gleam_erlang_ffi:insert_selector_handler( + Selector, + {erlang:element(3, Subject), 2}, + Handler + ). + +-spec 'receive'(subject(GSN), integer()) -> {ok, GSN} | {error, nil}. +'receive'(Subject, Milliseconds) -> + _pipe = gleam_erlang_ffi:new_selector(), + _pipe@1 = selecting(_pipe, Subject, fun(X) -> X end), + gleam_erlang_ffi:select(_pipe@1, Milliseconds). + +-spec selecting_record2( + selector(GTP), + any(), + fun((gleam@dynamic:dynamic_()) -> GTP) +) -> selector(GTP). +selecting_record2(Selector, Tag, Transform) -> + Handler = fun(Message) -> Transform(erlang:element(2, Message)) end, + gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 2}, Handler). + +-spec selecting_record3( + selector(GTT), + any(), + fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> GTT) +) -> selector(GTT). +selecting_record3(Selector, Tag, Transform) -> + Handler = fun(Message) -> + Transform(erlang:element(2, Message), erlang:element(3, Message)) + end, + gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 3}, Handler). + +-spec selecting_record4( + selector(GTX), + any(), + fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> GTX) +) -> selector(GTX). +selecting_record4(Selector, Tag, Transform) -> + Handler = fun(Message) -> + Transform( + erlang:element(2, Message), + erlang:element(3, Message), + erlang:element(4, Message) + ) + end, + gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 4}, Handler). + +-spec selecting_record5( + selector(GUB), + any(), + fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> GUB) +) -> selector(GUB). +selecting_record5(Selector, Tag, Transform) -> + Handler = fun(Message) -> + Transform( + erlang:element(2, Message), + erlang:element(3, Message), + erlang:element(4, Message), + erlang:element(5, Message) + ) + end, + gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 5}, Handler). + +-spec selecting_record6( + selector(GUF), + any(), + fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> GUF) +) -> selector(GUF). +selecting_record6(Selector, Tag, Transform) -> + Handler = fun(Message) -> + Transform( + erlang:element(2, Message), + erlang:element(3, Message), + erlang:element(4, Message), + erlang:element(5, Message), + erlang:element(6, Message) + ) + end, + gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 6}, Handler). + +-spec selecting_record7( + selector(GUJ), + any(), + fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> GUJ) +) -> selector(GUJ). +selecting_record7(Selector, Tag, Transform) -> + Handler = fun(Message) -> + Transform( + erlang:element(2, Message), + erlang:element(3, Message), + erlang:element(4, Message), + erlang:element(5, Message), + erlang:element(6, Message), + erlang:element(7, Message) + ) + end, + gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 7}, Handler). + +-spec selecting_record8( + selector(GUN), + any(), + fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> GUN) +) -> selector(GUN). +selecting_record8(Selector, Tag, Transform) -> + Handler = fun(Message) -> + Transform( + erlang:element(2, Message), + erlang:element(3, Message), + erlang:element(4, Message), + erlang:element(5, Message), + erlang:element(6, Message), + erlang:element(7, Message), + erlang:element(8, Message) + ) + end, + gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 8}, Handler). + +-spec selecting_anything(selector(GUR), fun((gleam@dynamic:dynamic_()) -> GUR)) -> selector(GUR). +selecting_anything(Selector, Handler) -> + gleam_erlang_ffi:insert_selector_handler(Selector, anything, Handler). + +-spec sleep(integer()) -> nil. +sleep(A) -> + gleam_erlang_ffi:sleep(A). + +-spec sleep_forever() -> nil. +sleep_forever() -> + gleam_erlang_ffi:sleep_forever(). + +-spec is_alive(pid_()) -> boolean(). +is_alive(A) -> + erlang:is_process_alive(A). + +-spec monitor_process(pid_()) -> process_monitor(). +monitor_process(Pid) -> + _pipe = process, + _pipe@1 = erlang:monitor(_pipe, Pid), + {process_monitor, _pipe@1}. + +-spec selecting_process_down( + selector(GUZ), + process_monitor(), + fun((process_down()) -> GUZ) +) -> selector(GUZ). +selecting_process_down(Selector, Monitor, Mapping) -> + gleam_erlang_ffi:insert_selector_handler( + Selector, + erlang:element(2, Monitor), + Mapping + ). + +-spec demonitor_process(process_monitor()) -> nil. +demonitor_process(Monitor) -> + gleam_erlang_ffi:demonitor(Monitor). + +-spec try_call(subject(GVC), fun((subject(GVE)) -> GVC), integer()) -> {ok, GVE} | + {error, call_error(GVE)}. +try_call(Subject, Make_request, Timeout) -> + Reply_subject = new_subject(), + Monitor = monitor_process(subject_owner(Subject)), + send(Subject, Make_request(Reply_subject)), + Result = begin + _pipe = gleam_erlang_ffi:new_selector(), + _pipe@1 = selecting( + _pipe, + Reply_subject, + fun(Field@0) -> {ok, Field@0} end + ), + _pipe@2 = selecting_process_down( + _pipe@1, + Monitor, + fun(Down) -> {error, {callee_down, erlang:element(3, Down)}} end + ), + gleam_erlang_ffi:select(_pipe@2, Timeout) + end, + gleam_erlang_ffi:demonitor(Monitor), + case Result of + {error, nil} -> + {error, call_timeout}; + + {ok, Res} -> + Res + end. + +-spec call(subject(GVJ), fun((subject(GVL)) -> GVJ), integer()) -> GVL. +call(Subject, Make_request, Timeout) -> + _assert_subject = try_call(Subject, Make_request, Timeout), + {ok, Resp} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam/erlang/process"/utf8>>, + function => <<"call"/utf8>>, + line => 593}) + end, + Resp. + +-spec link(pid_()) -> boolean(). +link(Pid) -> + gleam_erlang_ffi:link(Pid). + +-spec unlink(pid_()) -> nil. +unlink(Pid) -> + erlang:unlink(Pid), + nil. + +-spec send_after(subject(GVO), integer(), GVO) -> timer(). +send_after(Subject, Delay, Message) -> + erlang:send_after( + Delay, + erlang:element(2, Subject), + {erlang:element(3, Subject), Message} + ). + +-spec cancel_timer(timer()) -> cancelled(). +cancel_timer(Timer) -> + case gleam@dynamic:int(erlang:cancel_timer(Timer)) of + {ok, I} -> + {cancelled, I}; + + {error, _} -> + timer_not_found + end. + +-spec kill(pid_()) -> nil. +kill(Pid) -> + erlang:exit(Pid, kill), + nil. + +-spec send_exit(pid_()) -> nil. +send_exit(Pid) -> + erlang:exit(Pid, normal), + nil. + +-spec send_abnormal_exit(pid_(), binary()) -> nil. +send_abnormal_exit(Pid, Reason) -> + erlang:exit(Pid, {abnormal, Reason}), + nil. + +-spec trap_exits(boolean()) -> nil. +trap_exits(A) -> + gleam_erlang_ffi:trap_exits(A). + +-spec register(pid_(), gleam@erlang@atom:atom_()) -> {ok, nil} | {error, nil}. +register(Pid, Name) -> + gleam_erlang_ffi:register_process(Pid, Name). + +-spec unregister(gleam@erlang@atom:atom_()) -> {ok, nil} | {error, nil}. +unregister(Name) -> + gleam_erlang_ffi:unregister_process(Name). + +-spec named(gleam@erlang@atom:atom_()) -> {ok, pid_()} | {error, nil}. +named(Name) -> + gleam_erlang_ffi:process_named(Name). diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam_erlang_ffi.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam_erlang_ffi.erl new file mode 100644 index 0000000..872126f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam_erlang_ffi.erl @@ -0,0 +1,263 @@ +-module(gleam_erlang_ffi). +-export([ + atom_from_dynamic/1, rescue/1, atom_from_string/1, get_line/1, + ensure_all_started/1, sleep/1, os_family/0, sleep_forever/0, read_file/1, + append_file/2, write_file/2, delete_file/1, get_all_env/0, get_env/1, + set_env/2, unset_env/1, delete_directory/1, recursive_delete/1, + list_directory/1, demonitor/1, make_directory/1, new_selector/0, link/1, + insert_selector_handler/3, select/1, select/2, trap_exits/1, map_selector/2, + merge_selector/2, flush_messages/0, file_info/1, link_info/1, + priv_directory/1, connect_node/1, register_process/2, unregister_process/1, + process_named/1, identity/1 +]). + +-define(is_posix_error(Error), + Error =:= eacces orelse Error =:= eagain orelse Error =:= ebadf orelse + Error =:= ebadmsg orelse Error =:= ebusy orelse Error =:= edeadlk orelse + Error =:= edeadlock orelse Error =:= edquot orelse Error =:= eexist orelse + Error =:= efault orelse Error =:= efbig orelse Error =:= eftype orelse + Error =:= eintr orelse Error =:= einval orelse Error =:= eio orelse + Error =:= eisdir orelse Error =:= eloop orelse Error =:= emfile orelse + Error =:= emlink orelse Error =:= emultihop orelse Error =:= enametoolong orelse + Error =:= enfile orelse Error =:= enobufs orelse Error =:= enodev orelse + Error =:= enolck orelse Error =:= enolink orelse Error =:= enoent orelse + Error =:= enomem orelse Error =:= enospc orelse Error =:= enosr orelse + Error =:= enostr orelse Error =:= enosys orelse Error =:= enotblk orelse + Error =:= enotdir orelse Error =:= enotsup orelse Error =:= enxio orelse + Error =:= eopnotsupp orelse Error =:= eoverflow orelse Error =:= eperm orelse + Error =:= epipe orelse Error =:= erange orelse Error =:= erofs orelse + Error =:= espipe orelse Error =:= esrch orelse Error =:= estale orelse + Error =:= etxtbsy orelse Error =:= exdev +). + +-spec atom_from_string(binary()) -> {ok, atom()} | {error, atom_not_loaded}. +atom_from_string(S) -> + try {ok, binary_to_existing_atom(S)} + catch error:badarg -> {error, atom_not_loaded} + end. + +atom_from_dynamic(Data) when is_atom(Data) -> + {ok, Data}; +atom_from_dynamic(Data) -> + {error, [{decode_error, <<"Atom">>, gleam@dynamic:classify(Data), []}]}. + +-spec get_line(io:prompt()) -> {ok, unicode:unicode_binary()} | {error, eof | no_data}. +get_line(Prompt) -> + case io:get_line(Prompt) of + eof -> {error, eof}; + {error, _} -> {error, no_data}; + Data when is_binary(Data) -> {ok, Data}; + Data when is_list(Data) -> {ok, unicode:characters_to_binary(Data)} + end. + +rescue(F) -> + try {ok, F()} + catch + throw:X -> {error, {thrown, X}}; + error:X -> {error, {errored, X}}; + exit:X -> {error, {exited, X}} + end. + +ensure_all_started(Application) -> + case application:ensure_all_started(Application) of + {ok, _} = Ok -> Ok; + + {error, {ProblemApp, {"no such file or directory", _}}} -> + {error, {unknown_application, ProblemApp}} + end. + +sleep(Microseconds) -> + timer:sleep(Microseconds), + nil. + +sleep_forever() -> + timer:sleep(infinity), + nil. + +file_info_result(Result) -> + case Result of + {ok, {file_info, Size, Type, Access, Atime, Mtime, Ctime, Mode, Links, MajorDevice, MinorDevice, Inode, Uid, Gid}} when Access =:= none -> + {ok, {file_info, Size, Type, no_access, Atime, Mtime, Ctime, Mode, Links, MajorDevice, MinorDevice, Inode, Uid, Gid}}; + {ok, _} -> + Result; + {error, Reason} when ?is_posix_error(Reason) -> + Result + end. + +file_info(Filename) -> + file_info_result(file:read_file_info(Filename, [{time, posix}])). + +link_info(Filename) -> + file_info_result(file:read_link_info(Filename, [{time, posix}])). + +posix_result(Result) -> + case Result of + ok -> {ok, nil}; + {ok, Value} -> {ok, Value}; + {error, Reason} when ?is_posix_error(Reason) -> {error, Reason} + end. + +read_file(Filename) -> + posix_result(file:read_file(Filename)). + +write_file(Contents, Filename) -> + posix_result(file:write_file(Filename, Contents)). + +append_file(Contents, Filename) -> + posix_result(file:write_file(Filename, Contents, [append])). + +delete_file(Filename) -> + posix_result(file:delete(Filename)). + +make_directory(Dir) -> + posix_result(file:make_dir(Dir)). + +list_directory(Dir) -> + case file:list_dir(Dir) of + {ok, Filenames} -> + {ok, [list_to_binary(Filename) || Filename <- Filenames]}; + {error, Reason} when ?is_posix_error(Reason) -> + {error, Reason} + end. + +delete_directory(Dir) -> + posix_result(file:del_dir(Dir)). + +recursive_delete(Dir) -> + posix_result(file:del_dir_r(Dir)). + +get_all_env() -> + BinVars = lists:map(fun(VarString) -> + [VarName, VarVal] = string:split(VarString, "="), + {list_to_binary(VarName), list_to_binary(VarVal)} + end, os:getenv()), + maps:from_list(BinVars). + +get_env(Name) -> + case os:getenv(binary_to_list(Name)) of + false -> {error, nil}; + Value -> {ok, list_to_binary(Value)} + end. + +set_env(Name, Value) -> + os:putenv(binary_to_list(Name), binary_to_list(Value)), + nil. + +unset_env(Name) -> + os:unsetenv(binary_to_list(Name)), + nil. + +os_family() -> + case os:type() of + {win32, nt} -> + windows_nt; + {unix, linux} -> + linux; + {unix, darwin} -> + darwin; + {unix, freebsd} -> + free_bsd; + {_, Other} -> + {other, atom_to_binary(Other, utf8)} + end. + +new_selector() -> + {selector, #{}}. + +map_selector({selector, Handlers}, Fn) -> + MappedHandlers = maps:map(fun(_Tag, Handler) -> + fun(Message) -> Fn(Handler(Message)) end + end, Handlers), + {selector, MappedHandlers}. + +merge_selector({selector, HandlersA}, {selector, HandlersB}) -> + {selector, maps:merge(HandlersA, HandlersB)}. + +insert_selector_handler({selector, Handlers}, Tag, Fn) -> + {selector, Handlers#{Tag => Fn}}. + +select(Selector) -> + {ok, Message} = select(Selector, infinity), + Message. + +select({selector, Handlers}, Timeout) -> + AnythingHandler = maps:get(anything, Handlers, undefined), + receive + % Monitored process down messages. + % This is special cased so we can selectively receive based on the + % reference as well as the record tag. + {'DOWN', Ref, process, Pid, Reason} when is_map_key(Ref, Handlers) -> + Fn = maps:get(Ref, Handlers), + {ok, Fn({process_down, Pid, Reason})}; + + Msg when is_map_key({element(1, Msg), tuple_size(Msg)}, Handlers) -> + Fn = maps:get({element(1, Msg), tuple_size(Msg)}, Handlers), + {ok, Fn(Msg)}; + + Msg when AnythingHandler =/= undefined -> + {ok, AnythingHandler(Msg)} + after Timeout -> + {error, nil} + end. + +demonitor({_, Reference}) -> + erlang:demonitor(Reference, [flush]). + +link(Pid) -> + try + erlang:link(Pid) + catch + error:_ -> false + end. + +trap_exits(ShouldTrap) -> + erlang:process_flag(trap_exit, ShouldTrap), + nil. + +flush_messages() -> + receive _Message -> flush_messages() + after 0 -> nil + end. + +priv_directory(Name) -> + try erlang:binary_to_existing_atom(Name) of + Atom -> + case code:priv_dir(Atom) of + {error, _} -> {error, nil}; + Path -> {ok, unicode:characters_to_binary(Path)} + end + catch + error:badarg -> {error, nil} + end. + +connect_node(Node) -> + case net_kernel:connect_node(Node) of + true -> {ok, Node}; + false -> {error, failed_to_connect}; + ignored -> {error, local_node_is_not_alive} + end. + +register_process(Pid, Name) -> + try + true = erlang:register(Name, Pid), + {ok, nil} + catch + error:badarg -> {error, nil} + end. + +unregister_process(Name) -> + try + true = erlang:unregister(Name), + {ok, nil} + catch + error:badarg -> {error, nil} + end. + +process_named(Name) -> + case erlang:whereis(Name) of + Pid when is_pid(Pid) -> {ok, Pid}; + _ -> {error, nil} + end. + +identity(X) -> + X. diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang.beam b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang.beam Binary files differnew file mode 100644 index 0000000..d54ec07 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang.beam diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@atom.beam b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@atom.beam Binary files differnew file mode 100644 index 0000000..78d457d --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@atom.beam diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@charlist.beam b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@charlist.beam Binary files differnew file mode 100644 index 0000000..7624e6e --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@charlist.beam diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@file.beam b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@file.beam Binary files differnew file mode 100644 index 0000000..972a12b --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@file.beam diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@node.beam b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@node.beam Binary files differnew file mode 100644 index 0000000..4b2f578 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@node.beam diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@os.beam b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@os.beam Binary files differnew file mode 100644 index 0000000..c6b8f5e --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@os.beam diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@process.beam b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@process.beam Binary files differnew file mode 100644 index 0000000..35e940f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@process.beam diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam_erlang.app b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam_erlang.app new file mode 100644 index 0000000..79950ab --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam_erlang.app @@ -0,0 +1,7 @@ +{application, gleam_erlang, [ + {vsn, "0.23.1"}, + {applications, [gleam_stdlib]}, + {description, "A Gleam library for working with Erlang"}, + {modules, []}, + {registered, []} +]}. diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam_erlang_ffi.beam b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam_erlang_ffi.beam Binary files differnew file mode 100644 index 0000000..c659a9c --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam_erlang_ffi.beam diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@file_FileInfo.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@file_FileInfo.hrl new file mode 100644 index 0000000..b38d11e --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@file_FileInfo.hrl @@ -0,0 +1,15 @@ +-record(file_info, { + size :: integer(), + file_type :: gleam@erlang@file:file_type(), + access :: gleam@erlang@file:access(), + atime :: integer(), + mtime :: integer(), + ctime :: integer(), + mode :: integer(), + links :: integer(), + major_device :: integer(), + minor_device :: integer(), + inode :: integer(), + user_id :: integer(), + group_id :: integer() +}). diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Abnormal.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Abnormal.hrl new file mode 100644 index 0000000..4cd0452 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Abnormal.hrl @@ -0,0 +1 @@ +-record(abnormal, {reason :: binary()}). diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_CalleeDown.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_CalleeDown.hrl new file mode 100644 index 0000000..5dd5047 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_CalleeDown.hrl @@ -0,0 +1 @@ +-record(callee_down, {reason :: gleam@dynamic:dynamic_()}). diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Cancelled.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Cancelled.hrl new file mode 100644 index 0000000..b82b49f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Cancelled.hrl @@ -0,0 +1 @@ +-record(cancelled, {time_remaining :: integer()}). diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ExitMessage.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ExitMessage.hrl new file mode 100644 index 0000000..c476308 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ExitMessage.hrl @@ -0,0 +1,4 @@ +-record(exit_message, { + pid :: gleam@erlang@process:pid_(), + reason :: gleam@erlang@process:exit_reason() +}). diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ProcessDown.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ProcessDown.hrl new file mode 100644 index 0000000..df0b6b7 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ProcessDown.hrl @@ -0,0 +1,4 @@ +-record(process_down, { + pid :: gleam@erlang@process:pid_(), + reason :: gleam@dynamic:dynamic_() +}). diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ProcessMonitor.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ProcessMonitor.hrl new file mode 100644 index 0000000..ce552e2 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ProcessMonitor.hrl @@ -0,0 +1 @@ +-record(process_monitor, {tag :: gleam@erlang:reference_()}). diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Subject.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Subject.hrl new file mode 100644 index 0000000..abc46b2 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Subject.hrl @@ -0,0 +1,4 @@ +-record(subject, { + owner :: gleam@erlang@process:pid_(), + tag :: gleam@erlang:reference_() +}). diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang_ApplicationFailedToStart.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang_ApplicationFailedToStart.hrl new file mode 100644 index 0000000..52c9896 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang_ApplicationFailedToStart.hrl @@ -0,0 +1,4 @@ +-record(application_failed_to_start, { + name :: gleam@erlang@atom:atom_(), + reason :: gleam@dynamic:dynamic_() +}). diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang_UnknownApplication.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang_UnknownApplication.hrl new file mode 100644 index 0000000..fde3c61 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang_UnknownApplication.hrl @@ -0,0 +1 @@ +-record(unknown_application, {name :: gleam@erlang@atom:atom_()}). diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@@compile.erl new file mode 100644 index 0000000..543db88 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@@compile.erl @@ -0,0 +1,157 @@ +#!/usr/bin/env escript + +% TODO: Don't concurrently print warnings and errors +% TODO: Some tests + +-record(arguments, {lib = "./", out = "./", modules = []}). + +main(Args) -> + #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args), + IsElixirModule = fun(Module) -> + filename:extension(Module) =:= ".ex" + end, + {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules), + ok = configure_logging(), + ok = add_lib_to_erlang_path(Lib), + ok = filelib:ensure_dir([Out, $/]), + {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out), + {ElixirOk, _ElixirBeams} = case ErlangOk of + true -> compile_elixir(ElixirModules, Out); + false -> {false, []} + end, + case ErlangOk and ElixirOk of + true -> ok; + false -> erlang:halt(1) + end. + +compile_erlang(Modules, Out) -> + Workers = start_compiler_workers(Out), + ok = producer_loop(Modules, Workers), + collect_results({true, []}). + +collect_results(Acc = {Result, Beams}) -> + receive + {compiled, Beam} -> collect_results({Result, [Beam | Beams]}); + failed -> collect_results({false, Beams}) + after 0 -> Acc + end. + +producer_loop([], 0) -> + ok; +producer_loop([], Workers) -> + receive + {work_please, _} -> producer_loop([], Workers - 1) + end; +producer_loop([Module | Modules], Workers) -> + receive + {work_please, Worker} -> + erlang:send(Worker, {module, Module}), + producer_loop(Modules, Workers) + end. + +start_compiler_workers(Out) -> + Parent = self(), + NumSchedulers = erlang:system_info(schedulers), + SpawnWorker = fun(_) -> + erlang:spawn_link(fun() -> worker_loop(Parent, Out) end) + end, + lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)), + NumSchedulers. + +worker_loop(Parent, Out) -> + Options = [report_errors, report_warnings, debug_info, {outdir, Out}], + erlang:send(Parent, {work_please, self()}), + receive + {module, Module} -> + log({compiling, Module}), + case compile:file(Module, Options) of + {ok, ModuleName} -> + Beam = filename:join(Out, ModuleName) ++ ".beam", + Message = {compiled, Beam}, + log(Message), + erlang:send(Parent, Message); + error -> + log({failed, Module}), + erlang:send(Parent, failed) + end, + worker_loop(Parent, Out) + end. + +compile_elixir(Modules, Out) -> + Error = [ + "The program elixir was not found. Is it installed?", + $\n, + "Documentation for installing Elixir can be viewed here:", + $\n, + "https://elixir-lang.org/install.html" + ], + case Modules of + [] -> {true, []}; + _ -> + log({starting, "compiler.app"}), + ok = application:start(compiler), + log({starting, "elixir.app"}), + case application:start(elixir) of + ok -> do_compile_elixir(Modules, Out); + _ -> + io:put_chars(standard_error, [Error, $\n]), + {false, []} + end + end. + +do_compile_elixir(Modules, Out) -> + ModuleBins = lists:map(fun(Module) -> + log({compiling, Module}), + list_to_binary(Module) + end, Modules), + OutBin = list_to_binary(Out), + Options = [{dest, OutBin}], + % Silence "redefining module" warnings. + % Compiled modules in the build directory are added to the code path. + % These warnings result from recompiling loaded modules. + % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation. + 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]), + case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of + {ok, ModuleAtoms, _} -> + ToBeam = fun(ModuleAtom) -> + Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam", + log({compiled, Beam}), + Beam + end, + {true, lists:map(ToBeam, ModuleAtoms)}; + {error, Errors, _} -> + % Log all filenames associated with modules that failed to compile. + % Note: The compiler prints compilation errors upon encountering them. + ErrorFiles = lists:usort([File || {File, _, _} <- Errors]), + Log = fun(File) -> + log({failed, binary_to_list(File)}) + end, + lists:foreach(Log, ErrorFiles), + {false, []}; + _ -> {false, []} + end. + +add_lib_to_erlang_path(Lib) -> + code:add_paths(filelib:wildcard([Lib, "/*/ebin"])). + +parse(Args) -> + parse(Args, #arguments{}). + +parse([], Arguments) -> + Arguments; +parse(["--lib", Lib | Rest], Arguments) -> + parse(Rest, Arguments#arguments{lib = Lib}); +parse(["--out", Out | Rest], Arguments) -> + parse(Rest, Arguments#arguments{out = Out}); +parse([Module | Rest], Arguments = #arguments{modules = Modules}) -> + parse(Rest, Arguments#arguments{modules = [Module | Modules]}). + +configure_logging() -> + Enabled = os:getenv("GLEAM_LOG") /= false, + persistent_term:put(gleam_logging_enabled, Enabled). + +log(Term) -> + case persistent_term:get(gleam_logging_enabled) of + true -> erlang:display(Term), ok; + false -> ok + end. diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.cache b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.cache Binary files differnew file mode 100644 index 0000000..0b8931e --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.cache diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.cache_meta b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.cache_meta Binary files differnew file mode 100644 index 0000000..dc85da7 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.erl b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.erl new file mode 100644 index 0000000..91ee6e8 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.erl @@ -0,0 +1,626 @@ +-module(gleam@http). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([parse_method/1, method_to_string/1, scheme_to_string/1, scheme_from_string/1, parse_content_disposition/1, parse_multipart_body/2, method_from_dynamic/1, parse_multipart_headers/2]). +-export_type([method/0, scheme/0, multipart_headers/0, multipart_body/0, content_disposition/0]). + +-type method() :: get | + post | + head | + put | + delete | + trace | + connect | + options | + patch | + {other, binary()}. + +-type scheme() :: http | https. + +-type multipart_headers() :: {multipart_headers, + list({binary(), binary()}), + bitstring()} | + {more_required_for_headers, + fun((bitstring()) -> {ok, multipart_headers()} | {error, nil})}. + +-type multipart_body() :: {multipart_body, bitstring(), boolean(), bitstring()} | + {more_required_for_body, + bitstring(), + fun((bitstring()) -> {ok, multipart_body()} | {error, nil})}. + +-type content_disposition() :: {content_disposition, + binary(), + list({binary(), binary()})}. + +-spec parse_method(binary()) -> {ok, method()} | {error, nil}. +parse_method(S) -> + case gleam@string:lowercase(S) of + <<"connect"/utf8>> -> + {ok, connect}; + + <<"delete"/utf8>> -> + {ok, delete}; + + <<"get"/utf8>> -> + {ok, get}; + + <<"head"/utf8>> -> + {ok, head}; + + <<"options"/utf8>> -> + {ok, options}; + + <<"patch"/utf8>> -> + {ok, patch}; + + <<"post"/utf8>> -> + {ok, post}; + + <<"put"/utf8>> -> + {ok, put}; + + <<"trace"/utf8>> -> + {ok, trace}; + + _ -> + {error, nil} + end. + +-spec method_to_string(method()) -> binary(). +method_to_string(Method) -> + case Method of + connect -> + <<"connect"/utf8>>; + + delete -> + <<"delete"/utf8>>; + + get -> + <<"get"/utf8>>; + + head -> + <<"head"/utf8>>; + + options -> + <<"options"/utf8>>; + + patch -> + <<"patch"/utf8>>; + + post -> + <<"post"/utf8>>; + + put -> + <<"put"/utf8>>; + + trace -> + <<"trace"/utf8>>; + + {other, S} -> + S + end. + +-spec scheme_to_string(scheme()) -> binary(). +scheme_to_string(Scheme) -> + case Scheme of + http -> + <<"http"/utf8>>; + + https -> + <<"https"/utf8>> + end. + +-spec scheme_from_string(binary()) -> {ok, scheme()} | {error, nil}. +scheme_from_string(Scheme) -> + case gleam@string:lowercase(Scheme) of + <<"http"/utf8>> -> + {ok, http}; + + <<"https"/utf8>> -> + {ok, https}; + + _ -> + {error, nil} + end. + +-spec skip_whitespace(bitstring()) -> bitstring(). +skip_whitespace(Data) -> + case Data of + <<32, Data@1/binary>> -> + skip_whitespace(Data@1); + + <<9, Data@1/binary>> -> + skip_whitespace(Data@1); + + _ -> + Data + end. + +-spec more_please_headers( + fun((bitstring()) -> {ok, multipart_headers()} | {error, nil}), + bitstring() +) -> {ok, multipart_headers()} | {error, nil}. +more_please_headers(Continuation, Existing) -> + {ok, + {more_required_for_headers, + fun(More) -> + gleam@bool:guard( + More =:= <<>>, + {error, nil}, + fun() -> + Continuation(<<Existing/bitstring, More/bitstring>>) + end + ) + end}}. + +-spec parse_rfc_2045_parameter_quoted_value(binary(), binary(), binary()) -> {ok, + {{binary(), binary()}, binary()}} | + {error, nil}. +parse_rfc_2045_parameter_quoted_value(Header, Name, Value) -> + case gleam@string:pop_grapheme(Header) of + {error, nil} -> + {error, nil}; + + {ok, {<<"\""/utf8>>, Rest}} -> + {ok, {{Name, Value}, Rest}}; + + {ok, {<<"\\"/utf8>>, Rest@1}} -> + gleam@result:'try'( + gleam@string:pop_grapheme(Rest@1), + fun(_use0) -> + {Grapheme, Rest@2} = _use0, + parse_rfc_2045_parameter_quoted_value( + Rest@2, + Name, + <<Value/binary, Grapheme/binary>> + ) + end + ); + + {ok, {Grapheme@1, Rest@3}} -> + parse_rfc_2045_parameter_quoted_value( + Rest@3, + Name, + <<Value/binary, Grapheme@1/binary>> + ) + end. + +-spec parse_rfc_2045_parameter_unquoted_value(binary(), binary(), binary()) -> {{binary(), + binary()}, + binary()}. +parse_rfc_2045_parameter_unquoted_value(Header, Name, Value) -> + case gleam@string:pop_grapheme(Header) of + {error, nil} -> + {{Name, Value}, Header}; + + {ok, {<<";"/utf8>>, Rest}} -> + {{Name, Value}, Rest}; + + {ok, {<<" "/utf8>>, Rest}} -> + {{Name, Value}, Rest}; + + {ok, {<<"\t"/utf8>>, Rest}} -> + {{Name, Value}, Rest}; + + {ok, {Grapheme, Rest@1}} -> + parse_rfc_2045_parameter_unquoted_value( + Rest@1, + Name, + <<Value/binary, Grapheme/binary>> + ) + end. + +-spec parse_rfc_2045_parameter_value(binary(), binary()) -> {ok, + {{binary(), binary()}, binary()}} | + {error, nil}. +parse_rfc_2045_parameter_value(Header, Name) -> + case gleam@string:pop_grapheme(Header) of + {error, nil} -> + {error, nil}; + + {ok, {<<"\""/utf8>>, Rest}} -> + parse_rfc_2045_parameter_quoted_value(Rest, Name, <<""/utf8>>); + + {ok, {Grapheme, Rest@1}} -> + {ok, + parse_rfc_2045_parameter_unquoted_value(Rest@1, Name, Grapheme)} + end. + +-spec parse_rfc_2045_parameter(binary(), binary()) -> {ok, + {{binary(), binary()}, binary()}} | + {error, nil}. +parse_rfc_2045_parameter(Header, Name) -> + gleam@result:'try'( + gleam@string:pop_grapheme(Header), + fun(_use0) -> + {Grapheme, Rest} = _use0, + case Grapheme of + <<"="/utf8>> -> + parse_rfc_2045_parameter_value(Rest, Name); + + _ -> + parse_rfc_2045_parameter( + Rest, + <<Name/binary, + (gleam@string:lowercase(Grapheme))/binary>> + ) + end + end + ). + +-spec parse_rfc_2045_parameters(binary(), list({binary(), binary()})) -> {ok, + list({binary(), binary()})} | + {error, nil}. +parse_rfc_2045_parameters(Header, Parameters) -> + case gleam@string:pop_grapheme(Header) of + {error, nil} -> + {ok, gleam@list:reverse(Parameters)}; + + {ok, {<<";"/utf8>>, Rest}} -> + parse_rfc_2045_parameters(Rest, Parameters); + + {ok, {<<" "/utf8>>, Rest}} -> + parse_rfc_2045_parameters(Rest, Parameters); + + {ok, {<<"\t"/utf8>>, Rest}} -> + parse_rfc_2045_parameters(Rest, Parameters); + + {ok, {Grapheme, Rest@1}} -> + Acc = gleam@string:lowercase(Grapheme), + gleam@result:'try'( + parse_rfc_2045_parameter(Rest@1, Acc), + fun(_use0) -> + {Parameter, Rest@2} = _use0, + parse_rfc_2045_parameters(Rest@2, [Parameter | Parameters]) + end + ) + end. + +-spec parse_content_disposition_type(binary(), binary()) -> {ok, + content_disposition()} | + {error, nil}. +parse_content_disposition_type(Header, Name) -> + case gleam@string:pop_grapheme(Header) of + {error, nil} -> + {ok, {content_disposition, Name, []}}; + + {ok, {<<" "/utf8>>, Rest}} -> + Result = parse_rfc_2045_parameters(Rest, []), + gleam@result:map( + Result, + fun(Parameters) -> {content_disposition, Name, Parameters} end + ); + + {ok, {<<"\t"/utf8>>, Rest}} -> + Result = parse_rfc_2045_parameters(Rest, []), + gleam@result:map( + Result, + fun(Parameters) -> {content_disposition, Name, Parameters} end + ); + + {ok, {<<";"/utf8>>, Rest}} -> + Result = parse_rfc_2045_parameters(Rest, []), + gleam@result:map( + Result, + fun(Parameters) -> {content_disposition, Name, Parameters} end + ); + + {ok, {Grapheme, Rest@1}} -> + parse_content_disposition_type( + Rest@1, + <<Name/binary, (gleam@string:lowercase(Grapheme))/binary>> + ) + end. + +-spec parse_content_disposition(binary()) -> {ok, content_disposition()} | + {error, nil}. +parse_content_disposition(Header) -> + parse_content_disposition_type(Header, <<""/utf8>>). + +-spec more_please_body( + fun((bitstring()) -> {ok, multipart_body()} | {error, nil}), + bitstring(), + bitstring() +) -> {ok, multipart_body()} | {error, nil}. +more_please_body(Continuation, Chunk, Existing) -> + _pipe = fun(More) -> + gleam@bool:guard( + More =:= <<>>, + {error, nil}, + fun() -> Continuation(<<Existing/bitstring, More/bitstring>>) end + ) + end, + _pipe@1 = {more_required_for_body, Chunk, _pipe}, + {ok, _pipe@1}. + +-spec parse_body_loop(bitstring(), bitstring(), bitstring()) -> {ok, + multipart_body()} | + {error, nil}. +parse_body_loop(Data, Boundary, Body) -> + Dsize = erlang:byte_size(Data), + Bsize = erlang:byte_size(Boundary), + Required = 6 + Bsize, + case Data of + _ when Dsize < Required -> + more_please_body( + fun(_capture) -> parse_body_loop(_capture, Boundary, <<>>) end, + Body, + Data + ); + + <<13, 10, Data@1/binary>> -> + Desired = <<45, 45, Boundary/bitstring>>, + Size = erlang:byte_size(Desired), + Dsize@1 = erlang:byte_size(Data@1), + Prefix = gleam_stdlib:bit_array_slice(Data@1, 0, Size), + Rest = gleam_stdlib:bit_array_slice(Data@1, Size, Dsize@1 - Size), + case {Prefix =:= {ok, Desired}, Rest} of + {true, {ok, <<13, 10, _/binary>>}} -> + {ok, {multipart_body, Body, false, Data@1}}; + + {true, {ok, <<45, 45, Data@2/binary>>}} -> + {ok, {multipart_body, Body, true, Data@2}}; + + {false, _} -> + parse_body_loop( + Data@1, + Boundary, + <<Body/bitstring, 13, 10>> + ); + + {_, _} -> + {error, nil} + end; + + <<Char, Data@3/binary>> -> + parse_body_loop(Data@3, Boundary, <<Body/bitstring, Char>>) + end. + +-spec parse_body_with_bit_array(bitstring(), bitstring()) -> {ok, + multipart_body()} | + {error, nil}. +parse_body_with_bit_array(Data, Boundary) -> + Bsize = erlang:byte_size(Boundary), + Prefix = gleam_stdlib:bit_array_slice(Data, 0, 2 + Bsize), + case Prefix =:= {ok, <<45, 45, Boundary/bitstring>>} of + true -> + {ok, {multipart_body, <<>>, false, Data}}; + + false -> + parse_body_loop(Data, Boundary, <<>>) + end. + +-spec parse_multipart_body(bitstring(), binary()) -> {ok, multipart_body()} | + {error, nil}. +parse_multipart_body(Data, Boundary) -> + _pipe = Boundary, + _pipe@1 = gleam_stdlib:identity(_pipe), + parse_body_with_bit_array(Data, _pipe@1). + +-spec method_from_dynamic(gleam@dynamic:dynamic_()) -> {ok, method()} | + {error, list(gleam@dynamic:decode_error())}. +method_from_dynamic(Value) -> + case gleam_http_native:decode_method(Value) of + {ok, Method} -> + {ok, Method}; + + {error, _} -> + {error, + [{decode_error, + <<"HTTP method"/utf8>>, + gleam@dynamic:classify(Value), + []}]} + end. + +-spec parse_header_value( + bitstring(), + list({binary(), binary()}), + bitstring(), + bitstring() +) -> {ok, multipart_headers()} | {error, nil}. +parse_header_value(Data, Headers, Name, Value) -> + Size = erlang:byte_size(Data), + case Data of + _ when Size < 4 -> + _pipe@2 = fun(Data@1) -> _pipe = Data@1, + _pipe@1 = skip_whitespace(_pipe), + parse_header_value(_pipe@1, Headers, Name, Value) end, + more_please_headers(_pipe@2, Data); + + <<13, 10, 13, 10, Data@2/binary>> -> + gleam@result:'try'( + gleam@bit_array:to_string(Name), + fun(Name@1) -> + gleam@result:map( + gleam@bit_array:to_string(Value), + fun(Value@1) -> + Headers@1 = gleam@list:reverse( + [{gleam@string:lowercase(Name@1), Value@1} | + Headers] + ), + {multipart_headers, Headers@1, Data@2} + end + ) + end + ); + + <<13, 10, 32, Data@3/binary>> -> + parse_header_value(Data@3, Headers, Name, Value); + + <<13, 10, 9, Data@3/binary>> -> + parse_header_value(Data@3, Headers, Name, Value); + + <<13, 10, Data@4/binary>> -> + gleam@result:'try'( + gleam@bit_array:to_string(Name), + fun(Name@2) -> + gleam@result:'try'( + gleam@bit_array:to_string(Value), + fun(Value@2) -> + Headers@2 = [{gleam@string:lowercase(Name@2), + Value@2} | + Headers], + parse_header_name(Data@4, Headers@2, <<>>) + end + ) + end + ); + + <<Char, Rest/binary>> -> + Value@3 = <<Value/bitstring, Char>>, + parse_header_value(Rest, Headers, Name, Value@3); + + _ -> + {error, nil} + end. + +-spec parse_header_name(bitstring(), list({binary(), binary()}), bitstring()) -> {ok, + multipart_headers()} | + {error, nil}. +parse_header_name(Data, Headers, Name) -> + case skip_whitespace(Data) of + <<58, Data@1/binary>> -> + _pipe = Data@1, + _pipe@1 = skip_whitespace(_pipe), + parse_header_value(_pipe@1, Headers, Name, <<>>); + + <<Char, Data@2/binary>> -> + parse_header_name(Data@2, Headers, <<Name/bitstring, Char>>); + + <<>> -> + more_please_headers( + fun(_capture) -> parse_header_name(_capture, Headers, Name) end, + Data + ) + end. + +-spec do_parse_headers(bitstring()) -> {ok, multipart_headers()} | {error, nil}. +do_parse_headers(Data) -> + case Data of + <<13, 10, 13, 10, Data@1/binary>> -> + {ok, {multipart_headers, [], Data@1}}; + + <<13, 10, Data@2/binary>> -> + parse_header_name(Data@2, [], <<>>); + + <<13>> -> + more_please_headers(fun do_parse_headers/1, Data); + + <<>> -> + more_please_headers(fun do_parse_headers/1, Data); + + _ -> + {error, nil} + end. + +-spec parse_headers_after_prelude(bitstring(), bitstring()) -> {ok, + multipart_headers()} | + {error, nil}. +parse_headers_after_prelude(Data, Boundary) -> + Dsize = erlang:byte_size(Data), + Bsize = erlang:byte_size(Boundary), + Required_size = Bsize + 4, + gleam@bool:guard( + Dsize < Required_size, + more_please_headers( + fun(_capture) -> parse_headers_after_prelude(_capture, Boundary) end, + Data + ), + fun() -> + gleam@result:'try'( + gleam_stdlib:bit_array_slice(Data, 0, Required_size - 2), + fun(Prefix) -> + gleam@result:'try'( + gleam_stdlib:bit_array_slice(Data, 2 + Bsize, 2), + fun(Second) -> + Desired = <<45, 45, Boundary/bitstring>>, + gleam@bool:guard( + Prefix /= Desired, + {error, nil}, + fun() -> case Second =:= <<45, 45>> of + true -> + Rest_size = Dsize - Required_size, + gleam@result:map( + gleam_stdlib:bit_array_slice( + Data, + Required_size, + Rest_size + ), + fun(Data@1) -> + {multipart_headers, + [], + Data@1} + end + ); + + false -> + Start = Required_size - 2, + Rest_size@1 = (Dsize - Required_size) + + 2, + gleam@result:'try'( + gleam_stdlib:bit_array_slice( + Data, + Start, + Rest_size@1 + ), + fun(Data@2) -> + do_parse_headers(Data@2) + end + ) + end end + ) + end + ) + end + ) + end + ). + +-spec skip_preamble(bitstring(), bitstring()) -> {ok, multipart_headers()} | + {error, nil}. +skip_preamble(Data, Boundary) -> + Data_size = erlang:byte_size(Data), + Boundary_size = erlang:byte_size(Boundary), + Required = Boundary_size + 4, + case Data of + _ when Data_size < Required -> + more_please_headers( + fun(_capture) -> skip_preamble(_capture, Boundary) end, + Data + ); + + <<13, 10, 45, 45, Data@1/binary>> -> + case gleam_stdlib:bit_array_slice(Data@1, 0, Boundary_size) of + {ok, Prefix} when Prefix =:= Boundary -> + Start = Boundary_size, + Length = erlang:byte_size(Data@1) - Boundary_size, + gleam@result:'try'( + gleam_stdlib:bit_array_slice(Data@1, Start, Length), + fun(Rest) -> do_parse_headers(Rest) end + ); + + {ok, _} -> + skip_preamble(Data@1, Boundary); + + {error, _} -> + {error, nil} + end; + + <<_, Data@2/binary>> -> + skip_preamble(Data@2, Boundary) + end. + +-spec parse_multipart_headers(bitstring(), binary()) -> {ok, + multipart_headers()} | + {error, nil}. +parse_multipart_headers(Data, Boundary) -> + Boundary@1 = gleam_stdlib:identity(Boundary), + Prefix = <<45, 45, Boundary@1/bitstring>>, + case gleam_stdlib:bit_array_slice(Data, 0, erlang:byte_size(Prefix)) =:= {ok, + Prefix} of + true -> + parse_headers_after_prelude(Data, Boundary@1); + + false -> + skip_preamble(Data, Boundary@1) + end. diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache Binary files differnew file mode 100644 index 0000000..173ac86 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache_meta b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache_meta Binary files differnew file mode 100644 index 0000000..1f65dce --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.erl b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.erl new file mode 100644 index 0000000..9d6d13e --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.erl @@ -0,0 +1,153 @@ +-module(gleam@http@cookie). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([defaults/1, set_header/3, parse/1]). +-export_type([same_site_policy/0, attributes/0]). + +-type same_site_policy() :: lax | strict | none. + +-type attributes() :: {attributes, + gleam@option:option(integer()), + gleam@option:option(binary()), + gleam@option:option(binary()), + boolean(), + boolean(), + gleam@option:option(same_site_policy())}. + +-spec same_site_to_string(same_site_policy()) -> binary(). +same_site_to_string(Policy) -> + case Policy of + lax -> + <<"Lax"/utf8>>; + + strict -> + <<"Strict"/utf8>>; + + none -> + <<"None"/utf8>> + end. + +-spec defaults(gleam@http:scheme()) -> attributes(). +defaults(Scheme) -> + {attributes, + none, + none, + {some, <<"/"/utf8>>}, + Scheme =:= https, + true, + {some, lax}}. + +-spec cookie_attributes_to_list(attributes()) -> list(list(binary())). +cookie_attributes_to_list(Attributes) -> + {attributes, Max_age, Domain, Path, Secure, Http_only, Same_site} = Attributes, + _pipe = [case Max_age of + {some, 0} -> + {some, [<<"Expires=Thu, 01 Jan 1970 00:00:00 GMT"/utf8>>]}; + + _ -> + none + end, gleam@option:map( + Max_age, + fun(Max_age@1) -> + [<<"Max-Age="/utf8>>, gleam@int:to_string(Max_age@1)] + end + ), gleam@option:map( + Domain, + fun(Domain@1) -> [<<"Domain="/utf8>>, Domain@1] end + ), gleam@option:map(Path, fun(Path@1) -> [<<"Path="/utf8>>, Path@1] end), case Secure of + true -> + {some, [<<"Secure"/utf8>>]}; + + false -> + none + end, case Http_only of + true -> + {some, [<<"HttpOnly"/utf8>>]}; + + false -> + none + end, gleam@option:map( + Same_site, + fun(Same_site@1) -> + [<<"SameSite="/utf8>>, same_site_to_string(Same_site@1)] + end + )], + gleam@list:filter_map( + _pipe, + fun(_capture) -> gleam@option:to_result(_capture, nil) end + ). + +-spec set_header(binary(), binary(), attributes()) -> binary(). +set_header(Name, Value, Attributes) -> + _pipe = [[Name, <<"="/utf8>>, Value] | + cookie_attributes_to_list(Attributes)], + _pipe@1 = gleam@list:map( + _pipe, + fun(_capture) -> gleam@string:join(_capture, <<""/utf8>>) end + ), + gleam@string:join(_pipe@1, <<"; "/utf8>>). + +-spec check_token(binary()) -> {ok, nil} | {error, nil}. +check_token(Token) -> + case gleam@string:pop_grapheme(Token) of + {error, nil} -> + {ok, nil}; + + {ok, {<<" "/utf8>>, _}} -> + {error, nil}; + + {ok, {<<"\t"/utf8>>, _}} -> + {error, nil}; + + {ok, {<<"\r"/utf8>>, _}} -> + {error, nil}; + + {ok, {<<"\n"/utf8>>, _}} -> + {error, nil}; + + {ok, {<<"\f"/utf8>>, _}} -> + {error, nil}; + + {ok, {_, Rest}} -> + check_token(Rest) + end. + +-spec parse(binary()) -> list({binary(), binary()}). +parse(Cookie_string) -> + _assert_subject = gleam@regex:from_string(<<"[,;]"/utf8>>), + {ok, Re} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam/http/cookie"/utf8>>, + function => <<"parse"/utf8>>, + line => 101}) + end, + _pipe = gleam@regex:split(Re, Cookie_string), + gleam@list:filter_map( + _pipe, + fun(Pair) -> + case gleam@string:split_once(gleam@string:trim(Pair), <<"="/utf8>>) of + {ok, {<<""/utf8>>, _}} -> + {error, nil}; + + {ok, {Key, Value}} -> + Key@1 = gleam@string:trim(Key), + Value@1 = gleam@string:trim(Value), + gleam@result:then( + check_token(Key@1), + fun(_) -> + gleam@result:then( + check_token(Value@1), + fun(_) -> {ok, {Key@1, Value@1}} end + ) + end + ); + + {error, nil} -> + {error, nil} + end + end + ). diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache Binary files differnew file mode 100644 index 0000000..cf9bcd7 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache_meta b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache_meta Binary files differnew file mode 100644 index 0000000..2108b82 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.erl b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.erl new file mode 100644 index 0000000..e41d548 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.erl @@ -0,0 +1,202 @@ +-module(gleam@http@request). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([to_uri/1, from_uri/1, get_header/2, set_header/3, prepend_header/3, set_body/2, map/2, path_segments/1, get_query/1, set_query/2, set_method/2, new/0, to/1, set_scheme/2, set_host/2, set_port/2, set_path/2, set_cookie/3, get_cookies/1]). +-export_type([request/1]). + +-type request(IAV) :: {request, + gleam@http:method(), + list({binary(), binary()}), + IAV, + gleam@http:scheme(), + binary(), + gleam@option:option(integer()), + binary(), + gleam@option:option(binary())}. + +-spec to_uri(request(any())) -> gleam@uri:uri(). +to_uri(Request) -> + {uri, + {some, gleam@http:scheme_to_string(erlang:element(5, Request))}, + none, + {some, erlang:element(6, Request)}, + erlang:element(7, Request), + erlang:element(8, Request), + erlang:element(9, Request), + none}. + +-spec from_uri(gleam@uri:uri()) -> {ok, request(binary())} | {error, nil}. +from_uri(Uri) -> + gleam@result:then( + begin + _pipe = erlang:element(2, Uri), + _pipe@1 = gleam@option:unwrap(_pipe, <<""/utf8>>), + gleam@http:scheme_from_string(_pipe@1) + end, + fun(Scheme) -> + gleam@result:then( + begin + _pipe@2 = erlang:element(4, Uri), + gleam@option:to_result(_pipe@2, nil) + end, + fun(Host) -> + Req = {request, + get, + [], + <<""/utf8>>, + Scheme, + Host, + erlang:element(5, Uri), + erlang:element(6, Uri), + erlang:element(7, Uri)}, + {ok, Req} + end + ) + end + ). + +-spec get_header(request(any()), binary()) -> {ok, binary()} | {error, nil}. +get_header(Request, Key) -> + gleam@list:key_find(erlang:element(3, Request), gleam@string:lowercase(Key)). + +-spec set_header(request(IBF), binary(), binary()) -> request(IBF). +set_header(Request, Key, Value) -> + Headers = gleam@list:key_set( + erlang:element(3, Request), + gleam@string:lowercase(Key), + Value + ), + erlang:setelement(3, Request, Headers). + +-spec prepend_header(request(IBI), binary(), binary()) -> request(IBI). +prepend_header(Request, Key, Value) -> + Headers = [{gleam@string:lowercase(Key), Value} | + erlang:element(3, Request)], + erlang:setelement(3, Request, Headers). + +-spec set_body(request(any()), IBN) -> request(IBN). +set_body(Req, Body) -> + {request, Method, Headers, _, Scheme, Host, Port, Path, Query} = Req, + {request, Method, Headers, Body, Scheme, Host, Port, Path, Query}. + +-spec map(request(IBP), fun((IBP) -> IBR)) -> request(IBR). +map(Request, Transform) -> + _pipe = erlang:element(4, Request), + _pipe@1 = Transform(_pipe), + set_body(Request, _pipe@1). + +-spec path_segments(request(any())) -> list(binary()). +path_segments(Request) -> + _pipe = erlang:element(8, Request), + gleam@uri:path_segments(_pipe). + +-spec get_query(request(any())) -> {ok, list({binary(), binary()})} | + {error, nil}. +get_query(Request) -> + case erlang:element(9, Request) of + {some, Query_string} -> + gleam@uri:parse_query(Query_string); + + none -> + {ok, []} + end. + +-spec set_query(request(ICB), list({binary(), binary()})) -> request(ICB). +set_query(Req, Query) -> + Pair = fun(T) -> + gleam@string_builder:from_strings( + [erlang:element(1, T), <<"="/utf8>>, erlang:element(2, T)] + ) + end, + Query@1 = begin + _pipe = Query, + _pipe@1 = gleam@list:map(_pipe, Pair), + _pipe@2 = gleam@list:intersperse( + _pipe@1, + gleam@string_builder:from_string(<<"&"/utf8>>) + ), + _pipe@3 = gleam@string_builder:concat(_pipe@2), + _pipe@4 = gleam@string_builder:to_string(_pipe@3), + {some, _pipe@4} + end, + erlang:setelement(9, Req, Query@1). + +-spec set_method(request(ICF), gleam@http:method()) -> request(ICF). +set_method(Req, Method) -> + erlang:setelement(2, Req, Method). + +-spec new() -> request(binary()). +new() -> + {request, + get, + [], + <<""/utf8>>, + https, + <<"localhost"/utf8>>, + none, + <<""/utf8>>, + none}. + +-spec to(binary()) -> {ok, request(binary())} | {error, nil}. +to(Url) -> + _pipe = Url, + _pipe@1 = gleam@uri:parse(_pipe), + gleam@result:then(_pipe@1, fun from_uri/1). + +-spec set_scheme(request(ICM), gleam@http:scheme()) -> request(ICM). +set_scheme(Req, Scheme) -> + erlang:setelement(5, Req, Scheme). + +-spec set_host(request(ICP), binary()) -> request(ICP). +set_host(Req, Host) -> + erlang:setelement(6, Req, Host). + +-spec set_port(request(ICS), integer()) -> request(ICS). +set_port(Req, Port) -> + erlang:setelement(7, Req, {some, Port}). + +-spec set_path(request(ICV), binary()) -> request(ICV). +set_path(Req, Path) -> + erlang:setelement(8, Req, Path). + +-spec set_cookie(request(ICY), binary(), binary()) -> request(ICY). +set_cookie(Req, Name, Value) -> + New_cookie_string = gleam@string:join([Name, Value], <<"="/utf8>>), + {Cookies_string@2, Headers@1} = case gleam@list:key_pop( + erlang:element(3, Req), + <<"cookie"/utf8>> + ) of + {ok, {Cookies_string, Headers}} -> + Cookies_string@1 = gleam@string:join( + [Cookies_string, New_cookie_string], + <<"; "/utf8>> + ), + {Cookies_string@1, Headers}; + + {error, nil} -> + {New_cookie_string, erlang:element(3, Req)} + end, + erlang:setelement( + 3, + Req, + [{<<"cookie"/utf8>>, Cookies_string@2} | Headers@1] + ). + +-spec get_cookies(request(any())) -> list({binary(), binary()}). +get_cookies(Req) -> + {request, _, Headers, _, _, _, _, _, _} = Req, + _pipe = Headers, + _pipe@1 = gleam@list:filter_map( + _pipe, + fun(Header) -> + {Name, Value} = Header, + case Name of + <<"cookie"/utf8>> -> + {ok, gleam@http@cookie:parse(Value)}; + + _ -> + {error, nil} + end + end + ), + gleam@list:flatten(_pipe@1). diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache Binary files differnew file mode 100644 index 0000000..5656963 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache_meta b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache_meta Binary files differnew file mode 100644 index 0000000..1f05041 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.erl b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.erl new file mode 100644 index 0000000..300726a --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.erl @@ -0,0 +1,97 @@ +-module(gleam@http@response). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([new/1, get_header/2, set_header/3, prepend_header/3, set_body/2, try_map/2, map/2, redirect/1, get_cookies/1, set_cookie/4, expire_cookie/3]). +-export_type([response/1]). + +-type response(HXJ) :: {response, integer(), list({binary(), binary()}), HXJ}. + +-spec new(integer()) -> response(binary()). +new(Status) -> + {response, Status, [], <<""/utf8>>}. + +-spec get_header(response(any()), binary()) -> {ok, binary()} | {error, nil}. +get_header(Response, Key) -> + gleam@list:key_find( + erlang:element(3, Response), + gleam@string:lowercase(Key) + ). + +-spec set_header(response(HXY), binary(), binary()) -> response(HXY). +set_header(Response, Key, Value) -> + Headers = gleam@list:key_set( + erlang:element(3, Response), + gleam@string:lowercase(Key), + Value + ), + erlang:setelement(3, Response, Headers). + +-spec prepend_header(response(HYB), binary(), binary()) -> response(HYB). +prepend_header(Response, Key, Value) -> + Headers = [{gleam@string:lowercase(Key), Value} | + erlang:element(3, Response)], + erlang:setelement(3, Response, Headers). + +-spec set_body(response(any()), HYG) -> response(HYG). +set_body(Response, Body) -> + {response, Status, Headers, _} = Response, + {response, Status, Headers, Body}. + +-spec try_map(response(HXK), fun((HXK) -> {ok, HXM} | {error, HXN})) -> {ok, + response(HXM)} | + {error, HXN}. +try_map(Response, Transform) -> + gleam@result:then( + Transform(erlang:element(4, Response)), + fun(Body) -> {ok, set_body(Response, Body)} end + ). + +-spec map(response(HYI), fun((HYI) -> HYK)) -> response(HYK). +map(Response, Transform) -> + _pipe = erlang:element(4, Response), + _pipe@1 = Transform(_pipe), + set_body(Response, _pipe@1). + +-spec redirect(binary()) -> response(binary()). +redirect(Uri) -> + {response, + 303, + [{<<"location"/utf8>>, Uri}], + gleam@string:append(<<"You are being redirected to "/utf8>>, Uri)}. + +-spec get_cookies(response(any())) -> list({binary(), binary()}). +get_cookies(Resp) -> + {response, _, Headers, _} = Resp, + _pipe = Headers, + _pipe@1 = gleam@list:filter_map( + _pipe, + fun(Header) -> + {Name, Value} = Header, + case Name of + <<"set-cookie"/utf8>> -> + {ok, gleam@http@cookie:parse(Value)}; + + _ -> + {error, nil} + end + end + ), + gleam@list:flatten(_pipe@1). + +-spec set_cookie( + response(HYP), + binary(), + binary(), + gleam@http@cookie:attributes() +) -> response(HYP). +set_cookie(Response, Name, Value, Attributes) -> + prepend_header( + Response, + <<"set-cookie"/utf8>>, + gleam@http@cookie:set_header(Name, Value, Attributes) + ). + +-spec expire_cookie(response(HYS), binary(), gleam@http@cookie:attributes()) -> response(HYS). +expire_cookie(Response, Name, Attributes) -> + Attrs = erlang:setelement(2, Attributes, {some, 0}), + set_cookie(Response, Name, <<""/utf8>>, Attrs). diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache Binary files differnew file mode 100644 index 0000000..2bdc561 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache_meta b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache_meta Binary files differnew file mode 100644 index 0000000..c0222d6 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.erl b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.erl new file mode 100644 index 0000000..7aa0ed5 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.erl @@ -0,0 +1,82 @@ +-module(gleam@http@service). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([map_response_body/2, prepend_response_header/3, method_override/1]). + +-spec map_response_body( + fun((gleam@http@request:request(IIL)) -> gleam@http@response:response(IIM)), + fun((IIM) -> IIP) +) -> fun((gleam@http@request:request(IIL)) -> gleam@http@response:response(IIP)). +map_response_body(Service, Mapper) -> + fun(Req) -> _pipe = Req, + _pipe@1 = Service(_pipe), + gleam@http@response:map(_pipe@1, Mapper) end. + +-spec prepend_response_header( + fun((gleam@http@request:request(IIS)) -> gleam@http@response:response(IIT)), + binary(), + binary() +) -> fun((gleam@http@request:request(IIS)) -> gleam@http@response:response(IIT)). +prepend_response_header(Service, Key, Value) -> + fun(Req) -> _pipe = Req, + _pipe@1 = Service(_pipe), + gleam@http@response:prepend_header(_pipe@1, Key, Value) end. + +-spec ensure_post(gleam@http@request:request(IIY)) -> {ok, + gleam@http@request:request(IIY)} | + {error, nil}. +ensure_post(Req) -> + case erlang:element(2, Req) of + post -> + {ok, Req}; + + _ -> + {error, nil} + end. + +-spec get_override_method(gleam@http@request:request(any())) -> {ok, + gleam@http:method()} | + {error, nil}. +get_override_method(Request) -> + gleam@result:then( + gleam@http@request:get_query(Request), + fun(Query_params) -> + gleam@result:then( + gleam@list:key_find(Query_params, <<"_method"/utf8>>), + fun(Method) -> + gleam@result:then( + gleam@http:parse_method(Method), + fun(Method@1) -> case Method@1 of + put -> + {ok, Method@1}; + + patch -> + {ok, Method@1}; + + delete -> + {ok, Method@1}; + + _ -> + {error, nil} + end end + ) + end + ) + end + ). + +-spec method_override( + fun((gleam@http@request:request(IJF)) -> gleam@http@response:response(IJG)) +) -> fun((gleam@http@request:request(IJF)) -> gleam@http@response:response(IJG)). +method_override(Service) -> + fun(Request) -> _pipe = Request, + _pipe@1 = ensure_post(_pipe), + _pipe@2 = gleam@result:then(_pipe@1, fun get_override_method/1), + _pipe@3 = gleam@result:map( + _pipe@2, + fun(_capture) -> + gleam@http@request:set_method(Request, _capture) + end + ), + _pipe@4 = gleam@result:unwrap(_pipe@3, Request), + Service(_pipe@4) end. diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam_http_native.erl b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam_http_native.erl new file mode 100644 index 0000000..bb499bb --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam_http_native.erl @@ -0,0 +1,88 @@ +-module(gleam_http_native). +-export([decode_method/1]). + +decode_method(Term) -> + case Term of + "connect" -> {ok, connect}; + "delete" -> {ok, delete}; + "get" -> {ok, get}; + "head" -> {ok, head}; + "options" -> {ok, options}; + "patch" -> {ok, patch}; + "post" -> {ok, post}; + "put" -> {ok, put}; + "trace" -> {ok, trace}; + "CONNECT" -> {ok, connect}; + "DELETE" -> {ok, delete}; + "GET" -> {ok, get}; + "HEAD" -> {ok, head}; + "OPTIONS" -> {ok, options}; + "PATCH" -> {ok, patch}; + "POST" -> {ok, post}; + "PUT" -> {ok, put}; + "TRACE" -> {ok, trace}; + "Connect" -> {ok, connect}; + "Delete" -> {ok, delete}; + "Get" -> {ok, get}; + "Head" -> {ok, head}; + "Options" -> {ok, options}; + "Patch" -> {ok, patch}; + "Post" -> {ok, post}; + "Put" -> {ok, put}; + "Trace" -> {ok, trace}; + 'connect' -> {ok, connect}; + 'delete' -> {ok, delete}; + 'get' -> {ok, get}; + 'head' -> {ok, head}; + 'options' -> {ok, options}; + 'patch' -> {ok, patch}; + 'post' -> {ok, post}; + 'put' -> {ok, put}; + 'trace' -> {ok, trace}; + 'CONNECT' -> {ok, connect}; + 'DELETE' -> {ok, delete}; + 'GET' -> {ok, get}; + 'HEAD' -> {ok, head}; + 'OPTIONS' -> {ok, options}; + 'PATCH' -> {ok, patch}; + 'POST' -> {ok, post}; + 'PUT' -> {ok, put}; + 'TRACE' -> {ok, trace}; + 'Connect' -> {ok, connect}; + 'Delete' -> {ok, delete}; + 'Get' -> {ok, get}; + 'Head' -> {ok, head}; + 'Options' -> {ok, options}; + 'Patch' -> {ok, patch}; + 'Post' -> {ok, post}; + 'Put' -> {ok, put}; + 'Trace' -> {ok, trace}; + <<"connect">> -> {ok, connect}; + <<"delete">> -> {ok, delete}; + <<"get">> -> {ok, get}; + <<"head">> -> {ok, head}; + <<"options">> -> {ok, options}; + <<"patch">> -> {ok, patch}; + <<"post">> -> {ok, post}; + <<"put">> -> {ok, put}; + <<"trace">> -> {ok, trace}; + <<"CONNECT">> -> {ok, connect}; + <<"DELETE">> -> {ok, delete}; + <<"GET">> -> {ok, get}; + <<"HEAD">> -> {ok, head}; + <<"OPTIONS">> -> {ok, options}; + <<"PATCH">> -> {ok, patch}; + <<"POST">> -> {ok, post}; + <<"PUT">> -> {ok, put}; + <<"TRACE">> -> {ok, trace}; + <<"Connect">> -> {ok, connect}; + <<"Delete">> -> {ok, delete}; + <<"Get">> -> {ok, get}; + <<"Head">> -> {ok, head}; + <<"Options">> -> {ok, options}; + <<"Patch">> -> {ok, patch}; + <<"Post">> -> {ok, post}; + <<"Put">> -> {ok, put}; + <<"Trace">> -> {ok, trace}; + _ -> {error, nil} + end. diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam_http_native.mjs b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam_http_native.mjs new file mode 100644 index 0000000..c871a8b --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam_http_native.mjs @@ -0,0 +1,38 @@ +import { Ok, Error } from "./gleam.mjs"; +import { + Get, + Post, + Head, + Put, + Delete, + Trace, + Connect, + Options, + Patch, +} from "./gleam/http.mjs"; + +export function decode_method(value) { + try { + switch (value.toLowerCase()) { + case "get": + return new Ok(new Get()); + case "post": + return new Ok(new Post()); + case "head": + return new Ok(new Head()); + case "put": + return new Ok(new Put()); + case "delete": + return new Ok(new Delete()); + case "trace": + return new Ok(new Trace()); + case "connect": + return new Ok(new Connect()); + case "options": + return new Ok(new Options()); + case "patch": + return new Ok(new Patch()); + } + } catch {} + return new Error(undefined); +} diff --git a/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http.beam b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http.beam Binary files differnew file mode 100644 index 0000000..39142e6 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http.beam diff --git a/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@cookie.beam b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@cookie.beam Binary files differnew file mode 100644 index 0000000..905fe68 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@cookie.beam diff --git a/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@request.beam b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@request.beam Binary files differnew file mode 100644 index 0000000..f499969 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@request.beam diff --git a/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@response.beam b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@response.beam Binary files differnew file mode 100644 index 0000000..1554f40 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@response.beam diff --git a/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@service.beam b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@service.beam Binary files differnew file mode 100644 index 0000000..aa271f1 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@service.beam diff --git a/aoc2023/build/dev/erlang/gleam_http/ebin/gleam_http.app b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam_http.app new file mode 100644 index 0000000..5f55c6f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam_http.app @@ -0,0 +1,7 @@ +{application, gleam_http, [ + {vsn, "3.5.2"}, + {applications, [gleam_stdlib]}, + {description, "Types and functions for Gleam HTTP clients and servers"}, + {modules, []}, + {registered, []} +]}. diff --git a/aoc2023/build/dev/erlang/gleam_http/ebin/gleam_http_native.beam b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam_http_native.beam Binary files differnew file mode 100644 index 0000000..0b5e282 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam_http_native.beam diff --git a/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@cookie_Attributes.hrl b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@cookie_Attributes.hrl new file mode 100644 index 0000000..78a7d02 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@cookie_Attributes.hrl @@ -0,0 +1,8 @@ +-record(attributes, { + max_age :: gleam@option:option(integer()), + domain :: gleam@option:option(binary()), + path :: gleam@option:option(binary()), + secure :: boolean(), + http_only :: boolean(), + same_site :: gleam@option:option(gleam@http@cookie:same_site_policy()) +}). diff --git a/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@request_Request.hrl b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@request_Request.hrl new file mode 100644 index 0000000..c8bbae6 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@request_Request.hrl @@ -0,0 +1,10 @@ +-record(request, { + method :: gleam@http:method(), + headers :: list({binary(), binary()}), + body :: any(), + scheme :: gleam@http:scheme(), + host :: binary(), + port :: gleam@option:option(integer()), + path :: binary(), + 'query' :: gleam@option:option(binary()) +}). diff --git a/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@response_Response.hrl b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@response_Response.hrl new file mode 100644 index 0000000..ba6f077 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@response_Response.hrl @@ -0,0 +1,5 @@ +-record(response, { + status :: integer(), + headers :: list({binary(), binary()}), + body :: any() +}). diff --git a/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MoreRequiredForBody.hrl b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MoreRequiredForBody.hrl new file mode 100644 index 0000000..abd56dd --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MoreRequiredForBody.hrl @@ -0,0 +1,5 @@ +-record(more_required_for_body, { + chunk :: bitstring(), + continuation :: fun((bitstring()) -> {ok, gleam@http:multipart_body()} | + {error, nil}) +}). diff --git a/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MoreRequiredForHeaders.hrl b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MoreRequiredForHeaders.hrl new file mode 100644 index 0000000..43729c1 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MoreRequiredForHeaders.hrl @@ -0,0 +1,4 @@ +-record(more_required_for_headers, { + continuation :: fun((bitstring()) -> {ok, gleam@http:multipart_headers()} | + {error, nil}) +}). diff --git a/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MultipartBody.hrl b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MultipartBody.hrl new file mode 100644 index 0000000..4521591 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MultipartBody.hrl @@ -0,0 +1,5 @@ +-record(multipart_body, { + chunk :: bitstring(), + done :: boolean(), + remaining :: bitstring() +}). diff --git a/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MultipartHeaders.hrl b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MultipartHeaders.hrl new file mode 100644 index 0000000..d9fca5c --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MultipartHeaders.hrl @@ -0,0 +1,4 @@ +-record(multipart_headers, { + headers :: list({binary(), binary()}), + remaining :: bitstring() +}). diff --git a/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@@compile.erl new file mode 100644 index 0000000..543db88 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@@compile.erl @@ -0,0 +1,157 @@ +#!/usr/bin/env escript + +% TODO: Don't concurrently print warnings and errors +% TODO: Some tests + +-record(arguments, {lib = "./", out = "./", modules = []}). + +main(Args) -> + #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args), + IsElixirModule = fun(Module) -> + filename:extension(Module) =:= ".ex" + end, + {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules), + ok = configure_logging(), + ok = add_lib_to_erlang_path(Lib), + ok = filelib:ensure_dir([Out, $/]), + {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out), + {ElixirOk, _ElixirBeams} = case ErlangOk of + true -> compile_elixir(ElixirModules, Out); + false -> {false, []} + end, + case ErlangOk and ElixirOk of + true -> ok; + false -> erlang:halt(1) + end. + +compile_erlang(Modules, Out) -> + Workers = start_compiler_workers(Out), + ok = producer_loop(Modules, Workers), + collect_results({true, []}). + +collect_results(Acc = {Result, Beams}) -> + receive + {compiled, Beam} -> collect_results({Result, [Beam | Beams]}); + failed -> collect_results({false, Beams}) + after 0 -> Acc + end. + +producer_loop([], 0) -> + ok; +producer_loop([], Workers) -> + receive + {work_please, _} -> producer_loop([], Workers - 1) + end; +producer_loop([Module | Modules], Workers) -> + receive + {work_please, Worker} -> + erlang:send(Worker, {module, Module}), + producer_loop(Modules, Workers) + end. + +start_compiler_workers(Out) -> + Parent = self(), + NumSchedulers = erlang:system_info(schedulers), + SpawnWorker = fun(_) -> + erlang:spawn_link(fun() -> worker_loop(Parent, Out) end) + end, + lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)), + NumSchedulers. + +worker_loop(Parent, Out) -> + Options = [report_errors, report_warnings, debug_info, {outdir, Out}], + erlang:send(Parent, {work_please, self()}), + receive + {module, Module} -> + log({compiling, Module}), + case compile:file(Module, Options) of + {ok, ModuleName} -> + Beam = filename:join(Out, ModuleName) ++ ".beam", + Message = {compiled, Beam}, + log(Message), + erlang:send(Parent, Message); + error -> + log({failed, Module}), + erlang:send(Parent, failed) + end, + worker_loop(Parent, Out) + end. + +compile_elixir(Modules, Out) -> + Error = [ + "The program elixir was not found. Is it installed?", + $\n, + "Documentation for installing Elixir can be viewed here:", + $\n, + "https://elixir-lang.org/install.html" + ], + case Modules of + [] -> {true, []}; + _ -> + log({starting, "compiler.app"}), + ok = application:start(compiler), + log({starting, "elixir.app"}), + case application:start(elixir) of + ok -> do_compile_elixir(Modules, Out); + _ -> + io:put_chars(standard_error, [Error, $\n]), + {false, []} + end + end. + +do_compile_elixir(Modules, Out) -> + ModuleBins = lists:map(fun(Module) -> + log({compiling, Module}), + list_to_binary(Module) + end, Modules), + OutBin = list_to_binary(Out), + Options = [{dest, OutBin}], + % Silence "redefining module" warnings. + % Compiled modules in the build directory are added to the code path. + % These warnings result from recompiling loaded modules. + % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation. + 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]), + case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of + {ok, ModuleAtoms, _} -> + ToBeam = fun(ModuleAtom) -> + Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam", + log({compiled, Beam}), + Beam + end, + {true, lists:map(ToBeam, ModuleAtoms)}; + {error, Errors, _} -> + % Log all filenames associated with modules that failed to compile. + % Note: The compiler prints compilation errors upon encountering them. + ErrorFiles = lists:usort([File || {File, _, _} <- Errors]), + Log = fun(File) -> + log({failed, binary_to_list(File)}) + end, + lists:foreach(Log, ErrorFiles), + {false, []}; + _ -> {false, []} + end. + +add_lib_to_erlang_path(Lib) -> + code:add_paths(filelib:wildcard([Lib, "/*/ebin"])). + +parse(Args) -> + parse(Args, #arguments{}). + +parse([], Arguments) -> + Arguments; +parse(["--lib", Lib | Rest], Arguments) -> + parse(Rest, Arguments#arguments{lib = Lib}); +parse(["--out", Out | Rest], Arguments) -> + parse(Rest, Arguments#arguments{out = Out}); +parse([Module | Rest], Arguments = #arguments{modules = Modules}) -> + parse(Rest, Arguments#arguments{modules = [Module | Modules]}). + +configure_logging() -> + Enabled = os:getenv("GLEAM_LOG") /= false, + persistent_term:put(gleam_logging_enabled, Enabled). + +log(Term) -> + case persistent_term:get(gleam_logging_enabled) of + true -> erlang:display(Term), ok; + false -> ok + end. diff --git a/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache b/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache Binary files differnew file mode 100644 index 0000000..59082af --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache diff --git a/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache_meta b/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache_meta Binary files differnew file mode 100644 index 0000000..a340156 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.erl b/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.erl new file mode 100644 index 0000000..1d634df --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.erl @@ -0,0 +1,118 @@ +-module(gleam@httpc). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([send_bits/1, send/1]). +-export_type([charlist/0, erl_http_option/0, body_format/0, erl_option/0]). + +-type charlist() :: any(). + +-type erl_http_option() :: any(). + +-type body_format() :: binary. + +-type erl_option() :: {body_format, body_format()}. + +-spec charlist_header({binary(), binary()}) -> {charlist(), charlist()}. +charlist_header(Header) -> + {K, V} = Header, + {erlang:binary_to_list(K), erlang:binary_to_list(V)}. + +-spec string_header({charlist(), charlist()}) -> {binary(), binary()}. +string_header(Header) -> + {K, V} = Header, + {erlang:list_to_binary(K), erlang:list_to_binary(V)}. + +-spec send_bits(gleam@http@request:request(bitstring())) -> {ok, + gleam@http@response:response(bitstring())} | + {error, gleam@dynamic:dynamic_()}. +send_bits(Req) -> + Erl_url = begin + _pipe = Req, + _pipe@1 = gleam@http@request:to_uri(_pipe), + _pipe@2 = gleam@uri:to_string(_pipe@1), + erlang:binary_to_list(_pipe@2) + end, + Erl_headers = gleam@list:map(erlang:element(3, Req), fun charlist_header/1), + Erl_http_options = [], + Erl_options = [{body_format, binary}], + gleam@result:then(case erlang:element(2, Req) of + options -> + Erl_req = {Erl_url, Erl_headers}, + httpc:request( + erlang:element(2, Req), + Erl_req, + Erl_http_options, + Erl_options + ); + + head -> + Erl_req = {Erl_url, Erl_headers}, + httpc:request( + erlang:element(2, Req), + Erl_req, + Erl_http_options, + Erl_options + ); + + get -> + Erl_req = {Erl_url, Erl_headers}, + httpc:request( + erlang:element(2, Req), + Erl_req, + Erl_http_options, + Erl_options + ); + + _ -> + Erl_content_type = begin + _pipe@3 = Req, + _pipe@4 = gleam@http@request:get_header( + _pipe@3, + <<"content-type"/utf8>> + ), + _pipe@5 = gleam@result:unwrap( + _pipe@4, + <<"application/octet-stream"/utf8>> + ), + erlang:binary_to_list(_pipe@5) + end, + Erl_req@1 = {Erl_url, + Erl_headers, + Erl_content_type, + erlang:element(4, Req)}, + httpc:request( + erlang:element(2, Req), + Erl_req@1, + Erl_http_options, + Erl_options + ) + end, fun(Response) -> + {{_, Status, _}, Headers, Resp_body} = Response, + {ok, + {response, + Status, + gleam@list:map(Headers, fun string_header/1), + Resp_body}} + end). + +-spec send(gleam@http@request:request(binary())) -> {ok, + gleam@http@response:response(binary())} | + {error, gleam@dynamic:dynamic_()}. +send(Req) -> + gleam@result:then( + begin + _pipe = Req, + _pipe@1 = gleam@http@request:map(_pipe, fun gleam_stdlib:identity/1), + send_bits(_pipe@1) + end, + fun(Resp) -> case gleam@bit_array:to_string(erlang:element(4, Resp)) of + {ok, Body} -> + {ok, gleam@http@response:set_body(Resp, Body)}; + + {error, _} -> + {error, + gleam@dynamic:from( + <<"Response body was not valid UTF-8"/utf8>> + )} + end end + ). diff --git a/aoc2023/build/dev/erlang/gleam_httpc/ebin/gleam@httpc.beam b/aoc2023/build/dev/erlang/gleam_httpc/ebin/gleam@httpc.beam Binary files differnew file mode 100644 index 0000000..1edf411 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_httpc/ebin/gleam@httpc.beam diff --git a/aoc2023/build/dev/erlang/gleam_httpc/ebin/gleam_httpc.app b/aoc2023/build/dev/erlang/gleam_httpc/ebin/gleam_httpc.app new file mode 100644 index 0000000..c99b5ea --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_httpc/ebin/gleam_httpc.app @@ -0,0 +1,10 @@ +{application, gleam_httpc, [ + {vsn, "2.1.1"}, + {applications, [gleam_http, + gleam_stdlib, + inets, + ssl]}, + {description, "Gleam bindings to Erlang's built in HTTP client, httpc"}, + {modules, []}, + {registered, []} +]}. diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@@compile.erl new file mode 100644 index 0000000..543db88 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@@compile.erl @@ -0,0 +1,157 @@ +#!/usr/bin/env escript + +% TODO: Don't concurrently print warnings and errors +% TODO: Some tests + +-record(arguments, {lib = "./", out = "./", modules = []}). + +main(Args) -> + #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args), + IsElixirModule = fun(Module) -> + filename:extension(Module) =:= ".ex" + end, + {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules), + ok = configure_logging(), + ok = add_lib_to_erlang_path(Lib), + ok = filelib:ensure_dir([Out, $/]), + {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out), + {ElixirOk, _ElixirBeams} = case ErlangOk of + true -> compile_elixir(ElixirModules, Out); + false -> {false, []} + end, + case ErlangOk and ElixirOk of + true -> ok; + false -> erlang:halt(1) + end. + +compile_erlang(Modules, Out) -> + Workers = start_compiler_workers(Out), + ok = producer_loop(Modules, Workers), + collect_results({true, []}). + +collect_results(Acc = {Result, Beams}) -> + receive + {compiled, Beam} -> collect_results({Result, [Beam | Beams]}); + failed -> collect_results({false, Beams}) + after 0 -> Acc + end. + +producer_loop([], 0) -> + ok; +producer_loop([], Workers) -> + receive + {work_please, _} -> producer_loop([], Workers - 1) + end; +producer_loop([Module | Modules], Workers) -> + receive + {work_please, Worker} -> + erlang:send(Worker, {module, Module}), + producer_loop(Modules, Workers) + end. + +start_compiler_workers(Out) -> + Parent = self(), + NumSchedulers = erlang:system_info(schedulers), + SpawnWorker = fun(_) -> + erlang:spawn_link(fun() -> worker_loop(Parent, Out) end) + end, + lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)), + NumSchedulers. + +worker_loop(Parent, Out) -> + Options = [report_errors, report_warnings, debug_info, {outdir, Out}], + erlang:send(Parent, {work_please, self()}), + receive + {module, Module} -> + log({compiling, Module}), + case compile:file(Module, Options) of + {ok, ModuleName} -> + Beam = filename:join(Out, ModuleName) ++ ".beam", + Message = {compiled, Beam}, + log(Message), + erlang:send(Parent, Message); + error -> + log({failed, Module}), + erlang:send(Parent, failed) + end, + worker_loop(Parent, Out) + end. + +compile_elixir(Modules, Out) -> + Error = [ + "The program elixir was not found. Is it installed?", + $\n, + "Documentation for installing Elixir can be viewed here:", + $\n, + "https://elixir-lang.org/install.html" + ], + case Modules of + [] -> {true, []}; + _ -> + log({starting, "compiler.app"}), + ok = application:start(compiler), + log({starting, "elixir.app"}), + case application:start(elixir) of + ok -> do_compile_elixir(Modules, Out); + _ -> + io:put_chars(standard_error, [Error, $\n]), + {false, []} + end + end. + +do_compile_elixir(Modules, Out) -> + ModuleBins = lists:map(fun(Module) -> + log({compiling, Module}), + list_to_binary(Module) + end, Modules), + OutBin = list_to_binary(Out), + Options = [{dest, OutBin}], + % Silence "redefining module" warnings. + % Compiled modules in the build directory are added to the code path. + % These warnings result from recompiling loaded modules. + % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation. + 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]), + case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of + {ok, ModuleAtoms, _} -> + ToBeam = fun(ModuleAtom) -> + Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam", + log({compiled, Beam}), + Beam + end, + {true, lists:map(ToBeam, ModuleAtoms)}; + {error, Errors, _} -> + % Log all filenames associated with modules that failed to compile. + % Note: The compiler prints compilation errors upon encountering them. + ErrorFiles = lists:usort([File || {File, _, _} <- Errors]), + Log = fun(File) -> + log({failed, binary_to_list(File)}) + end, + lists:foreach(Log, ErrorFiles), + {false, []}; + _ -> {false, []} + end. + +add_lib_to_erlang_path(Lib) -> + code:add_paths(filelib:wildcard([Lib, "/*/ebin"])). + +parse(Args) -> + parse(Args, #arguments{}). + +parse([], Arguments) -> + Arguments; +parse(["--lib", Lib | Rest], Arguments) -> + parse(Rest, Arguments#arguments{lib = Lib}); +parse(["--out", Out | Rest], Arguments) -> + parse(Rest, Arguments#arguments{out = Out}); +parse([Module | Rest], Arguments = #arguments{modules = Modules}) -> + parse(Rest, Arguments#arguments{modules = [Module | Modules]}). + +configure_logging() -> + Enabled = os:getenv("GLEAM_LOG") /= false, + persistent_term:put(gleam_logging_enabled, Enabled). + +log(Term) -> + case persistent_term:get(gleam_logging_enabled) of + true -> erlang:display(Term), ok; + false -> ok + end. diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache Binary files differnew file mode 100644 index 0000000..5aa9880 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache_meta b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache_meta Binary files differnew file mode 100644 index 0000000..d5f2a3e --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.erl new file mode 100644 index 0000000..9b215cb --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.erl @@ -0,0 +1,273 @@ +-module(gleam@otp@actor). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([continue/1, with_selector/2, to_erlang_start_result/1, start_spec/1, start/2, send/2, call/3]). +-export_type([message/1, next/2, init_result/2, self/2, spec/2, start_error/0, start_init_message/1]). + +-type message(LTB) :: {message, LTB} | + {system, gleam@otp@system:system_message()} | + {unexpected, gleam@dynamic:dynamic_()}. + +-type next(LTC, LTD) :: {continue, + LTD, + gleam@option:option(gleam@erlang@process:selector(LTC))} | + {stop, gleam@erlang@process:exit_reason()}. + +-type init_result(LTE, LTF) :: {ready, LTE, gleam@erlang@process:selector(LTF)} | + {failed, binary()}. + +-type self(LTG, LTH) :: {self, + gleam@otp@system:mode(), + gleam@erlang@process:pid_(), + LTG, + gleam@erlang@process:subject(LTH), + gleam@erlang@process:selector(message(LTH)), + gleam@otp@system:debug_state(), + fun((LTH, LTG) -> next(LTH, LTG))}. + +-type spec(LTI, LTJ) :: {spec, + fun(() -> init_result(LTI, LTJ)), + integer(), + fun((LTJ, LTI) -> next(LTJ, LTI))}. + +-type start_error() :: init_timeout | + {init_failed, gleam@erlang@process:exit_reason()} | + {init_crashed, gleam@dynamic:dynamic_()}. + +-type start_init_message(LTK) :: {ack, + {ok, gleam@erlang@process:subject(LTK)} | + {error, gleam@erlang@process:exit_reason()}} | + {mon, gleam@erlang@process:process_down()}. + +-spec continue(LTR) -> next(any(), LTR). +continue(State) -> + {continue, State, none}. + +-spec with_selector(next(LTV, LTW), gleam@erlang@process:selector(LTV)) -> next(LTV, LTW). +with_selector(Value, Selector) -> + case Value of + {continue, State, _} -> + {continue, State, {some, Selector}}; + + _ -> + Value + end. + +-spec exit_process(gleam@erlang@process:exit_reason()) -> gleam@erlang@process:exit_reason(). +exit_process(Reason) -> + Reason. + +-spec selecting_system_messages(gleam@erlang@process:selector(message(LUH))) -> gleam@erlang@process:selector(message(LUH)). +selecting_system_messages(Selector) -> + _pipe = Selector, + gleam@erlang@process:selecting_record3( + _pipe, + erlang:binary_to_atom(<<"system"/utf8>>), + fun gleam_otp_external:convert_system_message/2 + ). + +-spec receive_message(self(any(), LUD)) -> message(LUD). +receive_message(Self) -> + Selector = case erlang:element(2, Self) of + suspended -> + _pipe = gleam_erlang_ffi:new_selector(), + selecting_system_messages(_pipe); + + running -> + _pipe@1 = gleam_erlang_ffi:new_selector(), + _pipe@2 = gleam@erlang@process:selecting_anything( + _pipe@1, + fun(Field@0) -> {unexpected, Field@0} end + ), + _pipe@3 = gleam_erlang_ffi:merge_selector( + _pipe@2, + erlang:element(6, Self) + ), + selecting_system_messages(_pipe@3) + end, + gleam_erlang_ffi:select(Selector). + +-spec process_status_info(self(any(), any())) -> gleam@otp@system:status_info(). +process_status_info(Self) -> + {status_info, + erlang:binary_to_atom(<<"gleam@otp@actor"/utf8>>), + erlang:element(3, Self), + erlang:element(2, Self), + erlang:element(7, Self), + gleam@dynamic:from(erlang:element(4, Self))}. + +-spec init_selector( + gleam@erlang@process:subject(LYW), + gleam@erlang@process:selector(LYW) +) -> gleam@erlang@process:selector(message(LYW)). +init_selector(Subject, Selector) -> + _pipe = gleam_erlang_ffi:new_selector(), + _pipe@1 = gleam@erlang@process:selecting( + _pipe, + Subject, + fun(Field@0) -> {message, Field@0} end + ), + gleam_erlang_ffi:merge_selector( + _pipe@1, + gleam_erlang_ffi:map_selector( + Selector, + fun(Field@0) -> {message, Field@0} end + ) + ). + +-spec loop(self(any(), any())) -> gleam@erlang@process:exit_reason(). +loop(Self) -> + case receive_message(Self) of + {system, System} -> + case System of + {get_state, Callback} -> + Callback(gleam@dynamic:from(erlang:element(4, Self))), + loop(Self); + + {resume, Callback@1} -> + Callback@1(), + loop(erlang:setelement(2, Self, running)); + + {suspend, Callback@2} -> + Callback@2(), + loop(erlang:setelement(2, Self, suspended)); + + {get_status, Callback@3} -> + Callback@3(process_status_info(Self)), + loop(Self) + end; + + {unexpected, Message} -> + logger:warning( + unicode:characters_to_list( + <<"Actor discarding unexpected message: ~s"/utf8>> + ), + [unicode:characters_to_list(gleam@string:inspect(Message))] + ), + loop(Self); + + {message, Msg} -> + case (erlang:element(8, Self))(Msg, erlang:element(4, Self)) of + {stop, Reason} -> + exit_process(Reason); + + {continue, State, New_selector} -> + Selector = begin + _pipe = New_selector, + _pipe@1 = gleam@option:map( + _pipe, + fun(_capture) -> + init_selector(erlang:element(5, Self), _capture) + end + ), + gleam@option:unwrap(_pipe@1, erlang:element(6, Self)) + end, + loop( + erlang:setelement( + 6, + erlang:setelement(4, Self, State), + Selector + ) + ) + end + end. + +-spec initialise_actor( + spec(any(), LUY), + gleam@erlang@process:subject({ok, gleam@erlang@process:subject(LUY)} | + {error, gleam@erlang@process:exit_reason()}) +) -> gleam@erlang@process:exit_reason(). +initialise_actor(Spec, Ack) -> + Subject = gleam@erlang@process:new_subject(), + case (erlang:element(2, Spec))() of + {ready, State, Selector} -> + Selector@1 = init_selector(Subject, Selector), + gleam@erlang@process:send(Ack, {ok, Subject}), + Self = {self, + running, + gleam@erlang@process:subject_owner(Ack), + State, + Subject, + Selector@1, + sys:debug_options([]), + erlang:element(4, Spec)}, + loop(Self); + + {failed, Reason} -> + gleam@erlang@process:send(Ack, {error, {abnormal, Reason}}), + exit_process({abnormal, Reason}) + end. + +-spec to_erlang_start_result( + {ok, gleam@erlang@process:subject(any())} | {error, start_error()} +) -> {ok, gleam@erlang@process:pid_()} | {error, gleam@dynamic:dynamic_()}. +to_erlang_start_result(Res) -> + case Res of + {ok, X} -> + {ok, gleam@erlang@process:subject_owner(X)}; + + {error, X@1} -> + {error, gleam@dynamic:from(X@1)} + end. + +-spec start_spec(spec(any(), LVM)) -> {ok, gleam@erlang@process:subject(LVM)} | + {error, start_error()}. +start_spec(Spec) -> + Ack_subject = gleam@erlang@process:new_subject(), + Child = gleam@erlang@process:start( + fun() -> initialise_actor(Spec, Ack_subject) end, + true + ), + Monitor = gleam@erlang@process:monitor_process(Child), + Selector = begin + _pipe = gleam_erlang_ffi:new_selector(), + _pipe@1 = gleam@erlang@process:selecting( + _pipe, + Ack_subject, + fun(Field@0) -> {ack, Field@0} end + ), + gleam@erlang@process:selecting_process_down( + _pipe@1, + Monitor, + fun(Field@0) -> {mon, Field@0} end + ) + end, + Result = case gleam_erlang_ffi:select(Selector, erlang:element(3, Spec)) of + {ok, {ack, {ok, Channel}}} -> + {ok, Channel}; + + {ok, {ack, {error, Reason}}} -> + {error, {init_failed, Reason}}; + + {ok, {mon, Down}} -> + {error, {init_crashed, erlang:element(3, Down)}}; + + {error, nil} -> + gleam@erlang@process:kill(Child), + {error, init_timeout} + end, + gleam_erlang_ffi:demonitor(Monitor), + Result. + +-spec start(LVS, fun((LVT, LVS) -> next(LVT, LVS))) -> {ok, + gleam@erlang@process:subject(LVT)} | + {error, start_error()}. +start(State, Loop) -> + start_spec( + {spec, + fun() -> {ready, State, gleam_erlang_ffi:new_selector()} end, + 5000, + Loop} + ). + +-spec send(gleam@erlang@process:subject(LVZ), LVZ) -> nil. +send(Subject, Msg) -> + gleam@erlang@process:send(Subject, Msg). + +-spec call( + gleam@erlang@process:subject(LWB), + fun((gleam@erlang@process:subject(LWD)) -> LWB), + integer() +) -> LWD. +call(Selector, Make_message, Timeout) -> + gleam@erlang@process:call(Selector, Make_message, Timeout). diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache Binary files differnew file mode 100644 index 0000000..2970843 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache_meta b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache_meta Binary files differnew file mode 100644 index 0000000..1997b5a --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.erl new file mode 100644 index 0000000..8792f14 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.erl @@ -0,0 +1,53 @@ +-module(gleam@otp@intensity_tracker). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([new/2, trim_window/3, add_event/1]). +-export_type([intensity_tracker/0, too_intense/0]). + +-opaque intensity_tracker() :: {intensity_tracker, + integer(), + integer(), + list(integer())}. + +-type too_intense() :: too_intense. + +-spec new(integer(), integer()) -> intensity_tracker(). +new(Limit, Period) -> + {intensity_tracker, Limit, Period, []}. + +-spec now_seconds() -> integer(). +now_seconds() -> + erlang:monotonic_time(1). + +-spec trim_window(list(integer()), integer(), integer()) -> list(integer()). +trim_window(Events, Now, Period) -> + case Events of + [] -> + []; + + [Event | Events@1] -> + case Now >= (Event + Period) of + true -> + [Event | trim_window(Events@1, Now, Period)]; + + false -> + [] + end + end. + +-spec add_event(intensity_tracker()) -> {ok, intensity_tracker()} | + {error, too_intense()}. +add_event(Tracker) -> + Now = now_seconds(), + Events = trim_window( + [Now | erlang:element(4, Tracker)], + Now, + erlang:element(3, Tracker) + ), + case gleam@list:length(Events) >= erlang:element(2, Tracker) of + true -> + {error, too_intense}; + + false -> + {ok, erlang:setelement(4, Tracker, Events)} + end. diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache Binary files differnew file mode 100644 index 0000000..e911262 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache_meta b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache_meta Binary files differnew file mode 100644 index 0000000..5f1cb59 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.erl new file mode 100644 index 0000000..b205739 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.erl @@ -0,0 +1,8 @@ +-module(gleam@otp@port). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export_type([port_/0]). + +-type port_() :: any(). + + diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache Binary files differnew file mode 100644 index 0000000..e3cbbc7 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache_meta b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache_meta Binary files differnew file mode 100644 index 0000000..f6f257e --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.erl new file mode 100644 index 0000000..75e6c9f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.erl @@ -0,0 +1,322 @@ +-module(gleam@otp@supervisor). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([add/2, supervisor/1, worker/1, returning/2, start_spec/1, start/1, application_stopped/0, to_erlang_start_result/1]). +-export_type([spec/2, children/1, child_spec/3, child_start_error/0, message/0, instruction/0, state/1, starter/1, child/1, handle_exit_error/0, application_start_mode/0, application_stop/0]). + +-type spec(MID, MIE) :: {spec, + MID, + integer(), + integer(), + fun((children(MID)) -> children(MIE))}. + +-opaque children(MIF) :: {ready, starter(MIF)} | {failed, child_start_error()}. + +-opaque child_spec(MIG, MIH, MII) :: {child_spec, + fun((MIH) -> {ok, gleam@erlang@process:subject(MIG)} | + {error, gleam@otp@actor:start_error()}), + fun((MIH, gleam@erlang@process:subject(MIG)) -> MII)}. + +-type child_start_error() :: {child_start_error, + gleam@option:option(gleam@erlang@process:pid_()), + gleam@otp@actor:start_error()}. + +-opaque message() :: {exit, gleam@erlang@process:exit_message()} | + {retry_restart, gleam@erlang@process:pid_()}. + +-type instruction() :: start_all | {start_from, gleam@erlang@process:pid_()}. + +-type state(MIJ) :: {state, + gleam@otp@intensity_tracker:intensity_tracker(), + starter(MIJ), + gleam@erlang@process:subject(gleam@erlang@process:pid_())}. + +-type starter(MIK) :: {starter, + MIK, + gleam@option:option(fun((instruction()) -> {ok, + {starter(MIK), instruction()}} | + {error, child_start_error()}))}. + +-type child(MIL) :: {child, gleam@erlang@process:pid_(), MIL}. + +-type handle_exit_error() :: {restart_failed, + gleam@erlang@process:pid_(), + gleam@otp@intensity_tracker:intensity_tracker()} | + too_many_restarts. + +-type application_start_mode() :: normal | + {takeover, gleam@erlang@node:node_()} | + {failover, gleam@erlang@node:node_()}. + +-type application_stop() :: any(). + +-spec start_child(child_spec(any(), MIP, MIQ), MIP) -> {ok, child(MIQ)} | + {error, child_start_error()}. +start_child(Child_spec, Argument) -> + gleam@result:then( + begin + _pipe = (erlang:element(2, Child_spec))(Argument), + gleam@result:map_error( + _pipe, + fun(_capture) -> {child_start_error, none, _capture} end + ) + end, + fun(Subject) -> + {ok, + {child, + gleam@erlang@process:subject_owner(Subject), + (erlang:element(3, Child_spec))(Argument, Subject)}} + end + ). + +-spec shutdown_child( + gleam@erlang@process:pid_(), + child_spec(any(), any(), any()) +) -> nil. +shutdown_child(Pid, _) -> + gleam@erlang@process:send_exit(Pid). + +-spec perform_instruction_for_child( + MJD, + instruction(), + child_spec(any(), MJD, MJF), + child(MJF) +) -> {ok, {child(MJF), instruction()}} | {error, child_start_error()}. +perform_instruction_for_child(Argument, Instruction, Child_spec, Child) -> + Current = erlang:element(2, Child), + case Instruction of + {start_from, Target} when Target =/= Current -> + {ok, {Child, Instruction}}; + + _ -> + shutdown_child(Current, Child_spec), + gleam@result:then( + start_child(Child_spec, Argument), + fun(Child@1) -> {ok, {Child@1, start_all}} end + ) + end. + +-spec add_child_to_starter( + starter(MJN), + child_spec(any(), MJN, MJQ), + child(MJQ) +) -> starter(MJQ). +add_child_to_starter(Starter, Child_spec, Child) -> + Starter@3 = fun(Instruction) -> + gleam@result:then(case erlang:element(3, Starter) of + {some, Start} -> + Start(Instruction); + + none -> + {ok, {Starter, Instruction}} + end, fun(_use0) -> + {Starter@1, Instruction@1} = _use0, + gleam@result:then( + perform_instruction_for_child( + erlang:element(2, Starter@1), + Instruction@1, + Child_spec, + Child + ), + fun(_use0@1) -> + {Child@1, Instruction@2} = _use0@1, + Starter@2 = add_child_to_starter( + Starter@1, + Child_spec, + Child@1 + ), + {ok, {Starter@2, Instruction@2}} + end + ) + end) + end, + {starter, erlang:element(3, Child), {some, Starter@3}}. + +-spec start_and_add_child(starter(MJW), child_spec(any(), MJW, MJZ)) -> children(MJZ). +start_and_add_child(State, Child_spec) -> + case start_child(Child_spec, erlang:element(2, State)) of + {ok, Child} -> + {ready, add_child_to_starter(State, Child_spec, Child)}; + + {error, Reason} -> + {failed, Reason} + end. + +-spec add(children(MKE), child_spec(any(), MKE, MKH)) -> children(MKH). +add(Children, Child_spec) -> + case Children of + {failed, Fail} -> + {failed, Fail}; + + {ready, State} -> + start_and_add_child(State, Child_spec) + end. + +-spec supervisor( + fun((MKM) -> {ok, gleam@erlang@process:subject(MKN)} | + {error, gleam@otp@actor:start_error()}) +) -> child_spec(MKN, MKM, MKM). +supervisor(Start) -> + {child_spec, Start, fun(Argument, _) -> Argument end}. + +-spec worker( + fun((MKU) -> {ok, gleam@erlang@process:subject(MKV)} | + {error, gleam@otp@actor:start_error()}) +) -> child_spec(MKV, MKU, MKU). +worker(Start) -> + {child_spec, Start, fun(Argument, _) -> Argument end}. + +-spec returning( + child_spec(MLC, MLD, any()), + fun((MLD, gleam@erlang@process:subject(MLC)) -> MLJ) +) -> child_spec(MLC, MLD, MLJ). +returning(Child, Updater) -> + {child_spec, erlang:element(2, Child), Updater}. + +-spec init(spec(any(), MLO)) -> gleam@otp@actor:init_result(state(MLO), message()). +init(Spec) -> + Retry = gleam@erlang@process:new_subject(), + gleam_erlang_ffi:trap_exits(true), + Selector = begin + _pipe = gleam_erlang_ffi:new_selector(), + _pipe@1 = gleam@erlang@process:selecting( + _pipe, + Retry, + fun(Field@0) -> {retry_restart, Field@0} end + ), + gleam@erlang@process:selecting_trapped_exits( + _pipe@1, + fun(Field@0) -> {exit, Field@0} end + ) + end, + Result = begin + _pipe@2 = {starter, erlang:element(2, Spec), none}, + _pipe@3 = {ready, _pipe@2}, + (erlang:element(5, Spec))(_pipe@3) + end, + case Result of + {ready, Starter} -> + Restarts = gleam@otp@intensity_tracker:new( + erlang:element(3, Spec), + erlang:element(4, Spec) + ), + State = {state, Restarts, Starter, Retry}, + {ready, State, Selector}; + + {failed, Error} -> + {failed, case erlang:element(3, Error) of + init_timeout -> + <<"Child initialisation timed out"/utf8>>; + + {init_crashed, Reason} -> + gleam@string:append( + <<"Child crashed during initialisation: "/utf8>>, + gleam@string:inspect(Reason) + ); + + {init_failed, Reason@1} -> + gleam@string:append( + <<"Child failed to start during initialisation: "/utf8>>, + gleam@string:inspect(Reason@1) + ) + end} + end. + +-spec handle_exit(gleam@erlang@process:pid_(), state(MLU)) -> gleam@otp@actor:next(message(), state(MLU)). +handle_exit(Pid, State) -> + Outcome = begin + _assert_subject = erlang:element(3, erlang:element(3, State)), + {some, Start} = case _assert_subject of + {some, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam/otp/supervisor"/utf8>>, + function => <<"handle_exit"/utf8>>, + line => 293}) + end, + gleam@result:then( + begin + _pipe = erlang:element(2, State), + _pipe@1 = gleam@otp@intensity_tracker:add_event(_pipe), + gleam@result:map_error(_pipe@1, fun(_) -> too_many_restarts end) + end, + fun(Restarts) -> + gleam@result:then( + begin + _pipe@2 = Start({start_from, Pid}), + gleam@result:map_error( + _pipe@2, + fun(E) -> + {restart_failed, + gleam@option:unwrap( + erlang:element(2, E), + Pid + ), + Restarts} + end + ) + end, + fun(_use0) -> + {Starter, _} = _use0, + {ok, + erlang:setelement( + 2, + erlang:setelement(3, State, Starter), + Restarts + )} + end + ) + end + ) + end, + case Outcome of + {ok, State@1} -> + gleam@otp@actor:continue(State@1); + + {error, {restart_failed, Failed_child, Restarts@1}} -> + gleam@erlang@process:send(erlang:element(4, State), Failed_child), + State@2 = erlang:setelement(2, State, Restarts@1), + gleam@otp@actor:continue(State@2); + + {error, too_many_restarts} -> + {stop, + {abnormal, + <<"Child processes restarted too many times within allowed period"/utf8>>}} + end. + +-spec loop(message(), state(MLZ)) -> gleam@otp@actor:next(message(), state(MLZ)). +loop(Message, State) -> + case Message of + {exit, Exit_message} -> + handle_exit(erlang:element(2, Exit_message), State); + + {retry_restart, Pid} -> + handle_exit(Pid, State) + end. + +-spec start_spec(spec(any(), any())) -> {ok, + gleam@erlang@process:subject(message())} | + {error, gleam@otp@actor:start_error()}. +start_spec(Spec) -> + gleam@otp@actor:start_spec( + {spec, fun() -> init(Spec) end, 60000, fun loop/2} + ). + +-spec start(fun((children(nil)) -> children(any()))) -> {ok, + gleam@erlang@process:subject(message())} | + {error, gleam@otp@actor:start_error()}. +start(Init) -> + start_spec({spec, nil, 1, 5, Init}). + +-spec application_stopped() -> application_stop(). +application_stopped() -> + gleam_otp_external:application_stopped(). + +-spec to_erlang_start_result( + {ok, gleam@erlang@process:subject(any())} | + {error, gleam@otp@actor:start_error()} +) -> {ok, gleam@erlang@process:pid_()} | {error, gleam@dynamic:dynamic_()}. +to_erlang_start_result(Res) -> + gleam@otp@actor:to_erlang_start_result(Res). diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache Binary files differnew file mode 100644 index 0000000..1ecd94e --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache_meta b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache_meta Binary files differnew file mode 100644 index 0000000..9f64041 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.erl new file mode 100644 index 0000000..622e5ea --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.erl @@ -0,0 +1,43 @@ +-module(gleam@otp@system). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([debug_state/1, get_state/1, suspend/1, resume/1]). +-export_type([mode/0, debug_option/0, debug_state/0, status_info/0, system_message/0, do_not_leak/0]). + +-type mode() :: running | suspended. + +-type debug_option() :: no_debug. + +-type debug_state() :: any(). + +-type status_info() :: {status_info, + gleam@erlang@atom:atom_(), + gleam@erlang@process:pid_(), + mode(), + debug_state(), + gleam@dynamic:dynamic_()}. + +-type system_message() :: {resume, fun(() -> nil)} | + {suspend, fun(() -> nil)} | + {get_state, fun((gleam@dynamic:dynamic_()) -> nil)} | + {get_status, fun((status_info()) -> nil)}. + +-type do_not_leak() :: any(). + +-spec debug_state(list(debug_option())) -> debug_state(). +debug_state(A) -> + sys:debug_options(A). + +-spec get_state(gleam@erlang@process:pid_()) -> gleam@dynamic:dynamic_(). +get_state(From) -> + sys:get_state(From). + +-spec suspend(gleam@erlang@process:pid_()) -> nil. +suspend(Pid) -> + sys:suspend(Pid), + nil. + +-spec resume(gleam@erlang@process:pid_()) -> nil. +resume(Pid) -> + sys:resume(Pid), + nil. diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache Binary files differnew file mode 100644 index 0000000..3360869 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache_meta b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache_meta Binary files differnew file mode 100644 index 0000000..e4f89cf --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.erl new file mode 100644 index 0000000..ae4037d --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.erl @@ -0,0 +1,111 @@ +-module(gleam@otp@task). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([async/1, try_await/2, await/2, try_await_forever/1, await_forever/1]). +-export_type([task/1, await_error/0, message/1]). + +-opaque task(MEB) :: {task, + gleam@erlang@process:pid_(), + gleam@erlang@process:pid_(), + gleam@erlang@process:process_monitor(), + gleam@erlang@process:selector(message(MEB))}. + +-type await_error() :: timeout | {exit, gleam@dynamic:dynamic_()}. + +-type message(MEC) :: {from_monitor, gleam@erlang@process:process_down()} | + {from_subject, MEC}. + +-spec async(fun(() -> MED)) -> task(MED). +async(Work) -> + Owner = erlang:self(), + Subject = gleam@erlang@process:new_subject(), + Pid = gleam@erlang@process:start( + fun() -> gleam@erlang@process:send(Subject, Work()) end, + true + ), + Monitor = gleam@erlang@process:monitor_process(Pid), + Selector = begin + _pipe = gleam_erlang_ffi:new_selector(), + _pipe@1 = gleam@erlang@process:selecting_process_down( + _pipe, + Monitor, + fun(Field@0) -> {from_monitor, Field@0} end + ), + gleam@erlang@process:selecting( + _pipe@1, + Subject, + fun(Field@0) -> {from_subject, Field@0} end + ) + end, + {task, Owner, Pid, Monitor, Selector}. + +-spec assert_owner(task(any())) -> nil. +assert_owner(Task) -> + Self = erlang:self(), + case erlang:element(2, Task) =:= Self of + true -> + nil; + + false -> + gleam@erlang@process:send_abnormal_exit( + Self, + <<"awaited on a task that does not belong to this process"/utf8>> + ) + end. + +-spec try_await(task(MEH), integer()) -> {ok, MEH} | {error, await_error()}. +try_await(Task, Timeout) -> + assert_owner(Task), + case gleam_erlang_ffi:select(erlang:element(5, Task), Timeout) of + {ok, {from_subject, X}} -> + gleam_erlang_ffi:demonitor(erlang:element(4, Task)), + {ok, X}; + + {ok, {from_monitor, {process_down, _, Reason}}} -> + {error, {exit, Reason}}; + + {error, nil} -> + {error, timeout} + end. + +-spec await(task(MEL), integer()) -> MEL. +await(Task, Timeout) -> + _assert_subject = try_await(Task, Timeout), + {ok, Value} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam/otp/task"/utf8>>, + function => <<"await"/utf8>>, + line => 117}) + end, + Value. + +-spec try_await_forever(task(MEN)) -> {ok, MEN} | {error, await_error()}. +try_await_forever(Task) -> + assert_owner(Task), + case gleam_erlang_ffi:select(erlang:element(5, Task)) of + {from_subject, X} -> + gleam_erlang_ffi:demonitor(erlang:element(4, Task)), + {ok, X}; + + {from_monitor, {process_down, _, Reason}} -> + {error, {exit, Reason}} + end. + +-spec await_forever(task(MER)) -> MER. +await_forever(Task) -> + _assert_subject = try_await_forever(Task), + {ok, Value} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam/otp/task"/utf8>>, + function => <<"await_forever"/utf8>>, + line => 149}) + end, + Value. diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache Binary files differnew file mode 100644 index 0000000..601b922 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache_meta b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache_meta Binary files differnew file mode 100644 index 0000000..6b7a3a8 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.erl new file mode 100644 index 0000000..9381ad2 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.erl @@ -0,0 +1,28 @@ +-module(gleam_otp). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([main/0]). + +-spec spawn_task(integer()) -> gleam@otp@task:task(nil). +spawn_task(I) -> + gleam@otp@task:async(fun() -> case (I rem 500) =:= 0 of + true -> + gleam@io:println( + <<"Hello from "/utf8, (gleam@int:to_string(I))/binary>> + ); + + false -> + nil + end end). + +-spec main() -> integer(). +main() -> + gleam@io:debug( + gleam_otp_test_external:get_message_queue_length(erlang:self()) + ), + _pipe = gleam@list:range(0, 1000000), + _pipe@1 = gleam@list:map(_pipe, fun spawn_task/1), + gleam@list:each(_pipe@1, fun gleam@otp@task:await_forever/1), + gleam@io:debug( + gleam_otp_test_external:get_message_queue_length(erlang:self()) + ). diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp_external.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp_external.erl new file mode 100644 index 0000000..8910a67 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp_external.erl @@ -0,0 +1,43 @@ +-module(gleam_otp_external). + +-export([application_stopped/0, convert_system_message/2]). + +% TODO: support other system messages +% {replace_state, StateFn} +% {change_code, Mod, Vsn, Extra} +% {terminate, Reason} +% {debug, {log, Flag}} +% {debug, {trace, Flag}} +% {debug, {log_to_file, FileName}} +% {debug, {statistics, Flag}} +% {debug, no_debug} +% {debug, {install, {Func, FuncState}}} +% {debug, {install, {FuncId, Func, FuncState}}} +% {debug, {remove, FuncOrId}} +% GetStatus(Subject(StatusInfo)) +convert_system_message({From, Ref}, Request) when is_pid(From) -> + Reply = fun(Msg) -> + erlang:send(From, {Ref, Msg}), + nil + end, + System = fun(Callback) -> + {system, {Request, Callback}} + end, + case Request of + get_status -> System(fun(Status) -> Reply(process_status(Status)) end); + get_state -> System(Reply); + suspend -> System(fun() -> Reply(ok) end); + resume -> System(fun() -> Reply(ok) end); + Other -> {unexpeceted, Other} + end. + +process_status({status_info, Module, Parent, Mode, DebugState, State}) -> + Data = [ + get(), Mode, Parent, DebugState, + [{header, "Status for Gleam process " ++ pid_to_list(self())}, + {data, [{'Status', Mode}, {'Parent', Parent}, {'State', State}]}] + ], + {status, self(), {module, Module}, Data}. + +application_stopped() -> + ok. diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@actor.beam b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@actor.beam Binary files differnew file mode 100644 index 0000000..1a777b4 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@actor.beam diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@intensity_tracker.beam b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@intensity_tracker.beam Binary files differnew file mode 100644 index 0000000..5a126b5 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@intensity_tracker.beam diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@port.beam b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@port.beam Binary files differnew file mode 100644 index 0000000..8b72b7d --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@port.beam diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@supervisor.beam b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@supervisor.beam Binary files differnew file mode 100644 index 0000000..72f4b32 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@supervisor.beam diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@system.beam b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@system.beam Binary files differnew file mode 100644 index 0000000..3aefd21 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@system.beam diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@task.beam b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@task.beam Binary files differnew file mode 100644 index 0000000..c21bc3b --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@task.beam diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp.app b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp.app new file mode 100644 index 0000000..21dd444 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp.app @@ -0,0 +1,8 @@ +{application, gleam_otp, [ + {vsn, "0.8.0"}, + {applications, [gleam_erlang, + gleam_stdlib]}, + {description, "Fault tolerant multicore Gleam programs with OTP"}, + {modules, []}, + {registered, []} +]}. diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp.beam b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp.beam Binary files differnew file mode 100644 index 0000000..0a25445 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp.beam diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp_external.beam b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp_external.beam Binary files differnew file mode 100644 index 0000000..f77f93b --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp_external.beam diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Continue.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Continue.hrl new file mode 100644 index 0000000..85677d1 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Continue.hrl @@ -0,0 +1,4 @@ +-record(continue, { + state :: any(), + selector :: gleam@option:option(gleam@erlang@process:selector(any())) +}). diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Ready.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Ready.hrl new file mode 100644 index 0000000..75faa95 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Ready.hrl @@ -0,0 +1 @@ +-record(ready, {state :: any(), selector :: gleam@erlang@process:selector(any())}). diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Spec.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Spec.hrl new file mode 100644 index 0000000..5287439 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Spec.hrl @@ -0,0 +1,5 @@ +-record(spec, { + init :: fun(() -> gleam@otp@actor:init_result(any(), any())), + init_timeout :: integer(), + loop :: fun((any(), any()) -> gleam@otp@actor:next(any(), any())) +}). diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@intensity_tracker_IntensityTracker.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@intensity_tracker_IntensityTracker.hrl new file mode 100644 index 0000000..3ed0b01 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@intensity_tracker_IntensityTracker.hrl @@ -0,0 +1,5 @@ +-record(intensity_tracker, { + limit :: integer(), + period :: integer(), + events :: list(integer()) +}). diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@supervisor_ChildSpec.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@supervisor_ChildSpec.hrl new file mode 100644 index 0000000..7afd07f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@supervisor_ChildSpec.hrl @@ -0,0 +1,5 @@ +-record(child_spec, { + start :: fun((any()) -> {ok, gleam@erlang@process:subject(any())} | + {error, gleam@otp@actor:start_error()}), + returning :: fun((any(), gleam@erlang@process:subject(any())) -> any()) +}). diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@supervisor_Spec.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@supervisor_Spec.hrl new file mode 100644 index 0000000..b10bd9f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@supervisor_Spec.hrl @@ -0,0 +1,6 @@ +-record(spec, { + argument :: any(), + max_frequency :: integer(), + frequency_period :: integer(), + init :: fun((gleam@otp@supervisor:children(any())) -> gleam@otp@supervisor:children(any())) +}). diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@system_StatusInfo.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@system_StatusInfo.hrl new file mode 100644 index 0000000..99ab4cb --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@system_StatusInfo.hrl @@ -0,0 +1,7 @@ +-record(status_info, { + module :: gleam@erlang@atom:atom_(), + parent :: gleam@erlang@process:pid_(), + mode :: gleam@otp@system:mode(), + debug_state :: gleam@otp@system:debug_state(), + state :: gleam@dynamic:dynamic_() +}). diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@task_Exit.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@task_Exit.hrl new file mode 100644 index 0000000..7c83874 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@task_Exit.hrl @@ -0,0 +1 @@ +-record(exit, {reason :: gleam@dynamic:dynamic_()}). diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@task_Task.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@task_Task.hrl new file mode 100644 index 0000000..959bea8 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@task_Task.hrl @@ -0,0 +1,6 @@ +-record(task, { + owner :: gleam@erlang@process:pid_(), + pid :: gleam@erlang@process:pid_(), + monitor :: gleam@erlang@process:process_monitor(), + selector :: gleam@erlang@process:selector(gleam@otp@task:message(any())) +}). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/dict.mjs b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/dict.mjs new file mode 100644 index 0000000..a8309e0 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/dict.mjs @@ -0,0 +1,957 @@ +/** + * This file uses jsdoc to annotate types. + * These types can be checked using the typescript compiler with "checkjs" option. + */ + +import { isEqual } from "./gleam.mjs"; + +const referenceMap = new WeakMap(); +const tempDataView = new DataView(new ArrayBuffer(8)); +let referenceUID = 0; +/** + * hash the object by reference using a weak map and incrementing uid + * @param {any} o + * @returns {number} + */ +function hashByReference(o) { + const known = referenceMap.get(o); + if (known !== undefined) { + return known; + } + const hash = referenceUID++; + if (referenceUID === 0x7fffffff) { + referenceUID = 0; + } + referenceMap.set(o, hash); + return hash; +} +/** + * merge two hashes in an order sensitive way + * @param {number} a + * @param {number} b + * @returns {number} + */ +function hashMerge(a, b) { + return (a ^ (b + 0x9e3779b9 + (a << 6) + (a >> 2))) | 0; +} +/** + * standard string hash popularised by java + * @param {string} s + * @returns {number} + */ +function hashString(s) { + let hash = 0; + const len = s.length; + for (let i = 0; i < len; i++) { + hash = (Math.imul(31, hash) + s.charCodeAt(i)) | 0; + } + return hash; +} +/** + * hash a number by converting to two integers and do some jumbling + * @param {number} n + * @returns {number} + */ +function hashNumber(n) { + tempDataView.setFloat64(0, n); + const i = tempDataView.getInt32(0); + const j = tempDataView.getInt32(4); + return Math.imul(0x45d9f3b, (i >> 16) ^ i) ^ j; +} +/** + * hash a BigInt by converting it to a string and hashing that + * @param {BigInt} n + * @returns {number} + */ +function hashBigInt(n) { + return hashString(n.toString()); +} +/** + * hash any js object + * @param {any} o + * @returns {number} + */ +function hashObject(o) { + const proto = Object.getPrototypeOf(o); + if (proto !== null && typeof proto.hashCode === "function") { + try { + const code = o.hashCode(o); + if (typeof code === "number") { + return code; + } + } catch {} + } + if (o instanceof Promise || o instanceof WeakSet || o instanceof WeakMap) { + return hashByReference(o); + } + if (o instanceof Date) { + return hashNumber(o.getTime()); + } + let h = 0; + if (o instanceof ArrayBuffer) { + o = new Uint8Array(o); + } + if (Array.isArray(o) || o instanceof Uint8Array) { + for (let i = 0; i < o.length; i++) { + h = (Math.imul(31, h) + getHash(o[i])) | 0; + } + } else if (o instanceof Set) { + o.forEach((v) => { + h = (h + getHash(v)) | 0; + }); + } else if (o instanceof Map) { + o.forEach((v, k) => { + h = (h + hashMerge(getHash(v), getHash(k))) | 0; + }); + } else { + const keys = Object.keys(o); + for (let i = 0; i < keys.length; i++) { + const k = keys[i]; + const v = o[k]; + h = (h + hashMerge(getHash(v), hashString(k))) | 0; + } + } + return h; +} +/** + * hash any js value + * @param {any} u + * @returns {number} + */ +export function getHash(u) { + if (u === null) return 0x42108422; + if (u === undefined) return 0x42108423; + if (u === true) return 0x42108421; + if (u === false) return 0x42108420; + switch (typeof u) { + case "number": + return hashNumber(u); + case "string": + return hashString(u); + case "bigint": + return hashBigInt(u); + case "object": + return hashObject(u); + case "symbol": + return hashByReference(u); + case "function": + return hashByReference(u); + default: + return 0; // should be unreachable + } +} +/** + * @template K,V + * @typedef {ArrayNode<K,V> | IndexNode<K,V> | CollisionNode<K,V>} Node + */ +/** + * @template K,V + * @typedef {{ type: typeof ENTRY, k: K, v: V }} Entry + */ +/** + * @template K,V + * @typedef {{ type: typeof ARRAY_NODE, size: number, array: (undefined | Entry<K,V> | Node<K,V>)[] }} ArrayNode + */ +/** + * @template K,V + * @typedef {{ type: typeof INDEX_NODE, bitmap: number, array: (Entry<K,V> | Node<K,V>)[] }} IndexNode + */ +/** + * @template K,V + * @typedef {{ type: typeof COLLISION_NODE, hash: number, array: Entry<K, V>[] }} CollisionNode + */ +/** + * @typedef {{ val: boolean }} Flag + */ +const SHIFT = 5; // number of bits you need to shift by to get the next bucket +const BUCKET_SIZE = Math.pow(2, SHIFT); +const MASK = BUCKET_SIZE - 1; // used to zero out all bits not in the bucket +const MAX_INDEX_NODE = BUCKET_SIZE / 2; // when does index node grow into array node +const MIN_ARRAY_NODE = BUCKET_SIZE / 4; // when does array node shrink to index node +const ENTRY = 0; +const ARRAY_NODE = 1; +const INDEX_NODE = 2; +const COLLISION_NODE = 3; +/** @type {IndexNode<any,any>} */ +const EMPTY = { + type: INDEX_NODE, + bitmap: 0, + array: [], +}; +/** + * Mask the hash to get only the bucket corresponding to shift + * @param {number} hash + * @param {number} shift + * @returns {number} + */ +function mask(hash, shift) { + return (hash >>> shift) & MASK; +} +/** + * Set only the Nth bit where N is the masked hash + * @param {number} hash + * @param {number} shift + * @returns {number} + */ +function bitpos(hash, shift) { + return 1 << mask(hash, shift); +} +/** + * Count the number of 1 bits in a number + * @param {number} x + * @returns {number} + */ +function bitcount(x) { + x -= (x >> 1) & 0x55555555; + x = (x & 0x33333333) + ((x >> 2) & 0x33333333); + x = (x + (x >> 4)) & 0x0f0f0f0f; + x += x >> 8; + x += x >> 16; + return x & 0x7f; +} +/** + * Calculate the array index of an item in a bitmap index node + * @param {number} bitmap + * @param {number} bit + * @returns {number} + */ +function index(bitmap, bit) { + return bitcount(bitmap & (bit - 1)); +} +/** + * Efficiently copy an array and set one value at an index + * @template T + * @param {T[]} arr + * @param {number} at + * @param {T} val + * @returns {T[]} + */ +function cloneAndSet(arr, at, val) { + const len = arr.length; + const out = new Array(len); + for (let i = 0; i < len; ++i) { + out[i] = arr[i]; + } + out[at] = val; + return out; +} +/** + * Efficiently copy an array and insert one value at an index + * @template T + * @param {T[]} arr + * @param {number} at + * @param {T} val + * @returns {T[]} + */ +function spliceIn(arr, at, val) { + const len = arr.length; + const out = new Array(len + 1); + let i = 0; + let g = 0; + while (i < at) { + out[g++] = arr[i++]; + } + out[g++] = val; + while (i < len) { + out[g++] = arr[i++]; + } + return out; +} +/** + * Efficiently copy an array and remove one value at an index + * @template T + * @param {T[]} arr + * @param {number} at + * @returns {T[]} + */ +function spliceOut(arr, at) { + const len = arr.length; + const out = new Array(len - 1); + let i = 0; + let g = 0; + while (i < at) { + out[g++] = arr[i++]; + } + ++i; + while (i < len) { + out[g++] = arr[i++]; + } + return out; +} +/** + * Create a new node containing two entries + * @template K,V + * @param {number} shift + * @param {K} key1 + * @param {V} val1 + * @param {number} key2hash + * @param {K} key2 + * @param {V} val2 + * @returns {Node<K,V>} + */ +function createNode(shift, key1, val1, key2hash, key2, val2) { + const key1hash = getHash(key1); + if (key1hash === key2hash) { + return { + type: COLLISION_NODE, + hash: key1hash, + array: [ + { type: ENTRY, k: key1, v: val1 }, + { type: ENTRY, k: key2, v: val2 }, + ], + }; + } + const addedLeaf = { val: false }; + return assoc( + assocIndex(EMPTY, shift, key1hash, key1, val1, addedLeaf), + shift, + key2hash, + key2, + val2, + addedLeaf + ); +} +/** + * @template T,K,V + * @callback AssocFunction + * @param {T} root + * @param {number} shift + * @param {number} hash + * @param {K} key + * @param {V} val + * @param {Flag} addedLeaf + * @returns {Node<K,V>} + */ +/** + * Associate a node with a new entry, creating a new node + * @template T,K,V + * @type {AssocFunction<Node<K,V>,K,V>} + */ +function assoc(root, shift, hash, key, val, addedLeaf) { + switch (root.type) { + case ARRAY_NODE: + return assocArray(root, shift, hash, key, val, addedLeaf); + case INDEX_NODE: + return assocIndex(root, shift, hash, key, val, addedLeaf); + case COLLISION_NODE: + return assocCollision(root, shift, hash, key, val, addedLeaf); + } +} +/** + * @template T,K,V + * @type {AssocFunction<ArrayNode<K,V>,K,V>} + */ +function assocArray(root, shift, hash, key, val, addedLeaf) { + const idx = mask(hash, shift); + const node = root.array[idx]; + // if the corresponding index is empty set the index to a newly created node + if (node === undefined) { + addedLeaf.val = true; + return { + type: ARRAY_NODE, + size: root.size + 1, + array: cloneAndSet(root.array, idx, { type: ENTRY, k: key, v: val }), + }; + } + if (node.type === ENTRY) { + // if keys are equal replace the entry + if (isEqual(key, node.k)) { + if (val === node.v) { + return root; + } + return { + type: ARRAY_NODE, + size: root.size, + array: cloneAndSet(root.array, idx, { + type: ENTRY, + k: key, + v: val, + }), + }; + } + // otherwise upgrade the entry to a node and insert + addedLeaf.val = true; + return { + type: ARRAY_NODE, + size: root.size, + array: cloneAndSet( + root.array, + idx, + createNode(shift + SHIFT, node.k, node.v, hash, key, val) + ), + }; + } + // otherwise call assoc on the child node + const n = assoc(node, shift + SHIFT, hash, key, val, addedLeaf); + // if the child node hasn't changed just return the old root + if (n === node) { + return root; + } + // otherwise set the index to the new node + return { + type: ARRAY_NODE, + size: root.size, + array: cloneAndSet(root.array, idx, n), + }; +} +/** + * @template T,K,V + * @type {AssocFunction<IndexNode<K,V>,K,V>} + */ +function assocIndex(root, shift, hash, key, val, addedLeaf) { + const bit = bitpos(hash, shift); + const idx = index(root.bitmap, bit); + // if there is already a item at this hash index.. + if ((root.bitmap & bit) !== 0) { + // if there is a node at the index (not an entry), call assoc on the child node + const node = root.array[idx]; + if (node.type !== ENTRY) { + const n = assoc(node, shift + SHIFT, hash, key, val, addedLeaf); + if (n === node) { + return root; + } + return { + type: INDEX_NODE, + bitmap: root.bitmap, + array: cloneAndSet(root.array, idx, n), + }; + } + // otherwise there is an entry at the index + // if the keys are equal replace the entry with the updated value + const nodeKey = node.k; + if (isEqual(key, nodeKey)) { + if (val === node.v) { + return root; + } + return { + type: INDEX_NODE, + bitmap: root.bitmap, + array: cloneAndSet(root.array, idx, { + type: ENTRY, + k: key, + v: val, + }), + }; + } + // if the keys are not equal, replace the entry with a new child node + addedLeaf.val = true; + return { + type: INDEX_NODE, + bitmap: root.bitmap, + array: cloneAndSet( + root.array, + idx, + createNode(shift + SHIFT, nodeKey, node.v, hash, key, val) + ), + }; + } else { + // else there is currently no item at the hash index + const n = root.array.length; + // if the number of nodes is at the maximum, expand this node into an array node + if (n >= MAX_INDEX_NODE) { + // create a 32 length array for the new array node (one for each bit in the hash) + const nodes = new Array(32); + // create and insert a node for the new entry + const jdx = mask(hash, shift); + nodes[jdx] = assocIndex(EMPTY, shift + SHIFT, hash, key, val, addedLeaf); + let j = 0; + let bitmap = root.bitmap; + // place each item in the index node into the correct spot in the array node + // loop through all 32 bits / array positions + for (let i = 0; i < 32; i++) { + if ((bitmap & 1) !== 0) { + const node = root.array[j++]; + nodes[i] = node; + } + // shift the bitmap to process the next bit + bitmap = bitmap >>> 1; + } + return { + type: ARRAY_NODE, + size: n + 1, + array: nodes, + }; + } else { + // else there is still space in this index node + // simply insert a new entry at the hash index + const newArray = spliceIn(root.array, idx, { + type: ENTRY, + k: key, + v: val, + }); + addedLeaf.val = true; + return { + type: INDEX_NODE, + bitmap: root.bitmap | bit, + array: newArray, + }; + } + } +} +/** + * @template T,K,V + * @type {AssocFunction<CollisionNode<K,V>,K,V>} + */ +function assocCollision(root, shift, hash, key, val, addedLeaf) { + // if there is a hash collision + if (hash === root.hash) { + const idx = collisionIndexOf(root, key); + // if this key already exists replace the entry with the new value + if (idx !== -1) { + const entry = root.array[idx]; + if (entry.v === val) { + return root; + } + return { + type: COLLISION_NODE, + hash: hash, + array: cloneAndSet(root.array, idx, { type: ENTRY, k: key, v: val }), + }; + } + // otherwise insert the entry at the end of the array + const size = root.array.length; + addedLeaf.val = true; + return { + type: COLLISION_NODE, + hash: hash, + array: cloneAndSet(root.array, size, { type: ENTRY, k: key, v: val }), + }; + } + // if there is no hash collision, upgrade to an index node + return assoc( + { + type: INDEX_NODE, + bitmap: bitpos(root.hash, shift), + array: [root], + }, + shift, + hash, + key, + val, + addedLeaf + ); +} +/** + * Find the index of a key in the collision node's array + * @template K,V + * @param {CollisionNode<K,V>} root + * @param {K} key + * @returns {number} + */ +function collisionIndexOf(root, key) { + const size = root.array.length; + for (let i = 0; i < size; i++) { + if (isEqual(key, root.array[i].k)) { + return i; + } + } + return -1; +} +/** + * @template T,K,V + * @callback FindFunction + * @param {T} root + * @param {number} shift + * @param {number} hash + * @param {K} key + * @returns {undefined | Entry<K,V>} + */ +/** + * Return the found entry or undefined if not present in the root + * @template K,V + * @type {FindFunction<Node<K,V>,K,V>} + */ +function find(root, shift, hash, key) { + switch (root.type) { + case ARRAY_NODE: + return findArray(root, shift, hash, key); + case INDEX_NODE: + return findIndex(root, shift, hash, key); + case COLLISION_NODE: + return findCollision(root, key); + } +} +/** + * @template K,V + * @type {FindFunction<ArrayNode<K,V>,K,V>} + */ +function findArray(root, shift, hash, key) { + const idx = mask(hash, shift); + const node = root.array[idx]; + if (node === undefined) { + return undefined; + } + if (node.type !== ENTRY) { + return find(node, shift + SHIFT, hash, key); + } + if (isEqual(key, node.k)) { + return node; + } + return undefined; +} +/** + * @template K,V + * @type {FindFunction<IndexNode<K,V>,K,V>} + */ +function findIndex(root, shift, hash, key) { + const bit = bitpos(hash, shift); + if ((root.bitmap & bit) === 0) { + return undefined; + } + const idx = index(root.bitmap, bit); + const node = root.array[idx]; + if (node.type !== ENTRY) { + return find(node, shift + SHIFT, hash, key); + } + if (isEqual(key, node.k)) { + return node; + } + return undefined; +} +/** + * @template K,V + * @param {CollisionNode<K,V>} root + * @param {K} key + * @returns {undefined | Entry<K,V>} + */ +function findCollision(root, key) { + const idx = collisionIndexOf(root, key); + if (idx < 0) { + return undefined; + } + return root.array[idx]; +} +/** + * @template T,K,V + * @callback WithoutFunction + * @param {T} root + * @param {number} shift + * @param {number} hash + * @param {K} key + * @returns {undefined | Node<K,V>} + */ +/** + * Remove an entry from the root, returning the updated root. + * Returns undefined if the node should be removed from the parent. + * @template K,V + * @type {WithoutFunction<Node<K,V>,K,V>} + * */ +function without(root, shift, hash, key) { + switch (root.type) { + case ARRAY_NODE: + return withoutArray(root, shift, hash, key); + case INDEX_NODE: + return withoutIndex(root, shift, hash, key); + case COLLISION_NODE: + return withoutCollision(root, key); + } +} +/** + * @template K,V + * @type {WithoutFunction<ArrayNode<K,V>,K,V>} + */ +function withoutArray(root, shift, hash, key) { + const idx = mask(hash, shift); + const node = root.array[idx]; + if (node === undefined) { + return root; // already empty + } + let n = undefined; + // if node is an entry and the keys are not equal there is nothing to remove + // if node is not an entry do a recursive call + if (node.type === ENTRY) { + if (!isEqual(node.k, key)) { + return root; // no changes + } + } else { + n = without(node, shift + SHIFT, hash, key); + if (n === node) { + return root; // no changes + } + } + // if the recursive call returned undefined the node should be removed + if (n === undefined) { + // if the number of child nodes is at the minimum, pack into an index node + if (root.size <= MIN_ARRAY_NODE) { + const arr = root.array; + const out = new Array(root.size - 1); + let i = 0; + let j = 0; + let bitmap = 0; + while (i < idx) { + const nv = arr[i]; + if (nv !== undefined) { + out[j] = nv; + bitmap |= 1 << i; + ++j; + } + ++i; + } + ++i; // skip copying the removed node + while (i < arr.length) { + const nv = arr[i]; + if (nv !== undefined) { + out[j] = nv; + bitmap |= 1 << i; + ++j; + } + ++i; + } + return { + type: INDEX_NODE, + bitmap: bitmap, + array: out, + }; + } + return { + type: ARRAY_NODE, + size: root.size - 1, + array: cloneAndSet(root.array, idx, n), + }; + } + return { + type: ARRAY_NODE, + size: root.size, + array: cloneAndSet(root.array, idx, n), + }; +} +/** + * @template K,V + * @type {WithoutFunction<IndexNode<K,V>,K,V>} + */ +function withoutIndex(root, shift, hash, key) { + const bit = bitpos(hash, shift); + if ((root.bitmap & bit) === 0) { + return root; // already empty + } + const idx = index(root.bitmap, bit); + const node = root.array[idx]; + // if the item is not an entry + if (node.type !== ENTRY) { + const n = without(node, shift + SHIFT, hash, key); + if (n === node) { + return root; // no changes + } + // if not undefined, the child node still has items, so update it + if (n !== undefined) { + return { + type: INDEX_NODE, + bitmap: root.bitmap, + array: cloneAndSet(root.array, idx, n), + }; + } + // otherwise the child node should be removed + // if it was the only child node, remove this node from the parent + if (root.bitmap === bit) { + return undefined; + } + // otherwise just remove the child node + return { + type: INDEX_NODE, + bitmap: root.bitmap ^ bit, + array: spliceOut(root.array, idx), + }; + } + // otherwise the item is an entry, remove it if the key matches + if (isEqual(key, node.k)) { + if (root.bitmap === bit) { + return undefined; + } + return { + type: INDEX_NODE, + bitmap: root.bitmap ^ bit, + array: spliceOut(root.array, idx), + }; + } + return root; +} +/** + * @template K,V + * @param {CollisionNode<K,V>} root + * @param {K} key + * @returns {undefined | Node<K,V>} + */ +function withoutCollision(root, key) { + const idx = collisionIndexOf(root, key); + // if the key not found, no changes + if (idx < 0) { + return root; + } + // otherwise the entry was found, remove it + // if it was the only entry in this node, remove the whole node + if (root.array.length === 1) { + return undefined; + } + // otherwise just remove the entry + return { + type: COLLISION_NODE, + hash: root.hash, + array: spliceOut(root.array, idx), + }; +} +/** + * @template K,V + * @param {undefined | Node<K,V>} root + * @param {(value:V,key:K)=>void} fn + * @returns {void} + */ +function forEach(root, fn) { + if (root === undefined) { + return; + } + const items = root.array; + const size = items.length; + for (let i = 0; i < size; i++) { + const item = items[i]; + if (item === undefined) { + continue; + } + if (item.type === ENTRY) { + fn(item.v, item.k); + continue; + } + forEach(item, fn); + } +} +/** + * Extra wrapper to keep track of Dict size and clean up the API + * @template K,V + */ +export default class Dict { + /** + * @template V + * @param {Record<string,V>} o + * @returns {Dict<string,V>} + */ + static fromObject(o) { + const keys = Object.keys(o); + /** @type Dict<string,V> */ + let m = Dict.new(); + for (let i = 0; i < keys.length; i++) { + const k = keys[i]; + m = m.set(k, o[k]); + } + return m; + } + /** + * @template K,V + * @param {Map<K,V>} o + * @returns {Dict<K,V>} + */ + static fromMap(o) { + /** @type Dict<K,V> */ + let m = Dict.new(); + o.forEach((v, k) => { + m = m.set(k, v); + }); + return m; + } + static new() { + return new Dict(undefined, 0); + } + /** + * @param {undefined | Node<K,V>} root + * @param {number} size + */ + constructor(root, size) { + this.root = root; + this.size = size; + } + /** + * @template NotFound + * @param {K} key + * @param {NotFound} notFound + * @returns {NotFound | V} + */ + get(key, notFound) { + if (this.root === undefined) { + return notFound; + } + const found = find(this.root, 0, getHash(key), key); + if (found === undefined) { + return notFound; + } + return found.v; + } + /** + * @param {K} key + * @param {V} val + * @returns {Dict<K,V>} + */ + set(key, val) { + const addedLeaf = { val: false }; + const root = this.root === undefined ? EMPTY : this.root; + const newRoot = assoc(root, 0, getHash(key), key, val, addedLeaf); + if (newRoot === this.root) { + return this; + } + return new Dict(newRoot, addedLeaf.val ? this.size + 1 : this.size); + } + /** + * @param {K} key + * @returns {Dict<K,V>} + */ + delete(key) { + if (this.root === undefined) { + return this; + } + const newRoot = without(this.root, 0, getHash(key), key); + if (newRoot === this.root) { + return this; + } + if (newRoot === undefined) { + return Dict.new(); + } + return new Dict(newRoot, this.size - 1); + } + /** + * @param {K} key + * @returns {boolean} + */ + has(key) { + if (this.root === undefined) { + return false; + } + return find(this.root, 0, getHash(key), key) !== undefined; + } + /** + * @returns {[K,V][]} + */ + entries() { + if (this.root === undefined) { + return []; + } + /** @type [K,V][] */ + const result = []; + this.forEach((v, k) => result.push([k, v])); + return result; + } + /** + * + * @param {(val:V,key:K)=>void} fn + */ + forEach(fn) { + forEach(this.root, fn); + } + hashCode() { + let h = 0; + this.forEach((v, k) => { + h = (h + hashMerge(getHash(v), getHash(k))) | 0; + }); + return h; + } + /** + * @param {unknown} o + * @returns {boolean} + */ + equals(o) { + if (!(o instanceof Dict) || this.size !== o.size) { + return false; + } + let equal = true; + this.forEach((v, k) => { + equal = equal && isEqual(o.get(k, !v), v); + }); + return equal; + } +} diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@@compile.erl new file mode 100644 index 0000000..543db88 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@@compile.erl @@ -0,0 +1,157 @@ +#!/usr/bin/env escript + +% TODO: Don't concurrently print warnings and errors +% TODO: Some tests + +-record(arguments, {lib = "./", out = "./", modules = []}). + +main(Args) -> + #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args), + IsElixirModule = fun(Module) -> + filename:extension(Module) =:= ".ex" + end, + {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules), + ok = configure_logging(), + ok = add_lib_to_erlang_path(Lib), + ok = filelib:ensure_dir([Out, $/]), + {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out), + {ElixirOk, _ElixirBeams} = case ErlangOk of + true -> compile_elixir(ElixirModules, Out); + false -> {false, []} + end, + case ErlangOk and ElixirOk of + true -> ok; + false -> erlang:halt(1) + end. + +compile_erlang(Modules, Out) -> + Workers = start_compiler_workers(Out), + ok = producer_loop(Modules, Workers), + collect_results({true, []}). + +collect_results(Acc = {Result, Beams}) -> + receive + {compiled, Beam} -> collect_results({Result, [Beam | Beams]}); + failed -> collect_results({false, Beams}) + after 0 -> Acc + end. + +producer_loop([], 0) -> + ok; +producer_loop([], Workers) -> + receive + {work_please, _} -> producer_loop([], Workers - 1) + end; +producer_loop([Module | Modules], Workers) -> + receive + {work_please, Worker} -> + erlang:send(Worker, {module, Module}), + producer_loop(Modules, Workers) + end. + +start_compiler_workers(Out) -> + Parent = self(), + NumSchedulers = erlang:system_info(schedulers), + SpawnWorker = fun(_) -> + erlang:spawn_link(fun() -> worker_loop(Parent, Out) end) + end, + lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)), + NumSchedulers. + +worker_loop(Parent, Out) -> + Options = [report_errors, report_warnings, debug_info, {outdir, Out}], + erlang:send(Parent, {work_please, self()}), + receive + {module, Module} -> + log({compiling, Module}), + case compile:file(Module, Options) of + {ok, ModuleName} -> + Beam = filename:join(Out, ModuleName) ++ ".beam", + Message = {compiled, Beam}, + log(Message), + erlang:send(Parent, Message); + error -> + log({failed, Module}), + erlang:send(Parent, failed) + end, + worker_loop(Parent, Out) + end. + +compile_elixir(Modules, Out) -> + Error = [ + "The program elixir was not found. Is it installed?", + $\n, + "Documentation for installing Elixir can be viewed here:", + $\n, + "https://elixir-lang.org/install.html" + ], + case Modules of + [] -> {true, []}; + _ -> + log({starting, "compiler.app"}), + ok = application:start(compiler), + log({starting, "elixir.app"}), + case application:start(elixir) of + ok -> do_compile_elixir(Modules, Out); + _ -> + io:put_chars(standard_error, [Error, $\n]), + {false, []} + end + end. + +do_compile_elixir(Modules, Out) -> + ModuleBins = lists:map(fun(Module) -> + log({compiling, Module}), + list_to_binary(Module) + end, Modules), + OutBin = list_to_binary(Out), + Options = [{dest, OutBin}], + % Silence "redefining module" warnings. + % Compiled modules in the build directory are added to the code path. + % These warnings result from recompiling loaded modules. + % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation. + 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]), + case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of + {ok, ModuleAtoms, _} -> + ToBeam = fun(ModuleAtom) -> + Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam", + log({compiled, Beam}), + Beam + end, + {true, lists:map(ToBeam, ModuleAtoms)}; + {error, Errors, _} -> + % Log all filenames associated with modules that failed to compile. + % Note: The compiler prints compilation errors upon encountering them. + ErrorFiles = lists:usort([File || {File, _, _} <- Errors]), + Log = fun(File) -> + log({failed, binary_to_list(File)}) + end, + lists:foreach(Log, ErrorFiles), + {false, []}; + _ -> {false, []} + end. + +add_lib_to_erlang_path(Lib) -> + code:add_paths(filelib:wildcard([Lib, "/*/ebin"])). + +parse(Args) -> + parse(Args, #arguments{}). + +parse([], Arguments) -> + Arguments; +parse(["--lib", Lib | Rest], Arguments) -> + parse(Rest, Arguments#arguments{lib = Lib}); +parse(["--out", Out | Rest], Arguments) -> + parse(Rest, Arguments#arguments{out = Out}); +parse([Module | Rest], Arguments = #arguments{modules = Modules}) -> + parse(Rest, Arguments#arguments{modules = [Module | Modules]}). + +configure_logging() -> + Enabled = os:getenv("GLEAM_LOG") /= false, + persistent_term:put(gleam_logging_enabled, Enabled). + +log(Term) -> + case persistent_term:get(gleam_logging_enabled) of + true -> erlang:display(Term), ok; + false -> ok + end. diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache Binary files differnew file mode 100644 index 0000000..1a9b6c1 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache_meta Binary files differnew file mode 100644 index 0000000..a935fcc --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.erl new file mode 100644 index 0000000..65bc3f6 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.erl @@ -0,0 +1,20 @@ +-module(gleam@base). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([encode64/2, decode64/1, url_encode64/2, url_decode64/1]). + +-spec encode64(bitstring(), boolean()) -> binary(). +encode64(Input, Padding) -> + gleam@bit_array:base64_encode(Input, Padding). + +-spec decode64(binary()) -> {ok, bitstring()} | {error, nil}. +decode64(Encoded) -> + gleam@bit_array:base64_decode(Encoded). + +-spec url_encode64(bitstring(), boolean()) -> binary(). +url_encode64(Input, Padding) -> + gleam@bit_array:base64_url_encode(Input, Padding). + +-spec url_decode64(binary()) -> {ok, bitstring()} | {error, nil}. +url_decode64(Encoded) -> + gleam@bit_array:base64_url_decode(Encoded). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache Binary files differnew file mode 100644 index 0000000..3b197e5 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_meta Binary files differnew file mode 100644 index 0000000..bfd3dd8 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.erl new file mode 100644 index 0000000..ba18dfa --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.erl @@ -0,0 +1,102 @@ +-module(gleam@bit_array). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([from_string/1, byte_size/1, slice/3, is_utf8/1, to_string/1, concat/1, append/2, base64_encode/2, base64_decode/1, base64_url_encode/2, base64_url_decode/1, base16_encode/1, base16_decode/1]). + +-spec from_string(binary()) -> bitstring(). +from_string(X) -> + gleam_stdlib:identity(X). + +-spec byte_size(bitstring()) -> integer(). +byte_size(X) -> + erlang:byte_size(X). + +-spec slice(bitstring(), integer(), integer()) -> {ok, bitstring()} | + {error, nil}. +slice(String, Position, Length) -> + gleam_stdlib:bit_array_slice(String, Position, Length). + +-spec do_is_utf8(bitstring()) -> boolean(). +do_is_utf8(Bits) -> + case Bits of + <<>> -> + true; + + <<_/utf8, Rest/binary>> -> + do_is_utf8(Rest); + + _ -> + false + end. + +-spec is_utf8(bitstring()) -> boolean(). +is_utf8(Bits) -> + do_is_utf8(Bits). + +-spec do_to_string(bitstring()) -> {ok, binary()} | {error, nil}. +do_to_string(Bits) -> + case is_utf8(Bits) of + true -> + {ok, gleam_stdlib:identity(Bits)}; + + false -> + {error, nil} + end. + +-spec to_string(bitstring()) -> {ok, binary()} | {error, nil}. +to_string(Bits) -> + do_to_string(Bits). + +-spec concat(list(bitstring())) -> bitstring(). +concat(Bit_arrays) -> + gleam_stdlib:bit_array_concat(Bit_arrays). + +-spec append(bitstring(), bitstring()) -> bitstring(). +append(First, Second) -> + gleam_stdlib:bit_array_concat([First, Second]). + +-spec base64_encode(bitstring(), boolean()) -> binary(). +base64_encode(Input, Padding) -> + Encoded = base64:encode(Input), + case Padding of + true -> + Encoded; + + false -> + gleam@string:replace(Encoded, <<"="/utf8>>, <<""/utf8>>) + end. + +-spec base64_decode(binary()) -> {ok, bitstring()} | {error, nil}. +base64_decode(Encoded) -> + Padded = case erlang:byte_size(gleam_stdlib:identity(Encoded)) rem 4 of + 0 -> + Encoded; + + N -> + gleam@string:append( + Encoded, + gleam@string:repeat(<<"="/utf8>>, 4 - N) + ) + end, + gleam_stdlib:base_decode64(Padded). + +-spec base64_url_encode(bitstring(), boolean()) -> binary(). +base64_url_encode(Input, Padding) -> + _pipe = base64_encode(Input, Padding), + _pipe@1 = gleam@string:replace(_pipe, <<"+"/utf8>>, <<"-"/utf8>>), + gleam@string:replace(_pipe@1, <<"/"/utf8>>, <<"_"/utf8>>). + +-spec base64_url_decode(binary()) -> {ok, bitstring()} | {error, nil}. +base64_url_decode(Encoded) -> + _pipe = Encoded, + _pipe@1 = gleam@string:replace(_pipe, <<"-"/utf8>>, <<"+"/utf8>>), + _pipe@2 = gleam@string:replace(_pipe@1, <<"_"/utf8>>, <<"/"/utf8>>), + base64_decode(_pipe@2). + +-spec base16_encode(bitstring()) -> binary(). +base16_encode(Input) -> + binary:encode_hex(Input). + +-spec base16_decode(binary()) -> {ok, bitstring()} | {error, nil}. +base16_decode(Input) -> + gleam_stdlib:base16_decode(Input). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache Binary files differnew file mode 100644 index 0000000..d992172 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache_meta Binary files differnew file mode 100644 index 0000000..bc4a1a5 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.erl new file mode 100644 index 0000000..284c6d4 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.erl @@ -0,0 +1,66 @@ +-module(gleam@bit_builder). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([new/0, prepend/2, append/2, prepend_builder/2, append_builder/2, prepend_string/2, append_string/2, concat/1, concat_bit_strings/1, from_string/1, from_string_builder/1, from_bit_string/1, to_bit_string/1, byte_size/1]). + +-spec new() -> gleam@bytes_builder:bytes_builder(). +new() -> + gleam@bytes_builder:new(). + +-spec prepend(gleam@bytes_builder:bytes_builder(), bitstring()) -> gleam@bytes_builder:bytes_builder(). +prepend(To, Prefix) -> + gleam@bytes_builder:prepend(To, Prefix). + +-spec append(gleam@bytes_builder:bytes_builder(), bitstring()) -> gleam@bytes_builder:bytes_builder(). +append(To, Suffix) -> + gleam@bytes_builder:append(To, Suffix). + +-spec prepend_builder( + gleam@bytes_builder:bytes_builder(), + gleam@bytes_builder:bytes_builder() +) -> gleam@bytes_builder:bytes_builder(). +prepend_builder(To, Prefix) -> + gleam@bytes_builder:prepend_builder(To, Prefix). + +-spec append_builder( + gleam@bytes_builder:bytes_builder(), + gleam@bytes_builder:bytes_builder() +) -> gleam@bytes_builder:bytes_builder(). +append_builder(First, Second) -> + gleam_stdlib:iodata_append(First, Second). + +-spec prepend_string(gleam@bytes_builder:bytes_builder(), binary()) -> gleam@bytes_builder:bytes_builder(). +prepend_string(To, Prefix) -> + gleam@bytes_builder:prepend_string(To, Prefix). + +-spec append_string(gleam@bytes_builder:bytes_builder(), binary()) -> gleam@bytes_builder:bytes_builder(). +append_string(To, Suffix) -> + gleam@bytes_builder:append_string(To, Suffix). + +-spec concat(list(gleam@bytes_builder:bytes_builder())) -> gleam@bytes_builder:bytes_builder(). +concat(Builders) -> + gleam_stdlib:identity(Builders). + +-spec concat_bit_strings(list(bitstring())) -> gleam@bytes_builder:bytes_builder(). +concat_bit_strings(Bits) -> + gleam_stdlib:identity(Bits). + +-spec from_string(binary()) -> gleam@bytes_builder:bytes_builder(). +from_string(String) -> + gleam_stdlib:wrap_list(String). + +-spec from_string_builder(gleam@string_builder:string_builder()) -> gleam@bytes_builder:bytes_builder(). +from_string_builder(Builder) -> + gleam_stdlib:wrap_list(Builder). + +-spec from_bit_string(bitstring()) -> gleam@bytes_builder:bytes_builder(). +from_bit_string(Bits) -> + gleam_stdlib:wrap_list(Bits). + +-spec to_bit_string(gleam@bytes_builder:bytes_builder()) -> bitstring(). +to_bit_string(Builder) -> + erlang:list_to_bitstring(Builder). + +-spec byte_size(gleam@bytes_builder:bytes_builder()) -> integer(). +byte_size(Builder) -> + erlang:iolist_size(Builder). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache Binary files differnew file mode 100644 index 0000000..60cf27e --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache_meta Binary files differnew file mode 100644 index 0000000..f9f229f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.erl new file mode 100644 index 0000000..7dabaa3 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.erl @@ -0,0 +1,33 @@ +-module(gleam@bit_string). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([from_string/1, byte_size/1, append/2, slice/3, is_utf8/1, to_string/1, concat/1]). + +-spec from_string(binary()) -> bitstring(). +from_string(X) -> + gleam_stdlib:identity(X). + +-spec byte_size(bitstring()) -> integer(). +byte_size(X) -> + erlang:byte_size(X). + +-spec append(bitstring(), bitstring()) -> bitstring(). +append(First, Second) -> + gleam@bit_array:append(First, Second). + +-spec slice(bitstring(), integer(), integer()) -> {ok, bitstring()} | + {error, nil}. +slice(String, Position, Length) -> + gleam_stdlib:bit_array_slice(String, Position, Length). + +-spec is_utf8(bitstring()) -> boolean(). +is_utf8(Bits) -> + gleam@bit_array:is_utf8(Bits). + +-spec to_string(bitstring()) -> {ok, binary()} | {error, nil}. +to_string(Bits) -> + gleam@bit_array:to_string(Bits). + +-spec concat(list(bitstring())) -> bitstring(). +concat(Bit_strings) -> + gleam_stdlib:bit_array_concat(Bit_strings). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache Binary files differnew file mode 100644 index 0000000..10a98f8 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_meta Binary files differnew file mode 100644 index 0000000..33ef24c --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.erl new file mode 100644 index 0000000..57078cb --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.erl @@ -0,0 +1,162 @@ +-module(gleam@bool). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export(['and'/2, 'or'/2, negate/1, nor/2, nand/2, exclusive_or/2, exclusive_nor/2, compare/2, max/2, min/2, to_int/1, to_string/1, guard/3, lazy_guard/3]). + +-spec 'and'(boolean(), boolean()) -> boolean(). +'and'(A, B) -> + A andalso B. + +-spec 'or'(boolean(), boolean()) -> boolean(). +'or'(A, B) -> + A orelse B. + +-spec negate(boolean()) -> boolean(). +negate(Bool) -> + case Bool of + true -> + false; + + false -> + true + end. + +-spec nor(boolean(), boolean()) -> boolean(). +nor(A, B) -> + case {A, B} of + {false, false} -> + true; + + {false, true} -> + false; + + {true, false} -> + false; + + {true, true} -> + false + end. + +-spec nand(boolean(), boolean()) -> boolean(). +nand(A, B) -> + case {A, B} of + {false, false} -> + true; + + {false, true} -> + true; + + {true, false} -> + true; + + {true, true} -> + false + end. + +-spec exclusive_or(boolean(), boolean()) -> boolean(). +exclusive_or(A, B) -> + case {A, B} of + {false, false} -> + false; + + {false, true} -> + true; + + {true, false} -> + true; + + {true, true} -> + false + end. + +-spec exclusive_nor(boolean(), boolean()) -> boolean(). +exclusive_nor(A, B) -> + case {A, B} of + {false, false} -> + true; + + {false, true} -> + false; + + {true, false} -> + false; + + {true, true} -> + true + end. + +-spec compare(boolean(), boolean()) -> gleam@order:order(). +compare(A, B) -> + case {A, B} of + {true, true} -> + eq; + + {true, false} -> + gt; + + {false, false} -> + eq; + + {false, true} -> + lt + end. + +-spec max(boolean(), boolean()) -> boolean(). +max(A, B) -> + case A of + true -> + true; + + false -> + B + end. + +-spec min(boolean(), boolean()) -> boolean(). +min(A, B) -> + case A of + false -> + false; + + true -> + B + end. + +-spec to_int(boolean()) -> integer(). +to_int(Bool) -> + case Bool of + false -> + 0; + + true -> + 1 + end. + +-spec to_string(boolean()) -> binary(). +to_string(Bool) -> + case Bool of + false -> + <<"False"/utf8>>; + + true -> + <<"True"/utf8>> + end. + +-spec guard(boolean(), EVP, fun(() -> EVP)) -> EVP. +guard(Requirement, Consequence, Alternative) -> + case Requirement of + true -> + Consequence; + + false -> + Alternative() + end. + +-spec lazy_guard(boolean(), fun(() -> EVQ), fun(() -> EVQ)) -> EVQ. +lazy_guard(Requirement, Consequence, Alternative) -> + case Requirement of + true -> + Consequence(); + + false -> + Alternative() + end. diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache Binary files differnew file mode 100644 index 0000000..8962cfc --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache_meta Binary files differnew file mode 100644 index 0000000..7b614aa --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.erl new file mode 100644 index 0000000..2f6dd93 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.erl @@ -0,0 +1,87 @@ +-module(gleam@bytes_builder). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([append_builder/2, prepend_builder/2, concat/1, new/0, from_string/1, prepend_string/2, append_string/2, from_string_builder/1, from_bit_array/1, prepend/2, append/2, concat_bit_arrays/1, to_bit_array/1, byte_size/1]). +-export_type([bytes_builder/0]). + +-opaque bytes_builder() :: {bytes, bitstring()} | + {text, gleam@string_builder:string_builder()} | + {many, list(bytes_builder())}. + +-spec append_builder(bytes_builder(), bytes_builder()) -> bytes_builder(). +append_builder(First, Second) -> + gleam_stdlib:iodata_append(First, Second). + +-spec prepend_builder(bytes_builder(), bytes_builder()) -> bytes_builder(). +prepend_builder(Second, First) -> + gleam_stdlib:iodata_append(First, Second). + +-spec concat(list(bytes_builder())) -> bytes_builder(). +concat(Builders) -> + gleam_stdlib:identity(Builders). + +-spec new() -> bytes_builder(). +new() -> + gleam_stdlib:identity([]). + +-spec from_string(binary()) -> bytes_builder(). +from_string(String) -> + gleam_stdlib:wrap_list(String). + +-spec prepend_string(bytes_builder(), binary()) -> bytes_builder(). +prepend_string(Second, First) -> + gleam_stdlib:iodata_append(gleam_stdlib:wrap_list(First), Second). + +-spec append_string(bytes_builder(), binary()) -> bytes_builder(). +append_string(First, Second) -> + gleam_stdlib:iodata_append(First, gleam_stdlib:wrap_list(Second)). + +-spec from_string_builder(gleam@string_builder:string_builder()) -> bytes_builder(). +from_string_builder(Builder) -> + gleam_stdlib:wrap_list(Builder). + +-spec from_bit_array(bitstring()) -> bytes_builder(). +from_bit_array(Bits) -> + gleam_stdlib:wrap_list(Bits). + +-spec prepend(bytes_builder(), bitstring()) -> bytes_builder(). +prepend(Second, First) -> + gleam_stdlib:iodata_append(gleam_stdlib:wrap_list(First), Second). + +-spec append(bytes_builder(), bitstring()) -> bytes_builder(). +append(First, Second) -> + gleam_stdlib:iodata_append(First, gleam_stdlib:wrap_list(Second)). + +-spec concat_bit_arrays(list(bitstring())) -> bytes_builder(). +concat_bit_arrays(Bits) -> + gleam_stdlib:identity(Bits). + +-spec to_list(list(list(bytes_builder())), list(bitstring())) -> list(bitstring()). +to_list(Stack, Acc) -> + case Stack of + [] -> + Acc; + + [[] | Remaining_stack] -> + to_list(Remaining_stack, Acc); + + [[{bytes, Bits} | Rest] | Remaining_stack@1] -> + to_list([Rest | Remaining_stack@1], [Bits | Acc]); + + [[{text, Builder} | Rest@1] | Remaining_stack@2] -> + Bits@1 = gleam_stdlib:identity( + gleam@string_builder:to_string(Builder) + ), + to_list([Rest@1 | Remaining_stack@2], [Bits@1 | Acc]); + + [[{many, Builders} | Rest@2] | Remaining_stack@3] -> + to_list([Builders, Rest@2 | Remaining_stack@3], Acc) + end. + +-spec to_bit_array(bytes_builder()) -> bitstring(). +to_bit_array(Builder) -> + erlang:list_to_bitstring(Builder). + +-spec byte_size(bytes_builder()) -> integer(). +byte_size(Builder) -> + erlang:iolist_size(Builder). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache Binary files differnew file mode 100644 index 0000000..acf4017 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_meta Binary files differnew file mode 100644 index 0000000..4410520 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.erl new file mode 100644 index 0000000..44b89ea --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.erl @@ -0,0 +1,97 @@ +-module(gleam@dict). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([size/1, to_list/1, from_list/1, has_key/2, new/0, get/2, insert/3, map_values/2, keys/1, values/1, filter/2, take/2, merge/2, delete/2, drop/2, update/3, fold/3]). +-export_type([dict/2]). + +-type dict(KS, KT) :: any() | {gleam_phantom, KS, KT}. + +-spec size(dict(any(), any())) -> integer(). +size(Dict) -> + maps:size(Dict). + +-spec to_list(dict(LC, LD)) -> list({LC, LD}). +to_list(Dict) -> + maps:to_list(Dict). + +-spec from_list(list({LM, LN})) -> dict(LM, LN). +from_list(List) -> + maps:from_list(List). + +-spec has_key(dict(LW, any()), LW) -> boolean(). +has_key(Dict, Key) -> + maps:is_key(Key, Dict). + +-spec new() -> dict(any(), any()). +new() -> + maps:new(). + +-spec get(dict(MM, MN), MM) -> {ok, MN} | {error, nil}. +get(From, Get) -> + gleam_stdlib:map_get(From, Get). + +-spec insert(dict(MY, MZ), MY, MZ) -> dict(MY, MZ). +insert(Dict, Key, Value) -> + maps:put(Key, Value, Dict). + +-spec map_values(dict(NK, NL), fun((NK, NL) -> NO)) -> dict(NK, NO). +map_values(Dict, Fun) -> + maps:map(Fun, Dict). + +-spec keys(dict(NY, any())) -> list(NY). +keys(Dict) -> + maps:keys(Dict). + +-spec values(dict(any(), OJ)) -> list(OJ). +values(Dict) -> + maps:values(Dict). + +-spec filter(dict(OS, OT), fun((OS, OT) -> boolean())) -> dict(OS, OT). +filter(Dict, Predicate) -> + maps:filter(Predicate, Dict). + +-spec take(dict(PE, PF), list(PE)) -> dict(PE, PF). +take(Dict, Desired_keys) -> + maps:with(Desired_keys, Dict). + +-spec merge(dict(PS, PT), dict(PS, PT)) -> dict(PS, PT). +merge(Dict, New_entries) -> + maps:merge(Dict, New_entries). + +-spec delete(dict(QI, QJ), QI) -> dict(QI, QJ). +delete(Dict, Key) -> + maps:remove(Key, Dict). + +-spec drop(dict(QU, QV), list(QU)) -> dict(QU, QV). +drop(Dict, Disallowed_keys) -> + case Disallowed_keys of + [] -> + Dict; + + [X | Xs] -> + drop(delete(Dict, X), Xs) + end. + +-spec update(dict(RB, RC), RB, fun((gleam@option:option(RC)) -> RC)) -> dict(RB, RC). +update(Dict, Key, Fun) -> + _pipe = Dict, + _pipe@1 = get(_pipe, Key), + _pipe@2 = gleam@option:from_result(_pipe@1), + _pipe@3 = Fun(_pipe@2), + insert(Dict, Key, _pipe@3). + +-spec do_fold(list({RI, RJ}), RL, fun((RL, RI, RJ) -> RL)) -> RL. +do_fold(List, Initial, Fun) -> + case List of + [] -> + Initial; + + [{K, V} | Rest] -> + do_fold(Rest, Fun(Initial, K, V), Fun) + end. + +-spec fold(dict(RM, RN), RQ, fun((RQ, RM, RN) -> RQ)) -> RQ. +fold(Dict, Initial, Fun) -> + _pipe = Dict, + _pipe@1 = to_list(_pipe), + do_fold(_pipe@1, Initial, Fun). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache Binary files differnew file mode 100644 index 0000000..f10ed2a --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_meta Binary files differnew file mode 100644 index 0000000..9ae5074 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.erl new file mode 100644 index 0000000..2c6016f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.erl @@ -0,0 +1,808 @@ +-module(gleam@dynamic). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([from/1, unsafe_coerce/1, dynamic/1, bit_array/1, bit_string/1, classify/1, int/1, float/1, bool/1, shallow_list/1, optional/1, any/1, decode1/2, result/2, list/1, string/1, field/2, optional_field/2, element/2, tuple2/2, tuple3/3, tuple4/4, tuple5/5, tuple6/6, dict/2, map/2, decode2/3, decode3/4, decode4/5, decode5/6, decode6/7, decode7/8, decode8/9, decode9/10]). +-export_type([dynamic_/0, decode_error/0, unknown_tuple/0]). + +-type dynamic_() :: any(). + +-type decode_error() :: {decode_error, binary(), binary(), list(binary())}. + +-type unknown_tuple() :: any(). + +-spec from(any()) -> dynamic_(). +from(A) -> + gleam_stdlib:identity(A). + +-spec unsafe_coerce(dynamic_()) -> any(). +unsafe_coerce(A) -> + gleam_stdlib:identity(A). + +-spec dynamic(dynamic_()) -> {ok, dynamic_()} | {error, list(decode_error())}. +dynamic(Value) -> + {ok, Value}. + +-spec bit_array(dynamic_()) -> {ok, bitstring()} | {error, list(decode_error())}. +bit_array(Data) -> + gleam_stdlib:decode_bit_array(Data). + +-spec bit_string(dynamic_()) -> {ok, bitstring()} | + {error, list(decode_error())}. +bit_string(Data) -> + bit_array(Data). + +-spec put_expected(decode_error(), binary()) -> decode_error(). +put_expected(Error, Expected) -> + erlang:setelement(2, Error, Expected). + +-spec classify(dynamic_()) -> binary(). +classify(Data) -> + gleam_stdlib:classify_dynamic(Data). + +-spec int(dynamic_()) -> {ok, integer()} | {error, list(decode_error())}. +int(Data) -> + gleam_stdlib:decode_int(Data). + +-spec float(dynamic_()) -> {ok, float()} | {error, list(decode_error())}. +float(Data) -> + gleam_stdlib:decode_float(Data). + +-spec bool(dynamic_()) -> {ok, boolean()} | {error, list(decode_error())}. +bool(Data) -> + gleam_stdlib:decode_bool(Data). + +-spec shallow_list(dynamic_()) -> {ok, list(dynamic_())} | + {error, list(decode_error())}. +shallow_list(Value) -> + gleam_stdlib:decode_list(Value). + +-spec optional(fun((dynamic_()) -> {ok, DGM} | {error, list(decode_error())})) -> fun((dynamic_()) -> {ok, + gleam@option:option(DGM)} | + {error, list(decode_error())}). +optional(Decode) -> + fun(Value) -> gleam_stdlib:decode_option(Value, Decode) end. + +-spec at_least_decode_tuple_error(integer(), dynamic_()) -> {ok, any()} | + {error, list(decode_error())}. +at_least_decode_tuple_error(Size, Data) -> + S = case Size of + 1 -> + <<""/utf8>>; + + _ -> + <<"s"/utf8>> + end, + Error = begin + _pipe = [<<"Tuple of at least "/utf8>>, + gleam@int:to_string(Size), + <<" element"/utf8>>, + S], + _pipe@1 = gleam@string_builder:from_strings(_pipe), + _pipe@2 = gleam@string_builder:to_string(_pipe@1), + {decode_error, _pipe@2, classify(Data), []} + end, + {error, [Error]}. + +-spec any(list(fun((dynamic_()) -> {ok, DKT} | {error, list(decode_error())}))) -> fun((dynamic_()) -> {ok, + DKT} | + {error, list(decode_error())}). +any(Decoders) -> + fun(Data) -> case Decoders of + [] -> + {error, + [{decode_error, <<"another type"/utf8>>, classify(Data), []}]}; + + [Decoder | Decoders@1] -> + case Decoder(Data) of + {ok, Decoded} -> + {ok, Decoded}; + + {error, _} -> + (any(Decoders@1))(Data) + end + end end. + +-spec all_errors({ok, any()} | {error, list(decode_error())}) -> list(decode_error()). +all_errors(Result) -> + case Result of + {ok, _} -> + []; + + {error, Errors} -> + Errors + end. + +-spec decode1( + fun((DKX) -> DKY), + fun((dynamic_()) -> {ok, DKX} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, DKY} | {error, list(decode_error())}). +decode1(Constructor, T1) -> + fun(Value) -> case T1(Value) of + {ok, A} -> + {ok, Constructor(A)}; + + A@1 -> + {error, all_errors(A@1)} + end end. + +-spec push_path(decode_error(), any()) -> decode_error(). +push_path(Error, Name) -> + Name@1 = from(Name), + Decoder = any( + [fun string/1, + fun(X) -> gleam@result:map(int(X), fun gleam@int:to_string/1) end] + ), + Name@3 = case Decoder(Name@1) of + {ok, Name@2} -> + Name@2; + + {error, _} -> + _pipe = [<<"<"/utf8>>, classify(Name@1), <<">"/utf8>>], + _pipe@1 = gleam@string_builder:from_strings(_pipe), + gleam@string_builder:to_string(_pipe@1) + end, + erlang:setelement(4, Error, [Name@3 | erlang:element(4, Error)]). + +-spec result( + fun((dynamic_()) -> {ok, DGA} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DGC} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, {ok, DGA} | {error, DGC}} | + {error, list(decode_error())}). +result(Decode_ok, Decode_error) -> + fun(Value) -> + gleam@result:'try'( + gleam_stdlib:decode_result(Value), + fun(Inner_result) -> case Inner_result of + {ok, Raw} -> + gleam@result:'try'( + begin + _pipe = Decode_ok(Raw), + map_errors( + _pipe, + fun(_capture) -> + push_path(_capture, <<"ok"/utf8>>) + end + ) + end, + fun(Value@1) -> {ok, {ok, Value@1}} end + ); + + {error, Raw@1} -> + gleam@result:'try'( + begin + _pipe@1 = Decode_error(Raw@1), + map_errors( + _pipe@1, + fun(_capture@1) -> + push_path(_capture@1, <<"error"/utf8>>) + end + ) + end, + fun(Value@2) -> {ok, {error, Value@2}} end + ) + end end + ) + end. + +-spec list(fun((dynamic_()) -> {ok, DGH} | {error, list(decode_error())})) -> fun((dynamic_()) -> {ok, + list(DGH)} | + {error, list(decode_error())}). +list(Decoder_type) -> + fun(Dynamic) -> + gleam@result:'try'(shallow_list(Dynamic), fun(List) -> _pipe = List, + _pipe@1 = gleam@list:try_map(_pipe, Decoder_type), + map_errors( + _pipe@1, + fun(_capture) -> push_path(_capture, <<"*"/utf8>>) end + ) end) + end. + +-spec map_errors( + {ok, DEV} | {error, list(decode_error())}, + fun((decode_error()) -> decode_error()) +) -> {ok, DEV} | {error, list(decode_error())}. +map_errors(Result, F) -> + gleam@result:map_error( + Result, + fun(_capture) -> gleam@list:map(_capture, F) end + ). + +-spec decode_string(dynamic_()) -> {ok, binary()} | + {error, list(decode_error())}. +decode_string(Data) -> + _pipe = bit_array(Data), + _pipe@1 = map_errors( + _pipe, + fun(_capture) -> put_expected(_capture, <<"String"/utf8>>) end + ), + gleam@result:'try'( + _pipe@1, + fun(Raw) -> case gleam@bit_array:to_string(Raw) of + {ok, String} -> + {ok, String}; + + {error, nil} -> + {error, + [{decode_error, + <<"String"/utf8>>, + <<"BitArray"/utf8>>, + []}]} + end end + ). + +-spec string(dynamic_()) -> {ok, binary()} | {error, list(decode_error())}. +string(Data) -> + decode_string(Data). + +-spec field( + any(), + fun((dynamic_()) -> {ok, DGW} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, DGW} | {error, list(decode_error())}). +field(Name, Inner_type) -> + fun(Value) -> + Missing_field_error = {decode_error, + <<"field"/utf8>>, + <<"nothing"/utf8>>, + []}, + gleam@result:'try'( + gleam_stdlib:decode_field(Value, Name), + fun(Maybe_inner) -> _pipe = Maybe_inner, + _pipe@1 = gleam@option:to_result(_pipe, [Missing_field_error]), + _pipe@2 = gleam@result:'try'(_pipe@1, Inner_type), + map_errors( + _pipe@2, + fun(_capture) -> push_path(_capture, Name) end + ) end + ) + end. + +-spec optional_field( + any(), + fun((dynamic_()) -> {ok, DHA} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, gleam@option:option(DHA)} | + {error, list(decode_error())}). +optional_field(Name, Inner_type) -> + fun(Value) -> + gleam@result:'try'( + gleam_stdlib:decode_field(Value, Name), + fun(Maybe_inner) -> case Maybe_inner of + none -> + {ok, none}; + + {some, Dynamic_inner} -> + _pipe = Dynamic_inner, + _pipe@1 = gleam_stdlib:decode_option(_pipe, Inner_type), + map_errors( + _pipe@1, + fun(_capture) -> push_path(_capture, Name) end + ) + end end + ) + end. + +-spec element( + integer(), + fun((dynamic_()) -> {ok, DHI} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, DHI} | {error, list(decode_error())}). +element(Index, Inner_type) -> + fun(Data) -> + gleam@result:'try'( + gleam_stdlib:decode_tuple(Data), + fun(Tuple) -> + Size = gleam_stdlib:size_of_tuple(Tuple), + gleam@result:'try'(case Index >= 0 of + true -> + case Index < Size of + true -> + gleam_stdlib:tuple_get(Tuple, Index); + + false -> + at_least_decode_tuple_error(Index + 1, Data) + end; + + false -> + case gleam@int:absolute_value(Index) =< Size of + true -> + gleam_stdlib:tuple_get(Tuple, Size + Index); + + false -> + at_least_decode_tuple_error( + gleam@int:absolute_value(Index), + Data + ) + end + end, fun(Data@1) -> _pipe = Inner_type(Data@1), + map_errors( + _pipe, + fun(_capture) -> push_path(_capture, Index) end + ) end) + end + ) + end. + +-spec tuple_errors({ok, any()} | {error, list(decode_error())}, binary()) -> list(decode_error()). +tuple_errors(Result, Name) -> + case Result of + {ok, _} -> + []; + + {error, Errors} -> + gleam@list:map( + Errors, + fun(_capture) -> push_path(_capture, Name) end + ) + end. + +-spec tuple2( + fun((dynamic_()) -> {ok, DII} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DIK} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, {DII, DIK}} | {error, list(decode_error())}). +tuple2(Decode1, Decode2) -> + fun(Value) -> + gleam@result:'try'( + gleam_stdlib:decode_tuple2(Value), + fun(_use0) -> + {A, B} = _use0, + case {Decode1(A), Decode2(B)} of + {{ok, A@1}, {ok, B@1}} -> + {ok, {A@1, B@1}}; + + {A@2, B@2} -> + _pipe = tuple_errors(A@2, <<"0"/utf8>>), + _pipe@1 = gleam@list:append( + _pipe, + tuple_errors(B@2, <<"1"/utf8>>) + ), + {error, _pipe@1} + end + end + ) + end. + +-spec tuple3( + fun((dynamic_()) -> {ok, DIN} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DIP} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DIR} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, {DIN, DIP, DIR}} | {error, list(decode_error())}). +tuple3(Decode1, Decode2, Decode3) -> + fun(Value) -> + gleam@result:'try'( + gleam_stdlib:decode_tuple3(Value), + fun(_use0) -> + {A, B, C} = _use0, + case {Decode1(A), Decode2(B), Decode3(C)} of + {{ok, A@1}, {ok, B@1}, {ok, C@1}} -> + {ok, {A@1, B@1, C@1}}; + + {A@2, B@2, C@2} -> + _pipe = tuple_errors(A@2, <<"0"/utf8>>), + _pipe@1 = gleam@list:append( + _pipe, + tuple_errors(B@2, <<"1"/utf8>>) + ), + _pipe@2 = gleam@list:append( + _pipe@1, + tuple_errors(C@2, <<"2"/utf8>>) + ), + {error, _pipe@2} + end + end + ) + end. + +-spec tuple4( + fun((dynamic_()) -> {ok, DIU} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DIW} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DIY} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DJA} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, {DIU, DIW, DIY, DJA}} | + {error, list(decode_error())}). +tuple4(Decode1, Decode2, Decode3, Decode4) -> + fun(Value) -> + gleam@result:'try'( + gleam_stdlib:decode_tuple4(Value), + fun(_use0) -> + {A, B, C, D} = _use0, + case {Decode1(A), Decode2(B), Decode3(C), Decode4(D)} of + {{ok, A@1}, {ok, B@1}, {ok, C@1}, {ok, D@1}} -> + {ok, {A@1, B@1, C@1, D@1}}; + + {A@2, B@2, C@2, D@2} -> + _pipe = tuple_errors(A@2, <<"0"/utf8>>), + _pipe@1 = gleam@list:append( + _pipe, + tuple_errors(B@2, <<"1"/utf8>>) + ), + _pipe@2 = gleam@list:append( + _pipe@1, + tuple_errors(C@2, <<"2"/utf8>>) + ), + _pipe@3 = gleam@list:append( + _pipe@2, + tuple_errors(D@2, <<"3"/utf8>>) + ), + {error, _pipe@3} + end + end + ) + end. + +-spec tuple5( + fun((dynamic_()) -> {ok, DJD} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DJF} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DJH} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DJJ} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DJL} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, {DJD, DJF, DJH, DJJ, DJL}} | + {error, list(decode_error())}). +tuple5(Decode1, Decode2, Decode3, Decode4, Decode5) -> + fun(Value) -> + gleam@result:'try'( + gleam_stdlib:decode_tuple5(Value), + fun(_use0) -> + {A, B, C, D, E} = _use0, + case {Decode1(A), + Decode2(B), + Decode3(C), + Decode4(D), + Decode5(E)} of + {{ok, A@1}, {ok, B@1}, {ok, C@1}, {ok, D@1}, {ok, E@1}} -> + {ok, {A@1, B@1, C@1, D@1, E@1}}; + + {A@2, B@2, C@2, D@2, E@2} -> + _pipe = tuple_errors(A@2, <<"0"/utf8>>), + _pipe@1 = gleam@list:append( + _pipe, + tuple_errors(B@2, <<"1"/utf8>>) + ), + _pipe@2 = gleam@list:append( + _pipe@1, + tuple_errors(C@2, <<"2"/utf8>>) + ), + _pipe@3 = gleam@list:append( + _pipe@2, + tuple_errors(D@2, <<"3"/utf8>>) + ), + _pipe@4 = gleam@list:append( + _pipe@3, + tuple_errors(E@2, <<"4"/utf8>>) + ), + {error, _pipe@4} + end + end + ) + end. + +-spec tuple6( + fun((dynamic_()) -> {ok, DJO} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DJQ} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DJS} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DJU} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DJW} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DJY} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, {DJO, DJQ, DJS, DJU, DJW, DJY}} | + {error, list(decode_error())}). +tuple6(Decode1, Decode2, Decode3, Decode4, Decode5, Decode6) -> + fun(Value) -> + gleam@result:'try'( + gleam_stdlib:decode_tuple6(Value), + fun(_use0) -> + {A, B, C, D, E, F} = _use0, + case {Decode1(A), + Decode2(B), + Decode3(C), + Decode4(D), + Decode5(E), + Decode6(F)} of + {{ok, A@1}, + {ok, B@1}, + {ok, C@1}, + {ok, D@1}, + {ok, E@1}, + {ok, F@1}} -> + {ok, {A@1, B@1, C@1, D@1, E@1, F@1}}; + + {A@2, B@2, C@2, D@2, E@2, F@2} -> + _pipe = tuple_errors(A@2, <<"0"/utf8>>), + _pipe@1 = gleam@list:append( + _pipe, + tuple_errors(B@2, <<"1"/utf8>>) + ), + _pipe@2 = gleam@list:append( + _pipe@1, + tuple_errors(C@2, <<"2"/utf8>>) + ), + _pipe@3 = gleam@list:append( + _pipe@2, + tuple_errors(D@2, <<"3"/utf8>>) + ), + _pipe@4 = gleam@list:append( + _pipe@3, + tuple_errors(E@2, <<"4"/utf8>>) + ), + _pipe@5 = gleam@list:append( + _pipe@4, + tuple_errors(F@2, <<"5"/utf8>>) + ), + {error, _pipe@5} + end + end + ) + end. + +-spec dict( + fun((dynamic_()) -> {ok, DKB} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DKD} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, gleam@dict:dict(DKB, DKD)} | + {error, list(decode_error())}). +dict(Key_type, Value_type) -> + fun(Value) -> + gleam@result:'try'( + gleam_stdlib:decode_map(Value), + fun(Map) -> + gleam@result:'try'( + begin + _pipe = Map, + _pipe@1 = gleam@dict:to_list(_pipe), + gleam@list:try_map( + _pipe@1, + fun(Pair) -> + {K, V} = Pair, + gleam@result:'try'( + begin + _pipe@2 = Key_type(K), + map_errors( + _pipe@2, + fun(_capture) -> + push_path( + _capture, + <<"keys"/utf8>> + ) + end + ) + end, + fun(K@1) -> + gleam@result:'try'( + begin + _pipe@3 = Value_type(V), + map_errors( + _pipe@3, + fun(_capture@1) -> + push_path( + _capture@1, + <<"values"/utf8>> + ) + end + ) + end, + fun(V@1) -> {ok, {K@1, V@1}} end + ) + end + ) + end + ) + end, + fun(Pairs) -> {ok, gleam@dict:from_list(Pairs)} end + ) + end + ) + end. + +-spec map( + fun((dynamic_()) -> {ok, DKI} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DKK} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, gleam@dict:dict(DKI, DKK)} | + {error, list(decode_error())}). +map(Key_type, Value_type) -> + dict(Key_type, Value_type). + +-spec decode2( + fun((DLB, DLC) -> DLD), + fun((dynamic_()) -> {ok, DLB} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DLC} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, DLD} | {error, list(decode_error())}). +decode2(Constructor, T1, T2) -> + fun(Value) -> case {T1(Value), T2(Value)} of + {{ok, A}, {ok, B}} -> + {ok, Constructor(A, B)}; + + {A@1, B@1} -> + {error, gleam@list:concat([all_errors(A@1), all_errors(B@1)])} + end end. + +-spec decode3( + fun((DLH, DLI, DLJ) -> DLK), + fun((dynamic_()) -> {ok, DLH} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DLI} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DLJ} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, DLK} | {error, list(decode_error())}). +decode3(Constructor, T1, T2, T3) -> + fun(Value) -> case {T1(Value), T2(Value), T3(Value)} of + {{ok, A}, {ok, B}, {ok, C}} -> + {ok, Constructor(A, B, C)}; + + {A@1, B@1, C@1} -> + {error, + gleam@list:concat( + [all_errors(A@1), all_errors(B@1), all_errors(C@1)] + )} + end end. + +-spec decode4( + fun((DLP, DLQ, DLR, DLS) -> DLT), + fun((dynamic_()) -> {ok, DLP} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DLQ} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DLR} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DLS} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, DLT} | {error, list(decode_error())}). +decode4(Constructor, T1, T2, T3, T4) -> + fun(X) -> case {T1(X), T2(X), T3(X), T4(X)} of + {{ok, A}, {ok, B}, {ok, C}, {ok, D}} -> + {ok, Constructor(A, B, C, D)}; + + {A@1, B@1, C@1, D@1} -> + {error, + gleam@list:concat( + [all_errors(A@1), + all_errors(B@1), + all_errors(C@1), + all_errors(D@1)] + )} + end end. + +-spec decode5( + fun((DLZ, DMA, DMB, DMC, DMD) -> DME), + fun((dynamic_()) -> {ok, DLZ} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DMA} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DMB} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DMC} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DMD} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, DME} | {error, list(decode_error())}). +decode5(Constructor, T1, T2, T3, T4, T5) -> + fun(X) -> case {T1(X), T2(X), T3(X), T4(X), T5(X)} of + {{ok, A}, {ok, B}, {ok, C}, {ok, D}, {ok, E}} -> + {ok, Constructor(A, B, C, D, E)}; + + {A@1, B@1, C@1, D@1, E@1} -> + {error, + gleam@list:concat( + [all_errors(A@1), + all_errors(B@1), + all_errors(C@1), + all_errors(D@1), + all_errors(E@1)] + )} + end end. + +-spec decode6( + fun((DML, DMM, DMN, DMO, DMP, DMQ) -> DMR), + fun((dynamic_()) -> {ok, DML} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DMM} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DMN} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DMO} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DMP} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DMQ} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, DMR} | {error, list(decode_error())}). +decode6(Constructor, T1, T2, T3, T4, T5, T6) -> + fun(X) -> case {T1(X), T2(X), T3(X), T4(X), T5(X), T6(X)} of + {{ok, A}, {ok, B}, {ok, C}, {ok, D}, {ok, E}, {ok, F}} -> + {ok, Constructor(A, B, C, D, E, F)}; + + {A@1, B@1, C@1, D@1, E@1, F@1} -> + {error, + gleam@list:concat( + [all_errors(A@1), + all_errors(B@1), + all_errors(C@1), + all_errors(D@1), + all_errors(E@1), + all_errors(F@1)] + )} + end end. + +-spec decode7( + fun((DMZ, DNA, DNB, DNC, DND, DNE, DNF) -> DNG), + fun((dynamic_()) -> {ok, DMZ} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DNA} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DNB} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DNC} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DND} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DNE} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DNF} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, DNG} | {error, list(decode_error())}). +decode7(Constructor, T1, T2, T3, T4, T5, T6, T7) -> + fun(X) -> case {T1(X), T2(X), T3(X), T4(X), T5(X), T6(X), T7(X)} of + {{ok, A}, {ok, B}, {ok, C}, {ok, D}, {ok, E}, {ok, F}, {ok, G}} -> + {ok, Constructor(A, B, C, D, E, F, G)}; + + {A@1, B@1, C@1, D@1, E@1, F@1, G@1} -> + {error, + gleam@list:concat( + [all_errors(A@1), + all_errors(B@1), + all_errors(C@1), + all_errors(D@1), + all_errors(E@1), + all_errors(F@1), + all_errors(G@1)] + )} + end end. + +-spec decode8( + fun((DNP, DNQ, DNR, DNS, DNT, DNU, DNV, DNW) -> DNX), + fun((dynamic_()) -> {ok, DNP} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DNQ} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DNR} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DNS} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DNT} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DNU} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DNV} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DNW} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, DNX} | {error, list(decode_error())}). +decode8(Constructor, T1, T2, T3, T4, T5, T6, T7, T8) -> + fun(X) -> case {T1(X), T2(X), T3(X), T4(X), T5(X), T6(X), T7(X), T8(X)} of + {{ok, A}, + {ok, B}, + {ok, C}, + {ok, D}, + {ok, E}, + {ok, F}, + {ok, G}, + {ok, H}} -> + {ok, Constructor(A, B, C, D, E, F, G, H)}; + + {A@1, B@1, C@1, D@1, E@1, F@1, G@1, H@1} -> + {error, + gleam@list:concat( + [all_errors(A@1), + all_errors(B@1), + all_errors(C@1), + all_errors(D@1), + all_errors(E@1), + all_errors(F@1), + all_errors(G@1), + all_errors(H@1)] + )} + end end. + +-spec decode9( + fun((DOH, DOI, DOJ, DOK, DOL, DOM, DON, DOO, DOP) -> DOQ), + fun((dynamic_()) -> {ok, DOH} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DOI} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DOJ} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DOK} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DOL} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DOM} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DON} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DOO} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DOP} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, DOQ} | {error, list(decode_error())}). +decode9(Constructor, T1, T2, T3, T4, T5, T6, T7, T8, T9) -> + fun(X) -> + case {T1(X), T2(X), T3(X), T4(X), T5(X), T6(X), T7(X), T8(X), T9(X)} of + {{ok, A}, + {ok, B}, + {ok, C}, + {ok, D}, + {ok, E}, + {ok, F}, + {ok, G}, + {ok, H}, + {ok, I}} -> + {ok, Constructor(A, B, C, D, E, F, G, H, I)}; + + {A@1, B@1, C@1, D@1, E@1, F@1, G@1, H@1, I@1} -> + {error, + gleam@list:concat( + [all_errors(A@1), + all_errors(B@1), + all_errors(C@1), + all_errors(D@1), + all_errors(E@1), + all_errors(F@1), + all_errors(G@1), + all_errors(H@1), + all_errors(I@1)] + )} + end + end. diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache Binary files differnew file mode 100644 index 0000000..677362b --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache_meta Binary files differnew file mode 100644 index 0000000..f10b39f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.erl new file mode 100644 index 0000000..33b3d4a --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.erl @@ -0,0 +1,181 @@ +-module(gleam@float). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([parse/1, to_string/1, compare/2, min/2, max/2, clamp/3, ceiling/1, floor/1, round/1, truncate/1, absolute_value/1, loosely_compare/3, loosely_equals/3, power/2, square_root/1, negate/1, sum/1, product/1, random/2, divide/2, add/2, multiply/2, subtract/2]). + +-spec parse(binary()) -> {ok, float()} | {error, nil}. +parse(String) -> + gleam_stdlib:parse_float(String). + +-spec to_string(float()) -> binary(). +to_string(X) -> + gleam_stdlib:float_to_string(X). + +-spec compare(float(), float()) -> gleam@order:order(). +compare(A, B) -> + case A =:= B of + true -> + eq; + + false -> + case A < B of + true -> + lt; + + false -> + gt + end + end. + +-spec min(float(), float()) -> float(). +min(A, B) -> + case A < B of + true -> + A; + + false -> + B + end. + +-spec max(float(), float()) -> float(). +max(A, B) -> + case A > B of + true -> + A; + + false -> + B + end. + +-spec clamp(float(), float(), float()) -> float(). +clamp(X, Min_bound, Max_bound) -> + _pipe = X, + _pipe@1 = min(_pipe, Max_bound), + max(_pipe@1, Min_bound). + +-spec ceiling(float()) -> float(). +ceiling(X) -> + math:ceil(X). + +-spec floor(float()) -> float(). +floor(X) -> + math:floor(X). + +-spec round(float()) -> integer(). +round(X) -> + erlang:round(X). + +-spec truncate(float()) -> integer(). +truncate(X) -> + erlang:trunc(X). + +-spec absolute_value(float()) -> float(). +absolute_value(X) -> + case X >= +0.0 of + true -> + X; + + _ -> + +0.0 - X + end. + +-spec loosely_compare(float(), float(), float()) -> gleam@order:order(). +loosely_compare(A, B, Tolerance) -> + Difference = absolute_value(A - B), + case Difference =< Tolerance of + true -> + eq; + + false -> + compare(A, B) + end. + +-spec loosely_equals(float(), float(), float()) -> boolean(). +loosely_equals(A, B, Tolerance) -> + Difference = absolute_value(A - B), + Difference =< Tolerance. + +-spec power(float(), float()) -> {ok, float()} | {error, nil}. +power(Base, Exponent) -> + Fractional = (ceiling(Exponent) - Exponent) > +0.0, + case ((Base < +0.0) andalso Fractional) orelse ((Base =:= +0.0) andalso (Exponent + < +0.0)) of + true -> + {error, nil}; + + false -> + {ok, math:pow(Base, Exponent)} + end. + +-spec square_root(float()) -> {ok, float()} | {error, nil}. +square_root(X) -> + power(X, 0.5). + +-spec negate(float()) -> float(). +negate(X) -> + -1.0 * X. + +-spec do_sum(list(float()), float()) -> float(). +do_sum(Numbers, Initial) -> + case Numbers of + [] -> + Initial; + + [X | Rest] -> + do_sum(Rest, X + Initial) + end. + +-spec sum(list(float())) -> float(). +sum(Numbers) -> + _pipe = Numbers, + do_sum(_pipe, +0.0). + +-spec do_product(list(float()), float()) -> float(). +do_product(Numbers, Initial) -> + case Numbers of + [] -> + Initial; + + [X | Rest] -> + do_product(Rest, X * Initial) + end. + +-spec product(list(float())) -> float(). +product(Numbers) -> + case Numbers of + [] -> + 1.0; + + _ -> + do_product(Numbers, 1.0) + end. + +-spec random(float(), float()) -> float(). +random(Min, Max) -> + (rand:uniform() * (Max - Min)) + Min. + +-spec divide(float(), float()) -> {ok, float()} | {error, nil}. +divide(A, B) -> + case B of + +0.0 -> + {error, nil}; + + B@1 -> + {ok, case B@1 of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> A / Gleam@denominator + end} + end. + +-spec add(float(), float()) -> float(). +add(A, B) -> + A + B. + +-spec multiply(float(), float()) -> float(). +multiply(A, B) -> + A * B. + +-spec subtract(float(), float()) -> float(). +subtract(A, B) -> + A - B. diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache Binary files differnew file mode 100644 index 0000000..2f3e554 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache_meta Binary files differnew file mode 100644 index 0000000..ffb4624 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.erl new file mode 100644 index 0000000..75f142f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.erl @@ -0,0 +1,67 @@ +-module(gleam@function). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([compose/2, curry2/1, curry3/1, curry4/1, curry5/1, curry6/1, flip/1, identity/1, constant/1, tap/2, apply1/2, apply2/3, apply3/4]). + +-spec compose(fun((ENH) -> ENI), fun((ENI) -> ENJ)) -> fun((ENH) -> ENJ). +compose(Fun1, Fun2) -> + fun(A) -> Fun2(Fun1(A)) end. + +-spec curry2(fun((ENK, ENL) -> ENM)) -> fun((ENK) -> fun((ENL) -> ENM)). +curry2(Fun) -> + fun(A) -> fun(B) -> Fun(A, B) end end. + +-spec curry3(fun((ENO, ENP, ENQ) -> ENR)) -> fun((ENO) -> fun((ENP) -> fun((ENQ) -> ENR))). +curry3(Fun) -> + fun(A) -> fun(B) -> fun(C) -> Fun(A, B, C) end end end. + +-spec curry4(fun((ENT, ENU, ENV, ENW) -> ENX)) -> fun((ENT) -> fun((ENU) -> fun((ENV) -> fun((ENW) -> ENX)))). +curry4(Fun) -> + fun(A) -> fun(B) -> fun(C) -> fun(D) -> Fun(A, B, C, D) end end end end. + +-spec curry5(fun((ENZ, EOA, EOB, EOC, EOD) -> EOE)) -> fun((ENZ) -> fun((EOA) -> fun((EOB) -> fun((EOC) -> fun((EOD) -> EOE))))). +curry5(Fun) -> + fun(A) -> + fun(B) -> + fun(C) -> fun(D) -> fun(E) -> Fun(A, B, C, D, E) end end end + end + end. + +-spec curry6(fun((EOG, EOH, EOI, EOJ, EOK, EOL) -> EOM)) -> fun((EOG) -> fun((EOH) -> fun((EOI) -> fun((EOJ) -> fun((EOK) -> fun((EOL) -> EOM)))))). +curry6(Fun) -> + fun(A) -> + fun(B) -> + fun(C) -> + fun(D) -> fun(E) -> fun(F) -> Fun(A, B, C, D, E, F) end end end + end + end + end. + +-spec flip(fun((EOO, EOP) -> EOQ)) -> fun((EOP, EOO) -> EOQ). +flip(Fun) -> + fun(B, A) -> Fun(A, B) end. + +-spec identity(EOR) -> EOR. +identity(X) -> + X. + +-spec constant(EOS) -> fun((any()) -> EOS). +constant(Value) -> + fun(_) -> Value end. + +-spec tap(EOU, fun((EOU) -> any())) -> EOU. +tap(Arg, Effect) -> + Effect(Arg), + Arg. + +-spec apply1(fun((EOW) -> EOX), EOW) -> EOX. +apply1(Fun, Arg1) -> + Fun(Arg1). + +-spec apply2(fun((EOY, EOZ) -> EPA), EOY, EOZ) -> EPA. +apply2(Fun, Arg1, Arg2) -> + Fun(Arg1, Arg2). + +-spec apply3(fun((EPB, EPC, EPD) -> EPE), EPB, EPC, EPD) -> EPE. +apply3(Fun, Arg1, Arg2, Arg3) -> + Fun(Arg1, Arg2, Arg3). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache Binary files differnew file mode 100644 index 0000000..62076d5 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache_meta Binary files differnew file mode 100644 index 0000000..2d987e1 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.erl new file mode 100644 index 0000000..2a5dd2c --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.erl @@ -0,0 +1,332 @@ +-module(gleam@int). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([absolute_value/1, parse/1, base_parse/2, to_string/1, to_base_string/2, to_base2/1, to_base8/1, to_base16/1, to_base36/1, to_float/1, power/2, square_root/1, compare/2, min/2, max/2, clamp/3, is_even/1, is_odd/1, negate/1, sum/1, product/1, digits/2, undigits/2, random/2, divide/2, remainder/2, modulo/2, floor_divide/2, add/2, multiply/2, subtract/2, bitwise_and/2, bitwise_not/1, bitwise_or/2, bitwise_exclusive_or/2, bitwise_shift_left/2, bitwise_shift_right/2]). +-export_type([invalid_base/0]). + +-type invalid_base() :: invalid_base. + +-spec absolute_value(integer()) -> integer(). +absolute_value(X) -> + case X >= 0 of + true -> + X; + + false -> + X * -1 + end. + +-spec parse(binary()) -> {ok, integer()} | {error, nil}. +parse(String) -> + gleam_stdlib:parse_int(String). + +-spec base_parse(binary(), integer()) -> {ok, integer()} | {error, nil}. +base_parse(String, Base) -> + case (Base >= 2) andalso (Base =< 36) of + true -> + gleam_stdlib:int_from_base_string(String, Base); + + false -> + {error, nil} + end. + +-spec to_string(integer()) -> binary(). +to_string(X) -> + erlang:integer_to_binary(X). + +-spec to_base_string(integer(), integer()) -> {ok, binary()} | + {error, invalid_base()}. +to_base_string(X, Base) -> + case (Base >= 2) andalso (Base =< 36) of + true -> + {ok, erlang:integer_to_binary(X, Base)}; + + false -> + {error, invalid_base} + end. + +-spec to_base2(integer()) -> binary(). +to_base2(X) -> + erlang:integer_to_binary(X, 2). + +-spec to_base8(integer()) -> binary(). +to_base8(X) -> + erlang:integer_to_binary(X, 8). + +-spec to_base16(integer()) -> binary(). +to_base16(X) -> + erlang:integer_to_binary(X, 16). + +-spec to_base36(integer()) -> binary(). +to_base36(X) -> + erlang:integer_to_binary(X, 36). + +-spec to_float(integer()) -> float(). +to_float(X) -> + erlang:float(X). + +-spec power(integer(), float()) -> {ok, float()} | {error, nil}. +power(Base, Exponent) -> + _pipe = Base, + _pipe@1 = to_float(_pipe), + gleam@float:power(_pipe@1, Exponent). + +-spec square_root(integer()) -> {ok, float()} | {error, nil}. +square_root(X) -> + _pipe = X, + _pipe@1 = to_float(_pipe), + gleam@float:square_root(_pipe@1). + +-spec compare(integer(), integer()) -> gleam@order:order(). +compare(A, B) -> + case A =:= B of + true -> + eq; + + false -> + case A < B of + true -> + lt; + + false -> + gt + end + end. + +-spec min(integer(), integer()) -> integer(). +min(A, B) -> + case A < B of + true -> + A; + + false -> + B + end. + +-spec max(integer(), integer()) -> integer(). +max(A, B) -> + case A > B of + true -> + A; + + false -> + B + end. + +-spec clamp(integer(), integer(), integer()) -> integer(). +clamp(X, Min_bound, Max_bound) -> + _pipe = X, + _pipe@1 = min(_pipe, Max_bound), + max(_pipe@1, Min_bound). + +-spec is_even(integer()) -> boolean(). +is_even(X) -> + (X rem 2) =:= 0. + +-spec is_odd(integer()) -> boolean(). +is_odd(X) -> + (X rem 2) /= 0. + +-spec negate(integer()) -> integer(). +negate(X) -> + -1 * X. + +-spec do_sum(list(integer()), integer()) -> integer(). +do_sum(Numbers, Initial) -> + case Numbers of + [] -> + Initial; + + [X | Rest] -> + do_sum(Rest, X + Initial) + end. + +-spec sum(list(integer())) -> integer(). +sum(Numbers) -> + _pipe = Numbers, + do_sum(_pipe, 0). + +-spec do_product(list(integer()), integer()) -> integer(). +do_product(Numbers, Initial) -> + case Numbers of + [] -> + Initial; + + [X | Rest] -> + do_product(Rest, X * Initial) + end. + +-spec product(list(integer())) -> integer(). +product(Numbers) -> + case Numbers of + [] -> + 1; + + _ -> + do_product(Numbers, 1) + end. + +-spec do_digits(integer(), integer(), list(integer())) -> list(integer()). +do_digits(X, Base, Acc) -> + case absolute_value(X) < Base of + true -> + [X | Acc]; + + false -> + do_digits(case Base of + 0 -> 0; + Gleam@denominator -> X div Gleam@denominator + end, Base, [case Base of + 0 -> 0; + Gleam@denominator@1 -> X rem Gleam@denominator@1 + end | Acc]) + end. + +-spec digits(integer(), integer()) -> {ok, list(integer())} | + {error, invalid_base()}. +digits(X, Base) -> + case Base < 2 of + true -> + {error, invalid_base}; + + false -> + {ok, do_digits(X, Base, [])} + end. + +-spec do_undigits(list(integer()), integer(), integer()) -> {ok, integer()} | + {error, invalid_base()}. +do_undigits(Numbers, Base, Acc) -> + case Numbers of + [] -> + {ok, Acc}; + + [Digit | _] when Digit >= Base -> + {error, invalid_base}; + + [Digit@1 | Rest] -> + do_undigits(Rest, Base, (Acc * Base) + Digit@1) + end. + +-spec undigits(list(integer()), integer()) -> {ok, integer()} | + {error, invalid_base()}. +undigits(Numbers, Base) -> + case Base < 2 of + true -> + {error, invalid_base}; + + false -> + do_undigits(Numbers, Base, 0) + end. + +-spec random(integer(), integer()) -> integer(). +random(Min, Max) -> + _pipe = gleam@float:random(to_float(Min), to_float(Max)), + _pipe@1 = gleam@float:floor(_pipe), + gleam@float:round(_pipe@1). + +-spec divide(integer(), integer()) -> {ok, integer()} | {error, nil}. +divide(Dividend, Divisor) -> + case Divisor of + 0 -> + {error, nil}; + + Divisor@1 -> + {ok, case Divisor@1 of + 0 -> 0; + Gleam@denominator -> Dividend div Gleam@denominator + end} + end. + +-spec remainder(integer(), integer()) -> {ok, integer()} | {error, nil}. +remainder(Dividend, Divisor) -> + case Divisor of + 0 -> + {error, nil}; + + Divisor@1 -> + {ok, case Divisor@1 of + 0 -> 0; + Gleam@denominator -> Dividend rem Gleam@denominator + end} + end. + +-spec modulo(integer(), integer()) -> {ok, integer()} | {error, nil}. +modulo(Dividend, Divisor) -> + case Divisor of + 0 -> + {error, nil}; + + _ -> + Remainder = case Divisor of + 0 -> 0; + Gleam@denominator -> Dividend rem Gleam@denominator + end, + case (Remainder * Divisor) < 0 of + true -> + {ok, Remainder + Divisor}; + + false -> + {ok, Remainder} + end + end. + +-spec floor_divide(integer(), integer()) -> {ok, integer()} | {error, nil}. +floor_divide(Dividend, Divisor) -> + case Divisor of + 0 -> + {error, nil}; + + Divisor@1 -> + case ((Dividend * Divisor@1) < 0) andalso ((case Divisor@1 of + 0 -> 0; + Gleam@denominator -> Dividend rem Gleam@denominator + end) /= 0) of + true -> + {ok, (case Divisor@1 of + 0 -> 0; + Gleam@denominator@1 -> Dividend div Gleam@denominator@1 + end) - 1}; + + false -> + {ok, case Divisor@1 of + 0 -> 0; + Gleam@denominator@2 -> Dividend div Gleam@denominator@2 + end} + end + end. + +-spec add(integer(), integer()) -> integer(). +add(A, B) -> + A + B. + +-spec multiply(integer(), integer()) -> integer(). +multiply(A, B) -> + A * B. + +-spec subtract(integer(), integer()) -> integer(). +subtract(A, B) -> + A - B. + +-spec bitwise_and(integer(), integer()) -> integer(). +bitwise_and(X, Y) -> + erlang:'band'(X, Y). + +-spec bitwise_not(integer()) -> integer(). +bitwise_not(X) -> + erlang:'bnot'(X). + +-spec bitwise_or(integer(), integer()) -> integer(). +bitwise_or(X, Y) -> + erlang:'bor'(X, Y). + +-spec bitwise_exclusive_or(integer(), integer()) -> integer(). +bitwise_exclusive_or(X, Y) -> + erlang:'bxor'(X, Y). + +-spec bitwise_shift_left(integer(), integer()) -> integer(). +bitwise_shift_left(X, Y) -> + erlang:'bsl'(X, Y). + +-spec bitwise_shift_right(integer(), integer()) -> integer(). +bitwise_shift_right(X, Y) -> + erlang:'bsr'(X, Y). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache Binary files differnew file mode 100644 index 0000000..ddf78ca --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache_meta Binary files differnew file mode 100644 index 0000000..06ce652 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.erl new file mode 100644 index 0000000..3ab9c35 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.erl @@ -0,0 +1,27 @@ +-module(gleam@io). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([print/1, print_error/1, println/1, println_error/1, debug/1]). + +-spec print(binary()) -> nil. +print(String) -> + gleam_stdlib:print(String). + +-spec print_error(binary()) -> nil. +print_error(String) -> + gleam_stdlib:print_error(String). + +-spec println(binary()) -> nil. +println(String) -> + gleam_stdlib:println(String). + +-spec println_error(binary()) -> nil. +println_error(String) -> + gleam_stdlib:println_error(String). + +-spec debug(FHE) -> FHE. +debug(Term) -> + _pipe = Term, + _pipe@1 = gleam@string:inspect(_pipe), + gleam_stdlib:println_error(_pipe@1), + Term. diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache Binary files differnew file mode 100644 index 0000000..2582f43 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache_meta Binary files differnew file mode 100644 index 0000000..2dcb80d --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.erl new file mode 100644 index 0000000..c7a4b31 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.erl @@ -0,0 +1,744 @@ +-module(gleam@iterator). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([unfold/2, repeatedly/1, repeat/1, from_list/1, transform/3, fold/3, run/1, to_list/1, step/1, take/2, drop/2, map/2, map2/3, append/2, flatten/1, concat/1, flat_map/2, filter/2, cycle/1, find/2, index/1, iterate/2, take_while/2, drop_while/2, scan/3, zip/2, chunk/2, sized_chunk/2, intersperse/2, any/2, all/2, group/2, reduce/2, last/1, empty/0, once/1, range/2, single/1, interleave/2, fold_until/3, try_fold/3, first/1, at/2, length/1, each/2, yield/2]). +-export_type([action/1, iterator/1, step/2, chunk/2, sized_chunk/1]). + +-type action(BUS) :: stop | {continue, BUS, fun(() -> action(BUS))}. + +-opaque iterator(BUT) :: {iterator, fun(() -> action(BUT))}. + +-type step(BUU, BUV) :: {next, BUU, BUV} | done. + +-type chunk(BUW, BUX) :: {another_by, + list(BUW), + BUX, + BUW, + fun(() -> action(BUW))} | + {last_by, list(BUW)}. + +-type sized_chunk(BUY) :: {another, list(BUY), fun(() -> action(BUY))} | + {last, list(BUY)} | + no_more. + +-spec stop() -> action(any()). +stop() -> + stop. + +-spec do_unfold(BVB, fun((BVB) -> step(BVC, BVB))) -> fun(() -> action(BVC)). +do_unfold(Initial, F) -> + fun() -> case F(Initial) of + {next, X, Acc} -> + {continue, X, do_unfold(Acc, F)}; + + done -> + stop + end end. + +-spec unfold(BVG, fun((BVG) -> step(BVH, BVG))) -> iterator(BVH). +unfold(Initial, F) -> + _pipe = Initial, + _pipe@1 = do_unfold(_pipe, F), + {iterator, _pipe@1}. + +-spec repeatedly(fun(() -> BVL)) -> iterator(BVL). +repeatedly(F) -> + unfold(nil, fun(_) -> {next, F(), nil} end). + +-spec repeat(BVN) -> iterator(BVN). +repeat(X) -> + repeatedly(fun() -> X end). + +-spec from_list(list(BVP)) -> iterator(BVP). +from_list(List) -> + Yield = fun(Acc) -> case Acc of + [] -> + done; + + [Head | Tail] -> + {next, Head, Tail} + end end, + unfold(List, Yield). + +-spec do_transform( + fun(() -> action(BVS)), + BVU, + fun((BVU, BVS) -> step(BVV, BVU)) +) -> fun(() -> action(BVV)). +do_transform(Continuation, State, F) -> + fun() -> case Continuation() of + stop -> + stop; + + {continue, El, Next} -> + case F(State, El) of + done -> + stop; + + {next, Yield, Next_state} -> + {continue, Yield, do_transform(Next, Next_state, F)} + end + end end. + +-spec transform(iterator(BVZ), BWB, fun((BWB, BVZ) -> step(BWC, BWB))) -> iterator(BWC). +transform(Iterator, Initial, F) -> + _pipe = do_transform(erlang:element(2, Iterator), Initial, F), + {iterator, _pipe}. + +-spec do_fold(fun(() -> action(BWG)), fun((BWI, BWG) -> BWI), BWI) -> BWI. +do_fold(Continuation, F, Accumulator) -> + case Continuation() of + {continue, Elem, Next} -> + do_fold(Next, F, F(Accumulator, Elem)); + + stop -> + Accumulator + end. + +-spec fold(iterator(BWJ), BWL, fun((BWL, BWJ) -> BWL)) -> BWL. +fold(Iterator, Initial, F) -> + _pipe = erlang:element(2, Iterator), + do_fold(_pipe, F, Initial). + +-spec run(iterator(any())) -> nil. +run(Iterator) -> + fold(Iterator, nil, fun(_, _) -> nil end). + +-spec to_list(iterator(BWO)) -> list(BWO). +to_list(Iterator) -> + _pipe = Iterator, + _pipe@1 = fold(_pipe, [], fun(Acc, E) -> [E | Acc] end), + gleam@list:reverse(_pipe@1). + +-spec step(iterator(BWR)) -> step(BWR, iterator(BWR)). +step(Iterator) -> + case (erlang:element(2, Iterator))() of + stop -> + done; + + {continue, E, A} -> + {next, E, {iterator, A}} + end. + +-spec do_take(fun(() -> action(BWW)), integer()) -> fun(() -> action(BWW)). +do_take(Continuation, Desired) -> + fun() -> case Desired > 0 of + false -> + stop; + + true -> + case Continuation() of + stop -> + stop; + + {continue, E, Next} -> + {continue, E, do_take(Next, Desired - 1)} + end + end end. + +-spec take(iterator(BWZ), integer()) -> iterator(BWZ). +take(Iterator, Desired) -> + _pipe = erlang:element(2, Iterator), + _pipe@1 = do_take(_pipe, Desired), + {iterator, _pipe@1}. + +-spec do_drop(fun(() -> action(BXC)), integer()) -> action(BXC). +do_drop(Continuation, Desired) -> + case Continuation() of + stop -> + stop; + + {continue, E, Next} -> + case Desired > 0 of + true -> + do_drop(Next, Desired - 1); + + false -> + {continue, E, Next} + end + end. + +-spec drop(iterator(BXF), integer()) -> iterator(BXF). +drop(Iterator, Desired) -> + _pipe = fun() -> do_drop(erlang:element(2, Iterator), Desired) end, + {iterator, _pipe}. + +-spec do_map(fun(() -> action(BXI)), fun((BXI) -> BXK)) -> fun(() -> action(BXK)). +do_map(Continuation, F) -> + fun() -> case Continuation() of + stop -> + stop; + + {continue, E, Continuation@1} -> + {continue, F(E), do_map(Continuation@1, F)} + end end. + +-spec map(iterator(BXM), fun((BXM) -> BXO)) -> iterator(BXO). +map(Iterator, F) -> + _pipe = erlang:element(2, Iterator), + _pipe@1 = do_map(_pipe, F), + {iterator, _pipe@1}. + +-spec do_map2( + fun(() -> action(BXQ)), + fun(() -> action(BXS)), + fun((BXQ, BXS) -> BXU) +) -> fun(() -> action(BXU)). +do_map2(Continuation1, Continuation2, Fun) -> + fun() -> case Continuation1() of + stop -> + stop; + + {continue, A, Next_a} -> + case Continuation2() of + stop -> + stop; + + {continue, B, Next_b} -> + {continue, Fun(A, B), do_map2(Next_a, Next_b, Fun)} + end + end end. + +-spec map2(iterator(BXW), iterator(BXY), fun((BXW, BXY) -> BYA)) -> iterator(BYA). +map2(Iterator1, Iterator2, Fun) -> + _pipe = do_map2( + erlang:element(2, Iterator1), + erlang:element(2, Iterator2), + Fun + ), + {iterator, _pipe}. + +-spec do_append(fun(() -> action(BYC)), fun(() -> action(BYC))) -> action(BYC). +do_append(First, Second) -> + case First() of + {continue, E, First@1} -> + {continue, E, fun() -> do_append(First@1, Second) end}; + + stop -> + Second() + end. + +-spec append(iterator(BYG), iterator(BYG)) -> iterator(BYG). +append(First, Second) -> + _pipe = fun() -> + do_append(erlang:element(2, First), erlang:element(2, Second)) + end, + {iterator, _pipe}. + +-spec do_flatten(fun(() -> action(iterator(BYK)))) -> action(BYK). +do_flatten(Flattened) -> + case Flattened() of + stop -> + stop; + + {continue, It, Next_iterator} -> + do_append( + erlang:element(2, It), + fun() -> do_flatten(Next_iterator) end + ) + end. + +-spec flatten(iterator(iterator(BYO))) -> iterator(BYO). +flatten(Iterator) -> + _pipe = fun() -> do_flatten(erlang:element(2, Iterator)) end, + {iterator, _pipe}. + +-spec concat(list(iterator(BYS))) -> iterator(BYS). +concat(Iterators) -> + flatten(from_list(Iterators)). + +-spec flat_map(iterator(BYW), fun((BYW) -> iterator(BYY))) -> iterator(BYY). +flat_map(Iterator, F) -> + _pipe = Iterator, + _pipe@1 = map(_pipe, F), + flatten(_pipe@1). + +-spec do_filter(fun(() -> action(BZB)), fun((BZB) -> boolean())) -> action(BZB). +do_filter(Continuation, Predicate) -> + case Continuation() of + stop -> + stop; + + {continue, E, Iterator} -> + case Predicate(E) of + true -> + {continue, E, fun() -> do_filter(Iterator, Predicate) end}; + + false -> + do_filter(Iterator, Predicate) + end + end. + +-spec filter(iterator(BZE), fun((BZE) -> boolean())) -> iterator(BZE). +filter(Iterator, Predicate) -> + _pipe = fun() -> do_filter(erlang:element(2, Iterator), Predicate) end, + {iterator, _pipe}. + +-spec cycle(iterator(BZH)) -> iterator(BZH). +cycle(Iterator) -> + _pipe = repeat(Iterator), + flatten(_pipe). + +-spec do_find(fun(() -> action(BZL)), fun((BZL) -> boolean())) -> {ok, BZL} | + {error, nil}. +do_find(Continuation, F) -> + case Continuation() of + stop -> + {error, nil}; + + {continue, E, Next} -> + case F(E) of + true -> + {ok, E}; + + false -> + do_find(Next, F) + end + end. + +-spec find(iterator(BZP), fun((BZP) -> boolean())) -> {ok, BZP} | {error, nil}. +find(Haystack, Is_desired) -> + _pipe = erlang:element(2, Haystack), + do_find(_pipe, Is_desired). + +-spec do_index(fun(() -> action(BZT)), integer()) -> fun(() -> action({integer(), + BZT})). +do_index(Continuation, Next) -> + fun() -> case Continuation() of + stop -> + stop; + + {continue, E, Continuation@1} -> + {continue, {Next, E}, do_index(Continuation@1, Next + 1)} + end end. + +-spec index(iterator(BZW)) -> iterator({integer(), BZW}). +index(Iterator) -> + _pipe = erlang:element(2, Iterator), + _pipe@1 = do_index(_pipe, 0), + {iterator, _pipe@1}. + +-spec iterate(BZZ, fun((BZZ) -> BZZ)) -> iterator(BZZ). +iterate(Initial, F) -> + unfold(Initial, fun(Element) -> {next, Element, F(Element)} end). + +-spec do_take_while(fun(() -> action(CAB)), fun((CAB) -> boolean())) -> fun(() -> action(CAB)). +do_take_while(Continuation, Predicate) -> + fun() -> case Continuation() of + stop -> + stop; + + {continue, E, Next} -> + case Predicate(E) of + false -> + stop; + + true -> + {continue, E, do_take_while(Next, Predicate)} + end + end end. + +-spec take_while(iterator(CAE), fun((CAE) -> boolean())) -> iterator(CAE). +take_while(Iterator, Predicate) -> + _pipe = erlang:element(2, Iterator), + _pipe@1 = do_take_while(_pipe, Predicate), + {iterator, _pipe@1}. + +-spec do_drop_while(fun(() -> action(CAH)), fun((CAH) -> boolean())) -> action(CAH). +do_drop_while(Continuation, Predicate) -> + case Continuation() of + stop -> + stop; + + {continue, E, Next} -> + case Predicate(E) of + false -> + {continue, E, Next}; + + true -> + do_drop_while(Next, Predicate) + end + end. + +-spec drop_while(iterator(CAK), fun((CAK) -> boolean())) -> iterator(CAK). +drop_while(Iterator, Predicate) -> + _pipe = fun() -> do_drop_while(erlang:element(2, Iterator), Predicate) end, + {iterator, _pipe}. + +-spec do_scan(fun(() -> action(CAN)), fun((CAP, CAN) -> CAP), CAP) -> fun(() -> action(CAP)). +do_scan(Continuation, F, Accumulator) -> + fun() -> case Continuation() of + stop -> + stop; + + {continue, El, Next} -> + Accumulated = F(Accumulator, El), + {continue, Accumulated, do_scan(Next, F, Accumulated)} + end end. + +-spec scan(iterator(CAR), CAT, fun((CAT, CAR) -> CAT)) -> iterator(CAT). +scan(Iterator, Initial, F) -> + _pipe = erlang:element(2, Iterator), + _pipe@1 = do_scan(_pipe, F, Initial), + {iterator, _pipe@1}. + +-spec do_zip(fun(() -> action(CAV)), fun(() -> action(CAX))) -> fun(() -> action({CAV, + CAX})). +do_zip(Left, Right) -> + fun() -> case Left() of + stop -> + stop; + + {continue, El_left, Next_left} -> + case Right() of + stop -> + stop; + + {continue, El_right, Next_right} -> + {continue, + {El_left, El_right}, + do_zip(Next_left, Next_right)} + end + end end. + +-spec zip(iterator(CBA), iterator(CBC)) -> iterator({CBA, CBC}). +zip(Left, Right) -> + _pipe = do_zip(erlang:element(2, Left), erlang:element(2, Right)), + {iterator, _pipe}. + +-spec next_chunk(fun(() -> action(CBF)), fun((CBF) -> CBH), CBH, list(CBF)) -> chunk(CBF, CBH). +next_chunk(Continuation, F, Previous_key, Current_chunk) -> + case Continuation() of + stop -> + {last_by, gleam@list:reverse(Current_chunk)}; + + {continue, E, Next} -> + Key = F(E), + case Key =:= Previous_key of + true -> + next_chunk(Next, F, Key, [E | Current_chunk]); + + false -> + {another_by, + gleam@list:reverse(Current_chunk), + Key, + E, + Next} + end + end. + +-spec do_chunk(fun(() -> action(CBL)), fun((CBL) -> CBN), CBN, CBL) -> action(list(CBL)). +do_chunk(Continuation, F, Previous_key, Previous_element) -> + case next_chunk(Continuation, F, Previous_key, [Previous_element]) of + {last_by, Chunk} -> + {continue, Chunk, fun stop/0}; + + {another_by, Chunk@1, Key, El, Next} -> + {continue, Chunk@1, fun() -> do_chunk(Next, F, Key, El) end} + end. + +-spec chunk(iterator(CBQ), fun((CBQ) -> any())) -> iterator(list(CBQ)). +chunk(Iterator, F) -> + _pipe = fun() -> case (erlang:element(2, Iterator))() of + stop -> + stop; + + {continue, E, Next} -> + do_chunk(Next, F, F(E), E) + end end, + {iterator, _pipe}. + +-spec next_sized_chunk(fun(() -> action(CBV)), integer(), list(CBV)) -> sized_chunk(CBV). +next_sized_chunk(Continuation, Left, Current_chunk) -> + case Continuation() of + stop -> + case Current_chunk of + [] -> + no_more; + + Remaining -> + {last, gleam@list:reverse(Remaining)} + end; + + {continue, E, Next} -> + Chunk = [E | Current_chunk], + case Left > 1 of + false -> + {another, gleam@list:reverse(Chunk), Next}; + + true -> + next_sized_chunk(Next, Left - 1, Chunk) + end + end. + +-spec do_sized_chunk(fun(() -> action(CBZ)), integer()) -> fun(() -> action(list(CBZ))). +do_sized_chunk(Continuation, Count) -> + fun() -> case next_sized_chunk(Continuation, Count, []) of + no_more -> + stop; + + {last, Chunk} -> + {continue, Chunk, fun stop/0}; + + {another, Chunk@1, Next_element} -> + {continue, Chunk@1, do_sized_chunk(Next_element, Count)} + end end. + +-spec sized_chunk(iterator(CCD), integer()) -> iterator(list(CCD)). +sized_chunk(Iterator, Count) -> + _pipe = erlang:element(2, Iterator), + _pipe@1 = do_sized_chunk(_pipe, Count), + {iterator, _pipe@1}. + +-spec do_intersperse(fun(() -> action(CCH)), CCH) -> action(CCH). +do_intersperse(Continuation, Separator) -> + case Continuation() of + stop -> + stop; + + {continue, E, Next} -> + Next_interspersed = fun() -> do_intersperse(Next, Separator) end, + {continue, Separator, fun() -> {continue, E, Next_interspersed} end} + end. + +-spec intersperse(iterator(CCK), CCK) -> iterator(CCK). +intersperse(Iterator, Elem) -> + _pipe = fun() -> case (erlang:element(2, Iterator))() of + stop -> + stop; + + {continue, E, Next} -> + {continue, E, fun() -> do_intersperse(Next, Elem) end} + end end, + {iterator, _pipe}. + +-spec do_any(fun(() -> action(CCN)), fun((CCN) -> boolean())) -> boolean(). +do_any(Continuation, Predicate) -> + case Continuation() of + stop -> + false; + + {continue, E, Next} -> + case Predicate(E) of + true -> + true; + + false -> + do_any(Next, Predicate) + end + end. + +-spec any(iterator(CCP), fun((CCP) -> boolean())) -> boolean(). +any(Iterator, Predicate) -> + _pipe = erlang:element(2, Iterator), + do_any(_pipe, Predicate). + +-spec do_all(fun(() -> action(CCR)), fun((CCR) -> boolean())) -> boolean(). +do_all(Continuation, Predicate) -> + case Continuation() of + stop -> + true; + + {continue, E, Next} -> + case Predicate(E) of + true -> + do_all(Next, Predicate); + + false -> + false + end + end. + +-spec all(iterator(CCT), fun((CCT) -> boolean())) -> boolean(). +all(Iterator, Predicate) -> + _pipe = erlang:element(2, Iterator), + do_all(_pipe, Predicate). + +-spec update_group_with(CCV) -> fun((gleam@option:option(list(CCV))) -> list(CCV)). +update_group_with(El) -> + fun(Maybe_group) -> case Maybe_group of + {some, Group} -> + [El | Group]; + + none -> + [El] + end end. + +-spec group_updater(fun((CCZ) -> CDA)) -> fun((gleam@dict:dict(CDA, list(CCZ)), CCZ) -> gleam@dict:dict(CDA, list(CCZ))). +group_updater(F) -> + fun(Groups, Elem) -> _pipe = Groups, + gleam@dict:update(_pipe, F(Elem), update_group_with(Elem)) end. + +-spec group(iterator(CDH), fun((CDH) -> CDJ)) -> gleam@dict:dict(CDJ, list(CDH)). +group(Iterator, Key) -> + _pipe = Iterator, + _pipe@1 = fold(_pipe, gleam@dict:new(), group_updater(Key)), + gleam@dict:map_values( + _pipe@1, + fun(_, Group) -> gleam@list:reverse(Group) end + ). + +-spec reduce(iterator(CDN), fun((CDN, CDN) -> CDN)) -> {ok, CDN} | {error, nil}. +reduce(Iterator, F) -> + case (erlang:element(2, Iterator))() of + stop -> + {error, nil}; + + {continue, E, Next} -> + _pipe = do_fold(Next, F, E), + {ok, _pipe} + end. + +-spec last(iterator(CDR)) -> {ok, CDR} | {error, nil}. +last(Iterator) -> + _pipe = Iterator, + reduce(_pipe, fun(_, Elem) -> Elem end). + +-spec empty() -> iterator(any()). +empty() -> + {iterator, fun stop/0}. + +-spec once(fun(() -> CDX)) -> iterator(CDX). +once(F) -> + _pipe = fun() -> {continue, F(), fun stop/0} end, + {iterator, _pipe}. + +-spec range(integer(), integer()) -> iterator(integer()). +range(Start, Stop) -> + case gleam@int:compare(Start, Stop) of + eq -> + once(fun() -> Start end); + + gt -> + unfold(Start, fun(Current) -> case Current < Stop of + false -> + {next, Current, Current - 1}; + + true -> + done + end end); + + lt -> + unfold(Start, fun(Current@1) -> case Current@1 > Stop of + false -> + {next, Current@1, Current@1 + 1}; + + true -> + done + end end) + end. + +-spec single(CDZ) -> iterator(CDZ). +single(Elem) -> + once(fun() -> Elem end). + +-spec do_interleave(fun(() -> action(CEB)), fun(() -> action(CEB))) -> action(CEB). +do_interleave(Current, Next) -> + case Current() of + stop -> + Next(); + + {continue, E, Next_other} -> + {continue, E, fun() -> do_interleave(Next, Next_other) end} + end. + +-spec interleave(iterator(CEF), iterator(CEF)) -> iterator(CEF). +interleave(Left, Right) -> + _pipe = fun() -> + do_interleave(erlang:element(2, Left), erlang:element(2, Right)) + end, + {iterator, _pipe}. + +-spec do_fold_until( + fun(() -> action(CEJ)), + fun((CEL, CEJ) -> gleam@list:continue_or_stop(CEL)), + CEL +) -> CEL. +do_fold_until(Continuation, F, Accumulator) -> + case Continuation() of + stop -> + Accumulator; + + {continue, Elem, Next} -> + case F(Accumulator, Elem) of + {continue, Accumulator@1} -> + do_fold_until(Next, F, Accumulator@1); + + {stop, Accumulator@2} -> + Accumulator@2 + end + end. + +-spec fold_until( + iterator(CEN), + CEP, + fun((CEP, CEN) -> gleam@list:continue_or_stop(CEP)) +) -> CEP. +fold_until(Iterator, Initial, F) -> + _pipe = erlang:element(2, Iterator), + do_fold_until(_pipe, F, Initial). + +-spec do_try_fold( + fun(() -> action(CER)), + fun((CET, CER) -> {ok, CET} | {error, CEU}), + CET +) -> {ok, CET} | {error, CEU}. +do_try_fold(Continuation, F, Accumulator) -> + case Continuation() of + stop -> + {ok, Accumulator}; + + {continue, Elem, Next} -> + gleam@result:'try'( + F(Accumulator, Elem), + fun(Accumulator@1) -> do_try_fold(Next, F, Accumulator@1) end + ) + end. + +-spec try_fold(iterator(CEZ), CFB, fun((CFB, CEZ) -> {ok, CFB} | {error, CFC})) -> {ok, + CFB} | + {error, CFC}. +try_fold(Iterator, Initial, F) -> + _pipe = erlang:element(2, Iterator), + do_try_fold(_pipe, F, Initial). + +-spec first(iterator(CFH)) -> {ok, CFH} | {error, nil}. +first(Iterator) -> + case (erlang:element(2, Iterator))() of + stop -> + {error, nil}; + + {continue, E, _} -> + {ok, E} + end. + +-spec at(iterator(CFL), integer()) -> {ok, CFL} | {error, nil}. +at(Iterator, Index) -> + _pipe = Iterator, + _pipe@1 = drop(_pipe, Index), + first(_pipe@1). + +-spec do_length(fun(() -> action(any())), integer()) -> integer(). +do_length(Continuation, Length) -> + case Continuation() of + stop -> + Length; + + {continue, _, Next} -> + do_length(Next, Length + 1) + end. + +-spec length(iterator(any())) -> integer(). +length(Iterator) -> + _pipe = erlang:element(2, Iterator), + do_length(_pipe, 0). + +-spec each(iterator(CFT), fun((CFT) -> any())) -> nil. +each(Iterator, F) -> + _pipe = Iterator, + _pipe@1 = map(_pipe, F), + run(_pipe@1). + +-spec yield(CFW, fun(() -> iterator(CFW))) -> iterator(CFW). +yield(Element, Next) -> + {iterator, fun() -> {continue, Element, erlang:element(2, Next())} end}. diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache Binary files differnew file mode 100644 index 0000000..394792a --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache_meta Binary files differnew file mode 100644 index 0000000..56b294f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.erl new file mode 100644 index 0000000..6c2e684 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.erl @@ -0,0 +1,1129 @@ +-module(gleam@list). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([length/1, reverse/1, is_empty/1, contains/2, first/1, rest/1, filter/2, filter_map/2, map/2, map2/3, index_map/2, try_map/2, drop/2, take/2, new/0, append/2, prepend/2, concat/1, flatten/1, flat_map/2, fold/3, group/2, map_fold/3, fold_right/3, index_fold/3, try_fold/3, fold_until/3, find/2, find_map/2, all/2, any/2, zip/2, strict_zip/2, unzip/1, intersperse/2, at/2, unique/1, sort/2, range/2, repeat/2, split/2, split_while/2, key_find/2, key_filter/2, pop/2, pop_map/2, key_pop/2, key_set/3, each/2, try_each/2, partition/2, permutations/1, window/2, window_by_2/1, drop_while/2, take_while/2, chunk/2, sized_chunk/2, reduce/2, scan/3, last/1, combinations/2, combination_pairs/1, transpose/1, interleave/1, shuffle/1]). +-export_type([length_mismatch/0, continue_or_stop/1]). + +-type length_mismatch() :: length_mismatch. + +-type continue_or_stop(UD) :: {continue, UD} | {stop, UD}. + +-spec length(list(any())) -> integer(). +length(List) -> + erlang:length(List). + +-spec reverse(list(UI)) -> list(UI). +reverse(Xs) -> + lists:reverse(Xs). + +-spec is_empty(list(any())) -> boolean(). +is_empty(List) -> + List =:= []. + +-spec contains(list(UQ), UQ) -> boolean(). +contains(List, Elem) -> + case List of + [] -> + false; + + [First | _] when First =:= Elem -> + true; + + [_ | Rest] -> + contains(Rest, Elem) + end. + +-spec first(list(US)) -> {ok, US} | {error, nil}. +first(List) -> + case List of + [] -> + {error, nil}; + + [X | _] -> + {ok, X} + end. + +-spec rest(list(UW)) -> {ok, list(UW)} | {error, nil}. +rest(List) -> + case List of + [] -> + {error, nil}; + + [_ | Xs] -> + {ok, Xs} + end. + +-spec update_group(fun((VB) -> VC)) -> fun((gleam@dict:dict(VC, list(VB)), VB) -> gleam@dict:dict(VC, list(VB))). +update_group(F) -> + fun(Groups, Elem) -> case gleam@dict:get(Groups, F(Elem)) of + {ok, Existing} -> + gleam@dict:insert(Groups, F(Elem), [Elem | Existing]); + + {error, _} -> + gleam@dict:insert(Groups, F(Elem), [Elem]) + end end. + +-spec do_filter(list(VP), fun((VP) -> boolean()), list(VP)) -> list(VP). +do_filter(List, Fun, Acc) -> + case List of + [] -> + reverse(Acc); + + [X | Xs] -> + New_acc = case Fun(X) of + true -> + [X | Acc]; + + false -> + Acc + end, + do_filter(Xs, Fun, New_acc) + end. + +-spec filter(list(VT), fun((VT) -> boolean())) -> list(VT). +filter(List, Predicate) -> + do_filter(List, Predicate, []). + +-spec do_filter_map(list(VW), fun((VW) -> {ok, VY} | {error, any()}), list(VY)) -> list(VY). +do_filter_map(List, Fun, Acc) -> + case List of + [] -> + reverse(Acc); + + [X | Xs] -> + New_acc = case Fun(X) of + {ok, X@1} -> + [X@1 | Acc]; + + {error, _} -> + Acc + end, + do_filter_map(Xs, Fun, New_acc) + end. + +-spec filter_map(list(WE), fun((WE) -> {ok, WG} | {error, any()})) -> list(WG). +filter_map(List, Fun) -> + do_filter_map(List, Fun, []). + +-spec do_map(list(WL), fun((WL) -> WN), list(WN)) -> list(WN). +do_map(List, Fun, Acc) -> + case List of + [] -> + reverse(Acc); + + [X | Xs] -> + do_map(Xs, Fun, [Fun(X) | Acc]) + end. + +-spec map(list(WQ), fun((WQ) -> WS)) -> list(WS). +map(List, Fun) -> + do_map(List, Fun, []). + +-spec do_map2(list(XA), list(XC), fun((XA, XC) -> XE), list(XE)) -> list(XE). +do_map2(List1, List2, Fun, Acc) -> + case {List1, List2} of + {[], _} -> + reverse(Acc); + + {_, []} -> + reverse(Acc); + + {[A | As_], [B | Bs]} -> + do_map2(As_, Bs, Fun, [Fun(A, B) | Acc]) + end. + +-spec map2(list(WU), list(WW), fun((WU, WW) -> WY)) -> list(WY). +map2(List1, List2, Fun) -> + do_map2(List1, List2, Fun, []). + +-spec do_index_map(list(XM), fun((integer(), XM) -> XO), integer(), list(XO)) -> list(XO). +do_index_map(List, Fun, Index, Acc) -> + case List of + [] -> + reverse(Acc); + + [X | Xs] -> + Acc@1 = [Fun(Index, X) | Acc], + do_index_map(Xs, Fun, Index + 1, Acc@1) + end. + +-spec index_map(list(XR), fun((integer(), XR) -> XT)) -> list(XT). +index_map(List, Fun) -> + do_index_map(List, Fun, 0, []). + +-spec do_try_map(list(XV), fun((XV) -> {ok, XX} | {error, XY}), list(XX)) -> {ok, + list(XX)} | + {error, XY}. +do_try_map(List, Fun, Acc) -> + case List of + [] -> + {ok, reverse(Acc)}; + + [X | Xs] -> + case Fun(X) of + {ok, Y} -> + do_try_map(Xs, Fun, [Y | Acc]); + + {error, Error} -> + {error, Error} + end + end. + +-spec try_map(list(YF), fun((YF) -> {ok, YH} | {error, YI})) -> {ok, list(YH)} | + {error, YI}. +try_map(List, Fun) -> + do_try_map(List, Fun, []). + +-spec drop(list(YO), integer()) -> list(YO). +drop(List, N) -> + case N =< 0 of + true -> + List; + + false -> + case List of + [] -> + []; + + [_ | Xs] -> + drop(Xs, N - 1) + end + end. + +-spec do_take(list(YR), integer(), list(YR)) -> list(YR). +do_take(List, N, Acc) -> + case N =< 0 of + true -> + reverse(Acc); + + false -> + case List of + [] -> + reverse(Acc); + + [X | Xs] -> + do_take(Xs, N - 1, [X | Acc]) + end + end. + +-spec take(list(YV), integer()) -> list(YV). +take(List, N) -> + do_take(List, N, []). + +-spec new() -> list(any()). +new() -> + []. + +-spec append(list(AAA), list(AAA)) -> list(AAA). +append(First, Second) -> + lists:append(First, Second). + +-spec prepend(list(AAI), AAI) -> list(AAI). +prepend(List, Item) -> + [Item | List]. + +-spec reverse_and_prepend(list(AAL), list(AAL)) -> list(AAL). +reverse_and_prepend(Prefix, Suffix) -> + case Prefix of + [] -> + Suffix; + + [First | Rest] -> + reverse_and_prepend(Rest, [First | Suffix]) + end. + +-spec do_concat(list(list(AAP)), list(AAP)) -> list(AAP). +do_concat(Lists, Acc) -> + case Lists of + [] -> + reverse(Acc); + + [List | Further_lists] -> + do_concat(Further_lists, reverse_and_prepend(List, Acc)) + end. + +-spec concat(list(list(AAU))) -> list(AAU). +concat(Lists) -> + do_concat(Lists, []). + +-spec flatten(list(list(AAY))) -> list(AAY). +flatten(Lists) -> + do_concat(Lists, []). + +-spec flat_map(list(ABC), fun((ABC) -> list(ABE))) -> list(ABE). +flat_map(List, Fun) -> + _pipe = map(List, Fun), + concat(_pipe). + +-spec fold(list(ABH), ABJ, fun((ABJ, ABH) -> ABJ)) -> ABJ. +fold(List, Initial, Fun) -> + case List of + [] -> + Initial; + + [X | Rest] -> + fold(Rest, Fun(Initial, X), Fun) + end. + +-spec group(list(VJ), fun((VJ) -> VL)) -> gleam@dict:dict(VL, list(VJ)). +group(List, Key) -> + fold(List, gleam@dict:new(), update_group(Key)). + +-spec map_fold(list(XH), XJ, fun((XJ, XH) -> {XJ, XK})) -> {XJ, list(XK)}. +map_fold(List, Acc, Fun) -> + _pipe = fold( + List, + {Acc, []}, + fun(Acc@1, Item) -> + {Current_acc, Items} = Acc@1, + {Next_acc, Next_item} = Fun(Current_acc, Item), + {Next_acc, [Next_item | Items]} + end + ), + gleam@pair:map_second(_pipe, fun reverse/1). + +-spec fold_right(list(ABK), ABM, fun((ABM, ABK) -> ABM)) -> ABM. +fold_right(List, Initial, Fun) -> + case List of + [] -> + Initial; + + [X | Rest] -> + Fun(fold_right(Rest, Initial, Fun), X) + end. + +-spec do_index_fold( + list(ABN), + ABP, + fun((ABP, ABN, integer()) -> ABP), + integer() +) -> ABP. +do_index_fold(Over, Acc, With, Index) -> + case Over of + [] -> + Acc; + + [First | Rest] -> + do_index_fold(Rest, With(Acc, First, Index), With, Index + 1) + end. + +-spec index_fold(list(ABQ), ABS, fun((ABS, ABQ, integer()) -> ABS)) -> ABS. +index_fold(Over, Initial, Fun) -> + do_index_fold(Over, Initial, Fun, 0). + +-spec try_fold(list(ABT), ABV, fun((ABV, ABT) -> {ok, ABV} | {error, ABW})) -> {ok, + ABV} | + {error, ABW}. +try_fold(Collection, Accumulator, Fun) -> + case Collection of + [] -> + {ok, Accumulator}; + + [First | Rest] -> + case Fun(Accumulator, First) of + {ok, Result} -> + try_fold(Rest, Result, Fun); + + {error, _} = Error -> + Error + end + end. + +-spec fold_until(list(ACB), ACD, fun((ACD, ACB) -> continue_or_stop(ACD))) -> ACD. +fold_until(Collection, Accumulator, Fun) -> + case Collection of + [] -> + Accumulator; + + [First | Rest] -> + case Fun(Accumulator, First) of + {continue, Next_accumulator} -> + fold_until(Rest, Next_accumulator, Fun); + + {stop, B} -> + B + end + end. + +-spec find(list(ACF), fun((ACF) -> boolean())) -> {ok, ACF} | {error, nil}. +find(Haystack, Is_desired) -> + case Haystack of + [] -> + {error, nil}; + + [X | Rest] -> + case Is_desired(X) of + true -> + {ok, X}; + + _ -> + find(Rest, Is_desired) + end + end. + +-spec find_map(list(ACJ), fun((ACJ) -> {ok, ACL} | {error, any()})) -> {ok, ACL} | + {error, nil}. +find_map(Haystack, Fun) -> + case Haystack of + [] -> + {error, nil}; + + [X | Rest] -> + case Fun(X) of + {ok, X@1} -> + {ok, X@1}; + + _ -> + find_map(Rest, Fun) + end + end. + +-spec all(list(ACR), fun((ACR) -> boolean())) -> boolean(). +all(List, Predicate) -> + case List of + [] -> + true; + + [First | Rest] -> + case Predicate(First) of + true -> + all(Rest, Predicate); + + false -> + false + end + end. + +-spec any(list(ACT), fun((ACT) -> boolean())) -> boolean(). +any(List, Predicate) -> + case List of + [] -> + false; + + [First | Rest] -> + case Predicate(First) of + true -> + true; + + false -> + any(Rest, Predicate) + end + end. + +-spec do_zip(list(ACV), list(ACX), list({ACV, ACX})) -> list({ACV, ACX}). +do_zip(Xs, Ys, Acc) -> + case {Xs, Ys} of + {[X | Xs@1], [Y | Ys@1]} -> + do_zip(Xs@1, Ys@1, [{X, Y} | Acc]); + + {_, _} -> + reverse(Acc) + end. + +-spec zip(list(ADB), list(ADD)) -> list({ADB, ADD}). +zip(List, Other) -> + do_zip(List, Other, []). + +-spec strict_zip(list(ADG), list(ADI)) -> {ok, list({ADG, ADI})} | + {error, length_mismatch()}. +strict_zip(List, Other) -> + case length(List) =:= length(Other) of + true -> + {ok, zip(List, Other)}; + + false -> + {error, length_mismatch} + end. + +-spec do_unzip(list({ATA, ATB}), list(ATA), list(ATB)) -> {list(ATA), list(ATB)}. +do_unzip(Input, Xs, Ys) -> + case Input of + [] -> + {reverse(Xs), reverse(Ys)}; + + [{X, Y} | Rest] -> + do_unzip(Rest, [X | Xs], [Y | Ys]) + end. + +-spec unzip(list({ADR, ADS})) -> {list(ADR), list(ADS)}. +unzip(Input) -> + do_unzip(Input, [], []). + +-spec do_intersperse(list(ADW), ADW, list(ADW)) -> list(ADW). +do_intersperse(List, Separator, Acc) -> + case List of + [] -> + reverse(Acc); + + [X | Rest] -> + do_intersperse(Rest, Separator, [X, Separator | Acc]) + end. + +-spec intersperse(list(AEA), AEA) -> list(AEA). +intersperse(List, Elem) -> + case List of + [] -> + List; + + [_] -> + List; + + [X | Rest] -> + do_intersperse(Rest, Elem, [X]) + end. + +-spec at(list(AED), integer()) -> {ok, AED} | {error, nil}. +at(List, Index) -> + case Index >= 0 of + true -> + _pipe = List, + _pipe@1 = drop(_pipe, Index), + first(_pipe@1); + + false -> + {error, nil} + end. + +-spec unique(list(AEH)) -> list(AEH). +unique(List) -> + case List of + [] -> + []; + + [X | Rest] -> + [X | unique(filter(Rest, fun(Y) -> Y /= X end))] + end. + +-spec merge_up( + integer(), + integer(), + list(AEK), + list(AEK), + list(AEK), + fun((AEK, AEK) -> gleam@order:order()) +) -> list(AEK). +merge_up(Na, Nb, A, B, Acc, Compare) -> + case {Na, Nb, A, B} of + {0, 0, _, _} -> + Acc; + + {_, 0, [Ax | Ar], _} -> + merge_up(Na - 1, Nb, Ar, B, [Ax | Acc], Compare); + + {0, _, _, [Bx | Br]} -> + merge_up(Na, Nb - 1, A, Br, [Bx | Acc], Compare); + + {_, _, [Ax@1 | Ar@1], [Bx@1 | Br@1]} -> + case Compare(Ax@1, Bx@1) of + gt -> + merge_up(Na, Nb - 1, A, Br@1, [Bx@1 | Acc], Compare); + + _ -> + merge_up(Na - 1, Nb, Ar@1, B, [Ax@1 | Acc], Compare) + end; + + {_, _, _, _} -> + Acc + end. + +-spec merge_down( + integer(), + integer(), + list(AEP), + list(AEP), + list(AEP), + fun((AEP, AEP) -> gleam@order:order()) +) -> list(AEP). +merge_down(Na, Nb, A, B, Acc, Compare) -> + case {Na, Nb, A, B} of + {0, 0, _, _} -> + Acc; + + {_, 0, [Ax | Ar], _} -> + merge_down(Na - 1, Nb, Ar, B, [Ax | Acc], Compare); + + {0, _, _, [Bx | Br]} -> + merge_down(Na, Nb - 1, A, Br, [Bx | Acc], Compare); + + {_, _, [Ax@1 | Ar@1], [Bx@1 | Br@1]} -> + case Compare(Bx@1, Ax@1) of + lt -> + merge_down(Na - 1, Nb, Ar@1, B, [Ax@1 | Acc], Compare); + + _ -> + merge_down(Na, Nb - 1, A, Br@1, [Bx@1 | Acc], Compare) + end; + + {_, _, _, _} -> + Acc + end. + +-spec merge_sort( + list(AEU), + integer(), + fun((AEU, AEU) -> gleam@order:order()), + boolean() +) -> list(AEU). +merge_sort(L, Ln, Compare, Down) -> + N = Ln div 2, + A = L, + B = drop(L, N), + case Ln < 3 of + true -> + case Down of + true -> + merge_down(N, Ln - N, A, B, [], Compare); + + false -> + merge_up(N, Ln - N, A, B, [], Compare) + end; + + false -> + case Down of + true -> + merge_down( + N, + Ln - N, + merge_sort(A, N, Compare, false), + merge_sort(B, Ln - N, Compare, false), + [], + Compare + ); + + false -> + merge_up( + N, + Ln - N, + merge_sort(A, N, Compare, true), + merge_sort(B, Ln - N, Compare, true), + [], + Compare + ) + end + end. + +-spec sort(list(AEX), fun((AEX, AEX) -> gleam@order:order())) -> list(AEX). +sort(List, Compare) -> + merge_sort(List, length(List), Compare, true). + +-spec tail_recursive_range(integer(), integer(), list(integer())) -> list(integer()). +tail_recursive_range(Start, Stop, Acc) -> + case gleam@int:compare(Start, Stop) of + eq -> + [Stop | Acc]; + + gt -> + tail_recursive_range(Start, Stop + 1, [Stop | Acc]); + + lt -> + tail_recursive_range(Start, Stop - 1, [Stop | Acc]) + end. + +-spec range(integer(), integer()) -> list(integer()). +range(Start, Stop) -> + tail_recursive_range(Start, Stop, []). + +-spec do_repeat(AFD, integer(), list(AFD)) -> list(AFD). +do_repeat(A, Times, Acc) -> + case Times =< 0 of + true -> + Acc; + + false -> + do_repeat(A, Times - 1, [A | Acc]) + end. + +-spec repeat(AFG, integer()) -> list(AFG). +repeat(A, Times) -> + do_repeat(A, Times, []). + +-spec do_split(list(AFI), integer(), list(AFI)) -> {list(AFI), list(AFI)}. +do_split(List, N, Taken) -> + case N =< 0 of + true -> + {reverse(Taken), List}; + + false -> + case List of + [] -> + {reverse(Taken), []}; + + [X | Xs] -> + do_split(Xs, N - 1, [X | Taken]) + end + end. + +-spec split(list(AFN), integer()) -> {list(AFN), list(AFN)}. +split(List, Index) -> + do_split(List, Index, []). + +-spec do_split_while(list(AFR), fun((AFR) -> boolean()), list(AFR)) -> {list(AFR), + list(AFR)}. +do_split_while(List, F, Acc) -> + case List of + [] -> + {reverse(Acc), []}; + + [X | Xs] -> + case F(X) of + false -> + {reverse(Acc), List}; + + _ -> + do_split_while(Xs, F, [X | Acc]) + end + end. + +-spec split_while(list(AFW), fun((AFW) -> boolean())) -> {list(AFW), list(AFW)}. +split_while(List, Predicate) -> + do_split_while(List, Predicate, []). + +-spec key_find(list({AGA, AGB}), AGA) -> {ok, AGB} | {error, nil}. +key_find(Keyword_list, Desired_key) -> + find_map( + Keyword_list, + fun(Keyword) -> + {Key, Value} = Keyword, + case Key =:= Desired_key of + true -> + {ok, Value}; + + false -> + {error, nil} + end + end + ). + +-spec key_filter(list({AGF, AGG}), AGF) -> list(AGG). +key_filter(Keyword_list, Desired_key) -> + filter_map( + Keyword_list, + fun(Keyword) -> + {Key, Value} = Keyword, + case Key =:= Desired_key of + true -> + {ok, Value}; + + false -> + {error, nil} + end + end + ). + +-spec do_pop(list(AWT), fun((AWT) -> boolean()), list(AWT)) -> {ok, + {AWT, list(AWT)}} | + {error, nil}. +do_pop(Haystack, Predicate, Checked) -> + case Haystack of + [] -> + {error, nil}; + + [X | Rest] -> + case Predicate(X) of + true -> + {ok, {X, append(reverse(Checked), Rest)}}; + + false -> + do_pop(Rest, Predicate, [X | Checked]) + end + end. + +-spec pop(list(AGN), fun((AGN) -> boolean())) -> {ok, {AGN, list(AGN)}} | + {error, nil}. +pop(Haystack, Is_desired) -> + do_pop(Haystack, Is_desired, []). + +-spec do_pop_map(list(AXH), fun((AXH) -> {ok, AXU} | {error, any()}), list(AXH)) -> {ok, + {AXU, list(AXH)}} | + {error, nil}. +do_pop_map(Haystack, Mapper, Checked) -> + case Haystack of + [] -> + {error, nil}; + + [X | Rest] -> + case Mapper(X) of + {ok, Y} -> + {ok, {Y, append(reverse(Checked), Rest)}}; + + {error, _} -> + do_pop_map(Rest, Mapper, [X | Checked]) + end + end. + +-spec pop_map(list(AGW), fun((AGW) -> {ok, AGY} | {error, any()})) -> {ok, + {AGY, list(AGW)}} | + {error, nil}. +pop_map(Haystack, Is_desired) -> + do_pop_map(Haystack, Is_desired, []). + +-spec key_pop(list({AHF, AHG}), AHF) -> {ok, {AHG, list({AHF, AHG})}} | + {error, nil}. +key_pop(Haystack, Key) -> + pop_map( + Haystack, + fun(Entry) -> + {K, V} = Entry, + case K of + K@1 when K@1 =:= Key -> + {ok, V}; + + _ -> + {error, nil} + end + end + ). + +-spec key_set(list({AHL, AHM}), AHL, AHM) -> list({AHL, AHM}). +key_set(List, Key, Value) -> + case List of + [] -> + [{Key, Value}]; + + [{K, _} | Rest] when K =:= Key -> + [{Key, Value} | Rest]; + + [First | Rest@1] -> + [First | key_set(Rest@1, Key, Value)] + end. + +-spec each(list(AHP), fun((AHP) -> any())) -> nil. +each(List, F) -> + case List of + [] -> + nil; + + [X | Xs] -> + F(X), + each(Xs, F) + end. + +-spec try_each(list(AHS), fun((AHS) -> {ok, any()} | {error, AHV})) -> {ok, nil} | + {error, AHV}. +try_each(List, Fun) -> + case List of + [] -> + {ok, nil}; + + [X | Xs] -> + case Fun(X) of + {ok, _} -> + try_each(Xs, Fun); + + {error, E} -> + {error, E} + end + end. + +-spec do_partition(list(AZB), fun((AZB) -> boolean()), list(AZB), list(AZB)) -> {list(AZB), + list(AZB)}. +do_partition(List, Categorise, Trues, Falses) -> + case List of + [] -> + {reverse(Trues), reverse(Falses)}; + + [X | Xs] -> + case Categorise(X) of + true -> + do_partition(Xs, Categorise, [X | Trues], Falses); + + false -> + do_partition(Xs, Categorise, Trues, [X | Falses]) + end + end. + +-spec partition(list(AIF), fun((AIF) -> boolean())) -> {list(AIF), list(AIF)}. +partition(List, Categorise) -> + do_partition(List, Categorise, [], []). + +-spec permutations(list(AIJ)) -> list(list(AIJ)). +permutations(L) -> + case L of + [] -> + [[]]; + + _ -> + _pipe = L, + _pipe@5 = index_map(_pipe, fun(I_idx, I) -> _pipe@1 = L, + _pipe@2 = index_fold( + _pipe@1, + [], + fun(Acc, J, J_idx) -> case I_idx =:= J_idx of + true -> + Acc; + + false -> + [J | Acc] + end end + ), + _pipe@3 = reverse(_pipe@2), + _pipe@4 = permutations(_pipe@3), + map(_pipe@4, fun(Permutation) -> [I | Permutation] end) end), + concat(_pipe@5) + end. + +-spec do_window(list(list(AIN)), list(AIN), integer()) -> list(list(AIN)). +do_window(Acc, L, N) -> + Window = take(L, N), + case length(Window) =:= N of + true -> + do_window([Window | Acc], drop(L, 1), N); + + false -> + Acc + end. + +-spec window(list(AIT), integer()) -> list(list(AIT)). +window(L, N) -> + _pipe = do_window([], L, N), + reverse(_pipe). + +-spec window_by_2(list(AIX)) -> list({AIX, AIX}). +window_by_2(L) -> + zip(L, drop(L, 1)). + +-spec drop_while(list(AJA), fun((AJA) -> boolean())) -> list(AJA). +drop_while(List, Predicate) -> + case List of + [] -> + []; + + [X | Xs] -> + case Predicate(X) of + true -> + drop_while(Xs, Predicate); + + false -> + [X | Xs] + end + end. + +-spec do_take_while(list(AJD), fun((AJD) -> boolean()), list(AJD)) -> list(AJD). +do_take_while(List, Predicate, Acc) -> + case List of + [] -> + reverse(Acc); + + [First | Rest] -> + case Predicate(First) of + true -> + do_take_while(Rest, Predicate, [First | Acc]); + + false -> + reverse(Acc) + end + end. + +-spec take_while(list(AJH), fun((AJH) -> boolean())) -> list(AJH). +take_while(List, Predicate) -> + do_take_while(List, Predicate, []). + +-spec do_chunk(list(AJK), fun((AJK) -> AJM), AJM, list(AJK), list(list(AJK))) -> list(list(AJK)). +do_chunk(List, F, Previous_key, Current_chunk, Acc) -> + case List of + [First | Rest] -> + Key = F(First), + case Key =:= Previous_key of + false -> + New_acc = [reverse(Current_chunk) | Acc], + do_chunk(Rest, F, Key, [First], New_acc); + + _ -> + do_chunk(Rest, F, Key, [First | Current_chunk], Acc) + end; + + _ -> + reverse([reverse(Current_chunk) | Acc]) + end. + +-spec chunk(list(AJS), fun((AJS) -> any())) -> list(list(AJS)). +chunk(List, F) -> + case List of + [] -> + []; + + [First | Rest] -> + do_chunk(Rest, F, F(First), [First], []) + end. + +-spec do_sized_chunk( + list(AJX), + integer(), + integer(), + list(AJX), + list(list(AJX)) +) -> list(list(AJX)). +do_sized_chunk(List, Count, Left, Current_chunk, Acc) -> + case List of + [] -> + case Current_chunk of + [] -> + reverse(Acc); + + Remaining -> + reverse([reverse(Remaining) | Acc]) + end; + + [First | Rest] -> + Chunk = [First | Current_chunk], + case Left > 1 of + false -> + do_sized_chunk( + Rest, + Count, + Count, + [], + [reverse(Chunk) | Acc] + ); + + true -> + do_sized_chunk(Rest, Count, Left - 1, Chunk, Acc) + end + end. + +-spec sized_chunk(list(AKE), integer()) -> list(list(AKE)). +sized_chunk(List, Count) -> + do_sized_chunk(List, Count, Count, [], []). + +-spec reduce(list(AKI), fun((AKI, AKI) -> AKI)) -> {ok, AKI} | {error, nil}. +reduce(List, Fun) -> + case List of + [] -> + {error, nil}; + + [First | Rest] -> + {ok, fold(Rest, First, Fun)} + end. + +-spec do_scan(list(AKM), AKO, list(AKO), fun((AKO, AKM) -> AKO)) -> list(AKO). +do_scan(List, Accumulator, Accumulated, Fun) -> + case List of + [] -> + reverse(Accumulated); + + [X | Xs] -> + Next = Fun(Accumulator, X), + do_scan(Xs, Next, [Next | Accumulated], Fun) + end. + +-spec scan(list(AKR), AKT, fun((AKT, AKR) -> AKT)) -> list(AKT). +scan(List, Initial, Fun) -> + do_scan(List, Initial, [], Fun). + +-spec last(list(AKV)) -> {ok, AKV} | {error, nil}. +last(List) -> + _pipe = List, + reduce(_pipe, fun(_, Elem) -> Elem end). + +-spec combinations(list(AKZ), integer()) -> list(list(AKZ)). +combinations(Items, N) -> + case N of + 0 -> + [[]]; + + _ -> + case Items of + [] -> + []; + + [X | Xs] -> + First_combinations = begin + _pipe = map( + combinations(Xs, N - 1), + fun(Com) -> [X | Com] end + ), + reverse(_pipe) + end, + fold( + First_combinations, + combinations(Xs, N), + fun(Acc, C) -> [C | Acc] end + ) + end + end. + +-spec do_combination_pairs(list(ALD)) -> list(list({ALD, ALD})). +do_combination_pairs(Items) -> + case Items of + [] -> + []; + + [X | Xs] -> + First_combinations = map(Xs, fun(Other) -> {X, Other} end), + [First_combinations | do_combination_pairs(Xs)] + end. + +-spec combination_pairs(list(ALH)) -> list({ALH, ALH}). +combination_pairs(Items) -> + _pipe = do_combination_pairs(Items), + concat(_pipe). + +-spec transpose(list(list(ALO))) -> list(list(ALO)). +transpose(List_of_list) -> + Take_first = fun(List) -> case List of + [] -> + []; + + [F] -> + [F]; + + [F@1 | _] -> + [F@1] + end end, + case List_of_list of + [] -> + []; + + [[] | Xss] -> + transpose(Xss); + + Rows -> + Firsts = begin + _pipe = Rows, + _pipe@1 = map(_pipe, Take_first), + concat(_pipe@1) + end, + Rest = transpose(map(Rows, fun(_capture) -> drop(_capture, 1) end)), + [Firsts | Rest] + end. + +-spec interleave(list(list(ALK))) -> list(ALK). +interleave(List) -> + _pipe = transpose(List), + concat(_pipe). + +-spec do_shuffle_pair_unwrap(list({float(), ALT}), list(ALT)) -> list(ALT). +do_shuffle_pair_unwrap(List, Acc) -> + case List of + [] -> + Acc; + + [Elem_pair | Enumerable] -> + do_shuffle_pair_unwrap( + Enumerable, + [erlang:element(2, Elem_pair) | Acc] + ) + end. + +-spec do_shuffle_by_pair_indexes(list({float(), ALX})) -> list({float(), ALX}). +do_shuffle_by_pair_indexes(List_of_pairs) -> + sort( + List_of_pairs, + fun(A_pair, B_pair) -> + gleam@float:compare( + erlang:element(1, A_pair), + erlang:element(1, B_pair) + ) + end + ). + +-spec shuffle(list(AMA)) -> list(AMA). +shuffle(List) -> + _pipe = List, + _pipe@1 = fold( + _pipe, + [], + fun(Acc, A) -> [{gleam@float:random(+0.0, 1.0), A} | Acc] end + ), + _pipe@2 = do_shuffle_by_pair_indexes(_pipe@1), + do_shuffle_pair_unwrap(_pipe@2, []). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache Binary files differnew file mode 100644 index 0000000..d0685b3 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache_meta Binary files differnew file mode 100644 index 0000000..03b0ec9 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.erl new file mode 100644 index 0000000..4f90bbd --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.erl @@ -0,0 +1,76 @@ +-module(gleam@map). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([size/1, to_list/1, from_list/1, has_key/2, new/0, get/2, insert/3, map_values/2, keys/1, values/1, filter/2, take/2, merge/2, delete/2, drop/2, update/3, fold/3]). + +-spec size(gleam@dict:dict(any(), any())) -> integer(). +size(Map) -> + gleam@dict:size(Map). + +-spec to_list(gleam@dict:dict(FDO, FDP)) -> list({FDO, FDP}). +to_list(Map) -> + gleam@dict:to_list(Map). + +-spec from_list(list({FDR, FDS})) -> gleam@dict:dict(FDR, FDS). +from_list(List) -> + gleam@dict:from_list(List). + +-spec has_key(gleam@dict:dict(FDW, any()), FDW) -> boolean(). +has_key(Map, Key) -> + gleam@dict:has_key(Map, Key). + +-spec new() -> gleam@dict:dict(any(), any()). +new() -> + gleam@dict:new(). + +-spec get(gleam@dict:dict(FDZ, FEA), FDZ) -> {ok, FEA} | {error, nil}. +get(From, Get) -> + gleam@dict:get(From, Get). + +-spec insert(gleam@dict:dict(FEE, FEF), FEE, FEF) -> gleam@dict:dict(FEE, FEF). +insert(Map, Key, Value) -> + gleam@dict:insert(Map, Key, Value). + +-spec map_values(gleam@dict:dict(FEI, FEJ), fun((FEI, FEJ) -> FEK)) -> gleam@dict:dict(FEI, FEK). +map_values(Map, Fun) -> + gleam@dict:map_values(Map, Fun). + +-spec keys(gleam@dict:dict(FEN, any())) -> list(FEN). +keys(Map) -> + gleam@dict:keys(Map). + +-spec values(gleam@dict:dict(any(), FEQ)) -> list(FEQ). +values(Map) -> + gleam@dict:values(Map). + +-spec filter(gleam@dict:dict(FET, FEU), fun((FET, FEU) -> boolean())) -> gleam@dict:dict(FET, FEU). +filter(Map, Predicate) -> + gleam@dict:filter(Map, Predicate). + +-spec take(gleam@dict:dict(FEX, FGR), list(FEX)) -> gleam@dict:dict(FEX, FGR). +take(Map, Desired_keys) -> + gleam@dict:take(Map, Desired_keys). + +-spec merge(gleam@dict:dict(FGS, FGT), gleam@dict:dict(FGS, FGT)) -> gleam@dict:dict(FGS, FGT). +merge(Map, New_entries) -> + gleam@dict:merge(Map, New_entries). + +-spec delete(gleam@dict:dict(FFE, FGV), FFE) -> gleam@dict:dict(FFE, FGV). +delete(Map, Key) -> + gleam@dict:delete(Map, Key). + +-spec drop(gleam@dict:dict(FFH, FGX), list(FFH)) -> gleam@dict:dict(FFH, FGX). +drop(Map, Disallowed_keys) -> + gleam@dict:drop(Map, Disallowed_keys). + +-spec update( + gleam@dict:dict(FFL, FFM), + FFL, + fun((gleam@option:option(FFM)) -> FFM) +) -> gleam@dict:dict(FFL, FFM). +update(Map, Key, Fun) -> + gleam@dict:update(Map, Key, Fun). + +-spec fold(gleam@dict:dict(FFR, FFS), FFQ, fun((FFQ, FFR, FFS) -> FFQ)) -> FFQ. +fold(Map, Initial, Fun) -> + gleam@dict:fold(Map, Initial, Fun). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache Binary files differnew file mode 100644 index 0000000..b0763c1 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache_meta Binary files differnew file mode 100644 index 0000000..ff8f8df --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.erl new file mode 100644 index 0000000..5c20713 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.erl @@ -0,0 +1,147 @@ +-module(gleam@option). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([all/1, is_some/1, is_none/1, to_result/2, from_result/1, unwrap/2, lazy_unwrap/2, map/2, flatten/1, then/2, 'or'/2, lazy_or/2, values/1]). +-export_type([option/1]). + +-type option(GB) :: {some, GB} | none. + +-spec do_all(list(option(GC)), list(GC)) -> option(list(GC)). +do_all(List, Acc) -> + case List of + [] -> + {some, Acc}; + + [X | Rest] -> + Accumulate = fun(Acc@1, Item) -> case {Acc@1, Item} of + {{some, Values}, {some, Value}} -> + {some, [Value | Values]}; + + {_, _} -> + none + end end, + Accumulate(do_all(Rest, Acc), X) + end. + +-spec all(list(option(GI))) -> option(list(GI)). +all(List) -> + do_all(List, []). + +-spec is_some(option(any())) -> boolean(). +is_some(Option) -> + Option /= none. + +-spec is_none(option(any())) -> boolean(). +is_none(Option) -> + Option =:= none. + +-spec to_result(option(GR), GU) -> {ok, GR} | {error, GU}. +to_result(Option, E) -> + case Option of + {some, A} -> + {ok, A}; + + _ -> + {error, E} + end. + +-spec from_result({ok, GX} | {error, any()}) -> option(GX). +from_result(Result) -> + case Result of + {ok, A} -> + {some, A}; + + _ -> + none + end. + +-spec unwrap(option(HC), HC) -> HC. +unwrap(Option, Default) -> + case Option of + {some, X} -> + X; + + none -> + Default + end. + +-spec lazy_unwrap(option(HE), fun(() -> HE)) -> HE. +lazy_unwrap(Option, Default) -> + case Option of + {some, X} -> + X; + + none -> + Default() + end. + +-spec map(option(HG), fun((HG) -> HI)) -> option(HI). +map(Option, Fun) -> + case Option of + {some, X} -> + {some, Fun(X)}; + + none -> + none + end. + +-spec flatten(option(option(HK))) -> option(HK). +flatten(Option) -> + case Option of + {some, X} -> + X; + + none -> + none + end. + +-spec then(option(HO), fun((HO) -> option(HQ))) -> option(HQ). +then(Option, Fun) -> + case Option of + {some, X} -> + Fun(X); + + none -> + none + end. + +-spec 'or'(option(HT), option(HT)) -> option(HT). +'or'(First, Second) -> + case First of + {some, _} -> + First; + + none -> + Second + end. + +-spec lazy_or(option(HX), fun(() -> option(HX))) -> option(HX). +lazy_or(First, Second) -> + case First of + {some, _} -> + First; + + none -> + Second() + end. + +-spec do_values(list(option(IB)), list(IB)) -> list(IB). +do_values(List, Acc) -> + case List of + [] -> + Acc; + + [X | Xs] -> + Accumulate = fun(Acc@1, Item) -> case Item of + {some, Value} -> + [Value | Acc@1]; + + none -> + Acc@1 + end end, + Accumulate(do_values(Xs, Acc), X) + end. + +-spec values(list(option(IG))) -> list(IG). +values(Options) -> + do_values(Options, []). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache Binary files differnew file mode 100644 index 0000000..00f75bc --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache_meta Binary files differnew file mode 100644 index 0000000..c304185 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.erl new file mode 100644 index 0000000..61649b9 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.erl @@ -0,0 +1,79 @@ +-module(gleam@order). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([negate/1, to_int/1, compare/2, max/2, min/2, reverse/1]). +-export_type([order/0]). + +-type order() :: lt | eq | gt. + +-spec negate(order()) -> order(). +negate(Order) -> + case Order of + lt -> + gt; + + eq -> + eq; + + gt -> + lt + end. + +-spec to_int(order()) -> integer(). +to_int(Order) -> + case Order of + lt -> + -1; + + eq -> + 0; + + gt -> + 1 + end. + +-spec compare(order(), order()) -> order(). +compare(A, B) -> + case {A, B} of + {X, Y} when X =:= Y -> + eq; + + {lt, _} -> + lt; + + {eq, gt} -> + lt; + + {_, _} -> + gt + end. + +-spec max(order(), order()) -> order(). +max(A, B) -> + case {A, B} of + {gt, _} -> + gt; + + {eq, lt} -> + eq; + + {_, _} -> + B + end. + +-spec min(order(), order()) -> order(). +min(A, B) -> + case {A, B} of + {lt, _} -> + lt; + + {eq, gt} -> + eq; + + {_, _} -> + B + end. + +-spec reverse(fun((I, I) -> order())) -> fun((I, I) -> order()). +reverse(Orderer) -> + fun(A, B) -> Orderer(B, A) end. diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache Binary files differnew file mode 100644 index 0000000..5eb2973 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_meta Binary files differnew file mode 100644 index 0000000..8ee3fd8 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.erl new file mode 100644 index 0000000..f4eff52 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.erl @@ -0,0 +1,33 @@ +-module(gleam@pair). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([first/1, second/1, swap/1, map_first/2, map_second/2, new/2]). + +-spec first({FM, any()}) -> FM. +first(Pair) -> + {A, _} = Pair, + A. + +-spec second({any(), FP}) -> FP. +second(Pair) -> + {_, A} = Pair, + A. + +-spec swap({FQ, FR}) -> {FR, FQ}. +swap(Pair) -> + {A, B} = Pair, + {B, A}. + +-spec map_first({FS, FT}, fun((FS) -> FU)) -> {FU, FT}. +map_first(Pair, Fun) -> + {A, B} = Pair, + {Fun(A), B}. + +-spec map_second({FV, FW}, fun((FW) -> FX)) -> {FV, FX}. +map_second(Pair, Fun) -> + {A, B} = Pair, + {A, Fun(B)}. + +-spec new(FY, FZ) -> {FY, FZ}. +new(First, Second) -> + {First, Second}. diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache Binary files differnew file mode 100644 index 0000000..a35d701 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache_meta Binary files differnew file mode 100644 index 0000000..26ea872 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.erl new file mode 100644 index 0000000..d9ec12a --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.erl @@ -0,0 +1,121 @@ +-module(gleam@queue). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([new/0, from_list/1, to_list/1, is_empty/1, length/1, push_back/2, push_front/2, pop_back/1, pop_front/1, reverse/1, is_logically_equal/3, is_equal/2]). +-export_type([queue/1]). + +-opaque queue(BFE) :: {queue, list(BFE), list(BFE)}. + +-spec new() -> queue(any()). +new() -> + {queue, [], []}. + +-spec from_list(list(BFH)) -> queue(BFH). +from_list(List) -> + {queue, [], List}. + +-spec to_list(queue(BFK)) -> list(BFK). +to_list(Queue) -> + _pipe = erlang:element(3, Queue), + gleam@list:append(_pipe, gleam@list:reverse(erlang:element(2, Queue))). + +-spec is_empty(queue(any())) -> boolean(). +is_empty(Queue) -> + (erlang:element(2, Queue) =:= []) andalso (erlang:element(3, Queue) =:= []). + +-spec length(queue(any())) -> integer(). +length(Queue) -> + gleam@list:length(erlang:element(2, Queue)) + gleam@list:length( + erlang:element(3, Queue) + ). + +-spec push_back(queue(BFR), BFR) -> queue(BFR). +push_back(Queue, Item) -> + {queue, [Item | erlang:element(2, Queue)], erlang:element(3, Queue)}. + +-spec push_front(queue(BFU), BFU) -> queue(BFU). +push_front(Queue, Item) -> + {queue, erlang:element(2, Queue), [Item | erlang:element(3, Queue)]}. + +-spec pop_back(queue(BFX)) -> {ok, {BFX, queue(BFX)}} | {error, nil}. +pop_back(Queue) -> + case Queue of + {queue, [], []} -> + {error, nil}; + + {queue, [], Out} -> + pop_back({queue, gleam@list:reverse(Out), []}); + + {queue, [First | Rest], Out@1} -> + Queue@1 = {queue, Rest, Out@1}, + {ok, {First, Queue@1}} + end. + +-spec pop_front(queue(BGC)) -> {ok, {BGC, queue(BGC)}} | {error, nil}. +pop_front(Queue) -> + case Queue of + {queue, [], []} -> + {error, nil}; + + {queue, In, []} -> + pop_front({queue, [], gleam@list:reverse(In)}); + + {queue, In@1, [First | Rest]} -> + Queue@1 = {queue, In@1, Rest}, + {ok, {First, Queue@1}} + end. + +-spec reverse(queue(BGH)) -> queue(BGH). +reverse(Queue) -> + {queue, erlang:element(3, Queue), erlang:element(2, Queue)}. + +-spec check_equal( + list(BGK), + list(BGK), + list(BGK), + list(BGK), + fun((BGK, BGK) -> boolean()) +) -> boolean(). +check_equal(Xs, X_tail, Ys, Y_tail, Eq) -> + case {Xs, X_tail, Ys, Y_tail} of + {[], [], [], []} -> + true; + + {[X | Xs@1], _, [Y | Ys@1], _} -> + case Eq(X, Y) of + false -> + false; + + true -> + check_equal(Xs@1, X_tail, Ys@1, Y_tail, Eq) + end; + + {[], [_ | _], _, _} -> + check_equal(gleam@list:reverse(X_tail), [], Ys, Y_tail, Eq); + + {_, _, [], [_ | _]} -> + check_equal(Xs, X_tail, gleam@list:reverse(Y_tail), [], Eq); + + {_, _, _, _} -> + false + end. + +-spec is_logically_equal(queue(BGP), queue(BGP), fun((BGP, BGP) -> boolean())) -> boolean(). +is_logically_equal(A, B, Element_is_equal) -> + check_equal( + erlang:element(3, A), + erlang:element(2, A), + erlang:element(3, B), + erlang:element(2, B), + Element_is_equal + ). + +-spec is_equal(queue(BGS), queue(BGS)) -> boolean(). +is_equal(A, B) -> + check_equal( + erlang:element(3, A), + erlang:element(2, A), + erlang:element(3, B), + erlang:element(2, B), + fun(A@1, B@1) -> A@1 =:= B@1 end + ). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache Binary files differnew file mode 100644 index 0000000..de8820b --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache_meta Binary files differnew file mode 100644 index 0000000..ab416af --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.erl new file mode 100644 index 0000000..2d1c5fc --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.erl @@ -0,0 +1,33 @@ +-module(gleam@regex). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([compile/2, from_string/1, check/2, split/2, scan/2]). +-export_type([regex/0, match/0, compile_error/0, options/0]). + +-type regex() :: any(). + +-type match() :: {match, binary(), list(gleam@option:option(binary()))}. + +-type compile_error() :: {compile_error, binary(), integer()}. + +-type options() :: {options, boolean(), boolean()}. + +-spec compile(binary(), options()) -> {ok, regex()} | {error, compile_error()}. +compile(Pattern, Options) -> + gleam_stdlib:compile_regex(Pattern, Options). + +-spec from_string(binary()) -> {ok, regex()} | {error, compile_error()}. +from_string(Pattern) -> + compile(Pattern, {options, false, false}). + +-spec check(regex(), binary()) -> boolean(). +check(Regex, Content) -> + gleam_stdlib:regex_check(Regex, Content). + +-spec split(regex(), binary()) -> list(binary()). +split(Regex, String) -> + gleam_stdlib:regex_split(Regex, String). + +-spec scan(regex(), binary()) -> list(match()). +scan(Regex, String) -> + gleam_stdlib:regex_scan(Regex, String). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache Binary files differnew file mode 100644 index 0000000..d7f9b5d --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache_meta Binary files differnew file mode 100644 index 0000000..732654a --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.erl new file mode 100644 index 0000000..e7bdaff --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.erl @@ -0,0 +1,201 @@ +-module(gleam@result). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([is_ok/1, is_error/1, map/2, map_error/2, flatten/1, 'try'/2, then/2, unwrap/2, lazy_unwrap/2, unwrap_error/2, unwrap_both/1, nil_error/1, 'or'/2, lazy_or/2, all/1, partition/1, replace/2, replace_error/2, values/1, try_recover/2]). + +-spec is_ok({ok, any()} | {error, any()}) -> boolean(). +is_ok(Result) -> + case Result of + {error, _} -> + false; + + {ok, _} -> + true + end. + +-spec is_error({ok, any()} | {error, any()}) -> boolean(). +is_error(Result) -> + case Result of + {ok, _} -> + false; + + {error, _} -> + true + end. + +-spec map({ok, BKA} | {error, BKB}, fun((BKA) -> BKE)) -> {ok, BKE} | + {error, BKB}. +map(Result, Fun) -> + case Result of + {ok, X} -> + {ok, Fun(X)}; + + {error, E} -> + {error, E} + end. + +-spec map_error({ok, BKH} | {error, BKI}, fun((BKI) -> BKL)) -> {ok, BKH} | + {error, BKL}. +map_error(Result, Fun) -> + case Result of + {ok, X} -> + {ok, X}; + + {error, Error} -> + {error, Fun(Error)} + end. + +-spec flatten({ok, {ok, BKO} | {error, BKP}} | {error, BKP}) -> {ok, BKO} | + {error, BKP}. +flatten(Result) -> + case Result of + {ok, X} -> + X; + + {error, Error} -> + {error, Error} + end. + +-spec 'try'({ok, BKW} | {error, BKX}, fun((BKW) -> {ok, BLA} | {error, BKX})) -> {ok, + BLA} | + {error, BKX}. +'try'(Result, Fun) -> + case Result of + {ok, X} -> + Fun(X); + + {error, E} -> + {error, E} + end. + +-spec then({ok, BLF} | {error, BLG}, fun((BLF) -> {ok, BLJ} | {error, BLG})) -> {ok, + BLJ} | + {error, BLG}. +then(Result, Fun) -> + 'try'(Result, Fun). + +-spec unwrap({ok, BLO} | {error, any()}, BLO) -> BLO. +unwrap(Result, Default) -> + case Result of + {ok, V} -> + V; + + {error, _} -> + Default + end. + +-spec lazy_unwrap({ok, BLS} | {error, any()}, fun(() -> BLS)) -> BLS. +lazy_unwrap(Result, Default) -> + case Result of + {ok, V} -> + V; + + {error, _} -> + Default() + end. + +-spec unwrap_error({ok, any()} | {error, BLX}, BLX) -> BLX. +unwrap_error(Result, Default) -> + case Result of + {ok, _} -> + Default; + + {error, E} -> + E + end. + +-spec unwrap_both({ok, BMA} | {error, BMA}) -> BMA. +unwrap_both(Result) -> + case Result of + {ok, A} -> + A; + + {error, A@1} -> + A@1 + end. + +-spec nil_error({ok, BMD} | {error, any()}) -> {ok, BMD} | {error, nil}. +nil_error(Result) -> + map_error(Result, fun(_) -> nil end). + +-spec 'or'({ok, BMJ} | {error, BMK}, {ok, BMJ} | {error, BMK}) -> {ok, BMJ} | + {error, BMK}. +'or'(First, Second) -> + case First of + {ok, _} -> + First; + + {error, _} -> + Second + end. + +-spec lazy_or({ok, BMR} | {error, BMS}, fun(() -> {ok, BMR} | {error, BMS})) -> {ok, + BMR} | + {error, BMS}. +lazy_or(First, Second) -> + case First of + {ok, _} -> + First; + + {error, _} -> + Second() + end. + +-spec all(list({ok, BMZ} | {error, BNA})) -> {ok, list(BMZ)} | {error, BNA}. +all(Results) -> + gleam@list:try_map(Results, fun(X) -> X end). + +-spec do_partition(list({ok, BNO} | {error, BNP}), list(BNO), list(BNP)) -> {list(BNO), + list(BNP)}. +do_partition(Results, Oks, Errors) -> + case Results of + [] -> + {Oks, Errors}; + + [{ok, A} | Rest] -> + do_partition(Rest, [A | Oks], Errors); + + [{error, E} | Rest@1] -> + do_partition(Rest@1, Oks, [E | Errors]) + end. + +-spec partition(list({ok, BNH} | {error, BNI})) -> {list(BNH), list(BNI)}. +partition(Results) -> + do_partition(Results, [], []). + +-spec replace({ok, any()} | {error, BNX}, BOA) -> {ok, BOA} | {error, BNX}. +replace(Result, Value) -> + case Result of + {ok, _} -> + {ok, Value}; + + {error, Error} -> + {error, Error} + end. + +-spec replace_error({ok, BOD} | {error, any()}, BOH) -> {ok, BOD} | {error, BOH}. +replace_error(Result, Error) -> + case Result of + {ok, X} -> + {ok, X}; + + {error, _} -> + {error, Error} + end. + +-spec values(list({ok, BOK} | {error, any()})) -> list(BOK). +values(Results) -> + gleam@list:filter_map(Results, fun(R) -> R end). + +-spec try_recover( + {ok, BOQ} | {error, BOR}, + fun((BOR) -> {ok, BOQ} | {error, BOU}) +) -> {ok, BOQ} | {error, BOU}. +try_recover(Result, Fun) -> + case Result of + {ok, Value} -> + {ok, Value}; + + {error, Error} -> + Fun(Error) + end. diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache Binary files differnew file mode 100644 index 0000000..43fd2a5 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache_meta Binary files differnew file mode 100644 index 0000000..ee9607b --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.erl new file mode 100644 index 0000000..2a23b83 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.erl @@ -0,0 +1,85 @@ +-module(gleam@set). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([new/0, size/1, insert/2, contains/2, delete/2, to_list/1, from_list/1, fold/3, filter/2, drop/2, take/2, union/2, intersection/2]). +-export_type([set/1]). + +-opaque set(EYO) :: {set, gleam@dict:dict(EYO, list(nil))}. + +-spec new() -> set(any()). +new() -> + {set, gleam@dict:new()}. + +-spec size(set(any())) -> integer(). +size(Set) -> + gleam@dict:size(erlang:element(2, Set)). + +-spec insert(set(EYU), EYU) -> set(EYU). +insert(Set, Member) -> + {set, gleam@dict:insert(erlang:element(2, Set), Member, [])}. + +-spec contains(set(EYX), EYX) -> boolean(). +contains(Set, Member) -> + _pipe = erlang:element(2, Set), + _pipe@1 = gleam@dict:get(_pipe, Member), + gleam@result:is_ok(_pipe@1). + +-spec delete(set(EYZ), EYZ) -> set(EYZ). +delete(Set, Member) -> + {set, gleam@dict:delete(erlang:element(2, Set), Member)}. + +-spec to_list(set(EZC)) -> list(EZC). +to_list(Set) -> + gleam@dict:keys(erlang:element(2, Set)). + +-spec from_list(list(EZF)) -> set(EZF). +from_list(Members) -> + Map = gleam@list:fold( + Members, + gleam@dict:new(), + fun(M, K) -> gleam@dict:insert(M, K, []) end + ), + {set, Map}. + +-spec fold(set(EZI), EZK, fun((EZK, EZI) -> EZK)) -> EZK. +fold(Set, Initial, Reducer) -> + gleam@dict:fold( + erlang:element(2, Set), + Initial, + fun(A, K, _) -> Reducer(A, K) end + ). + +-spec filter(set(EZL), fun((EZL) -> boolean())) -> set(EZL). +filter(Set, Predicate) -> + {set, + gleam@dict:filter(erlang:element(2, Set), fun(M, _) -> Predicate(M) end)}. + +-spec drop(set(EZO), list(EZO)) -> set(EZO). +drop(Set, Disallowed) -> + gleam@list:fold(Disallowed, Set, fun delete/2). + +-spec take(set(EZS), list(EZS)) -> set(EZS). +take(Set, Desired) -> + {set, gleam@dict:take(erlang:element(2, Set), Desired)}. + +-spec order(set(EZW), set(EZW)) -> {set(EZW), set(EZW)}. +order(First, Second) -> + case gleam@dict:size(erlang:element(2, First)) > gleam@dict:size( + erlang:element(2, Second) + ) of + true -> + {First, Second}; + + false -> + {Second, First} + end. + +-spec union(set(FAB), set(FAB)) -> set(FAB). +union(First, Second) -> + {Larger, Smaller} = order(First, Second), + fold(Smaller, Larger, fun insert/2). + +-spec intersection(set(FAF), set(FAF)) -> set(FAF). +intersection(First, Second) -> + {Larger, Smaller} = order(First, Second), + take(Larger, to_list(Smaller)). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache Binary files differnew file mode 100644 index 0000000..d024425 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache_meta Binary files differnew file mode 100644 index 0000000..300d752 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.erl new file mode 100644 index 0000000..6cba31d --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.erl @@ -0,0 +1,352 @@ +-module(gleam@string). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([is_empty/1, length/1, reverse/1, replace/3, lowercase/1, uppercase/1, compare/2, slice/3, crop/2, drop_left/2, drop_right/2, contains/2, starts_with/2, ends_with/2, split_once/2, append/2, concat/1, repeat/2, join/2, pad_left/3, pad_right/3, trim/1, trim_left/1, trim_right/1, pop_grapheme/1, to_graphemes/1, split/2, to_utf_codepoints/1, from_utf_codepoints/1, utf_codepoint/1, utf_codepoint_to_int/1, to_option/1, first/1, last/1, capitalise/1, inspect/1, byte_size/1]). +-export_type([direction/0]). + +-type direction() :: leading | trailing | both. + +-spec is_empty(binary()) -> boolean(). +is_empty(Str) -> + Str =:= <<""/utf8>>. + +-spec length(binary()) -> integer(). +length(String) -> + string:length(String). + +-spec do_reverse(binary()) -> binary(). +do_reverse(String) -> + _pipe = String, + _pipe@1 = gleam@string_builder:from_string(_pipe), + _pipe@2 = gleam@string_builder:reverse(_pipe@1), + gleam@string_builder:to_string(_pipe@2). + +-spec reverse(binary()) -> binary(). +reverse(String) -> + do_reverse(String). + +-spec replace(binary(), binary(), binary()) -> binary(). +replace(String, Pattern, Substitute) -> + _pipe = String, + _pipe@1 = gleam@string_builder:from_string(_pipe), + _pipe@2 = gleam@string_builder:replace(_pipe@1, Pattern, Substitute), + gleam@string_builder:to_string(_pipe@2). + +-spec lowercase(binary()) -> binary(). +lowercase(String) -> + string:lowercase(String). + +-spec uppercase(binary()) -> binary(). +uppercase(String) -> + string:uppercase(String). + +-spec compare(binary(), binary()) -> gleam@order:order(). +compare(A, B) -> + case A =:= B of + true -> + eq; + + _ -> + case gleam_stdlib:less_than(A, B) of + true -> + lt; + + _ -> + gt + end + end. + +-spec slice(binary(), integer(), integer()) -> binary(). +slice(String, Idx, Len) -> + case Len < 0 of + true -> + <<""/utf8>>; + + false -> + case Idx < 0 of + true -> + Translated_idx = length(String) + Idx, + case Translated_idx < 0 of + true -> + <<""/utf8>>; + + false -> + string:slice(String, Translated_idx, Len) + end; + + false -> + string:slice(String, Idx, Len) + end + end. + +-spec crop(binary(), binary()) -> binary(). +crop(String, Substring) -> + gleam_stdlib:crop_string(String, Substring). + +-spec drop_left(binary(), integer()) -> binary(). +drop_left(String, Num_graphemes) -> + case Num_graphemes < 0 of + true -> + String; + + false -> + slice(String, Num_graphemes, length(String) - Num_graphemes) + end. + +-spec drop_right(binary(), integer()) -> binary(). +drop_right(String, Num_graphemes) -> + case Num_graphemes < 0 of + true -> + String; + + false -> + slice(String, 0, length(String) - Num_graphemes) + end. + +-spec contains(binary(), binary()) -> boolean(). +contains(Haystack, Needle) -> + gleam_stdlib:contains_string(Haystack, Needle). + +-spec starts_with(binary(), binary()) -> boolean(). +starts_with(String, Prefix) -> + gleam_stdlib:string_starts_with(String, Prefix). + +-spec ends_with(binary(), binary()) -> boolean(). +ends_with(String, Suffix) -> + gleam_stdlib:string_ends_with(String, Suffix). + +-spec do_split_once(binary(), binary()) -> {ok, {binary(), binary()}} | + {error, nil}. +do_split_once(X, Substring) -> + case string:split(X, Substring) of + [First, Rest] -> + {ok, {First, Rest}}; + + _ -> + {error, nil} + end. + +-spec split_once(binary(), binary()) -> {ok, {binary(), binary()}} | + {error, nil}. +split_once(X, Substring) -> + do_split_once(X, Substring). + +-spec append(binary(), binary()) -> binary(). +append(First, Second) -> + _pipe = First, + _pipe@1 = gleam@string_builder:from_string(_pipe), + _pipe@2 = gleam@string_builder:append(_pipe@1, Second), + gleam@string_builder:to_string(_pipe@2). + +-spec concat(list(binary())) -> binary(). +concat(Strings) -> + _pipe = Strings, + _pipe@1 = gleam@string_builder:from_strings(_pipe), + gleam@string_builder:to_string(_pipe@1). + +-spec repeat(binary(), integer()) -> binary(). +repeat(String, Times) -> + _pipe = gleam@iterator:repeat(String), + _pipe@1 = gleam@iterator:take(_pipe, Times), + _pipe@2 = gleam@iterator:to_list(_pipe@1), + concat(_pipe@2). + +-spec do_join(list(binary()), binary()) -> binary(). +do_join(Strings, Separator) -> + _pipe = Strings, + _pipe@1 = gleam@list:intersperse(_pipe, Separator), + concat(_pipe@1). + +-spec join(list(binary()), binary()) -> binary(). +join(Strings, Separator) -> + do_join(Strings, Separator). + +-spec padding(integer(), binary()) -> gleam@iterator:iterator(binary()). +padding(Size, Pad_string) -> + Pad_length = length(Pad_string), + Num_pads = case Pad_length of + 0 -> 0; + Gleam@denominator -> Size div Gleam@denominator + end, + Extra = case Pad_length of + 0 -> 0; + Gleam@denominator@1 -> Size rem Gleam@denominator@1 + end, + _pipe = gleam@iterator:repeat(Pad_string), + _pipe@1 = gleam@iterator:take(_pipe, Num_pads), + gleam@iterator:append( + _pipe@1, + gleam@iterator:single(slice(Pad_string, 0, Extra)) + ). + +-spec pad_left(binary(), integer(), binary()) -> binary(). +pad_left(String, Desired_length, Pad_string) -> + Current_length = length(String), + To_pad_length = Desired_length - Current_length, + _pipe = padding(To_pad_length, Pad_string), + _pipe@1 = gleam@iterator:append(_pipe, gleam@iterator:single(String)), + _pipe@2 = gleam@iterator:to_list(_pipe@1), + concat(_pipe@2). + +-spec pad_right(binary(), integer(), binary()) -> binary(). +pad_right(String, Desired_length, Pad_string) -> + Current_length = length(String), + To_pad_length = Desired_length - Current_length, + _pipe = gleam@iterator:single(String), + _pipe@1 = gleam@iterator:append(_pipe, padding(To_pad_length, Pad_string)), + _pipe@2 = gleam@iterator:to_list(_pipe@1), + concat(_pipe@2). + +-spec do_trim(binary()) -> binary(). +do_trim(String) -> + string:trim(String, both). + +-spec trim(binary()) -> binary(). +trim(String) -> + do_trim(String). + +-spec do_trim_left(binary()) -> binary(). +do_trim_left(String) -> + string:trim(String, leading). + +-spec trim_left(binary()) -> binary(). +trim_left(String) -> + do_trim_left(String). + +-spec do_trim_right(binary()) -> binary(). +do_trim_right(String) -> + string:trim(String, trailing). + +-spec trim_right(binary()) -> binary(). +trim_right(String) -> + do_trim_right(String). + +-spec pop_grapheme(binary()) -> {ok, {binary(), binary()}} | {error, nil}. +pop_grapheme(String) -> + gleam_stdlib:string_pop_grapheme(String). + +-spec do_to_graphemes(binary(), list(binary())) -> list(binary()). +do_to_graphemes(String, Acc) -> + case pop_grapheme(String) of + {ok, {Grapheme, Rest}} -> + do_to_graphemes(Rest, [Grapheme | Acc]); + + _ -> + Acc + end. + +-spec to_graphemes(binary()) -> list(binary()). +to_graphemes(String) -> + _pipe = do_to_graphemes(String, []), + gleam@list:reverse(_pipe). + +-spec split(binary(), binary()) -> list(binary()). +split(X, Substring) -> + case Substring of + <<""/utf8>> -> + to_graphemes(X); + + _ -> + _pipe = X, + _pipe@1 = gleam@string_builder:from_string(_pipe), + _pipe@2 = gleam@string_builder:split(_pipe@1, Substring), + gleam@list:map(_pipe@2, fun gleam@string_builder:to_string/1) + end. + +-spec do_to_utf_codepoints_impl(bitstring(), list(integer())) -> list(integer()). +do_to_utf_codepoints_impl(Bit_array, Acc) -> + case Bit_array of + <<First/utf8, Rest/binary>> -> + do_to_utf_codepoints_impl(Rest, [First | Acc]); + + _ -> + Acc + end. + +-spec do_to_utf_codepoints(binary()) -> list(integer()). +do_to_utf_codepoints(String) -> + _pipe = do_to_utf_codepoints_impl(<<String/binary>>, []), + gleam@list:reverse(_pipe). + +-spec to_utf_codepoints(binary()) -> list(integer()). +to_utf_codepoints(String) -> + do_to_utf_codepoints(String). + +-spec from_utf_codepoints(list(integer())) -> binary(). +from_utf_codepoints(Utf_codepoints) -> + gleam_stdlib:utf_codepoint_list_to_string(Utf_codepoints). + +-spec utf_codepoint(integer()) -> {ok, integer()} | {error, nil}. +utf_codepoint(Value) -> + case Value of + I when I > 1114111 -> + {error, nil}; + + 65534 -> + {error, nil}; + + 65535 -> + {error, nil}; + + I@1 when (I@1 >= 55296) andalso (I@1 =< 57343) -> + {error, nil}; + + I@2 -> + {ok, gleam_stdlib:identity(I@2)} + end. + +-spec utf_codepoint_to_int(integer()) -> integer(). +utf_codepoint_to_int(Cp) -> + gleam_stdlib:identity(Cp). + +-spec to_option(binary()) -> gleam@option:option(binary()). +to_option(S) -> + case S of + <<""/utf8>> -> + none; + + _ -> + {some, S} + end. + +-spec first(binary()) -> {ok, binary()} | {error, nil}. +first(S) -> + case pop_grapheme(S) of + {ok, {First, _}} -> + {ok, First}; + + {error, E} -> + {error, E} + end. + +-spec last(binary()) -> {ok, binary()} | {error, nil}. +last(S) -> + case pop_grapheme(S) of + {ok, {First, <<""/utf8>>}} -> + {ok, First}; + + {ok, {_, Rest}} -> + {ok, slice(Rest, -1, 1)}; + + {error, E} -> + {error, E} + end. + +-spec capitalise(binary()) -> binary(). +capitalise(S) -> + case pop_grapheme(S) of + {ok, {First, Rest}} -> + append(uppercase(First), lowercase(Rest)); + + _ -> + <<""/utf8>> + end. + +-spec inspect(any()) -> binary(). +inspect(Term) -> + _pipe = gleam_stdlib:inspect(Term), + gleam@string_builder:to_string(_pipe). + +-spec byte_size(binary()) -> integer(). +byte_size(String) -> + erlang:byte_size(String). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache Binary files differnew file mode 100644 index 0000000..0d2c392 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache_meta Binary files differnew file mode 100644 index 0000000..2ef42cf --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.erl new file mode 100644 index 0000000..693e840 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.erl @@ -0,0 +1,91 @@ +-module(gleam@string_builder). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([prepend_builder/2, append_builder/2, new/0, from_strings/1, concat/1, from_string/1, prepend/2, append/2, to_string/1, byte_size/1, join/2, lowercase/1, uppercase/1, reverse/1, split/2, replace/3, is_equal/2, is_empty/1]). +-export_type([string_builder/0, direction/0]). + +-type string_builder() :: any(). + +-type direction() :: all. + +-spec prepend_builder(string_builder(), string_builder()) -> string_builder(). +prepend_builder(Builder, Prefix) -> + gleam_stdlib:iodata_append(Prefix, Builder). + +-spec append_builder(string_builder(), string_builder()) -> string_builder(). +append_builder(Builder, Suffix) -> + gleam_stdlib:iodata_append(Builder, Suffix). + +-spec new() -> string_builder(). +new() -> + gleam_stdlib:identity([]). + +-spec from_strings(list(binary())) -> string_builder(). +from_strings(Strings) -> + gleam_stdlib:identity(Strings). + +-spec concat(list(string_builder())) -> string_builder(). +concat(Builders) -> + gleam_stdlib:identity(Builders). + +-spec from_string(binary()) -> string_builder(). +from_string(String) -> + gleam_stdlib:identity(String). + +-spec prepend(string_builder(), binary()) -> string_builder(). +prepend(Builder, Prefix) -> + append_builder(from_string(Prefix), Builder). + +-spec append(string_builder(), binary()) -> string_builder(). +append(Builder, Second) -> + append_builder(Builder, from_string(Second)). + +-spec to_string(string_builder()) -> binary(). +to_string(Builder) -> + unicode:characters_to_binary(Builder). + +-spec byte_size(string_builder()) -> integer(). +byte_size(Builder) -> + erlang:iolist_size(Builder). + +-spec join(list(string_builder()), binary()) -> string_builder(). +join(Builders, Sep) -> + _pipe = Builders, + _pipe@1 = gleam@list:intersperse(_pipe, from_string(Sep)), + concat(_pipe@1). + +-spec lowercase(string_builder()) -> string_builder(). +lowercase(Builder) -> + string:lowercase(Builder). + +-spec uppercase(string_builder()) -> string_builder(). +uppercase(Builder) -> + string:uppercase(Builder). + +-spec reverse(string_builder()) -> string_builder(). +reverse(Builder) -> + string:reverse(Builder). + +-spec do_split(string_builder(), binary()) -> list(string_builder()). +do_split(Iodata, Pattern) -> + string:split(Iodata, Pattern, all). + +-spec split(string_builder(), binary()) -> list(string_builder()). +split(Iodata, Pattern) -> + do_split(Iodata, Pattern). + +-spec do_replace(string_builder(), binary(), binary()) -> string_builder(). +do_replace(Iodata, Pattern, Substitute) -> + string:replace(Iodata, Pattern, Substitute, all). + +-spec replace(string_builder(), binary(), binary()) -> string_builder(). +replace(Builder, Pattern, Substitute) -> + do_replace(Builder, Pattern, Substitute). + +-spec is_equal(string_builder(), string_builder()) -> boolean(). +is_equal(A, B) -> + string:equal(A, B). + +-spec is_empty(string_builder()) -> boolean(). +is_empty(Builder) -> + string:is_empty(Builder). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache Binary files differnew file mode 100644 index 0000000..808bd6c --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_meta Binary files differnew file mode 100644 index 0000000..a8195fc --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_meta diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.erl new file mode 100644 index 0000000..e7c2696 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.erl @@ -0,0 +1,252 @@ +-module(gleam@uri). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([parse/1, parse_query/1, percent_encode/1, query_to_string/1, percent_decode/1, path_segments/1, to_string/1, origin/1, merge/2]). +-export_type([uri/0]). + +-type uri() :: {uri, + gleam@option:option(binary()), + gleam@option:option(binary()), + gleam@option:option(binary()), + gleam@option:option(integer()), + binary(), + gleam@option:option(binary()), + gleam@option:option(binary())}. + +-spec parse(binary()) -> {ok, uri()} | {error, nil}. +parse(Uri_string) -> + gleam_stdlib:uri_parse(Uri_string). + +-spec parse_query(binary()) -> {ok, list({binary(), binary()})} | {error, nil}. +parse_query(Query) -> + gleam_stdlib:parse_query(Query). + +-spec percent_encode(binary()) -> binary(). +percent_encode(Value) -> + gleam_stdlib:percent_encode(Value). + +-spec query_pair({binary(), binary()}) -> gleam@string_builder:string_builder(). +query_pair(Pair) -> + gleam@string_builder:from_strings( + [percent_encode(erlang:element(1, Pair)), + <<"="/utf8>>, + percent_encode(erlang:element(2, Pair))] + ). + +-spec query_to_string(list({binary(), binary()})) -> binary(). +query_to_string(Query) -> + _pipe = Query, + _pipe@1 = gleam@list:map(_pipe, fun query_pair/1), + _pipe@2 = gleam@list:intersperse( + _pipe@1, + gleam@string_builder:from_string(<<"&"/utf8>>) + ), + _pipe@3 = gleam@string_builder:concat(_pipe@2), + gleam@string_builder:to_string(_pipe@3). + +-spec percent_decode(binary()) -> {ok, binary()} | {error, nil}. +percent_decode(Value) -> + gleam_stdlib:percent_decode(Value). + +-spec do_remove_dot_segments(list(binary()), list(binary())) -> list(binary()). +do_remove_dot_segments(Input, Accumulator) -> + case Input of + [] -> + gleam@list:reverse(Accumulator); + + [Segment | Rest] -> + Accumulator@5 = case {Segment, Accumulator} of + {<<""/utf8>>, Accumulator@1} -> + Accumulator@1; + + {<<"."/utf8>>, Accumulator@2} -> + Accumulator@2; + + {<<".."/utf8>>, []} -> + []; + + {<<".."/utf8>>, [_ | Accumulator@3]} -> + Accumulator@3; + + {Segment@1, Accumulator@4} -> + [Segment@1 | Accumulator@4] + end, + do_remove_dot_segments(Rest, Accumulator@5) + end. + +-spec remove_dot_segments(list(binary())) -> list(binary()). +remove_dot_segments(Input) -> + do_remove_dot_segments(Input, []). + +-spec path_segments(binary()) -> list(binary()). +path_segments(Path) -> + remove_dot_segments(gleam@string:split(Path, <<"/"/utf8>>)). + +-spec to_string(uri()) -> binary(). +to_string(Uri) -> + Parts = case erlang:element(8, Uri) of + {some, Fragment} -> + [<<"#"/utf8>>, Fragment]; + + _ -> + [] + end, + Parts@1 = case erlang:element(7, Uri) of + {some, Query} -> + [<<"?"/utf8>>, Query | Parts]; + + _ -> + Parts + end, + Parts@2 = [erlang:element(6, Uri) | Parts@1], + Parts@3 = case {erlang:element(4, Uri), + gleam@string:starts_with(erlang:element(6, Uri), <<"/"/utf8>>)} of + {{some, Host}, false} when Host =/= <<""/utf8>> -> + [<<"/"/utf8>> | Parts@2]; + + {_, _} -> + Parts@2 + end, + Parts@4 = case {erlang:element(4, Uri), erlang:element(5, Uri)} of + {{some, _}, {some, Port}} -> + [<<":"/utf8>>, gleam@int:to_string(Port) | Parts@3]; + + {_, _} -> + Parts@3 + end, + Parts@5 = case {erlang:element(2, Uri), + erlang:element(3, Uri), + erlang:element(4, Uri)} of + {{some, S}, {some, U}, {some, H}} -> + [S, <<"://"/utf8>>, U, <<"@"/utf8>>, H | Parts@4]; + + {{some, S@1}, none, {some, H@1}} -> + [S@1, <<"://"/utf8>>, H@1 | Parts@4]; + + {{some, S@2}, {some, _}, none} -> + [S@2, <<":"/utf8>> | Parts@4]; + + {{some, S@2}, none, none} -> + [S@2, <<":"/utf8>> | Parts@4]; + + {none, none, {some, H@2}} -> + [<<"//"/utf8>>, H@2 | Parts@4]; + + {_, _, _} -> + Parts@4 + end, + gleam@string:concat(Parts@5). + +-spec origin(uri()) -> {ok, binary()} | {error, nil}. +origin(Uri) -> + {uri, Scheme, _, Host, Port, _, _, _} = Uri, + case Scheme of + {some, <<"https"/utf8>>} when Port =:= {some, 443} -> + Origin = {uri, Scheme, none, Host, none, <<""/utf8>>, none, none}, + {ok, to_string(Origin)}; + + {some, <<"http"/utf8>>} when Port =:= {some, 80} -> + Origin@1 = {uri, Scheme, none, Host, none, <<""/utf8>>, none, none}, + {ok, to_string(Origin@1)}; + + {some, S} when (S =:= <<"http"/utf8>>) orelse (S =:= <<"https"/utf8>>) -> + Origin@2 = {uri, Scheme, none, Host, Port, <<""/utf8>>, none, none}, + {ok, to_string(Origin@2)}; + + _ -> + {error, nil} + end. + +-spec drop_last(list(ERB)) -> list(ERB). +drop_last(Elements) -> + gleam@list:take(Elements, gleam@list:length(Elements) - 1). + +-spec join_segments(list(binary())) -> binary(). +join_segments(Segments) -> + gleam@string:join([<<""/utf8>> | Segments], <<"/"/utf8>>). + +-spec merge(uri(), uri()) -> {ok, uri()} | {error, nil}. +merge(Base, Relative) -> + case Base of + {uri, {some, _}, _, {some, _}, _, _, _, _} -> + case Relative of + {uri, _, _, {some, _}, _, _, _, _} -> + Path = begin + _pipe = gleam@string:split( + erlang:element(6, Relative), + <<"/"/utf8>> + ), + _pipe@1 = remove_dot_segments(_pipe), + join_segments(_pipe@1) + end, + Resolved = {uri, + gleam@option:'or'( + erlang:element(2, Relative), + erlang:element(2, Base) + ), + none, + erlang:element(4, Relative), + gleam@option:'or'( + erlang:element(5, Relative), + erlang:element(5, Base) + ), + Path, + erlang:element(7, Relative), + erlang:element(8, Relative)}, + {ok, Resolved}; + + _ -> + {New_path, New_query} = case erlang:element(6, Relative) of + <<""/utf8>> -> + {erlang:element(6, Base), + gleam@option:'or'( + erlang:element(7, Relative), + erlang:element(7, Base) + )}; + + _ -> + Path_segments = case gleam@string:starts_with( + erlang:element(6, Relative), + <<"/"/utf8>> + ) of + true -> + gleam@string:split( + erlang:element(6, Relative), + <<"/"/utf8>> + ); + + false -> + _pipe@2 = gleam@string:split( + erlang:element(6, Base), + <<"/"/utf8>> + ), + _pipe@3 = drop_last(_pipe@2), + gleam@list:append( + _pipe@3, + gleam@string:split( + erlang:element(6, Relative), + <<"/"/utf8>> + ) + ) + end, + Path@1 = begin + _pipe@4 = Path_segments, + _pipe@5 = remove_dot_segments(_pipe@4), + join_segments(_pipe@5) + end, + {Path@1, erlang:element(7, Relative)} + end, + Resolved@1 = {uri, + erlang:element(2, Base), + none, + erlang:element(4, Base), + erlang:element(5, Base), + New_path, + New_query, + erlang:element(8, Relative)}, + {ok, Resolved@1} + end; + + _ -> + {error, nil} + end. diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam_stdlib.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam_stdlib.erl new file mode 100644 index 0000000..c6ea125 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam_stdlib.erl @@ -0,0 +1,529 @@ +-module(gleam_stdlib). + +-export([ + map_get/2, iodata_append/2, identity/1, decode_int/1, decode_bool/1, + decode_float/1, decode_list/1, decode_option/2, decode_field/2, parse_int/1, + parse_float/1, less_than/2, string_pop_grapheme/1, string_starts_with/2, + wrap_list/1, string_ends_with/2, string_pad/4, decode_map/1, uri_parse/1, + bit_array_int_to_u32/1, bit_array_int_from_u32/1, decode_result/1, + bit_array_slice/3, decode_bit_array/1, compile_regex/2, regex_scan/2, + percent_encode/1, percent_decode/1, regex_check/2, regex_split/2, + base_decode64/1, parse_query/1, bit_array_concat/1, size_of_tuple/1, + decode_tuple/1, decode_tuple2/1, decode_tuple3/1, decode_tuple4/1, + decode_tuple5/1, decode_tuple6/1, tuple_get/2, classify_dynamic/1, print/1, + println/1, print_error/1, println_error/1, inspect/1, float_to_string/1, + int_from_base_string/2, utf_codepoint_list_to_string/1, contains_string/2, + crop_string/2, base16_decode/1 +]). + +%% Taken from OTP's uri_string module +-define(DEC2HEX(X), + if ((X) >= 0) andalso ((X) =< 9) -> (X) + $0; + ((X) >= 10) andalso ((X) =< 15) -> (X) + $A - 10 + end). + +%% Taken from OTP's uri_string module +-define(HEX2DEC(X), + if ((X) >= $0) andalso ((X) =< $9) -> (X) - $0; + ((X) >= $A) andalso ((X) =< $F) -> (X) - $A + 10; + ((X) >= $a) andalso ((X) =< $f) -> (X) - $a + 10 + end). + +-define(is_lowercase_char(X), (X > 96 andalso X < 123)). +-define(is_underscore_char(X), (X == 95)). +-define(is_digit_char(X), (X > 47 andalso X < 58)). + +uppercase(X) -> X - 32. + +map_get(Map, Key) -> + case maps:find(Key, Map) of + error -> {error, nil}; + OkFound -> OkFound + end. + +iodata_append(Iodata, String) -> [Iodata, String]. + +identity(X) -> X. + +decode_error_msg(Expected, Data) when is_binary(Expected) -> + decode_error(Expected, classify_dynamic(Data)). +decode_error(Expected, Got) when is_binary(Expected) andalso is_binary(Got) -> + {error, [{decode_error, Expected, Got, []}]}. + +classify_dynamic(nil) -> <<"Nil">>; +classify_dynamic(X) when is_atom(X) -> <<"Atom">>; +classify_dynamic(X) when is_binary(X) -> <<"String">>; +classify_dynamic(X) when is_bitstring(X) -> <<"BitArray">>; +classify_dynamic(X) when is_integer(X) -> <<"Int">>; +classify_dynamic(X) when is_float(X) -> <<"Float">>; +classify_dynamic(X) when is_list(X) -> <<"List">>; +classify_dynamic(X) when is_boolean(X) -> <<"Bool">>; +classify_dynamic(X) when is_map(X) -> <<"Map">>; +classify_dynamic(X) when is_tuple(X) -> + iolist_to_binary(["Tuple of ", integer_to_list(tuple_size(X)), " elements"]); +classify_dynamic(X) when + is_function(X, 0) orelse is_function(X, 1) orelse is_function(X, 2) orelse + is_function(X, 3) orelse is_function(X, 4) orelse is_function(X, 5) orelse + is_function(X, 6) orelse is_function(X, 7) orelse is_function(X, 8) orelse + is_function(X, 9) orelse is_function(X, 10) orelse is_function(X, 11) orelse + is_function(X, 12) -> <<"Function">>; +classify_dynamic(_) -> <<"Some other type">>. + +decode_map(Data) when is_map(Data) -> {ok, Data}; +decode_map(Data) -> decode_error_msg(<<"Map">>, Data). + +decode_bit_array(Data) when is_bitstring(Data) -> {ok, Data}; +decode_bit_array(Data) -> decode_error_msg(<<"BitArray">>, Data). + +decode_int(Data) when is_integer(Data) -> {ok, Data}; +decode_int(Data) -> decode_error_msg(<<"Int">>, Data). + +decode_float(Data) when is_float(Data) -> {ok, Data}; +decode_float(Data) -> decode_error_msg(<<"Float">>, Data). + +decode_bool(Data) when is_boolean(Data) -> {ok, Data}; +decode_bool(Data) -> decode_error_msg(<<"Bool">>, Data). + +decode_list(Data) when is_list(Data) -> {ok, Data}; +decode_list(Data) -> decode_error_msg(<<"List">>, Data). + +decode_field(Data, Key) when is_map(Data) -> + case Data of + #{Key := Value} -> {ok, {some, Value}}; + _ -> + {ok, none} + end; +decode_field(Data, _) -> + decode_error_msg(<<"Map">>, Data). + +size_of_tuple(Data) -> tuple_size(Data). + +tuple_get(_tup, Index) when Index < 0 -> {error, nil}; +tuple_get(Data, Index) when Index >= tuple_size(Data) -> {error, nil}; +tuple_get(Data, Index) -> {ok, element(Index + 1, Data)}. + +decode_tuple(Data) when is_tuple(Data) -> {ok, Data}; +decode_tuple(Data) -> decode_error_msg(<<"Tuple">>, Data). + +decode_tuple2({_,_} = A) -> {ok, A}; +decode_tuple2([A,B]) -> {ok, {A,B}}; +decode_tuple2(Data) -> decode_error_msg(<<"Tuple of 2 elements">>, Data). + +decode_tuple3({_,_,_} = A) -> {ok, A}; +decode_tuple3([A,B,C]) -> {ok, {A,B,C}}; +decode_tuple3(Data) -> decode_error_msg(<<"Tuple of 3 elements">>, Data). + +decode_tuple4({_,_,_,_} = A) -> {ok, A}; +decode_tuple4([A,B,C,D]) -> {ok, {A,B,C,D}}; +decode_tuple4(Data) -> decode_error_msg(<<"Tuple of 4 elements">>, Data). + +decode_tuple5({_,_,_,_,_} = A) -> {ok, A}; +decode_tuple5([A,B,C,D,E]) -> {ok, {A,B,C,D,E}}; +decode_tuple5(Data) -> decode_error_msg(<<"Tuple of 5 elements">>, Data). + +decode_tuple6({_,_,_,_,_,_} = A) -> {ok, A}; +decode_tuple6([A,B,C,D,E,F]) -> {ok, {A,B,C,D,E,F}}; +decode_tuple6(Data) -> decode_error_msg(<<"Tuple of 6 elements">>, Data). + +decode_option(Term, F) -> + Decode = fun(Inner) -> + case F(Inner) of + {ok, Decoded} -> {ok, {some, Decoded}}; + Error -> Error + end + end, + case Term of + undefined -> {ok, none}; + error -> {ok, none}; + null -> {ok, none}; + none -> {ok, none}; + nil -> {ok, none}; + {some, Inner} -> Decode(Inner); + _ -> Decode(Term) + end. + +decode_result(Term) -> + case Term of + {ok, Inner} -> {ok, {ok, Inner}}; + ok -> {ok, {ok, nil}}; + {error, Inner} -> {ok, {error, Inner}}; + error -> {ok, {error, nil}}; + _ -> decode_error_msg(<<"Result">>, Term) + end. + +int_from_base_string(String, Base) -> + case catch binary_to_integer(String, Base) of + Int when is_integer(Int) -> {ok, Int}; + _ -> {error, nil} + end. + +parse_int(String) -> + case catch binary_to_integer(String) of + Int when is_integer(Int) -> {ok, Int}; + _ -> {error, nil} + end. + +parse_float(String) -> + case catch binary_to_float(String) of + Float when is_float(Float) -> {ok, Float}; + _ -> {error, nil} + end. + +less_than(Lhs, Rhs) -> + Lhs < Rhs. + +string_starts_with(_, <<>>) -> true; +string_starts_with(String, Prefix) when byte_size(Prefix) > byte_size(String) -> false; +string_starts_with(String, Prefix) -> + PrefixSize = byte_size(Prefix), + Prefix == binary_part(String, 0, PrefixSize). + +string_ends_with(_, <<>>) -> true; +string_ends_with(String, Suffix) when byte_size(Suffix) > byte_size(String) -> false; +string_ends_with(String, Suffix) -> + SuffixSize = byte_size(Suffix), + Suffix == binary_part(String, byte_size(String) - SuffixSize, SuffixSize). + +string_pad(String, Length, Dir, PadString) -> + Chars = string:pad(String, Length, Dir, binary_to_list(PadString)), + case unicode:characters_to_binary(Chars) of + Bin when is_binary(Bin) -> Bin; + Error -> erlang:error({gleam_error, {string_invalid_utf8, Error}}) + end. + +string_pop_grapheme(String) -> + case string:next_grapheme(String) of + [ Next | Rest ] -> + {ok, {unicode:characters_to_binary([Next]), unicode:characters_to_binary(Rest)}}; + _ -> {error, nil} + end. + +bit_array_concat(BitArrays) -> + list_to_bitstring(BitArrays). + +bit_array_slice(Bin, Pos, Len) -> + try {ok, binary:part(Bin, Pos, Len)} + catch error:badarg -> {error, nil} + end. + +bit_array_int_to_u32(I) when 0 =< I, I < 4294967296 -> + {ok, <<I:32>>}; +bit_array_int_to_u32(_) -> + {error, nil}. + +bit_array_int_from_u32(<<I:32>>) -> + {ok, I}; +bit_array_int_from_u32(_) -> + {error, nil}. + +compile_regex(String, Options) -> + {options, Caseless, Multiline} = Options, + OptionsList = [ + unicode, + ucp, + Caseless andalso caseless, + Multiline andalso multiline + ], + FilteredOptions = [Option || Option <- OptionsList, Option /= false], + case re:compile(String, FilteredOptions) of + {ok, MP} -> {ok, MP}; + {error, {Str, Pos}} -> + {error, {compile_error, unicode:characters_to_binary(Str), Pos}} + end. + +regex_check(Regex, String) -> + re:run(String, Regex) /= nomatch. + +regex_split(Regex, String) -> + re:split(String, Regex). + +regex_submatches(_, {-1, 0}) -> none; +regex_submatches(String, {Start, Length}) -> + BinarySlice = binary:part(String, {Start, Length}), + case string:is_empty(binary_to_list(BinarySlice)) of + true -> none; + false -> {some, BinarySlice} + end. + +regex_matches(String, [{Start, Length} | Submatches]) -> + Submatches1 = lists:map(fun(X) -> regex_submatches(String, X) end, Submatches), + {match, binary:part(String, Start, Length), Submatches1}. + +regex_scan(Regex, String) -> + case re:run(String, Regex, [global]) of + {match, Captured} -> lists:map(fun(X) -> regex_matches(String, X) end, Captured); + nomatch -> [] + end. + +base_decode64(S) -> + try {ok, base64:decode(S)} + catch error:_ -> {error, nil} + end. + +wrap_list(X) when is_list(X) -> X; +wrap_list(X) -> [X]. + +parse_query(Query) -> + case uri_string:dissect_query(Query) of + {error, _, _} -> {error, nil}; + Pairs -> + Pairs1 = lists:map(fun + ({K, true}) -> {K, <<"">>}; + (Pair) -> Pair + end, Pairs), + {ok, Pairs1} + end. + +percent_encode(B) -> percent_encode(B, <<>>). +percent_encode(<<>>, Acc) -> + Acc; +percent_encode(<<H,T/binary>>, Acc) -> + case percent_ok(H) of + true -> + percent_encode(T, <<Acc/binary,H>>); + false -> + <<A:4,B:4>> = <<H>>, + percent_encode(T, <<Acc/binary,$%,(?DEC2HEX(A)),(?DEC2HEX(B))>>) + end. + +percent_decode(Cs) -> percent_decode(Cs, <<>>). +percent_decode(<<$%, C0, C1, Cs/binary>>, Acc) -> + case is_hex_digit(C0) andalso is_hex_digit(C1) of + true -> + B = ?HEX2DEC(C0)*16+?HEX2DEC(C1), + percent_decode(Cs, <<Acc/binary, B>>); + false -> + {error, nil} + end; +percent_decode(<<C,Cs/binary>>, Acc) -> + percent_decode(Cs, <<Acc/binary, C>>); +percent_decode(<<>>, Acc) -> + check_utf8(Acc). + +percent_ok($!) -> true; +percent_ok($$) -> true; +percent_ok($') -> true; +percent_ok($() -> true; +percent_ok($)) -> true; +percent_ok($*) -> true; +percent_ok($+) -> true; +percent_ok($-) -> true; +percent_ok($.) -> true; +percent_ok($_) -> true; +percent_ok($~) -> true; +percent_ok(C) when $0 =< C, C =< $9 -> true; +percent_ok(C) when $A =< C, C =< $Z -> true; +percent_ok(C) when $a =< C, C =< $z -> true; +percent_ok(_) -> false. + +is_hex_digit(C) -> + ($0 =< C andalso C =< $9) orelse ($a =< C andalso C =< $f) orelse ($A =< C andalso C =< $F). + +check_utf8(Cs) -> + case unicode:characters_to_list(Cs) of + {incomplete, _, _} -> {error, nil}; + {error, _, _} -> {error, nil}; + _ -> {ok, Cs} + end. + +uri_parse(String) -> + case uri_string:parse(String) of + {error, _, _} -> {error, nil}; + Uri -> + {ok, {uri, + maps_get_optional(Uri, scheme), + maps_get_optional(Uri, userinfo), + maps_get_optional(Uri, host), + maps_get_optional(Uri, port), + maps_get_or(Uri, path, <<>>), + maps_get_optional(Uri, query), + maps_get_optional(Uri, fragment) + }} + end. + +maps_get_optional(Map, Key) -> + try {some, maps:get(Key, Map)} + catch _:_ -> none + end. + +maps_get_or(Map, Key, Default) -> + try maps:get(Key, Map) + catch _:_ -> Default + end. + +print(String) -> + io:put_chars(String), + nil. + +println(String) -> + io:put_chars([String, $\n]), + nil. + +print_error(String) -> + io:put_chars(standard_error, String), + nil. + +println_error(String) -> + io:put_chars(standard_error, [String, $\n]), + nil. + +inspect(true) -> + "True"; +inspect(false) -> + "False"; +inspect(nil) -> + "Nil"; +inspect(Data) when is_map(Data) -> + Fields = [ + [<<"#(">>, inspect(Key), <<", ">>, inspect(Value), <<")">>] + || {Key, Value} <- maps:to_list(Data) + ], + ["dict.from_list([", lists:join(", ", Fields), "])"]; +inspect(Atom) when is_atom(Atom) -> + Binary = erlang:atom_to_binary(Atom), + case inspect_maybe_gleam_atom(Binary, none, <<>>) of + {ok, Inspected} -> Inspected; + {error, _} -> ["atom.create_from_string(\"", Binary, "\")"] + end; +inspect(Any) when is_integer(Any) -> + erlang:integer_to_list(Any); +inspect(Any) when is_float(Any) -> + io_lib_format:fwrite_g(Any); +inspect(Binary) when is_binary(Binary) -> + case inspect_maybe_utf8_string(Binary, <<>>) of + {ok, InspectedUtf8String} -> InspectedUtf8String; + {error, not_a_utf8_string} -> + Segments = [erlang:integer_to_list(X) || <<X>> <= Binary], + ["<<", lists:join(", ", Segments), ">>"] + end; +inspect(Bits) when is_bitstring(Bits) -> + inspect_bit_array(Bits); +inspect(List) when is_list(List) -> + case inspect_list(List) of + {proper, Elements} -> ["[", Elements, "]"]; + {improper, Elements} -> ["//erl([", Elements, "])"] + end; +inspect(Any) when is_tuple(Any) % Record constructors + andalso is_atom(element(1, Any)) + andalso element(1, Any) =/= false + andalso element(1, Any) =/= true + andalso element(1, Any) =/= nil +-> + [Atom | ArgsList] = erlang:tuple_to_list(Any), + Args = lists:join(<<", ">>, + lists:map(fun inspect/1, ArgsList) + ), + [inspect(Atom), "(", Args, ")"]; +inspect(Tuple) when is_tuple(Tuple) -> + Elements = lists:map(fun inspect/1, erlang:tuple_to_list(Tuple)), + ["#(", lists:join(", ", Elements), ")"]; +inspect(Any) when is_function(Any) -> + {arity, Arity} = erlang:fun_info(Any, arity), + ArgsAsciiCodes = lists:seq($a, $a + Arity - 1), + Args = lists:join(<<", ">>, + lists:map(fun(Arg) -> <<Arg>> end, ArgsAsciiCodes) + ), + ["//fn(", Args, ") { ... }"]; +inspect(Any) -> + ["//erl(", io_lib:format("~p", [Any]), ")"]. + + +inspect_maybe_gleam_atom(<<>>, none, _) -> + {error, nil}; +inspect_maybe_gleam_atom(<<First, _Rest/binary>>, none, _) when ?is_digit_char(First) -> + {error, nil}; +inspect_maybe_gleam_atom(<<"_", _Rest/binary>>, none, _) -> + {error, nil}; +inspect_maybe_gleam_atom(<<"_">>, _PrevChar, _Acc) -> + {error, nil}; +inspect_maybe_gleam_atom(<<"_", _Rest/binary>>, $_, _Acc) -> + {error, nil}; +inspect_maybe_gleam_atom(<<First, _Rest/binary>>, _PrevChar, _Acc) + when not (?is_lowercase_char(First) orelse ?is_underscore_char(First) orelse ?is_digit_char(First)) -> + {error, nil}; +inspect_maybe_gleam_atom(<<First, Rest/binary>>, none, Acc) -> + inspect_maybe_gleam_atom(Rest, First, <<Acc/binary, (uppercase(First))>>); +inspect_maybe_gleam_atom(<<"_", Rest/binary>>, _PrevChar, Acc) -> + inspect_maybe_gleam_atom(Rest, $_, Acc); +inspect_maybe_gleam_atom(<<First, Rest/binary>>, $_, Acc) -> + inspect_maybe_gleam_atom(Rest, First, <<Acc/binary, (uppercase(First))>>); +inspect_maybe_gleam_atom(<<First, Rest/binary>>, _PrevChar, Acc) -> + inspect_maybe_gleam_atom(Rest, First, <<Acc/binary, First>>); +inspect_maybe_gleam_atom(<<>>, _PrevChar, Acc) -> + {ok, Acc}; +inspect_maybe_gleam_atom(A, B, C) -> + erlang:display({A, B, C}), + throw({gleam_error, A, B, C}). + +inspect_list([]) -> + {proper, []}; +inspect_list([First]) -> + {proper, [inspect(First)]}; +inspect_list([First | Rest]) when is_list(Rest) -> + {Kind, Inspected} = inspect_list(Rest), + {Kind, [inspect(First), <<", ">> | Inspected]}; +inspect_list([First | ImproperTail]) -> + {improper, [inspect(First), <<" | ">>, inspect(ImproperTail)]}. + +inspect_bit_array(Bits) -> + Text = inspect_bit_array(Bits, <<"<<">>), + <<Text/binary, ">>">>. + +inspect_bit_array(<<>>, Acc) -> + Acc; +inspect_bit_array(<<X, Rest/bitstring>>, Acc) -> + inspect_bit_array(Rest, append_segment(Acc, erlang:integer_to_binary(X))); +inspect_bit_array(Rest, Acc) -> + Size = bit_size(Rest), + <<X:Size>> = Rest, + X1 = erlang:integer_to_binary(X), + Size1 = erlang:integer_to_binary(Size), + Segment = <<X1/binary, ":size(", Size1/binary, ")">>, + inspect_bit_array(<<>>, append_segment(Acc, Segment)). + +append_segment(<<"<<">>, Segment) -> + <<"<<", Segment/binary>>; +append_segment(Acc, Segment) -> + <<Acc/binary, ", ", Segment/binary>>. + + +inspect_maybe_utf8_string(Binary, Acc) -> + case Binary of + <<>> -> {ok, <<$", Acc/binary, $">>}; + <<First/utf8, Rest/binary>> -> + Escaped = case First of + $" -> <<$\\, $">>; + $\\ -> <<$\\, $\\>>; + $\r -> <<$\\, $r>>; + $\n -> <<$\\, $n>>; + $\t -> <<$\\, $t>>; + Other -> <<Other/utf8>> + end, + inspect_maybe_utf8_string(Rest, <<Acc/binary, Escaped/binary>>); + _ -> {error, not_a_utf8_string} + end. + +float_to_string(Float) when is_float(Float) -> + erlang:iolist_to_binary(io_lib_format:fwrite_g(Float)). + +utf_codepoint_list_to_string(List) -> + case unicode:characters_to_binary(List) of + {error, _} -> erlang:error({gleam_error, {string_invalid_utf8, List}}); + Binary -> Binary + end. + +crop_string(String, Prefix) -> + case string:find(String, Prefix) of + nomatch -> String; + New -> New + end. + +contains_string(String, Substring) -> + is_bitstring(string:find(String, Substring)). + +base16_decode(String) -> + try + {ok, binary:decode_hex(String)} + catch + _:_ -> {error, nil} + end. diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam_stdlib.mjs b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam_stdlib.mjs new file mode 100644 index 0000000..a908b23 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam_stdlib.mjs @@ -0,0 +1,875 @@ +import { + BitArray, + Error, + List, + Ok, + Result, + UtfCodepoint, + stringBits, + toBitArray, + NonEmpty, + CustomType, +} from "./gleam.mjs"; +import { + CompileError as RegexCompileError, + Match as RegexMatch, +} from "./gleam/regex.mjs"; +import { DecodeError } from "./gleam/dynamic.mjs"; +import { Some, None } from "./gleam/option.mjs"; +import Dict from "./dict.mjs"; + +const Nil = undefined; +const NOT_FOUND = {}; + +export function identity(x) { + return x; +} + +export function parse_int(value) { + if (/^[-+]?(\d+)$/.test(value)) { + return new Ok(parseInt(value)); + } else { + return new Error(Nil); + } +} + +export function parse_float(value) { + if (/^[-+]?(\d+)\.(\d+)$/.test(value)) { + return new Ok(parseFloat(value)); + } else { + return new Error(Nil); + } +} + +export function to_string(term) { + return term.toString(); +} + +export function float_to_string(float) { + const string = float.toString(); + if (string.indexOf(".") >= 0) { + return string; + } else { + return string + ".0"; + } +} + +export function int_to_base_string(int, base) { + return int.toString(base).toUpperCase(); +} + +const int_base_patterns = { + 2: /[^0-1]/, + 3: /[^0-2]/, + 4: /[^0-3]/, + 5: /[^0-4]/, + 6: /[^0-5]/, + 7: /[^0-6]/, + 8: /[^0-7]/, + 9: /[^0-8]/, + 10: /[^0-9]/, + 11: /[^0-9a]/, + 12: /[^0-9a-b]/, + 13: /[^0-9a-c]/, + 14: /[^0-9a-d]/, + 15: /[^0-9a-e]/, + 16: /[^0-9a-f]/, + 17: /[^0-9a-g]/, + 18: /[^0-9a-h]/, + 19: /[^0-9a-i]/, + 20: /[^0-9a-j]/, + 21: /[^0-9a-k]/, + 22: /[^0-9a-l]/, + 23: /[^0-9a-m]/, + 24: /[^0-9a-n]/, + 25: /[^0-9a-o]/, + 26: /[^0-9a-p]/, + 27: /[^0-9a-q]/, + 28: /[^0-9a-r]/, + 29: /[^0-9a-s]/, + 30: /[^0-9a-t]/, + 31: /[^0-9a-u]/, + 32: /[^0-9a-v]/, + 33: /[^0-9a-w]/, + 34: /[^0-9a-x]/, + 35: /[^0-9a-y]/, + 36: /[^0-9a-z]/, +}; + +export function int_from_base_string(string, base) { + if (int_base_patterns[base].test(string.replace(/^-/, "").toLowerCase())) { + return new Error(Nil); + } + + const result = parseInt(string, base); + + if (isNaN(result)) { + return new Error(Nil); + } + + return new Ok(result); +} + +export function string_replace(string, target, substitute) { + if (typeof string.replaceAll !== "undefined") { + return string.replaceAll(target, substitute); + } + // Fallback for older Node.js versions: + // 1. <https://stackoverflow.com/a/1144788> + // 2. <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping> + // TODO: This fallback could be remove once Node.js 14 is EOL + // aka <https://nodejs.org/en/about/releases/> on or after 2024-04-30 + return string.replace( + // $& means the whole matched string + new RegExp(target.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g"), + substitute + ); +} + +export function string_reverse(string) { + return [...string].reverse().join(""); +} + +export function string_length(string) { + if (string === "") { + return 0; + } + const iterator = graphemes_iterator(string); + if (iterator) { + let i = 0; + for (const _ of iterator) { + i++; + } + return i; + } else { + return string.match(/./gsu).length; + } +} + +export function graphemes(string) { + return List.fromArray( + Array.from(graphemes_iterator(string)).map((item) => item.segment) + ); +} + +function graphemes_iterator(string) { + if (Intl && Intl.Segmenter) { + return new Intl.Segmenter().segment(string)[Symbol.iterator](); + } +} + +export function pop_grapheme(string) { + let first; + const iterator = graphemes_iterator(string); + if (iterator) { + first = iterator.next().value?.segment; + } else { + first = string.match(/./su)?.[0]; + } + if (first) { + return new Ok([first, string.slice(first.length)]); + } else { + return new Error(Nil); + } +} + +export function lowercase(string) { + return string.toLowerCase(); +} + +export function uppercase(string) { + return string.toUpperCase(); +} + +export function less_than(a, b) { + return a < b; +} + +export function add(a, b) { + return a + b; +} + +export function equal(a, b) { + return a === b; +} + +export function split(xs, pattern) { + return List.fromArray(xs.split(pattern)); +} + +export function join(xs, separator) { + const iterator = xs[Symbol.iterator](); + let result = iterator.next().value || ""; + let current = iterator.next(); + while (!current.done) { + result = result + separator + current.value; + current = iterator.next(); + } + return result; +} + +export function concat(xs) { + let result = ""; + for (const x of xs) { + result = result + x; + } + return result; +} + +export function length(data) { + return data.length; +} + +export function crop_string(string, substring) { + return string.substring(string.indexOf(substring)); +} + +export function contains_string(haystack, needle) { + return haystack.indexOf(needle) >= 0; +} + +export function starts_with(haystack, needle) { + return haystack.startsWith(needle); +} + +export function ends_with(haystack, needle) { + return haystack.endsWith(needle); +} + +export function split_once(haystack, needle) { + const index = haystack.indexOf(needle); + if (index >= 0) { + const before = haystack.slice(0, index); + const after = haystack.slice(index + needle.length); + return new Ok([before, after]); + } else { + return new Error(Nil); + } +} + +export function trim(string) { + return string.trim(); +} + +export function trim_left(string) { + return string.trimLeft(); +} + +export function trim_right(string) { + return string.trimRight(); +} + +export function bit_array_from_string(string) { + return toBitArray([stringBits(string)]); +} + +export function bit_array_concat(bit_arrays) { + return toBitArray(bit_arrays.toArray().map((b) => b.buffer)); +} + +export function console_log(term) { + console.log(term); +} + +export function console_error(term) { + console.error(term); +} + +export function crash(message) { + throw new globalThis.Error(message); +} + +export function bit_array_to_string(bit_array) { + try { + const decoder = new TextDecoder("utf-8", { fatal: true }); + return new Ok(decoder.decode(bit_array.buffer)); + } catch (_error) { + return new Error(Nil); + } +} + +export function print(string) { + if (typeof process === "object") { + process.stdout.write(string); // We can write without a trailing newline + } else if (typeof Deno === "object") { + Deno.stdout.writeSync(new TextEncoder().encode(string)); // We can write without a trailing newline + } else { + console.log(string); // We're in a browser. Newlines are mandated + } +} + +export function print_error(string) { + if (typeof process === "object" && process.stderr?.write) { + process.stderr.write(string); // We can write without a trailing newline + } else if (typeof Deno === "object") { + Deno.stderr.writeSync(new TextEncoder().encode(string)); // We can write without a trailing newline + } else { + console.error(string); // We're in a browser. Newlines are mandated + } +} + +export function print_debug(string) { + if (typeof process === "object" && process.stderr?.write) { + process.stderr.write(string + "\n"); // If we're in Node.js, use `stderr` + } else if (typeof Deno === "object") { + Deno.stderr.writeSync(new TextEncoder().encode(string + "\n")); // If we're in Deno, use `stderr` + } else { + console.log(string); // Otherwise, use `console.log` (so that it doesn't look like an error) + } +} + +export function ceiling(float) { + return Math.ceil(float); +} + +export function floor(float) { + return Math.floor(float); +} + +export function round(float) { + return Math.round(float); +} + +export function truncate(float) { + return Math.trunc(float); +} + +export function power(base, exponent) { + // It is checked in Gleam that: + // - The base is non-negative and that the exponent is not fractional. + // - The base is non-zero and the exponent is non-negative (otherwise + // the result will essentially be division by zero). + // It can thus be assumed that valid input is passed to the Math.pow + // function and a NaN or Infinity value will not be produced. + return Math.pow(base, exponent); +} + +export function random_uniform() { + const random_uniform_result = Math.random(); + // With round-to-nearest-even behavior, the ranges claimed for the functions below + // (excluding the one for Math.random() itself) aren't exact. + // If extremely large bounds are chosen (2^53 or higher), + // it's possible in extremely rare cases to calculate the usually-excluded upper bound. + // Note that as numbers in JavaScript are IEEE 754 floating point numbers + // See: <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random> + // Because of this, we just loop 'until' we get a valid result where 0.0 <= x < 1.0: + if (random_uniform_result === 1.0) { + return random_uniform(); + } + return random_uniform_result; +} + +export function bit_array_slice(bits, position, length) { + const start = Math.min(position, position + length); + const end = Math.max(position, position + length); + if (start < 0 || end > bits.length) return new Error(Nil); + const buffer = new Uint8Array(bits.buffer.buffer, start, Math.abs(length)); + return new Ok(new BitArray(buffer)); +} + +export function codepoint(int) { + return new UtfCodepoint(int); +} + +export function string_to_codepoint_integer_list(string) { + return List.fromArray(Array.from(string).map((item) => item.codePointAt(0))); +} + +export function utf_codepoint_list_to_string(utf_codepoint_integer_list) { + return utf_codepoint_integer_list + .toArray() + .map((x) => String.fromCodePoint(x.value)) + .join(""); +} + +export function utf_codepoint_to_int(utf_codepoint) { + return utf_codepoint.value; +} + +export function regex_check(regex, string) { + regex.lastIndex = 0; + return regex.test(string); +} + +export function compile_regex(pattern, options) { + try { + let flags = "gu"; + if (options.case_insensitive) flags += "i"; + if (options.multi_line) flags += "m"; + return new Ok(new RegExp(pattern, flags)); + } catch (error) { + const number = (error.columnNumber || 0) | 0; + return new Error(new RegexCompileError(error.message, number)); + } +} + +export function regex_scan(regex, string) { + const matches = Array.from(string.matchAll(regex)).map((match) => { + const content = match[0]; + const submatches = []; + for (let n = match.length - 1; n > 0; n--) { + if (match[n]) { + submatches[n - 1] = new Some(match[n]); + continue; + } + if (submatches.length > 0) { + submatches[n - 1] = new None(); + } + } + return new RegexMatch(content, List.fromArray(submatches)); + }); + return List.fromArray(matches); +} + +export function new_map() { + return Dict.new(); +} + +export function map_size(map) { + return map.size; +} + +export function map_to_list(map) { + return List.fromArray(map.entries()); +} + +export function map_remove(key, map) { + return map.delete(key); +} + +export function map_get(map, key) { + const value = map.get(key, NOT_FOUND); + if (value === NOT_FOUND) { + return new Error(Nil); + } + return new Ok(value); +} + +export function map_insert(key, value, map) { + return map.set(key, value); +} + +function unsafe_percent_decode(string) { + return decodeURIComponent((string || "").replace("+", " ")); +} + +export function percent_decode(string) { + try { + return new Ok(unsafe_percent_decode(string)); + } catch (_error) { + return new Error(Nil); + } +} + +export function percent_encode(string) { + return encodeURIComponent(string); +} + +export function parse_query(query) { + try { + const pairs = []; + for (const section of query.split("&")) { + const [key, value] = section.split("="); + if (!key) continue; + pairs.push([unsafe_percent_decode(key), unsafe_percent_decode(value)]); + } + return new Ok(List.fromArray(pairs)); + } catch (_error) { + return new Error(Nil); + } +} + +// From https://developer.mozilla.org/en-US/docs/Glossary/Base64#Solution_2_%E2%80%93_rewrite_the_DOMs_atob()_and_btoa()_using_JavaScript's_TypedArrays_and_UTF-8 +export function encode64(bit_array) { + const aBytes = bit_array.buffer; + let nMod3 = 2; + let sB64Enc = ""; + + for (let nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) { + nMod3 = nIdx % 3; + if (nIdx > 0 && ((nIdx * 4) / 3) % 76 === 0) { + sB64Enc += "\r\n"; + } + nUint24 |= aBytes[nIdx] << ((16 >>> nMod3) & 24); + if (nMod3 === 2 || aBytes.length - nIdx === 1) { + sB64Enc += String.fromCharCode( + uint6ToB64((nUint24 >>> 18) & 63), + uint6ToB64((nUint24 >>> 12) & 63), + uint6ToB64((nUint24 >>> 6) & 63), + uint6ToB64(nUint24 & 63) + ); + nUint24 = 0; + } + } + + return ( + sB64Enc.substr(0, sB64Enc.length - 2 + nMod3) + + (nMod3 === 2 ? "" : nMod3 === 1 ? "=" : "==") + ); +} + +// From https://developer.mozilla.org/en-US/docs/Glossary/Base64#Solution_2_%E2%80%93_rewrite_the_DOMs_atob()_and_btoa()_using_JavaScript's_TypedArrays_and_UTF-8 +function uint6ToB64(nUint6) { + return nUint6 < 26 + ? nUint6 + 65 + : nUint6 < 52 + ? nUint6 + 71 + : nUint6 < 62 + ? nUint6 - 4 + : nUint6 === 62 + ? 43 + : nUint6 === 63 + ? 47 + : 65; +} + +// From https://developer.mozilla.org/en-US/docs/Glossary/Base64#Solution_2_%E2%80%93_rewrite_the_DOMs_atob()_and_btoa()_using_JavaScript's_TypedArrays_and_UTF-8 +function b64ToUint6(nChr) { + return nChr > 64 && nChr < 91 + ? nChr - 65 + : nChr > 96 && nChr < 123 + ? nChr - 71 + : nChr > 47 && nChr < 58 + ? nChr + 4 + : nChr === 43 + ? 62 + : nChr === 47 + ? 63 + : 0; +} + +// From https://developer.mozilla.org/en-US/docs/Glossary/Base64#Solution_2_%E2%80%93_rewrite_the_DOMs_atob()_and_btoa()_using_JavaScript's_TypedArrays_and_UTF-8 +export function decode64(sBase64) { + if (sBase64.match(/[^A-Za-z0-9\+\/=]/g)) return new Error(Nil); + const sB64Enc = sBase64.replace(/=/g, ""); + const nInLen = sB64Enc.length; + const nOutLen = (nInLen * 3 + 1) >> 2; + const taBytes = new Uint8Array(nOutLen); + + for ( + let nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0; + nInIdx < nInLen; + nInIdx++ + ) { + nMod4 = nInIdx & 3; + nUint24 |= b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << (6 * (3 - nMod4)); + if (nMod4 === 3 || nInLen - nInIdx === 1) { + for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++) { + taBytes[nOutIdx] = (nUint24 >>> ((16 >>> nMod3) & 24)) & 255; + } + nUint24 = 0; + } + } + + return new Ok(new BitArray(taBytes)); +} + +export function classify_dynamic(data) { + if (typeof data === "string") { + return "String"; + } else if (data instanceof Result) { + return "Result"; + } else if (data instanceof List) { + return "List"; + } else if (data instanceof BitArray) { + return "BitArray"; + } else if (data instanceof Dict) { + return "Map"; + } else if (Number.isInteger(data)) { + return "Int"; + } else if (Array.isArray(data)) { + return `Tuple of ${data.length} elements`; + } else if (typeof data === "number") { + return "Float"; + } else if (data === null) { + return "Null"; + } else if (data === undefined) { + return "Nil"; + } else { + const type = typeof data; + return type.charAt(0).toUpperCase() + type.slice(1); + } +} + +function decoder_error(expected, got) { + return decoder_error_no_classify(expected, classify_dynamic(got)); +} + +function decoder_error_no_classify(expected, got) { + return new Error( + List.fromArray([new DecodeError(expected, got, List.fromArray([]))]) + ); +} + +export function decode_string(data) { + return typeof data === "string" + ? new Ok(data) + : decoder_error("String", data); +} + +export function decode_int(data) { + return Number.isInteger(data) ? new Ok(data) : decoder_error("Int", data); +} + +export function decode_float(data) { + return typeof data === "number" ? new Ok(data) : decoder_error("Float", data); +} + +export function decode_bool(data) { + return typeof data === "boolean" ? new Ok(data) : decoder_error("Bool", data); +} + +export function decode_bit_array(data) { + if (data instanceof BitArray) { + return new Ok(data); + } + if (data instanceof Uint8Array) { + return new Ok(new BitArray(data)); + } + return decoder_error("BitArray", data); +} + +export function decode_tuple(data) { + return Array.isArray(data) ? new Ok(data) : decoder_error("Tuple", data); +} + +export function decode_tuple2(data) { + return decode_tupleN(data, 2); +} + +export function decode_tuple3(data) { + return decode_tupleN(data, 3); +} + +export function decode_tuple4(data) { + return decode_tupleN(data, 4); +} + +export function decode_tuple5(data) { + return decode_tupleN(data, 5); +} + +export function decode_tuple6(data) { + return decode_tupleN(data, 6); +} + +function decode_tupleN(data, n) { + if (Array.isArray(data) && data.length == n) { + return new Ok(data); + } + + const list = decode_exact_length_list(data, n); + if (list) return new Ok(list); + + return decoder_error(`Tuple of ${n} elements`, data); +} + +function decode_exact_length_list(data, n) { + if (!(data instanceof List)) return; + + const elements = []; + let current = data; + + for (let i = 0; i < n; i++) { + if (!(current instanceof NonEmpty)) break; + elements.push(current.head); + current = current.tail; + } + + if (elements.length === n && !(current instanceof NonEmpty)) return elements; +} + +export function tuple_get(data, index) { + return index >= 0 && data.length > index + ? new Ok(data[index]) + : new Error(Nil); +} + +export function decode_list(data) { + if (Array.isArray(data)) { + return new Ok(List.fromArray(data)); + } + return data instanceof List ? new Ok(data) : decoder_error("List", data); +} + +export function decode_result(data) { + return data instanceof Result ? new Ok(data) : decoder_error("Result", data); +} + +export function decode_map(data) { + if (data instanceof Dict) { + return new Ok(Dict.fromMap(data)); + } + if (data == null) { + return decoder_error("Map", data); + } + if (typeof data !== "object") { + return decoder_error("Map", data); + } + const proto = Object.getPrototypeOf(data); + if (proto === Object.prototype || proto === null) { + return new Ok(Dict.fromObject(data)); + } + return decoder_error("Map", data); +} + +export function decode_option(data, decoder) { + if (data === null || data === undefined || data instanceof None) + return new Ok(new None()); + if (data instanceof Some) data = data[0]; + const result = decoder(data); + if (result.isOk()) { + return new Ok(new Some(result[0])); + } else { + return result; + } +} + +export function decode_field(value, name) { + const not_a_map_error = () => decoder_error("Map", value); + + if ( + value instanceof Dict || + value instanceof WeakMap || + value instanceof Map + ) { + const entry = map_get(value, name); + return new Ok(entry.isOk() ? new Some(entry[0]) : new None()); + } else if (Object.getPrototypeOf(value) == Object.prototype) { + return try_get_field(value, name, () => new Ok(new None())); + } else { + return try_get_field(value, name, not_a_map_error); + } +} + +function try_get_field(value, field, or_else) { + try { + return field in value ? new Ok(new Some(value[field])) : or_else(); + } catch { + return or_else(); + } +} + +export function byte_size(string) { + return new TextEncoder().encode(string).length; +} + +// In Javascript bitwise operations convert numbers to a sequence of 32 bits +// while Erlang uses arbitrary precision. +// To get around this problem and get consistent results use BigInt and then +// downcast the value back to a Number value. + +export function bitwise_and(x, y) { + return Number(BigInt(x) & BigInt(y)); +} + +export function bitwise_not(x) { + return Number(~BigInt(x)); +} + +export function bitwise_or(x, y) { + return Number(BigInt(x) | BigInt(y)); +} + +export function bitwise_exclusive_or(x, y) { + return Number(BigInt(x) ^ BigInt(y)); +} + +export function bitwise_shift_left(x, y) { + return Number(BigInt(x) << BigInt(y)); +} + +export function bitwise_shift_right(x, y) { + return Number(BigInt(x) >> BigInt(y)); +} + +export function inspect(v) { + const t = typeof v; + if (v === true) return "True"; + if (v === false) return "False"; + if (v === null) return "//js(null)"; + if (v === undefined) return "Nil"; + if (t === "string") return JSON.stringify(v); + if (t === "bigint" || t === "number") return v.toString(); + if (Array.isArray(v)) return `#(${v.map(inspect).join(", ")})`; + if (v instanceof List) return inspectList(v); + if (v instanceof UtfCodepoint) return inspectUtfCodepoint(v); + if (v instanceof BitArray) return inspectBitArray(v); + if (v instanceof CustomType) return inspectCustomType(v); + if (v instanceof Dict) return inspectDict(v); + if (v instanceof Set) return `//js(Set(${[...v].map(inspect).join(", ")}))`; + if (v instanceof RegExp) return `//js(${v})`; + if (v instanceof Date) return `//js(Date("${v.toISOString()}"))`; + if (v instanceof Function) { + const args = []; + for (const i of Array(v.length).keys()) + args.push(String.fromCharCode(i + 97)); + return `//fn(${args.join(", ")}) { ... }`; + } + return inspectObject(v); +} + +function inspectDict(map) { + let body = "dict.from_list(["; + let first = true; + map.forEach((value, key) => { + if (!first) body = body + ", "; + body = body + "#(" + inspect(key) + ", " + inspect(value) + ")"; + first = false; + }); + return body + "])"; +} + +function inspectObject(v) { + const name = Object.getPrototypeOf(v)?.constructor?.name || "Object"; + const props = []; + for (const k of Object.keys(v)) { + props.push(`${inspect(k)}: ${inspect(v[k])}`); + } + const body = props.length ? " " + props.join(", ") + " " : ""; + const head = name === "Object" ? "" : name + " "; + return `//js(${head}{${body}})`; +} + +function inspectCustomType(record) { + const props = Object.keys(record) + .map((label) => { + const value = inspect(record[label]); + return isNaN(parseInt(label)) ? `${label}: ${value}` : value; + }) + .join(", "); + return props + ? `${record.constructor.name}(${props})` + : record.constructor.name; +} + +export function inspectList(list) { + return `[${list.toArray().map(inspect).join(", ")}]`; +} + +export function inspectBitArray(bits) { + return `<<${Array.from(bits.buffer).join(", ")}>>`; +} + +export function inspectUtfCodepoint(codepoint) { + return `//utfcodepoint(${String.fromCodePoint(codepoint.value)})`; +} + +export function base16_encode(bit_array) { + let result = ""; + for (const byte of bit_array.buffer) { + result += byte.toString(16).padStart(2, "0").toUpperCase(); + } + return result; +} + +export function base16_decode(string) { + const bytes = new Uint8Array(string.length / 2); + for (let i = 0; i < string.length; i += 2) { + const a = parseInt(string[i], 16); + const b = parseInt(string[i + 1], 16); + if (isNaN(a) || isNaN(b)) return new Error(Nil); + bytes[i / 2] = a * 16 + b; + } + return new Ok(new BitArray(bytes)); +} diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@base.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@base.beam Binary files differnew file mode 100644 index 0000000..66ecfaf --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@base.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_array.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_array.beam Binary files differnew file mode 100644 index 0000000..12fe362 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_array.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_builder.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_builder.beam Binary files differnew file mode 100644 index 0000000..ea1ebc6 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_builder.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_string.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_string.beam Binary files differnew file mode 100644 index 0000000..b8a7f29 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_string.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bool.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bool.beam Binary files differnew file mode 100644 index 0000000..49ceff6 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bool.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bytes_builder.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bytes_builder.beam Binary files differnew file mode 100644 index 0000000..768e658 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bytes_builder.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@dict.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@dict.beam Binary files differnew file mode 100644 index 0000000..91ac492 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@dict.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@dynamic.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@dynamic.beam Binary files differnew file mode 100644 index 0000000..4945547 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@dynamic.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@float.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@float.beam Binary files differnew file mode 100644 index 0000000..b0b6b33 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@float.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@function.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@function.beam Binary files differnew file mode 100644 index 0000000..1a0aca0 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@function.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@int.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@int.beam Binary files differnew file mode 100644 index 0000000..a8594f4 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@int.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@io.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@io.beam Binary files differnew file mode 100644 index 0000000..fdadf55 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@io.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@iterator.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@iterator.beam Binary files differnew file mode 100644 index 0000000..e7997d2 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@iterator.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@list.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@list.beam Binary files differnew file mode 100644 index 0000000..2d8125f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@list.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@map.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@map.beam Binary files differnew file mode 100644 index 0000000..ba9c9e2 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@map.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@option.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@option.beam Binary files differnew file mode 100644 index 0000000..ed16040 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@option.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@order.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@order.beam Binary files differnew file mode 100644 index 0000000..e5a5990 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@order.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@pair.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@pair.beam Binary files differnew file mode 100644 index 0000000..1db55b8 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@pair.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@queue.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@queue.beam Binary files differnew file mode 100644 index 0000000..c4e81fc --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@queue.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@regex.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@regex.beam Binary files differnew file mode 100644 index 0000000..d4daa3f --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@regex.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@result.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@result.beam Binary files differnew file mode 100644 index 0000000..13eeb10 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@result.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@set.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@set.beam Binary files differnew file mode 100644 index 0000000..ad16119 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@set.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@string.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@string.beam Binary files differnew file mode 100644 index 0000000..6565dd5 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@string.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@string_builder.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@string_builder.beam Binary files differnew file mode 100644 index 0000000..f968a74 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@string_builder.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@uri.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@uri.beam Binary files differnew file mode 100644 index 0000000..8c0d9ec --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@uri.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam_stdlib.app b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam_stdlib.app new file mode 100644 index 0000000..8231979 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam_stdlib.app @@ -0,0 +1,7 @@ +{application, gleam_stdlib, [ + {vsn, "0.33.0"}, + {applications, []}, + {description, "A standard library for the Gleam programming language"}, + {modules, []}, + {registered, []} +]}. diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam_stdlib.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam_stdlib.beam Binary files differnew file mode 100644 index 0000000..4215626 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam_stdlib.beam diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@dynamic_DecodeError.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@dynamic_DecodeError.hrl new file mode 100644 index 0000000..b1135f2 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@dynamic_DecodeError.hrl @@ -0,0 +1,5 @@ +-record(decode_error, { + expected :: binary(), + found :: binary(), + path :: list(binary()) +}). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@iterator_Iterator.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@iterator_Iterator.hrl new file mode 100644 index 0000000..b0d08dc --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@iterator_Iterator.hrl @@ -0,0 +1 @@ +-record(iterator, {continuation :: fun(() -> gleam@iterator:action(any()))}). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@iterator_Next.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@iterator_Next.hrl new file mode 100644 index 0000000..1f61922 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@iterator_Next.hrl @@ -0,0 +1 @@ +-record(next, {element :: any(), accumulator :: any()}). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@queue_Queue.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@queue_Queue.hrl new file mode 100644 index 0000000..88ac25e --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@queue_Queue.hrl @@ -0,0 +1 @@ +-record(queue, {in :: list(any()), out :: list(any())}). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_CompileError.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_CompileError.hrl new file mode 100644 index 0000000..ad5511e --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_CompileError.hrl @@ -0,0 +1 @@ +-record(compile_error, {error :: binary(), byte_index :: integer()}). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_Match.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_Match.hrl new file mode 100644 index 0000000..4216619 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_Match.hrl @@ -0,0 +1,4 @@ +-record(match, { + content :: binary(), + submatches :: list(gleam@option:option(binary())) +}). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_Options.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_Options.hrl new file mode 100644 index 0000000..0074603 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_Options.hrl @@ -0,0 +1 @@ +-record(options, {case_insensitive :: boolean(), multi_line :: boolean()}). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@set_Set.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@set_Set.hrl new file mode 100644 index 0000000..6e1e226 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@set_Set.hrl @@ -0,0 +1 @@ +-record(set, {map :: gleam@dict:dict(any(), list(nil))}). diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@uri_Uri.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@uri_Uri.hrl new file mode 100644 index 0000000..50150f4 --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@uri_Uri.hrl @@ -0,0 +1,9 @@ +-record(uri, { + scheme :: gleam@option:option(binary()), + userinfo :: gleam@option:option(binary()), + host :: gleam@option:option(binary()), + port :: gleam@option:option(integer()), + path :: binary(), + 'query' :: gleam@option:option(binary()), + fragment :: gleam@option:option(binary()) +}). diff --git a/aoc2023/build/dev/erlang/gleam_version b/aoc2023/build/dev/erlang/gleam_version new file mode 100644 index 0000000..048acbd --- /dev/null +++ b/aoc2023/build/dev/erlang/gleam_version @@ -0,0 +1 @@ +0.33.0-rc2
\ No newline at end of file diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/gleam@@compile.erl new file mode 100644 index 0000000..543db88 --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/gleam@@compile.erl @@ -0,0 +1,157 @@ +#!/usr/bin/env escript + +% TODO: Don't concurrently print warnings and errors +% TODO: Some tests + +-record(arguments, {lib = "./", out = "./", modules = []}). + +main(Args) -> + #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args), + IsElixirModule = fun(Module) -> + filename:extension(Module) =:= ".ex" + end, + {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules), + ok = configure_logging(), + ok = add_lib_to_erlang_path(Lib), + ok = filelib:ensure_dir([Out, $/]), + {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out), + {ElixirOk, _ElixirBeams} = case ErlangOk of + true -> compile_elixir(ElixirModules, Out); + false -> {false, []} + end, + case ErlangOk and ElixirOk of + true -> ok; + false -> erlang:halt(1) + end. + +compile_erlang(Modules, Out) -> + Workers = start_compiler_workers(Out), + ok = producer_loop(Modules, Workers), + collect_results({true, []}). + +collect_results(Acc = {Result, Beams}) -> + receive + {compiled, Beam} -> collect_results({Result, [Beam | Beams]}); + failed -> collect_results({false, Beams}) + after 0 -> Acc + end. + +producer_loop([], 0) -> + ok; +producer_loop([], Workers) -> + receive + {work_please, _} -> producer_loop([], Workers - 1) + end; +producer_loop([Module | Modules], Workers) -> + receive + {work_please, Worker} -> + erlang:send(Worker, {module, Module}), + producer_loop(Modules, Workers) + end. + +start_compiler_workers(Out) -> + Parent = self(), + NumSchedulers = erlang:system_info(schedulers), + SpawnWorker = fun(_) -> + erlang:spawn_link(fun() -> worker_loop(Parent, Out) end) + end, + lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)), + NumSchedulers. + +worker_loop(Parent, Out) -> + Options = [report_errors, report_warnings, debug_info, {outdir, Out}], + erlang:send(Parent, {work_please, self()}), + receive + {module, Module} -> + log({compiling, Module}), + case compile:file(Module, Options) of + {ok, ModuleName} -> + Beam = filename:join(Out, ModuleName) ++ ".beam", + Message = {compiled, Beam}, + log(Message), + erlang:send(Parent, Message); + error -> + log({failed, Module}), + erlang:send(Parent, failed) + end, + worker_loop(Parent, Out) + end. + +compile_elixir(Modules, Out) -> + Error = [ + "The program elixir was not found. Is it installed?", + $\n, + "Documentation for installing Elixir can be viewed here:", + $\n, + "https://elixir-lang.org/install.html" + ], + case Modules of + [] -> {true, []}; + _ -> + log({starting, "compiler.app"}), + ok = application:start(compiler), + log({starting, "elixir.app"}), + case application:start(elixir) of + ok -> do_compile_elixir(Modules, Out); + _ -> + io:put_chars(standard_error, [Error, $\n]), + {false, []} + end + end. + +do_compile_elixir(Modules, Out) -> + ModuleBins = lists:map(fun(Module) -> + log({compiling, Module}), + list_to_binary(Module) + end, Modules), + OutBin = list_to_binary(Out), + Options = [{dest, OutBin}], + % Silence "redefining module" warnings. + % Compiled modules in the build directory are added to the code path. + % These warnings result from recompiling loaded modules. + % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation. + 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]), + case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of + {ok, ModuleAtoms, _} -> + ToBeam = fun(ModuleAtom) -> + Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam", + log({compiled, Beam}), + Beam + end, + {true, lists:map(ToBeam, ModuleAtoms)}; + {error, Errors, _} -> + % Log all filenames associated with modules that failed to compile. + % Note: The compiler prints compilation errors upon encountering them. + ErrorFiles = lists:usort([File || {File, _, _} <- Errors]), + Log = fun(File) -> + log({failed, binary_to_list(File)}) + end, + lists:foreach(Log, ErrorFiles), + {false, []}; + _ -> {false, []} + end. + +add_lib_to_erlang_path(Lib) -> + code:add_paths(filelib:wildcard([Lib, "/*/ebin"])). + +parse(Args) -> + parse(Args, #arguments{}). + +parse([], Arguments) -> + Arguments; +parse(["--lib", Lib | Rest], Arguments) -> + parse(Rest, Arguments#arguments{lib = Lib}); +parse(["--out", Out | Rest], Arguments) -> + parse(Rest, Arguments#arguments{out = Out}); +parse([Module | Rest], Arguments = #arguments{modules = Modules}) -> + parse(Rest, Arguments#arguments{modules = [Module | Modules]}). + +configure_logging() -> + Enabled = os:getenv("GLEAM_LOG") /= false, + persistent_term:put(gleam_logging_enabled, Enabled). + +log(Term) -> + case persistent_term:get(gleam_logging_enabled) of + true -> erlang:display(Term), ok; + false -> ok + end. diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.cache b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.cache Binary files differnew file mode 100644 index 0000000..d1a66cb --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.cache diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.cache_meta b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.cache_meta Binary files differnew file mode 100644 index 0000000..23d66d7 --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.cache_meta diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.erl b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.erl new file mode 100644 index 0000000..13ae369 --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.erl @@ -0,0 +1,513 @@ +-module(glint). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([with_config/2, with_pretty_help/2, without_pretty_help/1, with_name/2, new/0, command/1, description/2, flag/3, flag_tuple/2, flags/2, global_flag/3, global_flag_tuple/2, global_flags/2, default_pretty_help/0, add/3, help_flag/0, execute/2, run_and_handle/3, run/2, add_command_from_stub/2]). +-export_type([config/0, pretty_help/0, glint/1, command/1, command_input/0, command_node/1, out/1, stub/1]). + +-type config() :: {config, + gleam@option:option(pretty_help()), + gleam@option:option(binary())}. + +-type pretty_help() :: {pretty_help, + gleam_community@colour:colour(), + gleam_community@colour:colour(), + gleam_community@colour:colour()}. + +-opaque glint(JFP) :: {glint, + config(), + command_node(JFP), + gleam@dict:dict(binary(), glint@flag:flag())}. + +-opaque command(JFQ) :: {command, + fun((command_input()) -> JFQ), + gleam@dict:dict(binary(), glint@flag:flag()), + binary()}. + +-type command_input() :: {command_input, + list(binary()), + gleam@dict:dict(binary(), glint@flag:flag())}. + +-type command_node(JFR) :: {command_node, + gleam@option:option(command(JFR)), + gleam@dict:dict(binary(), command_node(JFR))}. + +-type out(JFS) :: {out, JFS} | {help, binary()}. + +-type stub(JFT) :: {stub, + list(binary()), + fun((command_input()) -> JFT), + list({binary(), glint@flag:flag()}), + binary()}. + +-spec with_config(glint(JFY), config()) -> glint(JFY). +with_config(Glint, Config) -> + erlang:setelement(2, Glint, Config). + +-spec with_pretty_help(glint(JGB), pretty_help()) -> glint(JGB). +with_pretty_help(Glint, Pretty) -> + _pipe = erlang:setelement(2, erlang:element(2, Glint), {some, Pretty}), + with_config(Glint, _pipe). + +-spec without_pretty_help(glint(JGE)) -> glint(JGE). +without_pretty_help(Glint) -> + _pipe = erlang:setelement(2, erlang:element(2, Glint), none), + with_config(Glint, _pipe). + +-spec with_name(glint(JGH), binary()) -> glint(JGH). +with_name(Glint, Name) -> + _pipe = erlang:setelement(3, erlang:element(2, Glint), {some, Name}), + with_config(Glint, _pipe). + +-spec empty_command() -> command_node(any()). +empty_command() -> + {command_node, none, gleam@map:new()}. + +-spec new() -> glint(any()). +new() -> + {glint, {config, none, none}, empty_command(), gleam@map:new()}. + +-spec do_add(command_node(JGR), list(binary()), command(JGR)) -> command_node(JGR). +do_add(Root, Path, Contents) -> + case Path of + [] -> + erlang:setelement(2, Root, {some, Contents}); + + [X | Xs] -> + erlang:setelement( + 3, + Root, + (gleam@map:update( + erlang:element(3, Root), + X, + fun(Node) -> _pipe = Node, + _pipe@1 = gleam@option:lazy_unwrap( + _pipe, + fun empty_command/0 + ), + do_add(_pipe@1, Xs, Contents) end + )) + ) + end. + +-spec command(fun((command_input()) -> JHA)) -> command(JHA). +command(Runner) -> + {command, Runner, gleam@map:new(), <<""/utf8>>}. + +-spec description(command(JHD), binary()) -> command(JHD). +description(Cmd, Description) -> + erlang:setelement(4, Cmd, Description). + +-spec flag(command(JHG), binary(), glint@flag:flag_builder(any())) -> command(JHG). +flag(Cmd, Key, Flag) -> + erlang:setelement( + 3, + Cmd, + gleam@map:insert(erlang:element(3, Cmd), Key, glint@flag:build(Flag)) + ). + +-spec flag_tuple(command(JHL), {binary(), glint@flag:flag_builder(any())}) -> command(JHL). +flag_tuple(Cmd, Tup) -> + flag(Cmd, erlang:element(1, Tup), erlang:element(2, Tup)). + +-spec flags(command(JHQ), list({binary(), glint@flag:flag()})) -> command(JHQ). +flags(Cmd, Flags) -> + gleam@list:fold( + Flags, + Cmd, + fun(Cmd@1, _use1) -> + {Key, Flag} = _use1, + erlang:setelement( + 3, + Cmd@1, + gleam@map:insert(erlang:element(3, Cmd@1), Key, Flag) + ) + end + ). + +-spec global_flag(glint(JHU), binary(), glint@flag:flag_builder(any())) -> glint(JHU). +global_flag(Glint, Key, Flag) -> + erlang:setelement( + 4, + Glint, + gleam@map:insert(erlang:element(4, Glint), Key, glint@flag:build(Flag)) + ). + +-spec global_flag_tuple(glint(JHZ), {binary(), glint@flag:flag_builder(any())}) -> glint(JHZ). +global_flag_tuple(Glint, Tup) -> + global_flag(Glint, erlang:element(1, Tup), erlang:element(2, Tup)). + +-spec global_flags(glint(JIE), list({binary(), glint@flag:flag()})) -> glint(JIE). +global_flags(Glint, Flags) -> + erlang:setelement( + 4, + Glint, + (gleam@list:fold( + Flags, + erlang:element(4, Glint), + fun(Acc, Tup) -> + gleam@map:insert( + Acc, + erlang:element(1, Tup), + erlang:element(2, Tup) + ) + end + )) + ). + +-spec execute_root( + command_node(JIS), + gleam@dict:dict(binary(), glint@flag:flag()), + list(binary()), + list(binary()) +) -> {ok, out(JIS)} | {error, snag:snag()}. +execute_root(Cmd, Global_flags, Args, Flag_inputs) -> + _pipe@3 = case erlang:element(2, Cmd) of + {some, Contents} -> + gleam@result:'try'( + gleam@list:try_fold( + Flag_inputs, + gleam@map:merge(Global_flags, erlang:element(3, Contents)), + fun glint@flag:update_flags/2 + ), + fun(New_flags) -> _pipe = {command_input, Args, New_flags}, + _pipe@1 = (erlang:element(2, Contents))(_pipe), + _pipe@2 = {out, _pipe@1}, + {ok, _pipe@2} end + ); + + none -> + snag:error(<<"command not found"/utf8>>) + end, + snag:context(_pipe@3, <<"failed to run command"/utf8>>). + +-spec default_pretty_help() -> pretty_help(). +default_pretty_help() -> + _assert_subject = gleam_community@colour:from_rgb255(182, 255, 234), + {ok, Usage_colour} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"glint"/utf8>>, + function => <<"default_pretty_help"/utf8>>, + line => 404}) + end, + _assert_subject@1 = gleam_community@colour:from_rgb255(255, 175, 243), + {ok, Flags_colour} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"glint"/utf8>>, + function => <<"default_pretty_help"/utf8>>, + line => 405}) + end, + _assert_subject@2 = gleam_community@colour:from_rgb255(252, 226, 174), + {ok, Subcommands_colour} = case _assert_subject@2 of + {ok, _} -> _assert_subject@2; + _assert_fail@2 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@2, + module => <<"glint"/utf8>>, + function => <<"default_pretty_help"/utf8>>, + line => 406}) + end, + {pretty_help, Usage_colour, Flags_colour, Subcommands_colour}. + +-spec is_not_empty(binary()) -> boolean(). +is_not_empty(S) -> + S /= <<""/utf8>>. + +-spec sanitize_path(list(binary())) -> list(binary()). +sanitize_path(Path) -> + _pipe = Path, + _pipe@1 = gleam@list:map(_pipe, fun gleam@string:trim/1), + gleam@list:filter(_pipe@1, fun is_not_empty/1). + +-spec add(glint(JGM), list(binary()), command(JGM)) -> glint(JGM). +add(Glint, Path, Contents) -> + erlang:setelement( + 3, + Glint, + begin + _pipe = Path, + _pipe@1 = sanitize_path(_pipe), + do_add(erlang:element(3, Glint), _pipe@1, Contents) + end + ). + +-spec help_flag() -> binary(). +help_flag() -> + <<(<<"--"/utf8>>)/binary, "help"/utf8>>. + +-spec wrap_with_space(binary()) -> binary(). +wrap_with_space(S) -> + case S of + <<""/utf8>> -> + <<" "/utf8>>; + + _ -> + <<<<" "/utf8, S/binary>>/binary, " "/utf8>> + end. + +-spec subcommand_help(binary(), command_node(any())) -> binary(). +subcommand_help(Name, Cmd) -> + case erlang:element(2, Cmd) of + none -> + Name; + + {some, Contents} -> + <<<<Name/binary, "\t\t"/utf8>>/binary, + (erlang:element(4, Contents))/binary>> + end. + +-spec subcommands_help(gleam@dict:dict(binary(), command_node(any()))) -> binary(). +subcommands_help(Cmds) -> + _pipe = Cmds, + _pipe@1 = gleam@map:map_values(_pipe, fun subcommand_help/2), + _pipe@2 = gleam@map:values(_pipe@1), + _pipe@3 = gleam@list:sort(_pipe@2, fun gleam@string:compare/2), + gleam@string:join(_pipe@3, <<"\n\t"/utf8>>). + +-spec heading_style(binary(), gleam_community@colour:colour()) -> binary(). +heading_style(Heading, Colour) -> + _pipe = Heading, + _pipe@1 = gleam_community@ansi:bold(_pipe), + _pipe@2 = gleam_community@ansi:underline(_pipe@1), + _pipe@3 = gleam_community@ansi:italic(_pipe@2), + _pipe@4 = gleam_community@ansi:hex( + _pipe@3, + gleam_community@colour:to_rgb_hex(Colour) + ), + gleam_community@ansi:reset(_pipe@4). + +-spec usage_help( + binary(), + gleam@dict:dict(binary(), glint@flag:flag()), + config() +) -> binary(). +usage_help(Cmd_name, Flags, Config) -> + App_name = gleam@option:unwrap( + erlang:element(3, Config), + <<"gleam run"/utf8>> + ), + Flags@1 = begin + _pipe = Flags, + _pipe@1 = gleam@map:to_list(_pipe), + _pipe@2 = gleam@list:map(_pipe@1, fun glint@flag:flag_type_help/1), + gleam@list:sort(_pipe@2, fun gleam@string:compare/2) + end, + Flag_sb = case Flags@1 of + [] -> + gleam@string_builder:new(); + + _ -> + _pipe@3 = Flags@1, + _pipe@4 = gleam@list:intersperse(_pipe@3, <<" "/utf8>>), + _pipe@5 = gleam@string_builder:from_strings(_pipe@4), + _pipe@6 = gleam@string_builder:prepend(_pipe@5, <<" [ "/utf8>>), + gleam@string_builder:append(_pipe@6, <<" ]"/utf8>>) + end, + _pipe@7 = [App_name, wrap_with_space(Cmd_name), <<"[ ARGS ]"/utf8>>], + _pipe@8 = gleam@string_builder:from_strings(_pipe@7), + _pipe@9 = gleam@string_builder:append_builder(_pipe@8, Flag_sb), + _pipe@12 = gleam@string_builder:prepend( + _pipe@9, + <<(begin + _pipe@10 = erlang:element(2, Config), + _pipe@11 = gleam@option:map( + _pipe@10, + fun(Styling) -> + heading_style( + <<"USAGE:"/utf8>>, + erlang:element(2, Styling) + ) + end + ), + gleam@option:unwrap(_pipe@11, <<"USAGE:"/utf8>>) + end)/binary, + "\n\t"/utf8>> + ), + gleam@string_builder:to_string(_pipe@12). + +-spec cmd_help( + list(binary()), + command_node(any()), + config(), + gleam@dict:dict(binary(), glint@flag:flag()) +) -> binary(). +cmd_help(Path, Cmd, Config, Global_flags) -> + Name = begin + _pipe = Path, + _pipe@1 = gleam@list:reverse(_pipe), + gleam@string:join(_pipe@1, <<" "/utf8>>) + end, + Flags = begin + _pipe@2 = gleam@option:map( + erlang:element(2, Cmd), + fun(Contents) -> erlang:element(3, Contents) end + ), + _pipe@3 = gleam@option:lazy_unwrap(_pipe@2, fun gleam@map:new/0), + gleam@map:merge(Global_flags, _pipe@3) + end, + Flags_help_body = <<<<(begin + _pipe@4 = erlang:element(2, Config), + _pipe@5 = gleam@option:map( + _pipe@4, + fun(P) -> + heading_style(<<"FLAGS:"/utf8>>, erlang:element(3, P)) + end + ), + gleam@option:unwrap(_pipe@5, <<"FLAGS:"/utf8>>) + end)/binary, + "\n\t"/utf8>>/binary, + (gleam@string:join( + gleam@list:sort( + [<<"--help\t\t\tPrint help information"/utf8>> | + glint@flag:flags_help(Flags)], + fun gleam@string:compare/2 + ), + <<"\n\t"/utf8>> + ))/binary>>, + Usage = usage_help(Name, Flags, Config), + Description = begin + _pipe@6 = erlang:element(2, Cmd), + _pipe@7 = gleam@option:map( + _pipe@6, + fun(Contents@1) -> erlang:element(4, Contents@1) end + ), + gleam@option:unwrap(_pipe@7, <<""/utf8>>) + end, + Header_items = begin + _pipe@8 = [Name, Description], + _pipe@9 = gleam@list:filter(_pipe@8, fun is_not_empty/1), + gleam@string:join(_pipe@9, <<"\n"/utf8>>) + end, + Subcommands = case subcommands_help(erlang:element(3, Cmd)) of + <<""/utf8>> -> + <<""/utf8>>; + + Subcommands_help_body -> + <<<<(begin + _pipe@10 = erlang:element(2, Config), + _pipe@11 = gleam@option:map( + _pipe@10, + fun(P@1) -> + heading_style( + <<"SUBCOMMANDS:"/utf8>>, + erlang:element(4, P@1) + ) + end + ), + gleam@option:unwrap(_pipe@11, <<"SUBCOMMANDS:"/utf8>>) + end)/binary, + "\n\t"/utf8>>/binary, + Subcommands_help_body/binary>> + end, + _pipe@12 = [Header_items, Usage, Flags_help_body, Subcommands], + _pipe@13 = gleam@list:filter(_pipe@12, fun is_not_empty/1), + gleam@string:join(_pipe@13, <<"\n\n"/utf8>>). + +-spec do_execute( + command_node(JIM), + config(), + gleam@dict:dict(binary(), glint@flag:flag()), + list(binary()), + list(binary()), + boolean(), + list(binary()) +) -> {ok, out(JIM)} | {error, snag:snag()}. +do_execute(Cmd, Config, Global_flags, Args, Flags, Help, Command_path) -> + case Args of + [] when Help -> + _pipe = Command_path, + _pipe@1 = cmd_help(_pipe, Cmd, Config, Global_flags), + _pipe@2 = {help, _pipe@1}, + {ok, _pipe@2}; + + [] -> + execute_root(Cmd, Global_flags, [], Flags); + + [Arg | Rest] -> + case gleam@map:get(erlang:element(3, Cmd), Arg) of + {ok, Cmd@1} -> + do_execute( + Cmd@1, + Config, + Global_flags, + Rest, + Flags, + Help, + [Arg | Command_path] + ); + + _ when Help -> + _pipe@3 = Command_path, + _pipe@4 = cmd_help(_pipe@3, Cmd, Config, Global_flags), + _pipe@5 = {help, _pipe@4}, + {ok, _pipe@5}; + + _ -> + execute_root(Cmd, Global_flags, Args, Flags) + end + end. + +-spec execute(glint(JII), list(binary())) -> {ok, out(JII)} | + {error, snag:snag()}. +execute(Glint, Args) -> + Help_flag = help_flag(), + {Help, Args@2} = case gleam@list:pop(Args, fun(S) -> S =:= Help_flag end) of + {ok, {_, Args@1}} -> + {true, Args@1}; + + _ -> + {false, Args} + end, + {Flags, Args@3} = gleam@list:partition( + Args@2, + fun(_capture) -> gleam@string:starts_with(_capture, <<"--"/utf8>>) end + ), + do_execute( + erlang:element(3, Glint), + erlang:element(2, Glint), + erlang:element(4, Glint), + Args@3, + Flags, + Help, + [] + ). + +-spec run_and_handle(glint(JJA), list(binary()), fun((JJA) -> any())) -> nil. +run_and_handle(Glint, Args, Handle) -> + case execute(Glint, Args) of + {error, Err} -> + _pipe = Err, + _pipe@1 = snag:pretty_print(_pipe), + gleam@io:println(_pipe@1); + + {ok, {help, Help}} -> + gleam@io:println(Help); + + {ok, {out, Out}} -> + Handle(Out), + nil + end. + +-spec run(glint(any()), list(binary())) -> nil. +run(Glint, Args) -> + run_and_handle(Glint, Args, gleam@function:constant(nil)). + +-spec add_command_from_stub(glint(JJN), stub(JJN)) -> glint(JJN). +add_command_from_stub(Glint, Stub) -> + add( + Glint, + erlang:element(2, Stub), + begin + _pipe = command(erlang:element(3, Stub)), + _pipe@1 = flags(_pipe, erlang:element(4, Stub)), + description(_pipe@1, erlang:element(5, Stub)) + end + ). diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.cache b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.cache Binary files differnew file mode 100644 index 0000000..90aed37 --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.cache diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.cache_meta b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.cache_meta Binary files differnew file mode 100644 index 0000000..be367e3 --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.cache_meta diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.erl b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.erl new file mode 100644 index 0000000..634b37b --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.erl @@ -0,0 +1,523 @@ +-module(glint@flag). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([string/0, string_list/0, build/1, constraint/2, description/2, default/2, build_map/1, int/0, int_list/0, float/0, float_list/0, bool/0, flag_type_help/1, flags_help/1, update_flags/2, get_int_value/1, get_int/2, get_ints_value/1, get_ints/2, get_bool_value/1, get_bool/2, get_string_value/1, get_string/2, get_strings_value/1, get_strings/2, get_float_value/1, get_float/2, get_floats_value/1, get_floats/2]). +-export_type([value/0, flag_builder/1, internal/1, flag/0]). + +-type value() :: {b, internal(boolean())} | + {i, internal(integer())} | + {li, internal(list(integer()))} | + {f, internal(float())} | + {lf, internal(list(float()))} | + {s, internal(binary())} | + {ls, internal(list(binary()))}. + +-opaque flag_builder(IRX) :: {flag_builder, + binary(), + fun((binary()) -> {ok, IRX} | {error, snag:snag()}), + fun((internal(IRX)) -> value()), + gleam@option:option(IRX)}. + +-opaque internal(IRY) :: {internal, + gleam@option:option(IRY), + fun((binary()) -> {ok, IRY} | {error, snag:snag()})}. + +-type flag() :: {flag, value(), binary()}. + +-spec new( + fun((internal(ISP)) -> value()), + fun((binary()) -> {ok, ISP} | {error, snag:snag()}) +) -> flag_builder(ISP). +new(Valuer, P) -> + {flag_builder, <<""/utf8>>, P, Valuer, none}. + +-spec string() -> flag_builder(binary()). +string() -> + new(fun(Field@0) -> {s, Field@0} end, fun(S) -> {ok, S} end). + +-spec string_list() -> flag_builder(list(binary())). +string_list() -> + new(fun(Field@0) -> {ls, Field@0} end, fun(Input) -> _pipe = Input, + _pipe@1 = gleam@string:split(_pipe, <<","/utf8>>), + {ok, _pipe@1} end). + +-spec build(flag_builder(any())) -> flag(). +build(Fb) -> + {flag, + (erlang:element(4, Fb))( + {internal, erlang:element(5, Fb), erlang:element(3, Fb)} + ), + erlang:element(2, Fb)}. + +-spec attempt( + {ok, ITG} | {error, ITH}, + fun((ITG) -> {ok, any()} | {error, ITH}) +) -> {ok, ITG} | {error, ITH}. +attempt(Val, F) -> + gleam@result:'try'(Val, fun(A) -> gleam@result:replace(F(A), A) end). + +-spec wrap_with_constraint( + fun((binary()) -> {ok, ITA} | {error, snag:snag()}), + fun((ITA) -> {ok, nil} | {error, snag:snag()}) +) -> fun((binary()) -> {ok, ITA} | {error, snag:snag()}). +wrap_with_constraint(P, Constraint) -> + fun(Input) -> attempt(P(Input), Constraint) end. + +-spec constraint( + flag_builder(ISW), + fun((ISW) -> {ok, nil} | {error, snag:snag()}) +) -> flag_builder(ISW). +constraint(Builder, Constraint) -> + erlang:setelement( + 3, + Builder, + wrap_with_constraint(erlang:element(3, Builder), Constraint) + ). + +-spec description(flag_builder(ITP), binary()) -> flag_builder(ITP). +description(Builder, Description) -> + erlang:setelement(2, Builder, Description). + +-spec default(flag_builder(ITS), ITS) -> flag_builder(ITS). +default(Builder, Default) -> + erlang:setelement(5, Builder, {some, Default}). + +-spec build_map(list({binary(), flag()})) -> gleam@dict:dict(binary(), flag()). +build_map(Flags) -> + gleam@map:from_list(Flags). + +-spec access_type_error(binary()) -> {ok, any()} | {error, snag:snag()}. +access_type_error(Flag_type) -> + snag:error(<<"cannot access flag as "/utf8, Flag_type/binary>>). + +-spec flag_not_provided_error() -> {ok, any()} | {error, snag:snag()}. +flag_not_provided_error() -> + snag:error(<<"no value provided"/utf8>>). + +-spec construct_value(binary(), internal(IUC), fun((internal(IUC)) -> value())) -> {ok, + value()} | + {error, snag:snag()}. +construct_value(Input, Internal, Constructor) -> + gleam@result:map( + (erlang:element(3, Internal))(Input), + fun(Val) -> Constructor(erlang:setelement(2, Internal, {some, Val})) end + ). + +-spec compute_flag(binary(), value()) -> {ok, value()} | {error, snag:snag()}. +compute_flag(Input, Current) -> + _pipe = Input, + _pipe@1 = case Current of + {i, Internal} -> + fun(_capture) -> + construct_value( + _capture, + Internal, + fun(Field@0) -> {i, Field@0} end + ) + end; + + {li, Internal@1} -> + fun(_capture@1) -> + construct_value( + _capture@1, + Internal@1, + fun(Field@0) -> {li, Field@0} end + ) + end; + + {f, Internal@2} -> + fun(_capture@2) -> + construct_value( + _capture@2, + Internal@2, + fun(Field@0) -> {f, Field@0} end + ) + end; + + {lf, Internal@3} -> + fun(_capture@3) -> + construct_value( + _capture@3, + Internal@3, + fun(Field@0) -> {lf, Field@0} end + ) + end; + + {s, Internal@4} -> + fun(_capture@4) -> + construct_value( + _capture@4, + Internal@4, + fun(Field@0) -> {s, Field@0} end + ) + end; + + {ls, Internal@5} -> + fun(_capture@5) -> + construct_value( + _capture@5, + Internal@5, + fun(Field@0) -> {ls, Field@0} end + ) + end; + + {b, Internal@6} -> + fun(_capture@6) -> + construct_value( + _capture@6, + Internal@6, + fun(Field@0) -> {b, Field@0} end + ) + end + end(_pipe), + snag:context(_pipe@1, <<"failed to compute value for flag"/utf8>>). + +-spec layer_invalid_flag(snag:snag(), binary()) -> snag:snag(). +layer_invalid_flag(Err, Flag) -> + snag:layer(Err, <<<<"invalid flag '"/utf8, Flag/binary>>/binary, "'"/utf8>>). + +-spec no_value_flag_err(binary()) -> snag:snag(). +no_value_flag_err(Flag_input) -> + _pipe = (<<<<"flag '"/utf8, Flag_input/binary>>/binary, + "' has no assigned value"/utf8>>), + _pipe@1 = snag:new(_pipe), + layer_invalid_flag(_pipe@1, Flag_input). + +-spec undefined_flag_err(binary()) -> snag:snag(). +undefined_flag_err(Key) -> + _pipe = <<"flag provided but not defined"/utf8>>, + _pipe@1 = snag:new(_pipe), + layer_invalid_flag(_pipe@1, Key). + +-spec cannot_parse(binary(), binary()) -> snag:snag(). +cannot_parse(Value, Kind) -> + _pipe = (<<<<<<"cannot parse value '"/utf8, Value/binary>>/binary, + "' as "/utf8>>/binary, + Kind/binary>>), + snag:new(_pipe). + +-spec int() -> flag_builder(integer()). +int() -> + new(fun(Field@0) -> {i, Field@0} end, fun(Input) -> _pipe = Input, + _pipe@1 = gleam@int:parse(_pipe), + gleam@result:replace_error( + _pipe@1, + cannot_parse(Input, <<"int"/utf8>>) + ) end). + +-spec int_list() -> flag_builder(list(integer())). +int_list() -> + new(fun(Field@0) -> {li, Field@0} end, fun(Input) -> _pipe = Input, + _pipe@1 = gleam@string:split(_pipe, <<","/utf8>>), + _pipe@2 = gleam@list:try_map(_pipe@1, fun gleam@int:parse/1), + gleam@result:replace_error( + _pipe@2, + cannot_parse(Input, <<"int list"/utf8>>) + ) end). + +-spec float() -> flag_builder(float()). +float() -> + new(fun(Field@0) -> {f, Field@0} end, fun(Input) -> _pipe = Input, + _pipe@1 = gleam@float:parse(_pipe), + gleam@result:replace_error( + _pipe@1, + cannot_parse(Input, <<"float"/utf8>>) + ) end). + +-spec float_list() -> flag_builder(list(float())). +float_list() -> + new(fun(Field@0) -> {lf, Field@0} end, fun(Input) -> _pipe = Input, + _pipe@1 = gleam@string:split(_pipe, <<","/utf8>>), + _pipe@2 = gleam@list:try_map(_pipe@1, fun gleam@float:parse/1), + gleam@result:replace_error( + _pipe@2, + cannot_parse(Input, <<"float list"/utf8>>) + ) end). + +-spec bool() -> flag_builder(boolean()). +bool() -> + new( + fun(Field@0) -> {b, Field@0} end, + fun(Input) -> case gleam@string:lowercase(Input) of + <<"true"/utf8>> -> + {ok, true}; + + <<"t"/utf8>> -> + {ok, true}; + + <<"false"/utf8>> -> + {ok, false}; + + <<"f"/utf8>> -> + {ok, false}; + + _ -> + {error, cannot_parse(Input, <<"bool"/utf8>>)} + end end + ). + +-spec flag_type_help({binary(), flag()}) -> binary(). +flag_type_help(Flag) -> + {Name, Contents} = Flag, + Kind = case erlang:element(2, Contents) of + {i, _} -> + <<"INT"/utf8>>; + + {b, _} -> + <<"BOOL"/utf8>>; + + {f, _} -> + <<"FLOAT"/utf8>>; + + {lf, _} -> + <<"FLOAT_LIST"/utf8>>; + + {li, _} -> + <<"INT_LIST"/utf8>>; + + {ls, _} -> + <<"STRING_LIST"/utf8>>; + + {s, _} -> + <<"STRING"/utf8>> + end, + <<<<<<<<<<"--"/utf8, Name/binary>>/binary, "="/utf8>>/binary, "<"/utf8>>/binary, + Kind/binary>>/binary, + ">"/utf8>>. + +-spec flag_help({binary(), flag()}) -> binary(). +flag_help(Flag) -> + <<<<(flag_type_help(Flag))/binary, "\t\t"/utf8>>/binary, + (erlang:element(3, (erlang:element(2, Flag))))/binary>>. + +-spec flags_help(gleam@dict:dict(binary(), flag())) -> list(binary()). +flags_help(Flags) -> + _pipe = Flags, + _pipe@1 = gleam@map:to_list(_pipe), + gleam@list:map(_pipe@1, fun flag_help/1). + +-spec access(gleam@dict:dict(binary(), flag()), binary()) -> {ok, flag()} | + {error, snag:snag()}. +access(Flags, Name) -> + _pipe = gleam@map:get(Flags, Name), + gleam@result:replace_error(_pipe, undefined_flag_err(Name)). + +-spec update_flag_value(gleam@dict:dict(binary(), flag()), {binary(), binary()}) -> {ok, + gleam@dict:dict(binary(), flag())} | + {error, snag:snag()}. +update_flag_value(Flags, Data) -> + {Key, Input} = Data, + gleam@result:'try'( + access(Flags, Key), + fun(Contents) -> + gleam@result:map( + begin + _pipe = compute_flag(Input, erlang:element(2, Contents)), + gleam@result:map_error( + _pipe, + fun(_capture) -> layer_invalid_flag(_capture, Key) end + ) + end, + fun(Value) -> + gleam@map:insert( + Flags, + Key, + erlang:setelement(2, Contents, Value) + ) + end + ) + end + ). + +-spec attempt_toggle_flag(gleam@dict:dict(binary(), flag()), binary()) -> {ok, + gleam@dict:dict(binary(), flag())} | + {error, snag:snag()}. +attempt_toggle_flag(Flags, Key) -> + gleam@result:'try'( + access(Flags, Key), + fun(Contents) -> case erlang:element(2, Contents) of + {b, {internal, none, _} = Internal} -> + _pipe = erlang:setelement(2, Internal, {some, true}), + _pipe@1 = {b, _pipe}, + _pipe@2 = (fun(Val) -> + erlang:setelement(2, Contents, Val) + end)(_pipe@1), + _pipe@3 = gleam@map:insert(Flags, Key, _pipe@2), + {ok, _pipe@3}; + + {b, {internal, {some, Val@1}, _} = Internal@1} -> + _pipe@4 = erlang:setelement( + 2, + Internal@1, + {some, not Val@1} + ), + _pipe@5 = {b, _pipe@4}, + _pipe@6 = (fun(Val@2) -> + erlang:setelement(2, Contents, Val@2) + end)(_pipe@5), + _pipe@7 = gleam@map:insert(Flags, Key, _pipe@6), + {ok, _pipe@7}; + + _ -> + {error, no_value_flag_err(Key)} + end end + ). + +-spec update_flags(gleam@dict:dict(binary(), flag()), binary()) -> {ok, + gleam@dict:dict(binary(), flag())} | + {error, snag:snag()}. +update_flags(Flags, Flag_input) -> + Flag_input@1 = gleam@string:drop_left( + Flag_input, + gleam@string:length(<<"--"/utf8>>) + ), + case gleam@string:split_once(Flag_input@1, <<"="/utf8>>) of + {ok, Data} -> + update_flag_value(Flags, Data); + + {error, _} -> + attempt_toggle_flag(Flags, Flag_input@1) + end. + +-spec get_value( + gleam@dict:dict(binary(), flag()), + binary(), + fun((flag()) -> {ok, IUK} | {error, snag:snag()}) +) -> {ok, IUK} | {error, snag:snag()}. +get_value(Flags, Key, Kind) -> + _pipe = access(Flags, Key), + _pipe@1 = gleam@result:'try'(_pipe, Kind), + snag:context( + _pipe@1, + <<<<"failed to retrieve value for flag '"/utf8, Key/binary>>/binary, + "'"/utf8>> + ). + +-spec get_int_value(flag()) -> {ok, integer()} | {error, snag:snag()}. +get_int_value(Flag) -> + case erlang:element(2, Flag) of + {i, {internal, {some, Val}, _}} -> + {ok, Val}; + + {i, {internal, none, _}} -> + flag_not_provided_error(); + + _ -> + access_type_error(<<"int"/utf8>>) + end. + +-spec get_int(gleam@dict:dict(binary(), flag()), binary()) -> {ok, integer()} | + {error, snag:snag()}. +get_int(Flags, Name) -> + get_value(Flags, Name, fun get_int_value/1). + +-spec get_ints_value(flag()) -> {ok, list(integer())} | {error, snag:snag()}. +get_ints_value(Flag) -> + case erlang:element(2, Flag) of + {li, {internal, {some, Val}, _}} -> + {ok, Val}; + + {li, {internal, none, _}} -> + flag_not_provided_error(); + + _ -> + access_type_error(<<"int list"/utf8>>) + end. + +-spec get_ints(gleam@dict:dict(binary(), flag()), binary()) -> {ok, + list(integer())} | + {error, snag:snag()}. +get_ints(Flags, Name) -> + get_value(Flags, Name, fun get_ints_value/1). + +-spec get_bool_value(flag()) -> {ok, boolean()} | {error, snag:snag()}. +get_bool_value(Flag) -> + case erlang:element(2, Flag) of + {b, {internal, {some, Val}, _}} -> + {ok, Val}; + + {b, {internal, none, _}} -> + flag_not_provided_error(); + + _ -> + access_type_error(<<"bool"/utf8>>) + end. + +-spec get_bool(gleam@dict:dict(binary(), flag()), binary()) -> {ok, boolean()} | + {error, snag:snag()}. +get_bool(Flags, Name) -> + get_value(Flags, Name, fun get_bool_value/1). + +-spec get_string_value(flag()) -> {ok, binary()} | {error, snag:snag()}. +get_string_value(Flag) -> + case erlang:element(2, Flag) of + {s, {internal, {some, Val}, _}} -> + {ok, Val}; + + {s, {internal, none, _}} -> + flag_not_provided_error(); + + _ -> + access_type_error(<<"string"/utf8>>) + end. + +-spec get_string(gleam@dict:dict(binary(), flag()), binary()) -> {ok, binary()} | + {error, snag:snag()}. +get_string(Flags, Name) -> + get_value(Flags, Name, fun get_string_value/1). + +-spec get_strings_value(flag()) -> {ok, list(binary())} | {error, snag:snag()}. +get_strings_value(Flag) -> + case erlang:element(2, Flag) of + {ls, {internal, {some, Val}, _}} -> + {ok, Val}; + + {ls, {internal, none, _}} -> + flag_not_provided_error(); + + _ -> + access_type_error(<<"string list"/utf8>>) + end. + +-spec get_strings(gleam@dict:dict(binary(), flag()), binary()) -> {ok, + list(binary())} | + {error, snag:snag()}. +get_strings(Flags, Name) -> + get_value(Flags, Name, fun get_strings_value/1). + +-spec get_float_value(flag()) -> {ok, float()} | {error, snag:snag()}. +get_float_value(Flag) -> + case erlang:element(2, Flag) of + {f, {internal, {some, Val}, _}} -> + {ok, Val}; + + {f, {internal, none, _}} -> + flag_not_provided_error(); + + _ -> + access_type_error(<<"float"/utf8>>) + end. + +-spec get_float(gleam@dict:dict(binary(), flag()), binary()) -> {ok, float()} | + {error, snag:snag()}. +get_float(Flags, Name) -> + get_value(Flags, Name, fun get_float_value/1). + +-spec get_floats_value(flag()) -> {ok, list(float())} | {error, snag:snag()}. +get_floats_value(Flag) -> + case erlang:element(2, Flag) of + {lf, {internal, {some, Val}, _}} -> + {ok, Val}; + + {lf, {internal, none, _}} -> + flag_not_provided_error(); + + _ -> + access_type_error(<<"float list"/utf8>>) + end. + +-spec get_floats(gleam@dict:dict(binary(), flag()), binary()) -> {ok, + list(float())} | + {error, snag:snag()}. +get_floats(Flags, Name) -> + get_value(Flags, Name, fun get_floats_value/1). diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache Binary files differnew file mode 100644 index 0000000..6881dda --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache_meta b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache_meta Binary files differnew file mode 100644 index 0000000..355567d --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache_meta diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.erl b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.erl new file mode 100644 index 0000000..52eb319 --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.erl @@ -0,0 +1,68 @@ +-module(glint@flag@constraint). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([one_of/1, none_of/1, each/1]). + +-spec one_of(list(IQG)) -> fun((IQG) -> {ok, nil} | {error, snag:snag()}). +one_of(Allowed) -> + Allowed_set = gleam@set:from_list(Allowed), + fun(Val) -> case gleam@set:contains(Allowed_set, Val) of + true -> + {ok, nil}; + + false -> + snag:error( + <<<<<<"invalid value '"/utf8, + (gleam@string:inspect(Val))/binary>>/binary, + "', must be one of: ["/utf8>>/binary, + ((<<(begin + _pipe = Allowed, + _pipe@1 = gleam@list:map( + _pipe, + fun(A) -> + <<<<"'"/utf8, + (gleam@string:inspect(A))/binary>>/binary, + "'"/utf8>> + end + ), + gleam@string:join(_pipe@1, <<", "/utf8>>) + end)/binary, + "]"/utf8>>))/binary>> + ) + end end. + +-spec none_of(list(IQJ)) -> fun((IQJ) -> {ok, nil} | {error, snag:snag()}). +none_of(Disallowed) -> + Disallowed_set = gleam@set:from_list(Disallowed), + fun(Val) -> case gleam@set:contains(Disallowed_set, Val) of + false -> + {ok, nil}; + + true -> + snag:error( + <<<<<<"invalid value '"/utf8, + (gleam@string:inspect(Val))/binary>>/binary, + "', must not be one of: ["/utf8>>/binary, + (((<<(begin + _pipe = Disallowed, + _pipe@1 = gleam@list:map( + _pipe, + fun(A) -> + <<<<"'"/utf8, + (gleam@string:inspect(A))/binary>>/binary, + "'"/utf8>> + end + ), + gleam@string:join(_pipe@1, <<", "/utf8>>) + end)/binary, + "]"/utf8>>)))/binary>> + ) + end end. + +-spec each(fun((IQM) -> {ok, nil} | {error, snag:snag()})) -> fun((list(IQM)) -> {ok, + nil} | + {error, snag:snag()}). +each(Constraint) -> + fun(L) -> _pipe = L, + _pipe@1 = gleam@list:try_map(_pipe, Constraint), + gleam@result:replace(_pipe@1, nil) end. diff --git a/aoc2023/build/dev/erlang/glint/ebin/glint.app b/aoc2023/build/dev/erlang/glint/ebin/glint.app new file mode 100644 index 0000000..41fba79 --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/ebin/glint.app @@ -0,0 +1,10 @@ +{application, glint, [ + {vsn, "0.13.0"}, + {applications, [gleam_community_ansi, + gleam_community_colour, + gleam_stdlib, + snag]}, + {description, "Gleam command line argument parsing with basic flag support."}, + {modules, []}, + {registered, []} +]}. diff --git a/aoc2023/build/dev/erlang/glint/ebin/glint.beam b/aoc2023/build/dev/erlang/glint/ebin/glint.beam Binary files differnew file mode 100644 index 0000000..39b9ce7 --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/ebin/glint.beam diff --git a/aoc2023/build/dev/erlang/glint/ebin/glint@flag.beam b/aoc2023/build/dev/erlang/glint/ebin/glint@flag.beam Binary files differnew file mode 100644 index 0000000..14b7dec --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/ebin/glint@flag.beam diff --git a/aoc2023/build/dev/erlang/glint/ebin/glint@flag@constraint.beam b/aoc2023/build/dev/erlang/glint/ebin/glint@flag@constraint.beam Binary files differnew file mode 100644 index 0000000..1d36d10 --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/ebin/glint@flag@constraint.beam diff --git a/aoc2023/build/dev/erlang/glint/include/glint@flag_Flag.hrl b/aoc2023/build/dev/erlang/glint/include/glint@flag_Flag.hrl new file mode 100644 index 0000000..645cb12 --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/include/glint@flag_Flag.hrl @@ -0,0 +1 @@ +-record(flag, {value :: glint@flag:value(), description :: binary()}). diff --git a/aoc2023/build/dev/erlang/glint/include/glint@flag_FlagBuilder.hrl b/aoc2023/build/dev/erlang/glint/include/glint@flag_FlagBuilder.hrl new file mode 100644 index 0000000..b5e21a2 --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/include/glint@flag_FlagBuilder.hrl @@ -0,0 +1,6 @@ +-record(flag_builder, { + desc :: binary(), + parser :: fun((binary()) -> {ok, any()} | {error, snag:snag()}), + value :: fun((glint@flag:internal(any())) -> glint@flag:value()), + default :: gleam@option:option(any()) +}). diff --git a/aoc2023/build/dev/erlang/glint/include/glint@flag_Internal.hrl b/aoc2023/build/dev/erlang/glint/include/glint@flag_Internal.hrl new file mode 100644 index 0000000..281bbd0 --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/include/glint@flag_Internal.hrl @@ -0,0 +1,4 @@ +-record(internal, { + value :: gleam@option:option(any()), + parser :: fun((binary()) -> {ok, any()} | {error, snag:snag()}) +}). diff --git a/aoc2023/build/dev/erlang/glint/include/glint_Command.hrl b/aoc2023/build/dev/erlang/glint/include/glint_Command.hrl new file mode 100644 index 0000000..2761365 --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/include/glint_Command.hrl @@ -0,0 +1,5 @@ +-record(command, { + do :: fun((glint:command_input()) -> any()), + flags :: gleam@dict:dict(binary(), glint@flag:flag()), + description :: binary() +}). diff --git a/aoc2023/build/dev/erlang/glint/include/glint_CommandInput.hrl b/aoc2023/build/dev/erlang/glint/include/glint_CommandInput.hrl new file mode 100644 index 0000000..e0e1a81 --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/include/glint_CommandInput.hrl @@ -0,0 +1,4 @@ +-record(command_input, { + args :: list(binary()), + flags :: gleam@dict:dict(binary(), glint@flag:flag()) +}). diff --git a/aoc2023/build/dev/erlang/glint/include/glint_Config.hrl b/aoc2023/build/dev/erlang/glint/include/glint_Config.hrl new file mode 100644 index 0000000..70cf645 --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/include/glint_Config.hrl @@ -0,0 +1,4 @@ +-record(config, { + pretty_help :: gleam@option:option(glint:pretty_help()), + name :: gleam@option:option(binary()) +}). diff --git a/aoc2023/build/dev/erlang/glint/include/glint_Glint.hrl b/aoc2023/build/dev/erlang/glint/include/glint_Glint.hrl new file mode 100644 index 0000000..f14c34c --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/include/glint_Glint.hrl @@ -0,0 +1,5 @@ +-record(glint, { + config :: glint:config(), + cmd :: glint:command_node(any()), + global_flags :: gleam@dict:dict(binary(), glint@flag:flag()) +}). diff --git a/aoc2023/build/dev/erlang/glint/include/glint_PrettyHelp.hrl b/aoc2023/build/dev/erlang/glint/include/glint_PrettyHelp.hrl new file mode 100644 index 0000000..79bd887 --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/include/glint_PrettyHelp.hrl @@ -0,0 +1,5 @@ +-record(pretty_help, { + usage :: gleam_community@colour:colour(), + flags :: gleam_community@colour:colour(), + subcommands :: gleam_community@colour:colour() +}). diff --git a/aoc2023/build/dev/erlang/glint/include/glint_Stub.hrl b/aoc2023/build/dev/erlang/glint/include/glint_Stub.hrl new file mode 100644 index 0000000..5aa5d83 --- /dev/null +++ b/aoc2023/build/dev/erlang/glint/include/glint_Stub.hrl @@ -0,0 +1,6 @@ +-record(stub, { + path :: list(binary()), + run :: fun((glint:command_input()) -> any()), + flags :: list({binary(), glint@flag:flag()}), + description :: binary() +}). diff --git a/aoc2023/build/dev/erlang/pqueue/LICENSE b/aoc2023/build/dev/erlang/pqueue/LICENSE new file mode 100644 index 0000000..5697803 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/LICENSE @@ -0,0 +1,21 @@ +MIT License
+
+Copyright (c) 2011-2023 Michael Truog <mjtruog at protonmail dot com>
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/aoc2023/build/dev/erlang/pqueue/README.markdown b/aoc2023/build/dev/erlang/pqueue/README.markdown new file mode 100644 index 0000000..77aaf1c --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/README.markdown @@ -0,0 +1,31 @@ +Erlang Priority Queue Implementation +==================================== + +The priority queue implementations implement a subset of the stdlib Erlang queue interface as seen in the implementation used by both [Riak and RabbitMQ](https://github.com/basho/riak_core/blob/master/src/riak_core_priority_queue.erl). + +The implementations: + +* `priority_queue` (fastest for any priorities when only using a single priority at a time) +* `pqueue` (fastest for 41 priorities, -20 (high) to 20 (low), when using 2 or more priorities at the same time) +* `pqueue2` (slower heap implementation) +* `pqueue3` (faster than `pqueue2` and `priority_queue` when using 64 or more priorities at the same time) +* `pqueue4` (slightly slower than `pqueue` but fastest for allowing 257 priorities, -128 (high) to 128 (low), i.e., fastest when using 42 or more priorities at the same time) + +[The latest results are here](http://okeuday.livejournal.com/19539.html), with [the benchmark here](http://github.com/okeuday/erlbench). + +Author +------ + +Michael Truog (mjtruog at protonmail dot com) + +Thanks +------ + +* Jesper Louis andersen (PropEr integration and testing) +* Ulf Wiger (suggestions and insight) + +License +------- + +MIT License + diff --git a/aoc2023/build/dev/erlang/pqueue/_build/prod/lib/.rebar3/rebar_compiler_erl/source.dag b/aoc2023/build/dev/erlang/pqueue/_build/prod/lib/.rebar3/rebar_compiler_erl/source.dag Binary files differnew file mode 100644 index 0000000..fe3f9f8 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/_build/prod/lib/.rebar3/rebar_compiler_erl/source.dag diff --git a/aoc2023/build/dev/erlang/pqueue/doc/edoc-info b/aoc2023/build/dev/erlang/pqueue/doc/edoc-info new file mode 100644 index 0000000..5e5a8d3 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/doc/edoc-info @@ -0,0 +1,3 @@ +%% encoding: UTF-8 +{application,pqueue}. +{modules,[pqueue,pqueue2,pqueue3,pqueue4]}. diff --git a/aoc2023/build/dev/erlang/pqueue/doc/erlang.png b/aoc2023/build/dev/erlang/pqueue/doc/erlang.png Binary files differnew file mode 100644 index 0000000..987a618 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/doc/erlang.png diff --git a/aoc2023/build/dev/erlang/pqueue/doc/index.html b/aoc2023/build/dev/erlang/pqueue/doc/index.html new file mode 100644 index 0000000..d55b5e6 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/doc/index.html @@ -0,0 +1,17 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<title>The pqueue application</title> +</head> +<frameset cols="20%,80%"> +<frame src="modules-frame.html" name="modulesFrame" title=""> + +<frame src="overview-summary.html" name="overviewFrame" title=""> +<noframes> +<h2>This page uses frames</h2> +<p>Your browser does not accept frames. +<br>You should go to the <a href="overview-summary.html">non-frame version</a> instead. +</p> +</noframes> +</frameset> +</html>
\ No newline at end of file diff --git a/aoc2023/build/dev/erlang/pqueue/doc/modules-frame.html b/aoc2023/build/dev/erlang/pqueue/doc/modules-frame.html new file mode 100644 index 0000000..5a87cc4 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/doc/modules-frame.html @@ -0,0 +1,15 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<title>The pqueue application</title> +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc"> +</head> +<body bgcolor="white"> +<h2 class="indextitle">Modules</h2> +<table width="100%" border="0" summary="list of modules"> +<tr><td><a href="pqueue.html" target="overviewFrame" class="module">pqueue</a></td></tr> +<tr><td><a href="pqueue2.html" target="overviewFrame" class="module">pqueue2</a></td></tr> +<tr><td><a href="pqueue3.html" target="overviewFrame" class="module">pqueue3</a></td></tr> +<tr><td><a href="pqueue4.html" target="overviewFrame" class="module">pqueue4</a></td></tr></table> +</body> +</html>
\ No newline at end of file diff --git a/aoc2023/build/dev/erlang/pqueue/doc/overview-summary.html b/aoc2023/build/dev/erlang/pqueue/doc/overview-summary.html new file mode 100644 index 0000000..e2f8906 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/doc/overview-summary.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>The pqueue application</title> +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc"> +</head> +<body bgcolor="white"> +<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<h1>The pqueue application</h1> + +<hr> +<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<p><i>Generated by EDoc</i></p> +</body> +</html> diff --git a/aoc2023/build/dev/erlang/pqueue/doc/pqueue.html b/aoc2023/build/dev/erlang/pqueue/doc/pqueue.html new file mode 100644 index 0000000..40b05ac --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/doc/pqueue.html @@ -0,0 +1,166 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>Module pqueue</title> +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc"> +</head> +<body bgcolor="white"> +<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<hr> + +<h1>Module pqueue</h1> +<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul> + <h3><a name="Static_Priority_Queue.">Static Priority Queue.</a></h3> + This priority queue implementation depends on a static number of priorities + (-20 (high) to 20 (low)) so that tuple access times can be exploited for + quick in/out priority queue operations. +<p>Copyright © 2011-2020 Michael Truog</p> + +<p><b>Version:</b> 2.0.1 Nov 26 2020 14:55:34 + ------------------------------------------------------------------------</p> +<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog at protonmail dot com"><tt>mjtruog at protonmail dot com</tt></a>).</p> + +<h2><a name="description">Description</a></h2> + <h3><a name="Static_Priority_Queue.">Static Priority Queue.</a></h3> + This priority queue implementation depends on a static number of priorities + (-20 (high) to 20 (low)) so that tuple access times can be exploited for + quick in/out priority queue operations. This implementation was created to + avoid the slowness within the priority queue used by both RabbitMQ and Riak + (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl). +<h2><a name="types">Data Types</a></h2> + +<h3 class="typedecl"><a name="type-pqueue">pqueue()</a></h3> +<p><tt>pqueue() = {integer(), {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, <a href="queue.html#type-queue">queue:queue()</a>, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}} | {empty, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, <a href="queue.html#type-queue">queue:queue()</a>, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}}</tt></p> + + +<h2><a name="index">Function Index</a></h2> +<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#in-2">in/2</a></td><td> + <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#in-3">in/3</a></td><td> + <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#is_empty-1">is_empty/1</a></td><td> + <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#is_queue-1">is_queue/1</a></td><td> + <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#join-2">join/2</a></td><td> + <h4><a name="Join_two_priority_queues.">Join two priority queues.</a></h4> + O(N).</td></tr> +<tr><td valign="top"><a href="#len-1">len/1</a></td><td> + <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4> + O(N).</td></tr> +<tr><td valign="top"><a href="#new-0">new/0</a></td><td> + <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#out-1">out/1</a></td><td> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + O(1) amortized, O(N) worst case.</td></tr> +<tr><td valign="top"><a href="#out-2">out/2</a></td><td> + <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4> + O(1) amortized, O(N) worst case.</td></tr> +<tr><td valign="top"><a href="#pout-1">pout/1</a></td><td> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + Includes the priority in the return value.</td></tr> +<tr><td valign="top"><a href="#test-0">test/0</a></td><td> + <h4><a name="Regression_test.">Regression test.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#to_list-1">to_list/1</a></td><td> + <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4> + O(N).</td></tr> +</table> + +<h2><a name="functions">Function Details</a></h2> + +<h3 class="function"><a name="in-2">in/2</a></h3> +<div class="spec"> +<p><tt>in(X::term(), Q::<a href="#type-pqueue">pqueue()</a>) -> <a href="#type-pqueue">pqueue()</a></tt><br></p> +</div><p> + <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="in-3">in/3</a></h3> +<div class="spec"> +<p><tt>in(X::term(), P::integer(), Q::<a href="#type-pqueue">pqueue()</a>) -> <a href="#type-pqueue">pqueue()</a></tt><br></p> +</div><p> + <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="is_empty-1">is_empty/1</a></h3> +<div class="spec"> +<p><tt>is_empty(X1::<a href="#type-pqueue">pqueue()</a>) -> true | false</tt><br></p> +</div><p> + <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4> + O(1)</p> + +<h3 class="function"><a name="is_queue-1">is_queue/1</a></h3> +<div class="spec"> +<p><tt>is_queue(X1::<a href="#type-pqueue">pqueue()</a>) -> true | false</tt><br></p> +</div><p> + <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4> + O(1)</p> + +<h3 class="function"><a name="join-2">join/2</a></h3> +<div class="spec"> +<p><tt>join(X1::<a href="#type-pqueue">pqueue()</a>, X2::<a href="#type-pqueue">pqueue()</a>) -> <a href="#type-pqueue">pqueue()</a></tt><br></p> +</div><p> + <h4><a name="Join_two_priority_queues.">Join two priority queues.</a></h4> + O(N)</p> + +<h3 class="function"><a name="len-1">len/1</a></h3> +<div class="spec"> +<p><tt>len(X1::<a href="#type-pqueue">pqueue()</a>) -> non_neg_integer()</tt><br></p> +</div><p> + <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4> + O(N)</p> + +<h3 class="function"><a name="new-0">new/0</a></h3> +<div class="spec"> +<p><tt>new() -> <a href="#type-pqueue">pqueue()</a></tt><br></p> +</div><p> + <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="out-1">out/1</a></h3> +<div class="spec"> +<p><tt>out(Q::<a href="#type-pqueue">pqueue()</a>) -> {{value, term()}, <a href="#type-pqueue">pqueue()</a>} | {empty, <a href="#type-pqueue">pqueue()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="out-2">out/2</a></h3> +<div class="spec"> +<p><tt>out(P::integer(), Q::<a href="#type-pqueue">pqueue()</a>) -> {{value, term()}, <a href="#type-pqueue">pqueue()</a>} | {empty, <a href="#type-pqueue">pqueue()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4> + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="pout-1">pout/1</a></h3> +<div class="spec"> +<p><tt>pout(Q::<a href="#type-pqueue">pqueue()</a>) -> {{value, term(), integer()}, <a href="#type-pqueue">pqueue()</a>} | {empty, <a href="#type-pqueue">pqueue()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + Includes the priority in the return value. + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="test-0">test/0</a></h3> +<div class="spec"> +<p><tt>test() -> any()</tt></p> +</div><p> + <h4><a name="Regression_test.">Regression test.</a></h4> +</p> + +<h3 class="function"><a name="to_list-1">to_list/1</a></h3> +<div class="spec"> +<p><tt>to_list(X1::<a href="#type-pqueue">pqueue()</a>) -> [term()]</tt><br></p> +</div><p> + <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4> + O(N)</p> +<hr> + +<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<p><i>Generated by EDoc</i></p> +</body> +</html> diff --git a/aoc2023/build/dev/erlang/pqueue/doc/pqueue2.html b/aoc2023/build/dev/erlang/pqueue/doc/pqueue2.html new file mode 100644 index 0000000..2942b84 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/doc/pqueue2.html @@ -0,0 +1,143 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>Module pqueue2</title> +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc"> +</head> +<body bgcolor="white"> +<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<hr> + +<h1>Module pqueue2</h1> +<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul> + <h3><a name="Skew_Heap_Priority_Queue.">Skew Heap Priority Queue.</a></h3> + Ulf Wiger suggested pursuing a skew heap as an optimal Erlang priority + queue implementation. +<p>Copyright © 2011-2020 Michael Truog</p> + +<p><b>Version:</b> 2.0.1 Nov 26 2020 14:55:32 + ------------------------------------------------------------------------</p> +<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog at protonmail dot com"><tt>mjtruog at protonmail dot com</tt></a>).</p> + +<h2><a name="description">Description</a></h2> + <h3><a name="Skew_Heap_Priority_Queue.">Skew Heap Priority Queue.</a></h3> + Ulf Wiger suggested pursuing a skew heap as an optimal Erlang priority + queue implementation. Unfortunately, testing has shown this solution to + be more than 2 times slower than pqueue. +<h2><a name="types">Data Types</a></h2> + +<h3 class="typedecl"><a name="type-pqueue2">pqueue2()</a></h3> +<p><tt>pqueue2() = empty | {integer(), <a href="#type-pqueue2">pqueue2()</a>, <a href="#type-pqueue2">pqueue2()</a>, element, term()} | {integer(), <a href="#type-pqueue2">pqueue2()</a>, <a href="#type-pqueue2">pqueue2()</a>, queue, <a href="queue.html#type-queue">queue:queue()</a>}</tt></p> + + +<h2><a name="index">Function Index</a></h2> +<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#in-2">in/2</a></td><td> + <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#in-3">in/3</a></td><td> + <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#is_empty-1">is_empty/1</a></td><td> + <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#is_queue-1">is_queue/1</a></td><td> + <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#len-1">len/1</a></td><td> + <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#new-0">new/0</a></td><td> + <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#out-1">out/1</a></td><td> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#out-2">out/2</a></td><td> + <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#pout-1">pout/1</a></td><td> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + Includes the priority in the return value.</td></tr> +<tr><td valign="top"><a href="#test-0">test/0</a></td><td> + <h4><a name="Regression_test.">Regression test.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#to_list-1">to_list/1</a></td><td> + <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>.</td></tr> +</table> + +<h2><a name="functions">Function Details</a></h2> + +<h3 class="function"><a name="in-2">in/2</a></h3> +<div class="spec"> +<p><tt>in(Value::term(), H::<a href="#type-pqueue2">pqueue2()</a>) -> <a href="#type-pqueue2">pqueue2()</a></tt><br></p> +</div><p> + <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4> +</p> + +<h3 class="function"><a name="in-3">in/3</a></h3> +<div class="spec"> +<p><tt>in(Value::term(), P::integer(), H::<a href="#type-pqueue2">pqueue2()</a>) -> <a href="#type-pqueue2">pqueue2()</a></tt><br></p> +</div><p> + <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4> +</p> + +<h3 class="function"><a name="is_empty-1">is_empty/1</a></h3> +<div class="spec"> +<p><tt>is_empty(X1::<a href="#type-pqueue2">pqueue2()</a>) -> true | false</tt><br></p> +</div><p> + <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4> +</p> + +<h3 class="function"><a name="is_queue-1">is_queue/1</a></h3> +<div class="spec"> +<p><tt>is_queue(X1::<a href="#type-pqueue2">pqueue2()</a>) -> true | false</tt><br></p> +</div><p> + <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4> +</p> + +<h3 class="function"><a name="len-1">len/1</a></h3> +<div class="spec"> +<p><tt>len(H::<a href="#type-pqueue2">pqueue2()</a>) -> non_neg_integer()</tt><br></p> +</div><p> + <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4> +</p> + +<h3 class="function"><a name="new-0">new/0</a></h3> +<div class="spec"> +<p><tt>new() -> <a href="#type-pqueue2">pqueue2()</a></tt><br></p> +</div><p> + <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4> +</p> + +<h3 class="function"><a name="out-1">out/1</a></h3> +<div class="spec"> +<p><tt>out(X1::<a href="#type-pqueue2">pqueue2()</a>) -> {{value, term()}, <a href="#type-pqueue2">pqueue2()</a>} | {empty, <a href="#type-pqueue2">pqueue2()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> +</p> + +<h3 class="function"><a name="out-2">out/2</a></h3> +<div class="spec"> +<p><tt>out(P::integer(), H::<a href="#type-pqueue2">pqueue2()</a>) -> {{value, term()}, <a href="#type-pqueue2">pqueue2()</a>} | {empty, <a href="#type-pqueue2">pqueue2()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4> +</p> + +<h3 class="function"><a name="pout-1">pout/1</a></h3> +<div class="spec"> +<p><tt>pout(X1::<a href="#type-pqueue2">pqueue2()</a>) -> {{value, term(), integer()}, <a href="#type-pqueue2">pqueue2()</a>} | {empty, <a href="#type-pqueue2">pqueue2()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + Includes the priority in the return value.</p> + +<h3 class="function"><a name="test-0">test/0</a></h3> +<div class="spec"> +<p><tt>test() -> any()</tt></p> +</div><p> + <h4><a name="Regression_test.">Regression test.</a></h4> +</p> + +<h3 class="function"><a name="to_list-1">to_list/1</a></h3> +<div class="spec"> +<p><tt>to_list(H::<a href="#type-pqueue2">pqueue2()</a>) -> [term()]</tt><br></p> +</div><p> + <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4> +</p> +<hr> + +<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<p><i>Generated by EDoc</i></p> +</body> +</html> diff --git a/aoc2023/build/dev/erlang/pqueue/doc/pqueue3.html b/aoc2023/build/dev/erlang/pqueue/doc/pqueue3.html new file mode 100644 index 0000000..35f1a7b --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/doc/pqueue3.html @@ -0,0 +1,162 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>Module pqueue3</title> +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc"> +</head> +<body bgcolor="white"> +<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<hr> + +<h1>Module pqueue3</h1> +<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul> + <h3><a name="A_Large_Priority_Queue.">A Large Priority Queue.</a></h3> + This priority queue implementation depends on layered tuples, so that tuple + access times can be exploited for quick in/out priority queue operations + when using 64 or more total priorities. +<p>Copyright © 2011-2020 Michael Truog</p> + +<p><b>Version:</b> 2.0.1 Nov 26 2020 14:55:32 + ------------------------------------------------------------------------</p> +<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog at protonmail dot com"><tt>mjtruog at protonmail dot com</tt></a>).</p> + +<h2><a name="description">Description</a></h2> + <h3><a name="A_Large_Priority_Queue.">A Large Priority Queue.</a></h3> + This priority queue implementation depends on layered tuples, so that tuple + access times can be exploited for quick in/out priority queue operations + when using 64 or more total priorities. This implementation was created + to avoid the slowness within the priority queue used by + both RabbitMQ and Riak + (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl). +<h2><a name="types">Data Types</a></h2> + +<h3 class="typedecl"><a name="type-pqueue3">pqueue3()</a></h3> +<p><tt>pqueue3() = {integer(), integer(), empty | integer(), tuple()}</tt></p> + + +<h3 class="typedecl"><a name="type-pqueue3_empty">pqueue3_empty()</a></h3> +<p><tt>pqueue3_empty() = {integer(), integer(), empty, tuple()}</tt></p> + + +<h2><a name="index">Function Index</a></h2> +<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#in-2">in/2</a></td><td> + <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#in-3">in/3</a></td><td> + <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#is_empty-1">is_empty/1</a></td><td> + <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#is_queue-1">is_queue/1</a></td><td> + <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#len-1">len/1</a></td><td> + <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4> + O(N).</td></tr> +<tr><td valign="top"><a href="#new-0">new/0</a></td><td> + <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#new-1">new/1</a></td><td> + <h4><a name="Create_a_new_priority_queue_with_customization_options.">Create a new priority queue with customization options.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#out-1">out/1</a></td><td> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + O(1) amortized, O(N) worst case.</td></tr> +<tr><td valign="top"><a href="#out-2">out/2</a></td><td> + <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4> + O(1) amortized, O(N) worst case.</td></tr> +<tr><td valign="top"><a href="#pout-1">pout/1</a></td><td> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + Includes the priority in the return value.</td></tr> +<tr><td valign="top"><a href="#to_list-1">to_list/1</a></td><td> + <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4> + O(N).</td></tr> +</table> + +<h2><a name="functions">Function Details</a></h2> + +<h3 class="function"><a name="in-2">in/2</a></h3> +<div class="spec"> +<p><tt>in(Value::term(), Q::<a href="#type-pqueue3">pqueue3()</a>) -> <a href="#type-pqueue3">pqueue3()</a></tt><br></p> +</div><p> + <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="in-3">in/3</a></h3> +<div class="spec"> +<p><tt>in(Value::term(), P::integer(), X3::<a href="#type-pqueue3">pqueue3()</a>) -> <a href="#type-pqueue3">pqueue3()</a></tt><br></p> +</div><p> + <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="is_empty-1">is_empty/1</a></h3> +<div class="spec"> +<p><tt>is_empty(Q::<a href="#type-pqueue3">pqueue3()</a>) -> true | false</tt><br></p> +</div><p> + <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4> + O(1)</p> + +<h3 class="function"><a name="is_queue-1">is_queue/1</a></h3> +<div class="spec"> +<p><tt>is_queue(X1::<a href="#type-pqueue3">pqueue3()</a>) -> true | false</tt><br></p> +</div><p> + <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4> + O(1)</p> + +<h3 class="function"><a name="len-1">len/1</a></h3> +<div class="spec"> +<p><tt>len(Q::<a href="#type-pqueue3">pqueue3()</a>) -> non_neg_integer()</tt><br></p> +</div><p> + <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4> + O(N)</p> + +<h3 class="function"><a name="new-0">new/0</a></h3> +<div class="spec"> +<p><tt>new() -> <a href="#type-pqueue3_empty">pqueue3_empty()</a></tt><br></p> +</div><p> + <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="new-1">new/1</a></h3> +<div class="spec"> +<p><tt>new(Options::[{atom(), term()}]) -> <a href="#type-pqueue3">pqueue3()</a></tt><br></p> +</div><p> + <h4><a name="Create_a_new_priority_queue_with_customization_options.">Create a new priority queue with customization options.</a></h4> + O(1)</p> + +<h3 class="function"><a name="out-1">out/1</a></h3> +<div class="spec"> +<p><tt>out(Q::<a href="#type-pqueue3">pqueue3()</a>) -> {{value, term()}, <a href="#type-pqueue3">pqueue3()</a>} | {empty, <a href="#type-pqueue3">pqueue3()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="out-2">out/2</a></h3> +<div class="spec"> +<p><tt>out(P::integer(), Q::<a href="#type-pqueue3">pqueue3()</a>) -> {{value, term()}, <a href="#type-pqueue3">pqueue3()</a>} | {empty, <a href="#type-pqueue3">pqueue3()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4> + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="pout-1">pout/1</a></h3> +<div class="spec"> +<p><tt>pout(Q::<a href="#type-pqueue3">pqueue3()</a>) -> {{value, term(), integer()}, <a href="#type-pqueue3">pqueue3()</a>} | {empty, <a href="#type-pqueue3">pqueue3()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + Includes the priority in the return value. + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="to_list-1">to_list/1</a></h3> +<div class="spec"> +<p><tt>to_list(Q::<a href="#type-pqueue3">pqueue3()</a>) -> [term()]</tt><br></p> +</div><p> + <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4> + O(N)</p> +<hr> + +<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<p><i>Generated by EDoc</i></p> +</body> +</html> diff --git a/aoc2023/build/dev/erlang/pqueue/doc/pqueue4.html b/aoc2023/build/dev/erlang/pqueue/doc/pqueue4.html new file mode 100644 index 0000000..edcdb6e --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/doc/pqueue4.html @@ -0,0 +1,205 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>Module pqueue4</title> +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc"> +</head> +<body bgcolor="white"> +<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<hr> + +<h1>Module pqueue4</h1> +<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul> + <h3><a name="Static_Priority_Queue.">Static Priority Queue.</a></h3> + This priority queue implementation depends on a static number of priorities + (-128 (high) to 128 (low)) so that tuple access times can be exploited for + quick in/out priority queue operations. +<p>Copyright © 2011-2020 Michael Truog</p> + +<p><b>Version:</b> 2.0.1 Nov 26 2020 14:55:34 + ------------------------------------------------------------------------</p> +<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog at protonmail dot com"><tt>mjtruog at protonmail dot com</tt></a>).</p> + +<h2><a name="description">Description</a></h2> + <h3><a name="Static_Priority_Queue.">Static Priority Queue.</a></h3> + This priority queue implementation depends on a static number of priorities + (-128 (high) to 128 (low)) so that tuple access times can be exploited for + quick in/out priority queue operations. This implementation was created to + avoid the slowness within the priority queue used by both RabbitMQ and Riak + (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl). +<h2><a name="types">Data Types</a></h2> + +<h3 class="typedecl"><a name="type-pqueue4">pqueue4()</a></h3> +<p><tt>pqueue4() = <a href="#type-pqueue4">pqueue4</a>(any())</tt></p> + + +<h3 class="typedecl"><a name="type-pqueue4">pqueue4()</a></h3> +<p><tt>pqueue4(T) = {<a href="#type-priority">priority()</a> | empty, non_neg_integer(), {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, <a href="queue.html#type-queue">queue:queue</a>(T), {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}}</tt></p> + + +<h3 class="typedecl"><a name="type-priority">priority()</a></h3> +<p><tt>priority() = -128..128</tt></p> + + +<h2><a name="index">Function Index</a></h2> +<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#filter-2">filter/2</a></td><td> + <h4><a name="Filter_the_priority_queue.">Filter the priority queue.</a></h4> + O(N).</td></tr> +<tr><td valign="top"><a href="#filter-3">filter/3</a></td><td> + <h4><a name="Filter_a_specific_priority_within_the_priority_queue.">Filter a specific priority within the priority queue.</a></h4> + O(N).</td></tr> +<tr><td valign="top"><a href="#in-2">in/2</a></td><td> + <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#in-3">in/3</a></td><td> + <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#is_empty-1">is_empty/1</a></td><td> + <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#is_queue-1">is_queue/1</a></td><td> + <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#len-1">len/1</a></td><td> + <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#new-0">new/0</a></td><td> + <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#out-1">out/1</a></td><td> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + O(1) amortized, O(N) worst case.</td></tr> +<tr><td valign="top"><a href="#out-2">out/2</a></td><td> + <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4> + O(1) amortized, O(N) worst case.</td></tr> +<tr><td valign="top"><a href="#pout-1">pout/1</a></td><td> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + Includes the priority in the return value.</td></tr> +<tr><td valign="top"><a href="#remove_unique-2">remove_unique/2</a></td><td> + <h4><a name="Remove_a_unique_value_from_the_priority_queue_with_a_binary_predicate.">Remove a unique value from the priority queue with a binary predicate.</a></h4> + O(N) but smaller constant than filter/2.</td></tr> +<tr><td valign="top"><a href="#remove_unique-3">remove_unique/3</a></td><td> + <h4><a name="Remove_a_unique_value_in_a_specific_priority_within_the_priority_queue_with_a_binary_predicate.">Remove a unique value in a specific priority within the priority queue with a binary predicate.</a></h4> + O(N) but smaller constant than filter/3.</td></tr> +<tr><td valign="top"><a href="#to_list-1">to_list/1</a></td><td> + <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4> + O(N).</td></tr> +<tr><td valign="top"><a href="#to_plist-1">to_plist/1</a></td><td> + <h4><a name="Convert_the_priority_queue_to_a_list_with_priorities.">Convert the priority queue to a list with priorities.</a></h4> + O(N).</td></tr> +</table> + +<h2><a name="functions">Function Details</a></h2> + +<h3 class="function"><a name="filter-2">filter/2</a></h3> +<div class="spec"> +<p><tt>filter(F::fun((any()) -> boolean()), Q::<a href="#type-pqueue4">pqueue4()</a>) -> <a href="#type-pqueue4">pqueue4()</a></tt><br></p> +</div><p> + <h4><a name="Filter_the_priority_queue.">Filter the priority queue.</a></h4> + O(N)</p> + +<h3 class="function"><a name="filter-3">filter/3</a></h3> +<div class="spec"> +<p><tt>filter(F::fun((any()) -> boolean()), P::integer(), Q::<a href="#type-pqueue4">pqueue4()</a>) -> <a href="#type-pqueue4">pqueue4()</a></tt><br></p> +</div><p> + <h4><a name="Filter_a_specific_priority_within_the_priority_queue.">Filter a specific priority within the priority queue.</a></h4> + O(N)</p> + +<h3 class="function"><a name="in-2">in/2</a></h3> +<div class="spec"> +<p><tt>in(X::any(), Q::<a href="#type-pqueue4">pqueue4()</a>) -> <a href="#type-pqueue4">pqueue4()</a></tt><br></p> +</div><p> + <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="in-3">in/3</a></h3> +<div class="spec"> +<p><tt>in(X::any(), P::integer(), Q::<a href="#type-pqueue4">pqueue4()</a>) -> <a href="#type-pqueue4">pqueue4()</a></tt><br></p> +</div><p> + <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="is_empty-1">is_empty/1</a></h3> +<div class="spec"> +<p><tt>is_empty(X1::<a href="#type-pqueue4">pqueue4()</a>) -> true | false</tt><br></p> +</div><p> + <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4> + O(1)</p> + +<h3 class="function"><a name="is_queue-1">is_queue/1</a></h3> +<div class="spec"> +<p><tt>is_queue(X1::<a href="#type-pqueue4">pqueue4()</a>) -> true | false</tt><br></p> +</div><p> + <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4> + O(1)</p> + +<h3 class="function"><a name="len-1">len/1</a></h3> +<div class="spec"> +<p><tt>len(X1::<a href="#type-pqueue4">pqueue4()</a>) -> non_neg_integer()</tt><br></p> +</div><p> + <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="new-0">new/0</a></h3> +<div class="spec"> +<p><tt>new() -> <a href="#type-pqueue4">pqueue4()</a></tt><br></p> +</div><p> + <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="out-1">out/1</a></h3> +<div class="spec"> +<p><tt>out(Q::<a href="#type-pqueue4">pqueue4()</a>) -> {{value, any()}, <a href="#type-pqueue4">pqueue4()</a>} | {empty, <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="out-2">out/2</a></h3> +<div class="spec"> +<p><tt>out(P::integer(), Q::<a href="#type-pqueue4">pqueue4()</a>) -> {{value, any()}, <a href="#type-pqueue4">pqueue4()</a>} | {empty, <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4> + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="pout-1">pout/1</a></h3> +<div class="spec"> +<p><tt>pout(Q::<a href="#type-pqueue4">pqueue4()</a>) -> {{value, any(), integer()}, <a href="#type-pqueue4">pqueue4()</a>} | {empty, <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + Includes the priority in the return value. + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="remove_unique-2">remove_unique/2</a></h3> +<div class="spec"> +<p><tt>remove_unique(F::fun((any()) -> boolean()), Q::<a href="#type-pqueue4">pqueue4()</a>) -> {boolean(), <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p> +</div><p> + <h4><a name="Remove_a_unique_value_from_the_priority_queue_with_a_binary_predicate.">Remove a unique value from the priority queue with a binary predicate.</a></h4> + O(N) but smaller constant than filter/2</p> + +<h3 class="function"><a name="remove_unique-3">remove_unique/3</a></h3> +<div class="spec"> +<p><tt>remove_unique(F::fun((any()) -> boolean()), P::integer(), Q::<a href="#type-pqueue4">pqueue4()</a>) -> {boolean(), <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p> +</div><p> + <h4><a name="Remove_a_unique_value_in_a_specific_priority_within_the_priority_queue_with_a_binary_predicate.">Remove a unique value in a specific priority within the priority queue with a binary predicate.</a></h4> + O(N) but smaller constant than filter/3</p> + +<h3 class="function"><a name="to_list-1">to_list/1</a></h3> +<div class="spec"> +<p><tt>to_list(Q::<a href="#type-pqueue4">pqueue4()</a>) -> list()</tt><br></p> +</div><p> + <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4> + O(N)</p> + +<h3 class="function"><a name="to_plist-1">to_plist/1</a></h3> +<div class="spec"> +<p><tt>to_plist(Q::<a href="#type-pqueue4">pqueue4()</a>) -> [{<a href="#type-priority">priority()</a>, list()}]</tt><br></p> +</div><p> + <h4><a name="Convert_the_priority_queue_to_a_list_with_priorities.">Convert the priority queue to a list with priorities.</a></h4> + O(N)</p> +<hr> + +<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<p><i>Generated by EDoc</i></p> +</body> +</html> diff --git a/aoc2023/build/dev/erlang/pqueue/doc/stylesheet.css b/aoc2023/build/dev/erlang/pqueue/doc/stylesheet.css new file mode 100644 index 0000000..ab170c0 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/doc/stylesheet.css @@ -0,0 +1,55 @@ +/* standard EDoc style sheet */ +body { + font-family: Verdana, Arial, Helvetica, sans-serif; + margin-left: .25in; + margin-right: .2in; + margin-top: 0.2in; + margin-bottom: 0.2in; + color: #000000; + background-color: #ffffff; +} +h1,h2 { + margin-left: -0.2in; +} +div.navbar { + background-color: #add8e6; + padding: 0.2em; +} +h2.indextitle { + padding: 0.4em; + background-color: #add8e6; +} +h3.function,h3.typedecl { + background-color: #add8e6; + padding-left: 1em; +} +div.spec { + margin-left: 2em; + background-color: #eeeeee; +} +a.module { + text-decoration:none +} +a.module:hover { + background-color: #eeeeee; +} +ul.definitions { + list-style-type: none; +} +ul.index { + list-style-type: none; + background-color: #eeeeee; +} + +/* + * Minor style tweaks + */ +ul { + list-style-type: square; +} +table { + border-collapse: collapse; +} +td { + padding: 3 +} diff --git a/aoc2023/build/dev/erlang/pqueue/ebin/pqueue.app b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue.app new file mode 100644 index 0000000..974098f --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue.app @@ -0,0 +1,6 @@ +{application,pqueue, + [{description,"Priority Queue Data Structures"}, + {vsn,"2.0.7"}, + {modules,[pqueue,pqueue2,pqueue3,pqueue4]}, + {registered,[]}, + {applications,[stdlib,kernel]}]}. diff --git a/aoc2023/build/dev/erlang/pqueue/ebin/pqueue.beam b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue.beam Binary files differnew file mode 100644 index 0000000..bf379ea --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue.beam diff --git a/aoc2023/build/dev/erlang/pqueue/ebin/pqueue2.beam b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue2.beam Binary files differnew file mode 100644 index 0000000..2913682 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue2.beam diff --git a/aoc2023/build/dev/erlang/pqueue/ebin/pqueue3.beam b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue3.beam Binary files differnew file mode 100644 index 0000000..1d55303 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue3.beam diff --git a/aoc2023/build/dev/erlang/pqueue/ebin/pqueue4.beam b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue4.beam Binary files differnew file mode 100644 index 0000000..13f75f5 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue4.beam diff --git a/aoc2023/build/dev/erlang/pqueue/rebar.config b/aoc2023/build/dev/erlang/pqueue/rebar.config new file mode 100644 index 0000000..f8022f0 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/rebar.config @@ -0,0 +1,14 @@ +%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*- +% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod: + +{erl_opts, + [{platform_define, "^R16", 'ERLANG_OTP_VERSION_16'}, + {platform_define, "^17\.", 'ERLANG_OTP_VERSION_17'}, + {platform_define, "^18\.", 'ERLANG_OTP_VERSION_18'}, + {platform_define, "^19\.", 'ERLANG_OTP_VERSION_19'}, + {platform_define, "^20\.", 'ERLANG_OTP_VERSION_20'}, + warn_export_vars, + warn_unused_import, + %warn_missing_spec, + warnings_as_errors]}. +{edoc_opts, [{preprocess, true}]}. diff --git a/aoc2023/build/dev/erlang/pqueue/src/pqueue.app.src b/aoc2023/build/dev/erlang/pqueue/src/pqueue.app.src new file mode 100644 index 0000000..b153ad1 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/src/pqueue.app.src @@ -0,0 +1,10 @@ +%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*- +% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod: + +{application, pqueue, + [{description, "Priority Queue Data Structures"}, + {vsn, "2.0.7"}, + {modules, [pqueue, pqueue2, pqueue3, pqueue4]}, + {registered, []}, + {applications, [stdlib, kernel]}]}. + diff --git a/aoc2023/build/dev/erlang/pqueue/src/pqueue.erl b/aoc2023/build/dev/erlang/pqueue/src/pqueue.erl new file mode 100644 index 0000000..2c57fa2 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/src/pqueue.erl @@ -0,0 +1,2246 @@ +%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*- +% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod: +%%% +%%%------------------------------------------------------------------------ +%%% @doc +%%% ==Static Priority Queue.== +%%% This priority queue implementation depends on a static number of priorities +%%% (-20 (high) to 20 (low)) so that tuple access times can be exploited for +%%% quick in/out priority queue operations. This implementation was created to +%%% avoid the slowness within the priority queue used by both RabbitMQ and Riak +%%% (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl). +%%% @end +%%% +%%% MIT License +%%% +%%% Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com> +%%% +%%% Permission is hereby granted, free of charge, to any person obtaining a +%%% copy of this software and associated documentation files (the "Software"), +%%% to deal in the Software without restriction, including without limitation +%%% the rights to use, copy, modify, merge, publish, distribute, sublicense, +%%% and/or sell copies of the Software, and to permit persons to whom the +%%% Software is furnished to do so, subject to the following conditions: +%%% +%%% The above copyright notice and this permission notice shall be included in +%%% all copies or substantial portions of the Software. +%%% +%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +%%% DEALINGS IN THE SOFTWARE. +%%% +%%% @author Michael Truog <mjtruog at protonmail dot com> +%%% @copyright 2011-2020 Michael Truog +%%% @version 2.0.1 {@date} {@time} +%%%------------------------------------------------------------------------ + +-module(pqueue). +-author('mjtruog at protonmail dot com'). + +%% external interface +-export([in/2, % O(1) + in/3, % O(1) + is_empty/1, % O(1) + is_queue/1, % O(1) + join/2, % O(N) typically (?) + len/1, % O(N) + new/0, % O(1) + out/1, % O(1) amortized, O(N) worst case + out/2, % O(1) amortized, O(N) worst case + pout/1, % O(1) amortized, O(N) worst case + to_list/1, % O(N) + test/0]). + +%%%------------------------------------------------------------------------ +%%% External interface functions +%%%------------------------------------------------------------------------ + +-ifdef(ERLANG_OTP_VERSION_16). +-type pqueue() :: + {integer(), + {queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue()}, + queue(), + {queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue()}} | + {'empty', + {queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue()}, + queue(), + {queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue()}}. +-else. +-type pqueue() :: + {integer(), + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue(), queue:queue()}, + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue(), queue:queue()}, + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue()}, + queue:queue(), + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue()}, + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue(), queue:queue()}, + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue(), queue:queue()}} | + {'empty', + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue(), queue:queue()}, + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue(), queue:queue()}, + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue()}, + queue:queue(), + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue()}, + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue(), queue:queue()}, + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue(), queue:queue()}}. +-endif. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Append an item to the tail of the 0 priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec in(term(), pqueue()) -> pqueue(). + +in(X, Q) -> + in(X, 0, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Append an item to the tail of a specific priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec in(term(), integer(), pqueue()) -> pqueue(). + +in(_, P, _) + when P < -20; P > 20 -> + erlang:exit(badarg); +in(X, P, {empty, _, _, _, _, _, _, _} = Q) -> + in_higher(P, Q, X); +in(X, P, {Pc, _, _, _, _, _, _, _} = Q) + when P < Pc -> + in_higher(P, Q, X); +in(X, P, Q) -> + in_lower(P, Q, X). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Check if the priority queue is empty.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec is_empty(pqueue()) -> 'true' | 'false'. + +is_empty({empty, _, _, _, _, _, _, _}) -> + true; +is_empty({_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + queue:is_empty(Qn20) and queue:is_empty(Qn19) and queue:is_empty(Qn18) and + queue:is_empty(Qn17) and queue:is_empty(Qn16) and queue:is_empty(Qn15) and + queue:is_empty(Qn14) and + queue:is_empty(Qn13) and queue:is_empty(Qn12) and queue:is_empty(Qn11) and + queue:is_empty(Qn10) and queue:is_empty(Qn9) and queue:is_empty(Qn8) and + queue:is_empty(Qn7) and + queue:is_empty(Qn6) and queue:is_empty(Qn5) and queue:is_empty(Qn4) and + queue:is_empty(Qn3) and queue:is_empty(Qn2) and queue:is_empty(Qn1) and + queue:is_empty(Q0) and + queue:is_empty(Qp1) and queue:is_empty(Qp2) and queue:is_empty(Qp3) and + queue:is_empty(Qp4) and queue:is_empty(Qp5) and queue:is_empty(Qp6) and + queue:is_empty(Qp7) and queue:is_empty(Qp8) and queue:is_empty(Qp9) and + queue:is_empty(Qp10) and queue:is_empty(Qp11) and queue:is_empty(Qp12) and + queue:is_empty(Qp13) and + queue:is_empty(Qp14) and queue:is_empty(Qp15) and queue:is_empty(Qp16) and + queue:is_empty(Qp17) and queue:is_empty(Qp18) and queue:is_empty(Qp19) and + queue:is_empty(Qp20). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Check if the priority queue type is as expected.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec is_queue(pqueue()) -> 'true' | 'false'. + +is_queue({Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) + when tuple_size(Qsn14) == 7, tuple_size(Qsn7) == 7, tuple_size(Qsn1) == 6, + tuple_size(Qsp14) == 7, tuple_size(Qsp7) == 7, tuple_size(Qsp1) == 6 -> + (((Pc =:= empty) or is_integer(Pc)) and queue:is_queue(Q0)); +is_queue(_) -> + false. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Join two priority queues.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec join(pqueue(), pqueue()) -> pqueue(). + +join({P1c, + {Q1_n20, Q1_n19, Q1_n18, Q1_n17, Q1_n16, Q1_n15, Q1_n14}, + {Q1_n13, Q1_n12, Q1_n11, Q1_n10, Q1_n9, Q1_n8, Q1_n7}, + {Q1_n6, Q1_n5, Q1_n4, Q1_n3, Q1_n2, Q1_n1}, + Q1_0, + {Q1_p1, Q1_p2, Q1_p3, Q1_p4, Q1_p5, Q1_p6}, + {Q1_p7, Q1_p8, Q1_p9, Q1_p10, Q1_p11, Q1_p12, Q1_p13}, + {Q1_p14, Q1_p15, Q1_p16, Q1_p17, Q1_p18, Q1_p19, Q1_p20}}, + {P2c, + {Q2_n20, Q2_n19, Q2_n18, Q2_n17, Q2_n16, Q2_n15, Q2_n14}, + {Q2_n13, Q2_n12, Q2_n11, Q2_n10, Q2_n9, Q2_n8, Q2_n7}, + {Q2_n6, Q2_n5, Q2_n4, Q2_n3, Q2_n2, Q2_n1}, + Q2_0, + {Q2_p1, Q2_p2, Q2_p3, Q2_p4, Q2_p5, Q2_p6}, + {Q2_p7, Q2_p8, Q2_p9, Q2_p10, Q2_p11, Q2_p12, Q2_p13}, + {Q2_p14, Q2_p15, Q2_p16, Q2_p17, Q2_p18, Q2_p19, Q2_p20}}) -> + {erlang:min(P1c, P2c), + {queue:join(Q1_n20, Q2_n20), queue:join(Q1_n19, Q2_n19), + queue:join(Q1_n18, Q2_n18), queue:join(Q1_n17, Q2_n17), + queue:join(Q1_n16, Q2_n16), queue:join(Q1_n15, Q2_n15), + queue:join(Q1_n14, Q2_n14)}, + {queue:join(Q1_n13, Q2_n13), queue:join(Q1_n12, Q2_n12), + queue:join(Q1_n11, Q2_n11), queue:join(Q1_n10, Q2_n10), + queue:join(Q1_n9, Q2_n9), queue:join(Q1_n8, Q2_n8), + queue:join(Q1_n7, Q2_n7)}, + {queue:join(Q1_n6, Q2_n6), queue:join(Q1_n5, Q2_n5), + queue:join(Q1_n4, Q2_n4), queue:join(Q1_n3, Q2_n3), + queue:join(Q1_n2, Q2_n2), queue:join(Q1_n1, Q2_n1)}, + queue:join(Q1_0, Q2_0), + {queue:join(Q1_p1, Q2_p1), queue:join(Q1_p2, Q2_p2), + queue:join(Q1_p3, Q2_p3), queue:join(Q1_p4, Q2_p4), + queue:join(Q1_p5, Q2_p5), queue:join(Q1_p6, Q2_p6)}, + {queue:join(Q1_p7, Q2_p7), queue:join(Q1_p8, Q2_p8), + queue:join(Q1_p9, Q2_p9), queue:join(Q1_p10, Q2_p10), + queue:join(Q1_p11, Q2_p11), queue:join(Q1_p12, Q2_p12), + queue:join(Q1_p13, Q2_p13)}, + {queue:join(Q1_p14, Q2_p14), queue:join(Q1_p15, Q2_p15), + queue:join(Q1_p16, Q2_p16), queue:join(Q1_p17, Q2_p17), + queue:join(Q1_p18, Q2_p18), queue:join(Q1_p19, Q2_p19), + queue:join(Q1_p20, Q2_p20)}}. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Determine the length of a priority queue.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec len(pqueue()) -> non_neg_integer(). + +len({_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + queue:len(Qn20) + queue:len(Qn19) + queue:len(Qn18) + queue:len(Qn17) + + queue:len(Qn16) + queue:len(Qn15) + queue:len(Qn14) + + queue:len(Qn13) + queue:len(Qn12) + queue:len(Qn11) + queue:len(Qn10) + + queue:len(Qn9) + queue:len(Qn8) + queue:len(Qn7) + + queue:len(Qn6) + queue:len(Qn5) + queue:len(Qn4) + queue:len(Qn3) + + queue:len(Qn2) + queue:len(Qn1) + + queue:len(Q0) + + queue:len(Qp1) + queue:len(Qp2) + queue:len(Qp3) + queue:len(Qp4) + + queue:len(Qp5) + queue:len(Qp6) + + queue:len(Qp7) + queue:len(Qp8) + queue:len(Qp9) + queue:len(Qp10) + + queue:len(Qp11) + queue:len(Qp12) + queue:len(Qp13) + + queue:len(Qp14) + queue:len(Qp15) + queue:len(Qp16) + queue:len(Qp17) + + queue:len(Qp18) + queue:len(Qp19) + queue:len(Qp20). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Create a new priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec new() -> pqueue(). + +new() -> + {empty, % current priority + erlang:make_tuple(7, queue:new()), % priority [-20..-14] + erlang:make_tuple(7, queue:new()), % priority [-13.. -7] + erlang:make_tuple(6, queue:new()), % priority [ -6.. -1] + queue:new(), % priority 0 (default) + erlang:make_tuple(6, queue:new()), % priority [ 1.. 6] + erlang:make_tuple(7, queue:new()), % priority [ 7.. 13] + erlang:make_tuple(7, queue:new())}. % priority [ 14.. 20] + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item from the head of the priority queue.=== +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec out(pqueue()) -> + {{'value', term()}, pqueue()} | {'empty', pqueue()}. + +out({empty, _, _, _, _, _, _, _} = Q) -> + {empty, Q}; +out({Pc, _, _, _, _, _, _, _} = Q) -> + out_current(Pc, Q, nopriority). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item of a specific priority from the head of the queue.=== +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec out(integer(), pqueue()) -> + {{'value', term()}, pqueue()} | {'empty', pqueue()}. + +out(P, _) + when P < -20; P > 20 -> + erlang:exit(badarg); +out(_, {empty, _, _, _, _, _, _, _} = Q) -> + {empty, Q}; +out(P, Q) -> + out_specific(P, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item from the head of the priority queue.=== +%% Includes the priority in the return value. +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec pout(pqueue()) -> + {{'value', term(), integer()}, pqueue()} | {'empty', pqueue()}. + +pout({empty, _, _, _, _, _, _, _} = Q) -> + {empty, Q}; +pout({Pc, _, _, _, _, _, _, _} = Q) -> + out_current(Pc, Q, priority). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Convert the priority queue to a list.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec to_list(pqueue()) -> list(term()). + +to_list({_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + queue:to_list(Qn20) ++ queue:to_list(Qn19) ++ queue:to_list(Qn18) ++ + queue:to_list(Qn17) ++ queue:to_list(Qn16) ++ queue:to_list(Qn15) ++ + queue:to_list(Qn14) ++ + queue:to_list(Qn13) ++ queue:to_list(Qn12) ++ queue:to_list(Qn11) ++ + queue:to_list(Qn10) ++ queue:to_list(Qn9) ++ queue:to_list(Qn8) ++ + queue:to_list(Qn7) ++ + queue:to_list(Qn6) ++ queue:to_list(Qn5) ++ queue:to_list(Qn4) ++ + queue:to_list(Qn3) ++ queue:to_list(Qn2) ++ queue:to_list(Qn1) ++ + queue:to_list(Q0) ++ + queue:to_list(Qp1) ++ queue:to_list(Qp2) ++ queue:to_list(Qp3) ++ + queue:to_list(Qp4) ++ queue:to_list(Qp5) ++ queue:to_list(Qp6) ++ + queue:to_list(Qp7) ++ queue:to_list(Qp8) ++ queue:to_list(Qp9) ++ + queue:to_list(Qp10) ++ queue:to_list(Qp11) ++ queue:to_list(Qp12) ++ + queue:to_list(Qp13) ++ + queue:to_list(Qp14) ++ queue:to_list(Qp15) ++ queue:to_list(Qp16) ++ + queue:to_list(Qp17) ++ queue:to_list(Qp18) ++ queue:to_list(Qp19) ++ + queue:to_list(Qp20). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Regression test.=== +%% @end +%%------------------------------------------------------------------------- + +test() -> + Q0 = pqueue:new(), + true = pqueue:is_queue(Q0), + Q1 = pqueue:in(20, 20, Q0), + Q2 = pqueue:in(19, 19, Q1), + Q3 = pqueue:in(18, 18, Q2), + Q4 = pqueue:in(17, 17, Q3), + Q5 = pqueue:in(16, 16, Q4), + Q6 = pqueue:in(15, 15, Q5), + Q7 = pqueue:in(14, 14, Q6), + Q8 = pqueue:in(13, 13, Q7), + Q9 = pqueue:in(12, 12, Q8), + Q10 = pqueue:in(11, 11, Q9), + Q11 = pqueue:in(10, 10, Q10), + Q12 = pqueue:in(9, 9, Q11), + Q13 = pqueue:in(8, 8, Q12), + Q14 = pqueue:in(7, 7, Q13), + Q15 = pqueue:in(6, 6, Q14), + Q16 = pqueue:in(5, 5, Q15), + Q17 = pqueue:in(4, 4, Q16), + Q18 = pqueue:in(3, 3, Q17), + Q19 = pqueue:in(2, 2, Q18), + Q20 = pqueue:in(1, 1, Q19), + Q21 = pqueue:in(0, 0, Q20), + Q22 = pqueue:in(-1, -1, Q21), + Q23 = pqueue:in(-2, -2, Q22), + Q24 = pqueue:in(-3, -3, Q23), + Q25 = pqueue:in(-4, -4, Q24), + Q26 = pqueue:in(-5, -5, Q25), + Q27 = pqueue:in(-6, -6, Q26), + Q28 = pqueue:in(-7, -7, Q27), + Q29 = pqueue:in(-8, -8, Q28), + Q30 = pqueue:in(-9, -9, Q29), + Q31 = pqueue:in(-10, -10, Q30), + Q32 = pqueue:in(-11, -11, Q31), + Q33 = pqueue:in(-12, -12, Q32), + Q34 = pqueue:in(-13, -13, Q33), + Q35 = pqueue:in(-14, -14, Q34), + Q36 = pqueue:in(-15, -15, Q35), + Q37 = pqueue:in(-16, -16, Q36), + Q38 = pqueue:in(-17, -17, Q37), + Q39 = pqueue:in(-18, -18, Q38), + Q40 = pqueue:in(-19, -19, Q39), + Q41 = pqueue:in(-20, -20, Q40), + Q42 = pqueue:in(-20, -20, Q41), + Q43 = pqueue:in(-19, -19, Q42), + Q44 = pqueue:in(-18, -18, Q43), + Q45 = pqueue:in(-17, -17, Q44), + Q46 = pqueue:in(-16, -16, Q45), + Q47 = pqueue:in(-15, -15, Q46), + Q48 = pqueue:in(-14, -14, Q47), + Q49 = pqueue:in(-13, -13, Q48), + Q50 = pqueue:in(-12, -12, Q49), + Q51 = pqueue:in(-11, -11, Q50), + Q52 = pqueue:in(-10, -10, Q51), + Q53 = pqueue:in(-9, -9, Q52), + Q54 = pqueue:in(-8, -8, Q53), + Q55 = pqueue:in(-7, -7, Q54), + Q56 = pqueue:in(-6, -6, Q55), + Q57 = pqueue:in(-5, -5, Q56), + Q58 = pqueue:in(-4, -4, Q57), + Q59 = pqueue:in(-3, -3, Q58), + Q60 = pqueue:in(-2, -2, Q59), + Q61 = pqueue:in(-1, -1, Q60), + Q62 = pqueue:in(0, 0, Q61), + Q63 = pqueue:in(1, 1, Q62), + Q64 = pqueue:in(2, 2, Q63), + Q65 = pqueue:in(3, 3, Q64), + Q66 = pqueue:in(4, 4, Q65), + Q67 = pqueue:in(5, 5, Q66), + Q68 = pqueue:in(6, 6, Q67), + Q69 = pqueue:in(7, 7, Q68), + Q70 = pqueue:in(8, 8, Q69), + Q71 = pqueue:in(9, 9, Q70), + Q72 = pqueue:in(10, 10, Q71), + Q73 = pqueue:in(11, 11, Q72), + Q74 = pqueue:in(12, 12, Q73), + Q75 = pqueue:in(13, 13, Q74), + Q76 = pqueue:in(14, 14, Q75), + Q77 = pqueue:in(15, 15, Q76), + Q78 = pqueue:in(16, 16, Q77), + Q79 = pqueue:in(17, 17, Q78), + Q80 = pqueue:in(18, 18, Q79), + Q81 = pqueue:in(19, 19, Q80), + Q82 = pqueue:in(20, 20, Q81), + true = pqueue:is_queue(Q82), + 82 = pqueue:len(Q82), + [-20, -20, -19, -19, -18, -18, -17, -17, -16, -16, -15, -15, -14, -14, + -13, -13, -12, -12, -11, -11, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6, + -5, -5, -4, -4, -3, -3, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, + 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, + 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20] = pqueue:to_list(Q82), + {{value, -20}, Q83} = pqueue:out(Q82), + {{value, -20}, Q84} = pqueue:out(Q83), + {{value, -19}, Q85} = pqueue:out(Q84), + {{value, -19}, Q86} = pqueue:out(Q85), + {{value, -18}, Q87} = pqueue:out(Q86), + {{value, -18}, Q88} = pqueue:out(Q87), + {{value, 0}, Q89} = pqueue:out(0, Q88), + {{value, 0}, Q90} = pqueue:out(0, Q89), + {empty, _} = pqueue:out(0, Q90), + {{value, -17, -17}, Q91} = pqueue:pout(Q90), + {{value, -17, -17}, Q92} = pqueue:pout(Q91), + {{value, -16, -16}, Q93} = pqueue:pout(Q92), + {{value, -16, -16}, Q94} = pqueue:pout(Q93), + {{value, -15, -15}, Q95} = pqueue:pout(Q94), + {{value, -15, -15}, Q96} = pqueue:pout(Q95), + {{value, -14, -14}, Q97} = pqueue:pout(Q96), + {{value, -14, -14}, Q98} = pqueue:pout(Q97), + {{value, -13, -13}, Q99} = pqueue:pout(Q98), + {{value, -13, -13}, Q100} = pqueue:pout(Q99), + {{value, -12, -12}, Q101} = pqueue:pout(Q100), + {{value, -12, -12}, Q102} = pqueue:pout(Q101), + {{value, -11, -11}, Q103} = pqueue:pout(Q102), + {{value, -11, -11}, Q104} = pqueue:pout(Q103), + {{value, -10, -10}, Q105} = pqueue:pout(Q104), + {{value, -10, -10}, Q106} = pqueue:pout(Q105), + {{value, -9, -9}, Q107} = pqueue:pout(Q106), + {{value, -9, -9}, Q108} = pqueue:pout(Q107), + {{value, -8, -8}, Q109} = pqueue:pout(Q108), + {{value, -8, -8}, Q110} = pqueue:pout(Q109), + {{value, -7, -7}, Q111} = pqueue:pout(Q110), + {{value, -7, -7}, Q112} = pqueue:pout(Q111), + {{value, -6, -6}, Q113} = pqueue:pout(Q112), + {{value, -6, -6}, Q114} = pqueue:pout(Q113), + {{value, -5, -5}, Q115} = pqueue:pout(Q114), + {{value, -5, -5}, Q116} = pqueue:pout(Q115), + {{value, -4, -4}, Q117} = pqueue:pout(Q116), + {{value, -4, -4}, Q118} = pqueue:pout(Q117), + {{value, -3, -3}, Q119} = pqueue:pout(Q118), + {{value, -3, -3}, Q120} = pqueue:pout(Q119), + {{value, -2, -2}, Q121} = pqueue:pout(Q120), + {{value, -2, -2}, Q122} = pqueue:pout(Q121), + {{value, -1, -1}, Q123} = pqueue:pout(Q122), + {{value, -1, -1}, Q124} = pqueue:pout(Q123), + {{value, 1, 1}, Q125} = pqueue:pout(Q124), + {{value, 1, 1}, Q126} = pqueue:pout(Q125), + {{value, 2, 2}, Q127} = pqueue:pout(Q126), + {{value, 2, 2}, Q128} = pqueue:pout(Q127), + {{value, 3, 3}, Q129} = pqueue:pout(Q128), + {{value, 3, 3}, Q130} = pqueue:pout(Q129), + {{value, 4, 4}, Q131} = pqueue:pout(Q130), + {{value, 4, 4}, Q132} = pqueue:pout(Q131), + {{value, 5, 5}, Q133} = pqueue:pout(Q132), + {{value, 5, 5}, Q134} = pqueue:pout(Q133), + {{value, 6, 6}, Q135} = pqueue:pout(Q134), + {{value, 6, 6}, Q136} = pqueue:pout(Q135), + {{value, 7, 7}, Q137} = pqueue:pout(Q136), + {{value, 7, 7}, Q138} = pqueue:pout(Q137), + {{value, 8, 8}, Q139} = pqueue:pout(Q138), + {{value, 8, 8}, Q140} = pqueue:pout(Q139), + {{value, 9, 9}, Q141} = pqueue:pout(Q140), + {{value, 9, 9}, Q142} = pqueue:pout(Q141), + {{value, 10, 10}, Q143} = pqueue:pout(Q142), + {{value, 10, 10}, Q144} = pqueue:pout(Q143), + {{value, 11, 11}, Q145} = pqueue:pout(Q144), + {{value, 11, 11}, Q146} = pqueue:pout(Q145), + {{value, 12, 12}, Q147} = pqueue:pout(Q146), + {{value, 12, 12}, Q148} = pqueue:pout(Q147), + {{value, 13, 13}, Q149} = pqueue:pout(Q148), + {{value, 13, 13}, Q150} = pqueue:pout(Q149), + {{value, 14, 14}, Q151} = pqueue:pout(Q150), + {{value, 14, 14}, Q152} = pqueue:pout(Q151), + {{value, 15, 15}, Q153} = pqueue:pout(Q152), + {{value, 15, 15}, Q154} = pqueue:pout(Q153), + {{value, 16, 16}, Q155} = pqueue:pout(Q154), + {{value, 16, 16}, Q156} = pqueue:pout(Q155), + {{value, 17, 17}, Q157} = pqueue:pout(Q156), + {{value, 17, 17}, Q158} = pqueue:pout(Q157), + {{value, 18, 18}, Q159} = pqueue:pout(Q158), + {{value, 18, 18}, Q160} = pqueue:pout(Q159), + {{value, 19, 19}, Q161} = pqueue:pout(Q160), + {{value, 19, 19}, Q162} = pqueue:pout(Q161), + {{value, 20, 20}, Q163} = pqueue:pout(Q162), + {{value, 20, 20}, Q164} = pqueue:pout(Q163), + true = pqueue:is_empty(Q164), + {empty, Q165} = pqueue:pout(Q164), + true = pqueue:is_empty(Q165), + ok. + +%%%------------------------------------------------------------------------ +%%% Private functions +%%%------------------------------------------------------------------------ + +in_higher(-20, {_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-20, + {queue:in(X, Qn20), Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-19, {_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-19, + {Qn20, queue:in(X, Qn19), Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-18, {_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-18, + {Qn20, Qn19, queue:in(X, Qn18), Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-17, {_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-17, + {Qn20, Qn19, Qn18, queue:in(X, Qn17), Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-16, {_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-16, + {Qn20, Qn19, Qn18, Qn17, queue:in(X, Qn16), Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-15, {_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-15, + {Qn20, Qn19, Qn18, Qn17, Qn16, queue:in(X, Qn15), Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-14, {_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-14, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, queue:in(X, Qn14)}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-13, {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-13, Qsn14, + {queue:in(X, Qn13), Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-12, {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-12, Qsn14, + {Qn13, queue:in(X, Qn12), Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-11, {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-11, Qsn14, + {Qn13, Qn12, queue:in(X, Qn11), Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-10, {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-10, Qsn14, + {Qn13, Qn12, Qn11, queue:in(X, Qn10), Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-9, {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-9, Qsn14, + {Qn13, Qn12, Qn11, Qn10, queue:in(X, Qn9), Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-8, {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-8, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, queue:in(X, Qn8), Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-7, {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-7, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, queue:in(X, Qn7)}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-6, {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-6, Qsn14, Qsn7, + {queue:in(X, Qn6), Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-5, {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-5, Qsn14, Qsn7, + {Qn6, queue:in(X, Qn5), Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-4, {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-4, Qsn14, Qsn7, + {Qn6, Qn5, queue:in(X, Qn4), Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-3, {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-3, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, queue:in(X, Qn3), Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-2, {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-2, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, queue:in(X, Qn2), Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-1, {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-1, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, queue:in(X, Qn1)}, + Q0, Qsp1, Qsp7, Qsp14}; +in_higher(0, {_, Qsn14, Qsn7, Qsn1, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {0, Qsn14, Qsn7, Qsn1, + queue:in(X, Q0), + Qsp1, Qsp7, Qsp14}; +in_higher(1, {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {1, Qsn14, Qsn7, Qsn1, Q0, + {queue:in(X, Qp1), Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}; +in_higher(2, {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {2, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, queue:in(X, Qp2), Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}; +in_higher(3, {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {3, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, queue:in(X, Qp3), Qp4, Qp5, Qp6}, + Qsp7, Qsp14}; +in_higher(4, {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {4, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, queue:in(X, Qp4), Qp5, Qp6}, + Qsp7, Qsp14}; +in_higher(5, {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {5, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, queue:in(X, Qp5), Qp6}, + Qsp7, Qsp14}; +in_higher(6, {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {6, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, queue:in(X, Qp6)}, + Qsp7, Qsp14}; +in_higher(7, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {7, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {queue:in(X, Qp7), Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}; +in_higher(8, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {8, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, queue:in(X, Qp8), Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}; +in_higher(9, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {9, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, queue:in(X, Qp9), Qp10, Qp11, Qp12, Qp13}, + Qsp14}; +in_higher(10, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {10, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, queue:in(X, Qp10), Qp11, Qp12, Qp13}, + Qsp14}; +in_higher(11, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {11, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, queue:in(X, Qp11), Qp12, Qp13}, + Qsp14}; +in_higher(12, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {12, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, queue:in(X, Qp12), Qp13}, + Qsp14}; +in_higher(13, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {13, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, queue:in(X, Qp13)}, + Qsp14}; +in_higher(14, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {14, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {queue:in(X, Qp14), Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}; +in_higher(15, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {15, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, queue:in(X, Qp15), Qp16, Qp17, Qp18, Qp19, Qp20}}; +in_higher(16, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {16, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, queue:in(X, Qp16), Qp17, Qp18, Qp19, Qp20}}; +in_higher(17, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {17, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, queue:in(X, Qp17), Qp18, Qp19, Qp20}}; +in_higher(18, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {18, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, queue:in(X, Qp18), Qp19, Qp20}}; +in_higher(19, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {19, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, queue:in(X, Qp19), Qp20}}; +in_higher(20, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {20, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, queue:in(X, Qp20)}}. + +in_lower(-20, {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, + {queue:in(X, Qn20), Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-19, {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, + {Qn20, queue:in(X, Qn19), Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-18, {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, + {Qn20, Qn19, queue:in(X, Qn18), Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-17, {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, + {Qn20, Qn19, Qn18, queue:in(X, Qn17), Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-16, {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, + {Qn20, Qn19, Qn18, Qn17, queue:in(X, Qn16), Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-15, {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, queue:in(X, Qn15), Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-14, {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, queue:in(X, Qn14)}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-13, {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, + {queue:in(X, Qn13), Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-12, {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, + {Qn13, queue:in(X, Qn12), Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-11, {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, + {Qn13, Qn12, queue:in(X, Qn11), Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-10, {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, + {Qn13, Qn12, Qn11, queue:in(X, Qn10), Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-9, {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, queue:in(X, Qn9), Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-8, {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, queue:in(X, Qn8), Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-7, {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, queue:in(X, Qn7)}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-6, {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, + {queue:in(X, Qn6), Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-5, {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, + {Qn6, queue:in(X, Qn5), Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-4, {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, queue:in(X, Qn4), Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-3, {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, queue:in(X, Qn3), Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-2, {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, queue:in(X, Qn2), Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-1, {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, queue:in(X, Qn1)}, + Q0, Qsp1, Qsp7, Qsp14}; +in_lower(0, {Pc, Qsn14, Qsn7, Qsn1, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, + queue:in(X, Q0), + Qsp1, Qsp7, Qsp14}; +in_lower(1, {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {queue:in(X, Qp1), Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}; +in_lower(2, {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, queue:in(X, Qp2), Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}; +in_lower(3, {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, queue:in(X, Qp3), Qp4, Qp5, Qp6}, + Qsp7, Qsp14}; +in_lower(4, {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, queue:in(X, Qp4), Qp5, Qp6}, + Qsp7, Qsp14}; +in_lower(5, {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, queue:in(X, Qp5), Qp6}, + Qsp7, Qsp14}; +in_lower(6, {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, queue:in(X, Qp6)}, + Qsp7, Qsp14}; +in_lower(7, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {queue:in(X, Qp7), Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}; +in_lower(8, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, queue:in(X, Qp8), Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}; +in_lower(9, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, queue:in(X, Qp9), Qp10, Qp11, Qp12, Qp13}, + Qsp14}; +in_lower(10, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, queue:in(X, Qp10), Qp11, Qp12, Qp13}, + Qsp14}; +in_lower(11, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, queue:in(X, Qp11), Qp12, Qp13}, + Qsp14}; +in_lower(12, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, queue:in(X, Qp12), Qp13}, + Qsp14}; +in_lower(13, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, queue:in(X, Qp13)}, + Qsp14}; +in_lower(14, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {queue:in(X, Qp14), Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}; +in_lower(15, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, queue:in(X, Qp15), Qp16, Qp17, Qp18, Qp19, Qp20}}; +in_lower(16, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, queue:in(X, Qp16), Qp17, Qp18, Qp19, Qp20}}; +in_lower(17, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, queue:in(X, Qp17), Qp18, Qp19, Qp20}}; +in_lower(18, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, queue:in(X, Qp18), Qp19, Qp20}}; +in_lower(19, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, queue:in(X, Qp19), Qp20}}; +in_lower(20, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, queue:in(X, Qp20)}}. + +out_current(-20, + {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn20} = queue:out(Qn20), + if + Value =:= empty -> + out_current(-19, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -20}; + true -> + Value + end, + {NewValue, + {-20, + {NewQn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-19, + {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn19} = queue:out(Qn19), + if + Value =:= empty -> + out_current(-18, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -19}; + true -> + Value + end, + {NewValue, + {-19, + {Qn20, NewQn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-18, + {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn18} = queue:out(Qn18), + if + Value =:= empty -> + out_current(-17, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -18}; + true -> + Value + end, + {NewValue, + {-18, + {Qn20, Qn19, NewQn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-17, + {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn17} = queue:out(Qn17), + if + Value =:= empty -> + out_current(-16, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -17}; + true -> + Value + end, + {NewValue, + {-17, + {Qn20, Qn19, Qn18, NewQn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-16, + {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn16} = queue:out(Qn16), + if + Value =:= empty -> + out_current(-15, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -16}; + true -> + Value + end, + {NewValue, + {-16, + {Qn20, Qn19, Qn18, Qn17, NewQn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-15, + {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn15} = queue:out(Qn15), + if + Value =:= empty -> + out_current(-14, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -15}; + true -> + Value + end, + {NewValue, + {-15, + {Qn20, Qn19, Qn18, Qn17, Qn16, NewQn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-14, + {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn14} = queue:out(Qn14), + if + Value =:= empty -> + out_current(-13, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -14}; + true -> + Value + end, + {NewValue, + {-14, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, NewQn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-13, + {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn13} = queue:out(Qn13), + if + Value =:= empty -> + out_current(-12, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -13}; + true -> + Value + end, + {NewValue, + {-13, Qsn14, + {NewQn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-12, + {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn12} = queue:out(Qn12), + if + Value =:= empty -> + out_current(-11, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -12}; + true -> + Value + end, + {NewValue, + {-12, Qsn14, + {Qn13, NewQn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-11, + {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn11} = queue:out(Qn11), + if + Value =:= empty -> + out_current(-10, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -11}; + true -> + Value + end, + {NewValue, + {-11, Qsn14, + {Qn13, Qn12, NewQn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-10, + {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn10} = queue:out(Qn10), + if + Value =:= empty -> + out_current(-9, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -10}; + true -> + Value + end, + {NewValue, + {-10, Qsn14, + {Qn13, Qn12, Qn11, NewQn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-9, + {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn9} = queue:out(Qn9), + if + Value =:= empty -> + out_current(-8, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -9}; + true -> + Value + end, + {NewValue, + {-9, Qsn14, + {Qn13, Qn12, Qn11, Qn10, NewQn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-8, + {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn8} = queue:out(Qn8), + if + Value =:= empty -> + out_current(-7, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -8}; + true -> + Value + end, + {NewValue, + {-8, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, NewQn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-7, + {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn7} = queue:out(Qn7), + if + Value =:= empty -> + out_current(-6, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -7}; + true -> + Value + end, + {NewValue, + {-7, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, NewQn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-6, + {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn6} = queue:out(Qn6), + if + Value =:= empty -> + out_current(-5, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -6}; + true -> + Value + end, + {NewValue, + {-6, Qsn14, Qsn7, + {NewQn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-5, + {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn5} = queue:out(Qn5), + if + Value =:= empty -> + out_current(-4, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -5}; + true -> + Value + end, + {NewValue, + {-5, Qsn14, Qsn7, + {Qn6, NewQn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-4, + {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn4} = queue:out(Qn4), + if + Value =:= empty -> + out_current(-3, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -4}; + true -> + Value + end, + {NewValue, + {-4, Qsn14, Qsn7, + {Qn6, Qn5, NewQn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-3, + {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn3} = queue:out(Qn3), + if + Value =:= empty -> + out_current(-2, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -3}; + true -> + Value + end, + {NewValue, + {-3, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, NewQn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-2, + {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn2} = queue:out(Qn2), + if + Value =:= empty -> + out_current(-1, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -2}; + true -> + Value + end, + {NewValue, + {-2, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, NewQn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-1, + {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn1} = queue:out(Qn1), + if + Value =:= empty -> + out_current(0, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -1}; + true -> + Value + end, + {NewValue, + {-1, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, NewQn1}, + Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(0, + {_, Qsn14, Qsn7, Qsn1, + Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQ0} = queue:out(Q0), + if + Value =:= empty -> + out_current(1, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 0}; + true -> + Value + end, + {NewValue, + {0, Qsn14, Qsn7, Qsn1, + NewQ0, + Qsp1, Qsp7, Qsp14}} + end; +out_current(1, + {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQp1} = queue:out(Qp1), + if + Value =:= empty -> + out_current(2, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 1}; + true -> + Value + end, + {NewValue, + {1, Qsn14, Qsn7, Qsn1, Q0, + {NewQp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}} + end; +out_current(2, + {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQp2} = queue:out(Qp2), + if + Value =:= empty -> + out_current(3, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 2}; + true -> + Value + end, + {NewValue, + {2, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, NewQp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}} + end; +out_current(3, + {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQp3} = queue:out(Qp3), + if + Value =:= empty -> + out_current(4, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 3}; + true -> + Value + end, + {NewValue, + {3, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, NewQp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}} + end; +out_current(4, + {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQp4} = queue:out(Qp4), + if + Value =:= empty -> + out_current(5, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 4}; + true -> + Value + end, + {NewValue, + {4, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, NewQp4, Qp5, Qp6}, + Qsp7, Qsp14}} + end; +out_current(5, + {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQp5} = queue:out(Qp5), + if + Value =:= empty -> + out_current(6, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 5}; + true -> + Value + end, + {NewValue, + {5, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, NewQp5, Qp6}, + Qsp7, Qsp14}} + end; +out_current(6, + {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQp6} = queue:out(Qp6), + if + Value =:= empty -> + out_current(7, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 6}; + true -> + Value + end, + {NewValue, + {6, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, NewQp6}, + Qsp7, Qsp14}} + end; +out_current(7, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14} = Q, ReturnType) -> + {Value, NewQp7} = queue:out(Qp7), + if + Value =:= empty -> + out_current(8, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 7}; + true -> + Value + end, + {NewValue, + {7, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {NewQp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}} + end; +out_current(8, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14} = Q, ReturnType) -> + {Value, NewQp8} = queue:out(Qp8), + if + Value =:= empty -> + out_current(9, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 8}; + true -> + Value + end, + {NewValue, + {8, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, NewQp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}} + end; +out_current(9, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14} = Q, ReturnType) -> + {Value, NewQp9} = queue:out(Qp9), + if + Value =:= empty -> + out_current(10, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 9}; + true -> + Value + end, + {NewValue, + {9, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, NewQp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}} + end; +out_current(10, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14} = Q, ReturnType) -> + {Value, NewQp10} = queue:out(Qp10), + if + Value =:= empty -> + out_current(11, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 10}; + true -> + Value + end, + {NewValue, + {10, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, NewQp10, Qp11, Qp12, Qp13}, + Qsp14}} + end; +out_current(11, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14} = Q, ReturnType) -> + {Value, NewQp11} = queue:out(Qp11), + if + Value =:= empty -> + out_current(12, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 11}; + true -> + Value + end, + {NewValue, + {11, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, NewQp11, Qp12, Qp13}, + Qsp14}} + end; +out_current(12, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14} = Q, ReturnType) -> + {Value, NewQp12} = queue:out(Qp12), + if + Value =:= empty -> + out_current(13, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 12}; + true -> + Value + end, + {NewValue, + {12, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, NewQp12, Qp13}, + Qsp14}} + end; +out_current(13, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14} = Q, ReturnType) -> + {Value, NewQp13} = queue:out(Qp13), + if + Value =:= empty -> + out_current(14, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 13}; + true -> + Value + end, + {NewValue, + {13, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, NewQp13}, + Qsp14}} + end; +out_current(14, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) -> + {Value, NewQp14} = queue:out(Qp14), + if + Value =:= empty -> + out_current(15, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 14}; + true -> + Value + end, + {NewValue, + {14, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {NewQp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}} + end; +out_current(15, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) -> + {Value, NewQp15} = queue:out(Qp15), + if + Value =:= empty -> + out_current(16, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 15}; + true -> + Value + end, + {NewValue, + {15, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, NewQp15, Qp16, Qp17, Qp18, Qp19, Qp20}}} + end; +out_current(16, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) -> + {Value, NewQp16} = queue:out(Qp16), + if + Value =:= empty -> + out_current(17, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 16}; + true -> + Value + end, + {NewValue, + {16, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, NewQp16, Qp17, Qp18, Qp19, Qp20}}} + end; +out_current(17, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) -> + {Value, NewQp17} = queue:out(Qp17), + if + Value =:= empty -> + out_current(18, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 17}; + true -> + Value + end, + {NewValue, + {17, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, NewQp17, Qp18, Qp19, Qp20}}} + end; +out_current(18, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) -> + {Value, NewQp18} = queue:out(Qp18), + if + Value =:= empty -> + out_current(19, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 18}; + true -> + Value + end, + {NewValue, + {18, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, NewQp18, Qp19, Qp20}}} + end; +out_current(19, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) -> + {Value, NewQp19} = queue:out(Qp19), + if + Value =:= empty -> + out_current(20, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 19}; + true -> + Value + end, + {NewValue, + {19, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, NewQp19, Qp20}}} + end; +out_current(20, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20} = Qsp14}, ReturnType) -> + {Value, NewQp20} = queue:out(Qp20), + if + Value =:= empty -> + {empty, {empty, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 20}; + true -> + Value + end, + {NewValue, + {20, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, NewQp20}}} + end. + +out_specific(-20, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn20} = queue:out(Qn20), + {Value, + {Pc, + {NewQn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-19, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn19} = queue:out(Qn19), + {Value, + {Pc, + {Qn20, NewQn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-18, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn18} = queue:out(Qn18), + {Value, + {Pc, + {Qn20, Qn19, NewQn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-17, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn17} = queue:out(Qn17), + {Value, + {Pc, + {Qn20, Qn19, Qn18, NewQn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-16, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn16} = queue:out(Qn16), + {Value, + {Pc, + {Qn20, Qn19, Qn18, Qn17, NewQn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-15, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn15} = queue:out(Qn15), + {Value, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, NewQn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-14, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn14} = queue:out(Qn14), + {Value, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, NewQn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-13, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn13} = queue:out(Qn13), + {Value, + {Pc, Qsn14, + {NewQn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-12, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn12} = queue:out(Qn12), + {Value, + {Pc, Qsn14, + {Qn13, NewQn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-11, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn11} = queue:out(Qn11), + {Value, + {Pc, Qsn14, + {Qn13, Qn12, NewQn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-10, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn10} = queue:out(Qn10), + {Value, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, NewQn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-9, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn9} = queue:out(Qn9), + {Value, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, NewQn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-8, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn8} = queue:out(Qn8), + {Value, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, NewQn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-7, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn7} = queue:out(Qn7), + {Value, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, NewQn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-6, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn6} = queue:out(Qn6), + {Value, + {Pc, Qsn14, Qsn7, + {NewQn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-5, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn5} = queue:out(Qn5), + {Value, + {Pc, Qsn14, Qsn7, + {Qn6, NewQn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-4, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn4} = queue:out(Qn4), + {Value, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, NewQn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-3, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn3} = queue:out(Qn3), + {Value, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, NewQn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-2, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn2} = queue:out(Qn2), + {Value, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, NewQn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-1, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn1} = queue:out(Qn1), + {Value, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, NewQn1}, + Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(0, + {Pc, Qsn14, Qsn7, Qsn1, + Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQ0} = queue:out(Q0), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, + NewQ0, + Qsp1, Qsp7, Qsp14}}; +out_specific(1, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}) -> + {Value, NewQp1} = queue:out(Qp1), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {NewQp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}}; +out_specific(2, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}) -> + {Value, NewQp2} = queue:out(Qp2), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, NewQp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}}; +out_specific(3, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}) -> + {Value, NewQp3} = queue:out(Qp3), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, NewQp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}}; +out_specific(4, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}) -> + {Value, NewQp4} = queue:out(Qp4), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, NewQp4, Qp5, Qp6}, + Qsp7, Qsp14}}; +out_specific(5, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}) -> + {Value, NewQp5} = queue:out(Qp5), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, NewQp5, Qp6}, + Qsp7, Qsp14}}; +out_specific(6, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}) -> + {Value, NewQp6} = queue:out(Qp6), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, NewQp6}, + Qsp7, Qsp14}}; +out_specific(7, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}) -> + {Value, NewQp7} = queue:out(Qp7), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {NewQp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}}; +out_specific(8, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}) -> + {Value, NewQp8} = queue:out(Qp8), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, NewQp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}}; +out_specific(9, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}) -> + {Value, NewQp9} = queue:out(Qp9), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, NewQp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}}; +out_specific(10, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}) -> + {Value, NewQp10} = queue:out(Qp10), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, NewQp10, Qp11, Qp12, Qp13}, + Qsp14}}; +out_specific(11, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}) -> + {Value, NewQp11} = queue:out(Qp11), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, NewQp11, Qp12, Qp13}, + Qsp14}}; +out_specific(12, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}) -> + {Value, NewQp12} = queue:out(Qp12), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, NewQp12, Qp13}, + Qsp14}}; +out_specific(13, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}) -> + {Value, NewQp13} = queue:out(Qp13), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, NewQp13}, + Qsp14}}; +out_specific(14, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + {Value, NewQp14} = queue:out(Qp14), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {NewQp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}}; +out_specific(15, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + {Value, NewQp15} = queue:out(Qp15), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, NewQp15, Qp16, Qp17, Qp18, Qp19, Qp20}}}; +out_specific(16, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + {Value, NewQp16} = queue:out(Qp16), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, NewQp16, Qp17, Qp18, Qp19, Qp20}}}; +out_specific(17, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + {Value, NewQp17} = queue:out(Qp17), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, NewQp17, Qp18, Qp19, Qp20}}}; +out_specific(18, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + {Value, NewQp18} = queue:out(Qp18), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, NewQp18, Qp19, Qp20}}}; +out_specific(19, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + {Value, NewQp19} = queue:out(Qp19), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, NewQp19, Qp20}}}; +out_specific(20, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + {Value, NewQp20} = queue:out(Qp20), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, NewQp20}}}. + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). + +-include("pqueue_test.hrl"). + +module_test_() -> + {timeout, ?TEST_TIMEOUT, [ + {"internal tests", ?_assertOk(test())} + ]}. + +long_test_() -> + test_condition([ + {"proper tests", ?_assert(pqueue_proper:qc_pq())} + ], ?CLOUDI_LONG_TEST_TIMEOUT). + +-endif. + diff --git a/aoc2023/build/dev/erlang/pqueue/src/pqueue2.erl b/aoc2023/build/dev/erlang/pqueue/src/pqueue2.erl new file mode 100644 index 0000000..bbdeaaf --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/src/pqueue2.erl @@ -0,0 +1,483 @@ +%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*- +% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod: +%%% +%%%------------------------------------------------------------------------ +%%% @doc +%%% ==Skew Heap Priority Queue.== +%%% Ulf Wiger suggested pursuing a skew heap as an optimal Erlang priority +%%% queue implementation. Unfortunately, testing has shown this solution to +%%% be more than 2 times slower than pqueue. +%%% @end +%%% +%%% MIT License +%%% +%%% Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com> +%%% +%%% Permission is hereby granted, free of charge, to any person obtaining a +%%% copy of this software and associated documentation files (the "Software"), +%%% to deal in the Software without restriction, including without limitation +%%% the rights to use, copy, modify, merge, publish, distribute, sublicense, +%%% and/or sell copies of the Software, and to permit persons to whom the +%%% Software is furnished to do so, subject to the following conditions: +%%% +%%% The above copyright notice and this permission notice shall be included in +%%% all copies or substantial portions of the Software. +%%% +%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +%%% DEALINGS IN THE SOFTWARE. +%%% +%%% @author Michael Truog <mjtruog at protonmail dot com> +%%% @copyright 2011-2020 Michael Truog +%%% @version 2.0.1 {@date} {@time} +%%%------------------------------------------------------------------------ + +-module(pqueue2). +-author('mjtruog at protonmail dot com'). + +%% external interface +-export([in/2, + in/3, + is_empty/1, + is_queue/1, + len/1, + new/0, + out/1, + out/2, + pout/1, + to_list/1, + test/0]). + +%%%------------------------------------------------------------------------ +%%% External interface functions +%%%------------------------------------------------------------------------ + +-ifdef(ERLANG_OTP_VERSION_16). +-type pqueue2() :: + empty | + {integer(), pqueue2(), pqueue2(), element, term()} | + {integer(), pqueue2(), pqueue2(), queue, queue()}. +-else. +-type pqueue2() :: + empty | + {integer(), pqueue2(), pqueue2(), element, term()} | + {integer(), pqueue2(), pqueue2(), queue, queue:queue()}. +-endif. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Append an item to the tail of the 0 priority queue.=== +%% @end +%%------------------------------------------------------------------------- + +-spec in(term(), pqueue2()) -> pqueue2(). + +in(Value, H) -> + in(Value, 0, H). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Append an item to the tail of a specific priority queue.=== +%% @end +%%------------------------------------------------------------------------- + +-spec in(term(), integer(), pqueue2()) -> pqueue2(). + +in(Value, P, H) -> + merge({P, empty, empty, element, Value}, H). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Check if the priority queue is empty.=== +%% @end +%%------------------------------------------------------------------------- + +-spec is_empty(pqueue2()) -> 'true' | 'false'. + +is_empty(empty) -> + true; +is_empty({_, HL, HR, queue, Queue}) -> + is_empty(HL) andalso is_empty(HR) andalso queue:is_empty(Queue); +is_empty(_) -> + false. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Check if the priority queue type is as expected.=== +%% @end +%%------------------------------------------------------------------------- + +-spec is_queue(pqueue2()) -> 'true' | 'false'. + +is_queue(empty) -> + true; +is_queue({P, _, _, element, _}) + when is_integer(P) -> + true; +is_queue({P, _, _, queue, Queue}) + when is_integer(P) -> + queue:is_queue(Queue); +is_queue(_) -> + false. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Determine the length of a priority queue.=== +%% @end +%%------------------------------------------------------------------------- + +-spec len(pqueue2()) -> non_neg_integer(). + +len(H) -> + len(0, out(H)). +len(I, {empty, _}) -> + I; +len(I, {{value, _}, H}) -> + len(I + 1, out(H)). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Create a new priority queue.=== +%% @end +%%------------------------------------------------------------------------- + +-spec new() -> pqueue2(). + +new() -> + empty. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item from the head of the priority queue.=== +%% @end +%%------------------------------------------------------------------------- + +-spec out(pqueue2()) -> + {{'value', term()}, pqueue2()} | {'empty', pqueue2()}. + +out(empty) -> + {empty, empty}; +out({_, HL, HR, element, Value}) -> + {{value, Value}, merge(HL, HR)}; +out({P, HL, HR, queue, Queue}) -> + case queue:out(Queue) of + {{value, _} = Result, NewQueue} -> + {Result, {P, HL, HR, queue, NewQueue}}; + {empty, _} -> + out(merge(HL, HR)) + end. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item of a specific priority from the head of the queue.=== +%% @end +%%------------------------------------------------------------------------- + +-spec out(integer(), pqueue2()) -> + {{'value', term()}, pqueue2()} | {'empty', pqueue2()}. + +out(_, empty) -> + {empty, empty}; +out(P, {P1, _, _, _, _} = H) when P < P1 -> + {empty, H}; +out(P, {P1, HL1, HR1, T, D}) when P > P1 -> + case out(P, HL1) of + {{value, _} = Result, HL2} -> + {Result, {P1, HL2, HR1, T, D}}; + {empty, HL2} -> + case out(P, HR1) of + {{value, _} = Result, HR2} -> + {Result, {P1, HL2, HR2, T, D}}; + {empty, HR2} -> + {empty, {P1, HL2, HR2, T, D}} + end + end; +out(P, {P, HL, HR, element, Value}) -> + {{value, Value}, merge(HL, HR)}; +out(P, {P, HL, HR, queue, Queue}) -> + case queue:out(Queue) of + {{value, _} = Result, NewQueue} -> + {Result, {P, HL, HR, queue, NewQueue}}; + {empty, _} -> + out(P, merge(HL, HR)) + end. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item from the head of the priority queue.=== +%% Includes the priority in the return value. +%% @end +%%------------------------------------------------------------------------- + +-spec pout(pqueue2()) -> + {{'value', term(), integer()}, pqueue2()} | {'empty', pqueue2()}. + +pout(empty) -> + {empty, empty}; +pout({P, HL, HR, element, Value}) -> + {{value, Value, P}, merge(HL, HR)}; +pout({P, HL, HR, queue, Queue}) -> + case queue:out(Queue) of + {{value, Value}, NewQueue} -> + {{value, Value, P}, {P, HL, HR, queue, NewQueue}}; + {empty, _} -> + pout(merge(HL, HR)) + end. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Convert the priority queue to a list.=== +%% @end +%%------------------------------------------------------------------------- + +-spec to_list(pqueue2()) -> list(term()). + +to_list(H) -> + to_list([], out(H)). +to_list(L, {empty, _}) -> + lists:reverse(L); +to_list(L, {{value, Value}, H}) -> + to_list([Value | L], out(H)). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Regression test.=== +%% @end +%%------------------------------------------------------------------------- + +test() -> + Q0 = pqueue2:new(), + true = pqueue2:is_queue(Q0), + Q1 = pqueue2:in(20, 20, Q0), + Q2 = pqueue2:in(19, 19, Q1), + Q3 = pqueue2:in(18, 18, Q2), + Q4 = pqueue2:in(17, 17, Q3), + Q5 = pqueue2:in(16, 16, Q4), + Q6 = pqueue2:in(15, 15, Q5), + Q7 = pqueue2:in(14, 14, Q6), + Q8 = pqueue2:in(13, 13, Q7), + Q9 = pqueue2:in(12, 12, Q8), + Q10 = pqueue2:in(11, 11, Q9), + Q11 = pqueue2:in(10, 10, Q10), + Q12 = pqueue2:in(9, 9, Q11), + Q13 = pqueue2:in(8, 8, Q12), + Q14 = pqueue2:in(7, 7, Q13), + Q15 = pqueue2:in(6, 6, Q14), + Q16 = pqueue2:in(5, 5, Q15), + Q17 = pqueue2:in(4, 4, Q16), + Q18 = pqueue2:in(3, 3, Q17), + Q19 = pqueue2:in(2, 2, Q18), + Q20 = pqueue2:in(1, 1, Q19), + Q21 = pqueue2:in(0, 0, Q20), + Q22 = pqueue2:in(-1, -1, Q21), + Q23 = pqueue2:in(-2, -2, Q22), + Q24 = pqueue2:in(-3, -3, Q23), + Q25 = pqueue2:in(-4, -4, Q24), + Q26 = pqueue2:in(-5, -5, Q25), + Q27 = pqueue2:in(-6, -6, Q26), + Q28 = pqueue2:in(-7, -7, Q27), + Q29 = pqueue2:in(-8, -8, Q28), + Q30 = pqueue2:in(-9, -9, Q29), + Q31 = pqueue2:in(-10, -10, Q30), + Q32 = pqueue2:in(-11, -11, Q31), + Q33 = pqueue2:in(-12, -12, Q32), + Q34 = pqueue2:in(-13, -13, Q33), + Q35 = pqueue2:in(-14, -14, Q34), + Q36 = pqueue2:in(-15, -15, Q35), + Q37 = pqueue2:in(-16, -16, Q36), + Q38 = pqueue2:in(-17, -17, Q37), + Q39 = pqueue2:in(-18, -18, Q38), + Q40 = pqueue2:in(-19, -19, Q39), + Q41 = pqueue2:in(-20, -20, Q40), + Q42 = pqueue2:in(-20, -20, Q41), + Q43 = pqueue2:in(-19, -19, Q42), + Q44 = pqueue2:in(-18, -18, Q43), + Q45 = pqueue2:in(-17, -17, Q44), + Q46 = pqueue2:in(-16, -16, Q45), + Q47 = pqueue2:in(-15, -15, Q46), + Q48 = pqueue2:in(-14, -14, Q47), + Q49 = pqueue2:in(-13, -13, Q48), + Q50 = pqueue2:in(-12, -12, Q49), + Q51 = pqueue2:in(-11, -11, Q50), + Q52 = pqueue2:in(-10, -10, Q51), + Q53 = pqueue2:in(-9, -9, Q52), + Q54 = pqueue2:in(-8, -8, Q53), + Q55 = pqueue2:in(-7, -7, Q54), + Q56 = pqueue2:in(-6, -6, Q55), + Q57 = pqueue2:in(-5, -5, Q56), + Q58 = pqueue2:in(-4, -4, Q57), + Q59 = pqueue2:in(-3, -3, Q58), + Q60 = pqueue2:in(-2, -2, Q59), + Q61 = pqueue2:in(-1, -1, Q60), + Q62 = pqueue2:in(0, 0, Q61), + Q63 = pqueue2:in(1, 1, Q62), + Q64 = pqueue2:in(2, 2, Q63), + Q65 = pqueue2:in(3, 3, Q64), + Q66 = pqueue2:in(4, 4, Q65), + Q67 = pqueue2:in(5, 5, Q66), + Q68 = pqueue2:in(6, 6, Q67), + Q69 = pqueue2:in(7, 7, Q68), + Q70 = pqueue2:in(8, 8, Q69), + Q71 = pqueue2:in(9, 9, Q70), + Q72 = pqueue2:in(10, 10, Q71), + Q73 = pqueue2:in(11, 11, Q72), + Q74 = pqueue2:in(12, 12, Q73), + Q75 = pqueue2:in(13, 13, Q74), + Q76 = pqueue2:in(14, 14, Q75), + Q77 = pqueue2:in(15, 15, Q76), + Q78 = pqueue2:in(16, 16, Q77), + Q79 = pqueue2:in(17, 17, Q78), + Q80 = pqueue2:in(18, 18, Q79), + Q81 = pqueue2:in(19, 19, Q80), + Q82 = pqueue2:in(20, 20, Q81), + true = pqueue2:is_queue(Q82), + 82 = pqueue2:len(Q82), + [-20, -20, -19, -19, -18, -18, -17, -17, -16, -16, -15, -15, -14, -14, + -13, -13, -12, -12, -11, -11, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6, + -5, -5, -4, -4, -3, -3, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, + 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, + 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20] = pqueue2:to_list(Q82), + {{value, -20}, Q83} = pqueue2:out(Q82), + {{value, -20}, Q84} = pqueue2:out(Q83), + {{value, -19}, Q85} = pqueue2:out(Q84), + {{value, -19}, Q86} = pqueue2:out(Q85), + {{value, -18}, Q87} = pqueue2:out(Q86), + {{value, -18}, Q88} = pqueue2:out(Q87), + {{value, 0}, Q89} = pqueue2:out(0, Q88), + {{value, 0}, Q90} = pqueue2:out(0, Q89), + {empty, _} = pqueue2:out(0, Q90), + {{value, -17, -17}, Q91} = pqueue2:pout(Q90), + {{value, -17, -17}, Q92} = pqueue2:pout(Q91), + {{value, -16, -16}, Q93} = pqueue2:pout(Q92), + {{value, -16, -16}, Q94} = pqueue2:pout(Q93), + {{value, -15, -15}, Q95} = pqueue2:pout(Q94), + {{value, -15, -15}, Q96} = pqueue2:pout(Q95), + {{value, -14, -14}, Q97} = pqueue2:pout(Q96), + {{value, -14, -14}, Q98} = pqueue2:pout(Q97), + {{value, -13, -13}, Q99} = pqueue2:pout(Q98), + {{value, -13, -13}, Q100} = pqueue2:pout(Q99), + {{value, -12, -12}, Q101} = pqueue2:pout(Q100), + {{value, -12, -12}, Q102} = pqueue2:pout(Q101), + {{value, -11, -11}, Q103} = pqueue2:pout(Q102), + {{value, -11, -11}, Q104} = pqueue2:pout(Q103), + {{value, -10, -10}, Q105} = pqueue2:pout(Q104), + {{value, -10, -10}, Q106} = pqueue2:pout(Q105), + {{value, -9, -9}, Q107} = pqueue2:pout(Q106), + {{value, -9, -9}, Q108} = pqueue2:pout(Q107), + {{value, -8, -8}, Q109} = pqueue2:pout(Q108), + {{value, -8, -8}, Q110} = pqueue2:pout(Q109), + {{value, -7, -7}, Q111} = pqueue2:pout(Q110), + {{value, -7, -7}, Q112} = pqueue2:pout(Q111), + {{value, -6, -6}, Q113} = pqueue2:pout(Q112), + {{value, -6, -6}, Q114} = pqueue2:pout(Q113), + {{value, -5, -5}, Q115} = pqueue2:pout(Q114), + {{value, -5, -5}, Q116} = pqueue2:pout(Q115), + {{value, -4, -4}, Q117} = pqueue2:pout(Q116), + {{value, -4, -4}, Q118} = pqueue2:pout(Q117), + {{value, -3, -3}, Q119} = pqueue2:pout(Q118), + {{value, -3, -3}, Q120} = pqueue2:pout(Q119), + {{value, -2, -2}, Q121} = pqueue2:pout(Q120), + {{value, -2, -2}, Q122} = pqueue2:pout(Q121), + {{value, -1, -1}, Q123} = pqueue2:pout(Q122), + {{value, -1, -1}, Q124} = pqueue2:pout(Q123), + {{value, 1, 1}, Q125} = pqueue2:pout(Q124), + {{value, 1, 1}, Q126} = pqueue2:pout(Q125), + {{value, 2, 2}, Q127} = pqueue2:pout(Q126), + {{value, 2, 2}, Q128} = pqueue2:pout(Q127), + {{value, 3, 3}, Q129} = pqueue2:pout(Q128), + {{value, 3, 3}, Q130} = pqueue2:pout(Q129), + {{value, 4, 4}, Q131} = pqueue2:pout(Q130), + {{value, 4, 4}, Q132} = pqueue2:pout(Q131), + {{value, 5, 5}, Q133} = pqueue2:pout(Q132), + {{value, 5, 5}, Q134} = pqueue2:pout(Q133), + {{value, 6, 6}, Q135} = pqueue2:pout(Q134), + {{value, 6, 6}, Q136} = pqueue2:pout(Q135), + {{value, 7, 7}, Q137} = pqueue2:pout(Q136), + {{value, 7, 7}, Q138} = pqueue2:pout(Q137), + {{value, 8, 8}, Q139} = pqueue2:pout(Q138), + {{value, 8, 8}, Q140} = pqueue2:pout(Q139), + {{value, 9, 9}, Q141} = pqueue2:pout(Q140), + {{value, 9, 9}, Q142} = pqueue2:pout(Q141), + {{value, 10, 10}, Q143} = pqueue2:pout(Q142), + {{value, 10, 10}, Q144} = pqueue2:pout(Q143), + {{value, 11, 11}, Q145} = pqueue2:pout(Q144), + {{value, 11, 11}, Q146} = pqueue2:pout(Q145), + {{value, 12, 12}, Q147} = pqueue2:pout(Q146), + {{value, 12, 12}, Q148} = pqueue2:pout(Q147), + {{value, 13, 13}, Q149} = pqueue2:pout(Q148), + {{value, 13, 13}, Q150} = pqueue2:pout(Q149), + {{value, 14, 14}, Q151} = pqueue2:pout(Q150), + {{value, 14, 14}, Q152} = pqueue2:pout(Q151), + {{value, 15, 15}, Q153} = pqueue2:pout(Q152), + {{value, 15, 15}, Q154} = pqueue2:pout(Q153), + {{value, 16, 16}, Q155} = pqueue2:pout(Q154), + {{value, 16, 16}, Q156} = pqueue2:pout(Q155), + {{value, 17, 17}, Q157} = pqueue2:pout(Q156), + {{value, 17, 17}, Q158} = pqueue2:pout(Q157), + {{value, 18, 18}, Q159} = pqueue2:pout(Q158), + {{value, 18, 18}, Q160} = pqueue2:pout(Q159), + {{value, 19, 19}, Q161} = pqueue2:pout(Q160), + {{value, 19, 19}, Q162} = pqueue2:pout(Q161), + {{value, 20, 20}, Q163} = pqueue2:pout(Q162), + {{value, 20, 20}, Q164} = pqueue2:pout(Q163), + true = pqueue2:is_empty(Q164), + {empty, Q165} = pqueue2:pout(Q164), + true = pqueue2:is_empty(Q165), + % test case 1, based on proper testing + C1V0 = pqueue2:in(-18, pqueue2:new()), + C1V1 = pqueue2:in(9, C1V0), + C1V2 = pqueue2:in(-10, -4, C1V1), + C1V3 = pqueue2:in(-29, C1V2), + C1V4 = pqueue2:in(11, C1V3), + 5 = pqueue2:len(C1V4), + [-10, -18, 9, -29, 11] = pqueue2:to_list(C1V4), + % test case 2, based on proper testing + C2V0 = pqueue2:in(-4, -15, pqueue2:new()), + C2V1 = pqueue2:in(13, C2V0), + C2V2 = pqueue2:in(2, C2V1), + [-4, 13, 2] = to_list(C2V2), + ok. + +%%%------------------------------------------------------------------------ +%%% Private functions +%%%------------------------------------------------------------------------ + +merge(empty, empty) -> + empty; +merge(empty, {_, _, _, _, _} = H) -> + H; +merge({_, _, _, _, _} = H, empty) -> + H; +merge({P1, HL1, HR1, T, D}, {P2, _, _, _, _} = H2) when P1 < P2 -> + {P1, HL1, merge(HR1, H2), T, D}; +merge({P1, _, _, _, _} = H1, {P2, HL2, HR2, T, D}) when P1 > P2 -> + {P2, HL2, merge(H1, HR2), T, D}; +merge({P, HL1, HR1, element, Value1}, {P, HL2, HR2, element, Value2}) -> + {P, merge(HL1, HR1), merge(HL2, HR2), queue, + queue:from_list([Value2, Value1])}; +merge({P, HL1, HR1, queue, Queue}, {P, HL2, HR2, element, Value}) -> + {P, merge(HL1, HR1), merge(HL2, HR2), queue, queue:in(Value, Queue)}; +merge({P, HL1, HR1, element, Value}, {P, HL2, HR2, queue, Queue}) -> + {P, merge(HL1, HR1), merge(HL2, HR2), queue, queue:in(Value, Queue)}. + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). + +-include("pqueue_test.hrl"). + +module_test_() -> + {timeout, ?TEST_TIMEOUT, [ + {"internal tests", ?_assertOk(test())} + ]}. + +long_test_() -> + test_condition([ + {"proper tests", ?_assert(pqueue_proper:qc_pq2())} + ], ?CLOUDI_LONG_TEST_TIMEOUT). + +-endif. + diff --git a/aoc2023/build/dev/erlang/pqueue/src/pqueue3.erl b/aoc2023/build/dev/erlang/pqueue/src/pqueue3.erl new file mode 100644 index 0000000..03b370a --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/src/pqueue3.erl @@ -0,0 +1,404 @@ +%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*- +% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod: +%%% +%%%------------------------------------------------------------------------ +%%% @doc +%%% ==A Large Priority Queue.== +%%% This priority queue implementation depends on layered tuples, so that tuple +%%% access times can be exploited for quick in/out priority queue operations +%%% when using 64 or more total priorities. This implementation was created +%%% to avoid the slowness within the priority queue used by +%%% both RabbitMQ and Riak +%%% (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl). +%%% @end +%%% +%%% MIT License +%%% +%%% Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com> +%%% +%%% Permission is hereby granted, free of charge, to any person obtaining a +%%% copy of this software and associated documentation files (the "Software"), +%%% to deal in the Software without restriction, including without limitation +%%% the rights to use, copy, modify, merge, publish, distribute, sublicense, +%%% and/or sell copies of the Software, and to permit persons to whom the +%%% Software is furnished to do so, subject to the following conditions: +%%% +%%% The above copyright notice and this permission notice shall be included in +%%% all copies or substantial portions of the Software. +%%% +%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +%%% DEALINGS IN THE SOFTWARE. +%%% +%%% @author Michael Truog <mjtruog at protonmail dot com> +%%% @copyright 2011-2020 Michael Truog +%%% @version 2.0.1 {@date} {@time} +%%%------------------------------------------------------------------------ + +-module(pqueue3). +-author('mjtruog at protonmail dot com'). + +%% external interface +-export([in/2, % O(1) + in/3, % O(1) + is_empty/1, % O(1) + is_queue/1, % O(1) + len/1, % O(N) + new/0, % O(1) + new/1, % O(1) + out/1, % O(1) amortized, O(N) worst case + out/2, % O(1) amortized, O(N) worst case + pout/1, % O(1) amortized, O(N) worst case + to_list/1]). % O(N) + +%%%------------------------------------------------------------------------ +%%% External interface functions +%%%------------------------------------------------------------------------ + +-type pqueue3() :: {integer(), integer(), empty | integer(), tuple()}. +-type pqueue3_empty() :: {integer(), integer(), empty, tuple()}. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Append an item to the tail of the 0 priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec in(term(), pqueue3()) -> pqueue3(). + +in(Value, Q) -> + in(Value, 0, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Append an item to the tail of a specific priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec in(term(), integer(), pqueue3()) -> pqueue3(). + +in(_, P, {Size, Offset, _, _}) + when (P + Offset) < 0; (P + Offset) > Size -> + erlang:exit(badarg); +in(Value, P, {Size, Offset, empty, Bins}) -> + PriorityIndex = P + Offset, + {Size, Offset, PriorityIndex, + in_queue(layer_indexes(Size, PriorityIndex), Value, Bins)}; +in(Value, P, {Size, Offset, I, Bins}) + when (P + Offset) < I -> + PriorityIndex = P + Offset, + {Size, Offset, PriorityIndex, + in_queue(layer_indexes(Size, PriorityIndex), Value, Bins)}; +in(Value, P, {Size, Offset, I, Bins}) -> + {Size, Offset, I, + in_queue(layer_indexes(Size, P + Offset), Value, Bins)}. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Check if the priority queue is empty.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec is_empty(pqueue3()) -> 'true' | 'false'. + +is_empty({_, _, empty, _}) -> + true; +is_empty({_, _, _, _} = Q) -> + case out(Q) of + {empty, _} -> + true; + {{value, _}, _} -> + false + end. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Check if the priority queue type is as expected.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec is_queue(pqueue3()) -> 'true' | 'false'. + +is_queue({Size, Offset, I, Bins}) + when is_integer(Size), is_integer(Offset), is_tuple(Bins) -> + (I =:= empty) or is_integer(I); +is_queue(_) -> + false. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Determine the length of a priority queue.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec len(pqueue3()) -> non_neg_integer(). + +len(Q) -> + len(0, out(Q)). +len(I, {empty, _}) -> + I; +len(I, {{value, _}, Q}) -> + len(I + 1, out(Q)). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Create a new priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec new() -> pqueue3_empty(). + +new() -> + new([]). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Create a new priority queue with customization options.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec new(list({atom(), term()})) -> pqueue3(). + +new(Options) -> + Size = proplists:get_value(priorities, Options, 256), + MiddleZero = proplists:get_value(middle_priority_zero, Options, true), + Offset = if + MiddleZero =:= true -> + erlang:round((Size / 2) + 0.5) - 1; + true -> + 0 + end, + {Size, Offset, empty, create(layer_sizes(Size))}. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item from the head of the priority queue.=== +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec out(pqueue3()) -> + {{'value', term()}, pqueue3()} | {'empty', pqueue3()}. + +out({_, _, empty, _} = Q) -> + {empty, Q}; +out({Size, Offset, I, Bins}) -> + {Result, NewI, NewBins} = out_check( + I, Size, out_queue(layer_indexes(Size, I), Bins) + ), + {Result, {Size, Offset, NewI, NewBins}}. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item of a specific priority from the head of the queue.=== +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec out(integer(), pqueue3()) -> + {{'value', term()}, pqueue3()} | {'empty', pqueue3()}. + +out(P, {Size, Offset, _, _}) + when (P + Offset) < 0; (P + Offset) > Size -> + erlang:exit(badarg); +out(_, {_, _, empty, _} = Q) -> + {empty, Q}; +out(P, {Size, Offset, I, Bins}) -> + {Result, NewBins} = out_queue(layer_indexes(Size, P + Offset), Bins), + {Result, {Size, Offset, I, NewBins}}. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item from the head of the priority queue.=== +%% Includes the priority in the return value. +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec pout(pqueue3()) -> + {{'value', term(), integer()}, pqueue3()} | {'empty', pqueue3()}. + +pout({_, _, empty, _} = Q) -> + {empty, Q}; +pout({Size, Offset, I, Bins}) -> + {Result, NewI, NewBins} = pout_check( + I, Size, Offset, out_queue(layer_indexes(Size, I), Bins) + ), + {Result, {Size, Offset, NewI, NewBins}}. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Convert the priority queue to a list.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec to_list(pqueue3()) -> list(term()). + +to_list(Q) -> + to_list([], out(Q)). +to_list(L, {empty, _}) -> + lists:reverse(L); +to_list(L, {{value, Value}, Q}) -> + to_list([Value | L], out(Q)). + +%%%------------------------------------------------------------------------ +%%% Private functions +%%%------------------------------------------------------------------------ + +create([]) -> + queue:new(); + +create([I | Is]) -> + erlang:make_tuple(I + 1, create(Is)). + +in_queue({I1}, Value, Bins1) -> + erlang:setelement(I1, Bins1, queue:in(Value, erlang:element(I1, Bins1))); + +in_queue({I1, I2}, Value, Bins1) -> + Bins2 = erlang:element(I1, Bins1), + erlang:setelement(I1, Bins1, + erlang:setelement(I2, Bins2, queue:in(Value, erlang:element(I2, Bins2)))); + +in_queue({I1, I2, I3}, Value, Bins1) -> + Bins2 = erlang:element(I1, Bins1), + Bins3 = erlang:element(I2, Bins2), + erlang:setelement(I1, Bins1, + erlang:setelement(I2, Bins2, + erlang:setelement(I3, Bins3, queue:in(Value, erlang:element(I3, Bins3))))); + +in_queue({I1, I2, I3, I4}, Value, Bins1) -> + Bins2 = erlang:element(I1, Bins1), + Bins3 = erlang:element(I2, Bins2), + Bins4 = erlang:element(I3, Bins3), + erlang:setelement(I1, Bins1, + erlang:setelement(I2, Bins2, + erlang:setelement(I3, Bins3, + erlang:setelement(I4, Bins4, queue:in(Value, erlang:element(I4, Bins4)))))). + +pout_check(Size, Size, _, {empty, Bins}) -> + {empty, empty, Bins}; +pout_check(I, _, Offset, {{value, Value}, Bins}) -> + {{value, Value, I - Offset}, I, Bins}; +pout_check(I, Size, Offset, {empty, Bins}) -> + NewI = I + 1, + pout_check(NewI, Size, Offset, out_queue(layer_indexes(Size, NewI), Bins)). + +out_check(Size, Size, {empty, Bins}) -> + {empty, empty, Bins}; +out_check(I, _, {{value, _} = Result, Bins}) -> + {Result, I, Bins}; +out_check(I, Size, {empty, Bins}) -> + NewI = I + 1, + out_check(NewI, Size, out_queue(layer_indexes(Size, NewI), Bins)). + +out_queue({I1}, Bins1) -> + {Result, NewQueue} = queue:out(erlang:element(I1, Bins1)), + {Result, + erlang:setelement(I1, Bins1, NewQueue)}; + +out_queue({I1, I2}, Bins1) -> + Bins2 = erlang:element(I1, Bins1), + {Result, NewQueue} = queue:out(erlang:element(I2, Bins2)), + {Result, + erlang:setelement(I1, Bins1, + erlang:setelement(I2, Bins2, NewQueue))}; + +out_queue({I1, I2, I3}, Bins1) -> + Bins2 = erlang:element(I1, Bins1), + Bins3 = erlang:element(I2, Bins2), + {Result, NewQueue} = queue:out(erlang:element(I3, Bins3)), + {Result, + erlang:setelement(I1, Bins1, + erlang:setelement(I2, Bins2, + erlang:setelement(I3, Bins3, NewQueue)))}; + +out_queue({I1, I2, I3, I4}, Bins1) -> + Bins2 = erlang:element(I1, Bins1), + Bins3 = erlang:element(I2, Bins2), + Bins4 = erlang:element(I3, Bins3), + {Result, NewQueue} = queue:out(erlang:element(I4, Bins4)), + {Result, + erlang:setelement(I1, Bins1, + erlang:setelement(I2, Bins2, + erlang:setelement(I3, Bins3, + erlang:setelement(I4, Bins4, NewQueue))))}. + +layer_indexes(Size, PriorityIndex) -> + if + Size =< 127 -> + {PriorityIndex + 1}; + Size =< 255 -> + <<I1:4, I2:4>> = <<PriorityIndex:8>>, + {I1 + 1, I2 + 1}; + Size =< 511 -> + <<I1:4, I2:5>> = <<PriorityIndex:9>>, + {I1 + 1, I2 + 1}; + Size =< 1023 -> + <<I1:3, I2:3, I3:4>> = <<PriorityIndex:10>>, + {I1 + 1, I2 + 1, I3 + 1}; + Size =< 2047 -> + <<I1:3, I2:4, I3:4>> = <<PriorityIndex:11>>, + {I1 + 1, I2 + 1, I3 + 1}; + Size =< 4095 -> + <<I1:4, I2:4, I3:4>> = <<PriorityIndex:12>>, + {I1 + 1, I2 + 1, I3 + 1}; + Size =< 8191 -> + <<I1:4, I2:4, I3:5>> = <<PriorityIndex:13>>, + {I1 + 1, I2 + 1, I3 + 1}; + Size =< 16383 -> + <<I1:4, I2:5, I3:5>> = <<PriorityIndex:14>>, + {I1 + 1, I2 + 1, I3 + 1}; + Size =< 32767 -> + <<I1:3, I2:4, I3:4, I4:4>> = <<PriorityIndex:15>>, + {I1 + 1, I2 + 1, I3 + 1, I4 + 1}; + Size =< 65535 -> + <<I1:4, I2:4, I3:4, I4:4>> = <<PriorityIndex:16>>, + {I1 + 1, I2 + 1, I3 + 1, I4 + 1} + end. + +layer_sizes(Size) -> + if + Size =< 127 -> + <<I1:7>> = <<127:7>>, + [I1]; + Size =< 255 -> + <<I1:4, I2:4>> = <<255:8>>, + [I1, I2]; + Size =< 511 -> + <<I1:4, I2:5>> = <<511:9>>, + [I1, I2]; + Size =< 1023 -> + <<I1:3, I2:3, I3:4>> = <<1023:10>>, + [I1, I2, I3]; + Size =< 2047 -> + <<I1:3, I2:4, I3:4>> = <<2047:11>>, + [I1, I2, I3]; + Size =< 4095 -> + <<I1:4, I2:4, I3:4>> = <<4095:12>>, + [I1, I2, I3]; + Size =< 8191 -> + <<I1:4, I2:4, I3:5>> = <<8191:13>>, + [I1, I2, I3]; + Size =< 16383 -> + <<I1:4, I2:5, I3:5>> = <<16383:14>>, + [I1, I2, I3]; + Size =< 32767 -> + <<I1:3, I2:4, I3:4, I4:4>> = <<32767:15>>, + [I1, I2, I3, I4]; + Size =< 65535 -> + <<I1:4, I2:4, I3:4, I4:4>> = <<65535:16>>, + [I1, I2, I3, I4] + end. + diff --git a/aoc2023/build/dev/erlang/pqueue/src/pqueue4.erl b/aoc2023/build/dev/erlang/pqueue/src/pqueue4.erl new file mode 100644 index 0000000..30b188d --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/src/pqueue4.erl @@ -0,0 +1,11662 @@ +%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*- +% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod: +%%% +%%%------------------------------------------------------------------------ +%%% @doc +%%% ==Static Priority Queue.== +%%% This priority queue implementation depends on a static number of priorities +%%% (-128 (high) to 128 (low)) so that tuple access times can be exploited for +%%% quick in/out priority queue operations. This implementation was created to +%%% avoid the slowness within the priority queue used by both RabbitMQ and Riak +%%% (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl). +%%% @end +%%% +%%% MIT License +%%% +%%% Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com> +%%% +%%% Permission is hereby granted, free of charge, to any person obtaining a +%%% copy of this software and associated documentation files (the "Software"), +%%% to deal in the Software without restriction, including without limitation +%%% the rights to use, copy, modify, merge, publish, distribute, sublicense, +%%% and/or sell copies of the Software, and to permit persons to whom the +%%% Software is furnished to do so, subject to the following conditions: +%%% +%%% The above copyright notice and this permission notice shall be included in +%%% all copies or substantial portions of the Software. +%%% +%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +%%% DEALINGS IN THE SOFTWARE. +%%% +%%% +%%% queue_remove_unique/2 is based on queue:filter/2 +%%% which is under the Apache License 2.0: +%%% +%%% Copyright Ericsson AB 1996-2016. All Rights Reserved. +%%% +%%% Licensed under the Apache License, Version 2.0 (the "License"); +%%% you may not use this file except in compliance with the License. +%%% You may obtain a copy of the License at +%%% +%%% http://www.apache.org/licenses/LICENSE-2.0 +%%% +%%% Unless required by applicable law or agreed to in writing, software +%%% distributed under the License is distributed on an "AS IS" BASIS, +%%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%%% See the License for the specific language governing permissions and +%%% limitations under the License. +%%% +%%% @author Michael Truog <mjtruog at protonmail dot com> +%%% @copyright 2011-2020 Michael Truog +%%% @version 2.0.1 {@date} {@time} +%%%------------------------------------------------------------------------ + +-module(pqueue4). +-author('mjtruog at protonmail dot com'). + +%% external interface +-export([filter/2, % O(N) + filter/3, % O(N) + in/2, % O(1) + in/3, % O(1) + is_empty/1, % O(1) + is_queue/1, % O(1) + len/1, % O(1) + new/0, % O(1) + out/1, % O(1) amortized, O(N) worst case + out/2, % O(1) amortized, O(N) worst case + pout/1, % O(1) amortized, O(N) worst case + remove_unique/2, % O(N) but smaller constant than filter/2 + remove_unique/3, % O(N) but smaller constant than filter/3 + to_list/1, % O(N) + to_plist/1, % O(N) + test/0]). + +%%%------------------------------------------------------------------------ +%%% External interface functions +%%%------------------------------------------------------------------------ + +-type priority() :: -128..128. +-ifdef(ERLANG_OTP_VERSION_16). +-type pqueue4(_) :: + {priority() | 'empty', % current priority + non_neg_integer(), % total size + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + queue(), + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}}. +-else. +-type pqueue4(T) :: + {priority() | 'empty', % current priority + non_neg_integer(), % total size + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + queue:queue(T), + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}}. +-endif. +-type pqueue4() :: pqueue4(any()). +-export_type([pqueue4/0, pqueue4/1]). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Filter the priority queue.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec filter(fun((any()) -> boolean()), pqueue4()) -> pqueue4(). + +filter(F, {empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) + when is_function(F, 1) -> + Q; +filter(F, {Pc, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) + when is_function(F, 1) -> + filter_all(Pc, F, Q). + +filter_all(_, _, {_, 0, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _} = Q) -> + Q; +filter_all(128, F, Q) -> + filter_priority(128, F, Q); +filter_all(P, F, Q) when is_integer(P) -> + filter_all(P + 1, F, filter_priority(P, F, Q)). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Filter a specific priority within the priority queue.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec filter(fun((any()) -> boolean()), integer(), pqueue4()) -> pqueue4(). + +filter(_, P, _) + when P < -128; P > 128 -> + erlang:exit(badarg); +filter(F, P, Q) when is_function(F, 1) -> + filter_priority(P, F, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Append an item to the tail of the 0 priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec in(any(), pqueue4()) -> pqueue4(). + +in(X, Q) -> + in(X, 0, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Append an item to the tail of a specific priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec in(any(), integer(), pqueue4()) -> pqueue4(). + +in(_, P, _) + when P < -128; P > 128 -> + erlang:exit(badarg); +in(X, P, {empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) -> + in_higher(P, Q, X); % (in a higher priority) +in(X, P, {Pc, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) + when P < Pc -> + in_higher(P, Q, X); % (in a higher priority) +in(X, P, Q) -> + in_lower(P, Q, X). % (in a lower priority) + +%%------------------------------------------------------------------------- +%% @doc +%% ===Check if the priority queue is empty.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec is_empty(pqueue4()) -> 'true' | 'false'. + +is_empty({_, 0, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _}) -> + true; +is_empty({_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _}) -> + false. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Check if the priority queue type is as expected.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec is_queue(pqueue4()) -> 'true' | 'false'. + +is_queue({Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) + when is_integer(Size), + tuple_size(Qn128) == 16, tuple_size(Qn112) == 16, + tuple_size(Qn96) == 16, tuple_size(Qn80) == 16, + tuple_size(Qn64) == 16, tuple_size(Qn48) == 16, + tuple_size(Qn32) == 16, tuple_size(Qn16) == 16, + tuple_size(Qp16) == 16, tuple_size(Qp32) == 16, + tuple_size(Qp48) == 16, tuple_size(Qp64) == 16, + tuple_size(Qp80) == 16, tuple_size(Qp96) == 16, + tuple_size(Qp112) == 16, tuple_size(Qp128) == 16 -> + (((Pc =:= empty) or is_integer(Pc)) and queue:is_queue(Q0)); +is_queue(_) -> + false. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Determine the length of a priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec len(pqueue4()) -> non_neg_integer(). + +len({_, Size, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _}) -> + Size. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Create a new priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec new() -> pqueue4(). + +new() -> + {empty, % current priority + 0, % current size + erlang:make_tuple(16, queue:new()), % priority [-128..-113] + erlang:make_tuple(16, queue:new()), % priority [-112.. -97] + erlang:make_tuple(16, queue:new()), % priority [ -96.. -81] + erlang:make_tuple(16, queue:new()), % priority [ -80.. -65] + erlang:make_tuple(16, queue:new()), % priority [ -64.. -49] + erlang:make_tuple(16, queue:new()), % priority [ -48.. -33] + erlang:make_tuple(16, queue:new()), % priority [ -32.. -17] + erlang:make_tuple(16, queue:new()), % priority [ -16.. -1] + queue:new(), % priority 0 (default) + erlang:make_tuple(16, queue:new()), % priority [ 1.. 16] + erlang:make_tuple(16, queue:new()), % priority [ 17.. 32] + erlang:make_tuple(16, queue:new()), % priority [ 33.. 48] + erlang:make_tuple(16, queue:new()), % priority [ 49.. 64] + erlang:make_tuple(16, queue:new()), % priority [ 65.. 80] + erlang:make_tuple(16, queue:new()), % priority [ 81.. 96] + erlang:make_tuple(16, queue:new()), % priority [ 97.. 112] + erlang:make_tuple(16, queue:new())}. % priority [ 113.. 128] + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item from the head of the priority queue.=== +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec out(pqueue4()) -> + {{'value', any()}, pqueue4()} | {'empty', pqueue4()}. + +out({empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) -> + {empty, Q}; +out({Pc, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) -> + out_current(Pc, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item of a specific priority from the head of the queue.=== +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec out(integer(), pqueue4()) -> + {{'value', any()}, pqueue4()} | {'empty', pqueue4()}. + +out(P, _) + when P < -128; P > 128 -> + erlang:exit(badarg); +out(_, {empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) -> + {empty, Q}; +out(P, Q) -> + out_specific(P, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item from the head of the priority queue.=== +%% Includes the priority in the return value. +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec pout(pqueue4()) -> + {{'value', any(), integer()}, pqueue4()} | {'empty', pqueue4()}. + +pout({empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) -> + {empty, Q}; +pout({Pc, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) -> + out_current_p(Pc, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Remove a unique value from the priority queue with a binary predicate.=== +%% O(N) but smaller constant than filter/2 +%% @end +%%------------------------------------------------------------------------- + +-spec remove_unique(fun((any()) -> boolean()), pqueue4()) -> + {boolean(), pqueue4()}. + +remove_unique(F, {_, 0, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _} = Q) + when is_function(F, 1) -> + {false, Q}; +remove_unique(F, {Pc, _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _} = Q) + when is_function(F, 1) -> + remove_unique_all(Pc, F, Q). + +remove_unique_all(128, F, Q) -> + remove_unique_p(128, F, Q); +remove_unique_all(P, F, Q) when is_integer(P) -> + case remove_unique_p(P, F, Q) of + {true, _} = Result -> + Result; + {false, Q} -> + remove_unique_all(P + 1, F, Q) + end. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Remove a unique value in a specific priority within the priority queue with a binary predicate.=== +%% O(N) but smaller constant than filter/3 +%% @end +%%------------------------------------------------------------------------- + +-spec remove_unique(fun((any()) -> boolean()), integer(), pqueue4()) -> + {boolean(), pqueue4()}. + +remove_unique(_, P, _) + when P < -128; P > 128 -> + erlang:exit(badarg); +remove_unique(F, P, Q) when is_function(F, 1) -> + remove_unique_p(P, F, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Convert the priority queue to a list.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec to_list(pqueue4()) -> list(). + +to_list(Q) -> + to_list([], out(Q)). +to_list(L, {empty, _}) -> + lists:reverse(L); +to_list(L, {{value, Value}, Q}) -> + to_list([Value | L], out(Q)). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Convert the priority queue to a list with priorities.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec to_plist(pqueue4()) -> list({priority(), list()}). + +to_plist(Q) -> + to_plist([], [], undefined, pout(Q)). +to_plist(L, [], _, {empty, _}) -> + lists:reverse(L); +to_plist(L, Lp, Pc, {empty, _}) -> + lists:reverse([{Pc, lists:reverse(Lp)} | L]); +to_plist(L, Lp, Pc, {{value, Value, Pc}, Q}) -> + to_plist(L, [Value | Lp], Pc, pout(Q)); +to_plist(L, [], _, {{value, Value, Pc}, Q}) -> + to_plist(L, [Value], Pc, pout(Q)); +to_plist(L, Lp, P, {{value, Value, Pc}, Q}) -> + to_plist([{P, lists:reverse(Lp)} | L], [Value], Pc, pout(Q)). + +%%------------------------------------------------------------------------- +%% @private +%% @doc +%% ===Regression test.=== +%% @end +%%------------------------------------------------------------------------- + +test() -> + Q0 = pqueue4:new(), + true = pqueue4:is_queue(Q0), + Q1 = pqueue4:in(20, 20, Q0), + Q2 = pqueue4:in(19, 19, Q1), + Q3 = pqueue4:in(18, 18, Q2), + Q4 = pqueue4:in(17, 17, Q3), + Q5 = pqueue4:in(16, 16, Q4), + Q6 = pqueue4:in(15, 15, Q5), + Q7 = pqueue4:in(14, 14, Q6), + Q8 = pqueue4:in(13, 13, Q7), + Q9 = pqueue4:in(12, 12, Q8), + Q10 = pqueue4:in(11, 11, Q9), + Q11 = pqueue4:in(10, 10, Q10), + Q12 = pqueue4:in(9, 9, Q11), + Q13 = pqueue4:in(8, 8, Q12), + Q14 = pqueue4:in(7, 7, Q13), + Q15 = pqueue4:in(6, 6, Q14), + Q16 = pqueue4:in(5, 5, Q15), + Q17 = pqueue4:in(4, 4, Q16), + Q18 = pqueue4:in(3, 3, Q17), + Q19 = pqueue4:in(2, 2, Q18), + Q20 = pqueue4:in(1, 1, Q19), + Q21 = pqueue4:in(0, 0, Q20), + Q22 = pqueue4:in(-1, -1, Q21), + Q23 = pqueue4:in(-2, -2, Q22), + Q24 = pqueue4:in(-3, -3, Q23), + Q25 = pqueue4:in(-4, -4, Q24), + Q26 = pqueue4:in(-5, -5, Q25), + Q27 = pqueue4:in(-6, -6, Q26), + Q28 = pqueue4:in(-7, -7, Q27), + Q29 = pqueue4:in(-8, -8, Q28), + Q30 = pqueue4:in(-9, -9, Q29), + Q31 = pqueue4:in(-10, -10, Q30), + Q32 = pqueue4:in(-11, -11, Q31), + Q33 = pqueue4:in(-12, -12, Q32), + Q34 = pqueue4:in(-13, -13, Q33), + Q35 = pqueue4:in(-14, -14, Q34), + Q36 = pqueue4:in(-15, -15, Q35), + Q37 = pqueue4:in(-16, -16, Q36), + Q38 = pqueue4:in(-17, -17, Q37), + Q39 = pqueue4:in(-18, -18, Q38), + Q40 = pqueue4:in(-19, -19, Q39), + Q41 = pqueue4:in(-20, -20, Q40), + Q42 = pqueue4:in(-20, -20, Q41), + Q43 = pqueue4:in(-19, -19, Q42), + Q44 = pqueue4:in(-18, -18, Q43), + Q45 = pqueue4:in(-17, -17, Q44), + Q46 = pqueue4:in(-16, -16, Q45), + Q47 = pqueue4:in(-15, -15, Q46), + Q48 = pqueue4:in(-14, -14, Q47), + Q49 = pqueue4:in(-13, -13, Q48), + Q50 = pqueue4:in(-12, -12, Q49), + Q51 = pqueue4:in(-11, -11, Q50), + Q52 = pqueue4:in(-10, -10, Q51), + Q53 = pqueue4:in(-9, -9, Q52), + Q54 = pqueue4:in(-8, -8, Q53), + Q55 = pqueue4:in(-7, -7, Q54), + Q56 = pqueue4:in(-6, -6, Q55), + Q57 = pqueue4:in(-5, -5, Q56), + Q58 = pqueue4:in(-4, -4, Q57), + Q59 = pqueue4:in(-3, -3, Q58), + Q60 = pqueue4:in(-2, -2, Q59), + Q61 = pqueue4:in(-1, -1, Q60), + Q62 = pqueue4:in(0, 0, Q61), + Q63 = pqueue4:in(1, 1, Q62), + Q64 = pqueue4:in(2, 2, Q63), + Q65 = pqueue4:in(3, 3, Q64), + Q66 = pqueue4:in(4, 4, Q65), + Q67 = pqueue4:in(5, 5, Q66), + Q68 = pqueue4:in(6, 6, Q67), + Q69 = pqueue4:in(7, 7, Q68), + Q70 = pqueue4:in(8, 8, Q69), + Q71 = pqueue4:in(9, 9, Q70), + Q72 = pqueue4:in(10, 10, Q71), + Q73 = pqueue4:in(11, 11, Q72), + Q74 = pqueue4:in(12, 12, Q73), + Q75 = pqueue4:in(13, 13, Q74), + Q76 = pqueue4:in(14, 14, Q75), + Q77 = pqueue4:in(15, 15, Q76), + Q78 = pqueue4:in(16, 16, Q77), + Q79 = pqueue4:in(17, 17, Q78), + Q80 = pqueue4:in(18, 18, Q79), + Q81 = pqueue4:in(19, 19, Q80), + Q82 = pqueue4:in(20, 20, Q81), + true = pqueue4:is_queue(Q82), + 82 = pqueue4:len(Q82), + [-20, -20, -19, -19, -18, -18, -17, -17, -16, -16, -15, -15, -14, -14, + -13, -13, -12, -12, -11, -11, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6, + -5, -5, -4, -4, -3, -3, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, + 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, + 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20] = pqueue4:to_list(Q82), + [{-20, [-20, -20]}, {-19, [-19, -19]}, {-18, [-18, -18]}, + {-17, [-17, -17]}, {-16, [-16, -16]}, {-15, [-15, -15]}, + {-14, [-14, -14]}, {-13, [-13, -13]}, {-12, [-12, -12]}, + {-11, [-11, -11]}, {-10, [-10, -10]}, {-9, [-9, -9]}, + {-8, [-8, -8]}, {-7, [-7, -7]}, {-6, [-6, -6]}, + {-5, [-5, -5]}, {-4, [-4, -4]}, {-3, [-3, -3]}, + {-2, [-2, -2]}, {-1, [-1, -1]}, {0, [0, 0]}, + {1, [1, 1]}, {2, [2, 2]}, {3, [3, 3]}, + {4, [4, 4]}, {5, [5, 5]}, {6, [6, 6]}, + {7, [7, 7]}, {8, [8, 8]}, {9, [9, 9]}, + {10, [10, 10]}, {11, [11, 11]}, {12, [12, 12]}, + {13, [13, 13]}, {14, [14, 14]}, {15, [15, 15]}, + {16, [16, 16]}, {17, [17, 17]}, {18, [18, 18]}, + {19, [19, 19]}, {20, [20, 20]}] = pqueue4:to_plist(Q82), + {{value, -20}, Q83} = pqueue4:out(Q82), + {{value, -20}, Q84} = pqueue4:out(Q83), + {{value, -19}, Q85} = pqueue4:out(Q84), + {{value, -19}, Q86} = pqueue4:out(Q85), + {{value, -18}, Q87} = pqueue4:out(Q86), + {{value, -18}, Q88} = pqueue4:out(Q87), + {{value, 0}, Q89} = pqueue4:out(0, Q88), + {{value, 0}, Q90} = pqueue4:out(0, Q89), + {empty, _} = pqueue4:out(0, Q90), + {{value, -17, -17}, Q91} = pqueue4:pout(Q90), + {{value, -17, -17}, Q92} = pqueue4:pout(Q91), + {{value, -16, -16}, Q93} = pqueue4:pout(Q92), + {{value, -16, -16}, Q94} = pqueue4:pout(Q93), + {{value, -15, -15}, Q95} = pqueue4:pout(Q94), + {{value, -15, -15}, Q96} = pqueue4:pout(Q95), + {{value, -14, -14}, Q97} = pqueue4:pout(Q96), + {{value, -14, -14}, Q98} = pqueue4:pout(Q97), + {{value, -13, -13}, Q99} = pqueue4:pout(Q98), + {{value, -13, -13}, Q100} = pqueue4:pout(Q99), + {{value, -12, -12}, Q101} = pqueue4:pout(Q100), + {{value, -12, -12}, Q102} = pqueue4:pout(Q101), + {{value, -11, -11}, Q103} = pqueue4:pout(Q102), + {{value, -11, -11}, Q104} = pqueue4:pout(Q103), + {{value, -10, -10}, Q105} = pqueue4:pout(Q104), + {{value, -10, -10}, Q106} = pqueue4:pout(Q105), + {{value, -9, -9}, Q107} = pqueue4:pout(Q106), + {{value, -9, -9}, Q108} = pqueue4:pout(Q107), + {{value, -8, -8}, Q109} = pqueue4:pout(Q108), + {{value, -8, -8}, Q110} = pqueue4:pout(Q109), + {{value, -7, -7}, Q111} = pqueue4:pout(Q110), + {{value, -7, -7}, Q112} = pqueue4:pout(Q111), + {{value, -6, -6}, Q113} = pqueue4:pout(Q112), + {{value, -6, -6}, Q114} = pqueue4:pout(Q113), + {{value, -5, -5}, Q115} = pqueue4:pout(Q114), + {{value, -5, -5}, Q116} = pqueue4:pout(Q115), + {{value, -4, -4}, Q117} = pqueue4:pout(Q116), + {{value, -4, -4}, Q118} = pqueue4:pout(Q117), + {{value, -3, -3}, Q119} = pqueue4:pout(Q118), + {{value, -3, -3}, Q120} = pqueue4:pout(Q119), + {{value, -2, -2}, Q121} = pqueue4:pout(Q120), + {{value, -2, -2}, Q122} = pqueue4:pout(Q121), + {{value, -1, -1}, Q123} = pqueue4:pout(Q122), + {{value, -1, -1}, Q124} = pqueue4:pout(Q123), + {{value, 1, 1}, Q125} = pqueue4:pout(Q124), + {{value, 1, 1}, Q126} = pqueue4:pout(Q125), + {{value, 2, 2}, Q127} = pqueue4:pout(Q126), + {{value, 2, 2}, Q128} = pqueue4:pout(Q127), + {{value, 3, 3}, Q129} = pqueue4:pout(Q128), + {{value, 3, 3}, Q130} = pqueue4:pout(Q129), + {{value, 4, 4}, Q131} = pqueue4:pout(Q130), + {{value, 4, 4}, Q132} = pqueue4:pout(Q131), + {{value, 5, 5}, Q133} = pqueue4:pout(Q132), + {{value, 5, 5}, Q134} = pqueue4:pout(Q133), + {{value, 6, 6}, Q135} = pqueue4:pout(Q134), + {{value, 6, 6}, Q136} = pqueue4:pout(Q135), + {{value, 7, 7}, Q137} = pqueue4:pout(Q136), + {{value, 7, 7}, Q138} = pqueue4:pout(Q137), + {{value, 8, 8}, Q139} = pqueue4:pout(Q138), + {{value, 8, 8}, Q140} = pqueue4:pout(Q139), + {{value, 9, 9}, Q141} = pqueue4:pout(Q140), + {{value, 9, 9}, Q142} = pqueue4:pout(Q141), + {{value, 10, 10}, Q143} = pqueue4:pout(Q142), + {{value, 10, 10}, Q144} = pqueue4:pout(Q143), + {{value, 11, 11}, Q145} = pqueue4:pout(Q144), + {{value, 11, 11}, Q146} = pqueue4:pout(Q145), + {{value, 12, 12}, Q147} = pqueue4:pout(Q146), + {{value, 12, 12}, Q148} = pqueue4:pout(Q147), + {{value, 13, 13}, Q149} = pqueue4:pout(Q148), + {{value, 13, 13}, Q150} = pqueue4:pout(Q149), + {{value, 14, 14}, Q151} = pqueue4:pout(Q150), + {{value, 14, 14}, Q152} = pqueue4:pout(Q151), + {{value, 15, 15}, Q153} = pqueue4:pout(Q152), + {{value, 15, 15}, Q154} = pqueue4:pout(Q153), + {{value, 16, 16}, Q155} = pqueue4:pout(Q154), + {{value, 16, 16}, Q156} = pqueue4:pout(Q155), + {{value, 17, 17}, Q157} = pqueue4:pout(Q156), + {{value, 17, 17}, Q158} = pqueue4:pout(Q157), + {{value, 18, 18}, Q159} = pqueue4:pout(Q158), + {{value, 18, 18}, Q160} = pqueue4:pout(Q159), + {{value, 19, 19}, Q161} = pqueue4:pout(Q160), + {{value, 19, 19}, Q162} = pqueue4:pout(Q161), + {{value, 20, 20}, Q163} = pqueue4:pout(Q162), + {{value, 20, 20}, Q164} = pqueue4:pout(Q163), + {{value, 20}, Q164} = pqueue4:out(Q163), + {{value, 20}, Q164} = pqueue4:out(20, Q163), + true = pqueue4:is_empty(Q164), + empty = erlang:element(1, Q164), % current priority + 0 = erlang:element(2, Q164), % size + {empty, Q164} = pqueue4:pout(Q164), + {empty, Q164} = pqueue4:out(Q164), + {empty, Q164} = pqueue4:out(20, Q164), + + Queue0 = queue:new(), + "{[],[]}" = lists:flatten(io_lib:format("~p", [Queue0])), + Queue1 = queue:in(1, Queue0), + Queue2 = queue:in(2, Queue1), + Queue3 = queue:in(3, Queue2), + {{value, 1}, _} = queue:out(Queue2), + "{[3,2],[1]}" = lists:flatten(io_lib:format("~p", [Queue3])), + {true, {[3],[1]}} = queue_remove_unique(fun(I) -> I == 2 end, {[3,2],[1]}), + Queue4 = queue:filter(fun(I) -> not (I == 2) end, Queue3), + "{[3],[1]}" = lists:flatten(io_lib:format("~p", [Queue4])), + 2 = queue:len(Queue4), + {{value, 1}, _} = queue:out(Queue4), + [1, 3] = queue:to_list(Queue4), + + Q166 = pqueue4:new(), + true = pqueue4:is_queue(Q166), + Q167 = pqueue4:in(6, 1, Q166), + Q168 = pqueue4:in(7, 1, Q167), + Q169 = pqueue4:in(8, 1, Q168), + Q170 = pqueue4:in(3, 0, Q169), + Q171 = pqueue4:in(4, 0, Q170), + Q172 = pqueue4:in(5, 0, Q171), + Q173 = pqueue4:in(0, -1, Q172), + Q174 = pqueue4:in(1, -1, Q173), + Q175 = pqueue4:in(2, -1, Q174), + [{-1, [0, 1, 2]}, {0, [3, 4, 5]}, {1, [6, 7, 8]}] = pqueue4:to_plist(Q175), + 3 = pqueue4:len(pqueue4:filter(fun(I) -> I > 5 end, Q175)), + 3 = pqueue4:len(pqueue4:filter(fun(I) -> I < 3 end, Q175)), + 3 = pqueue4:len(pqueue4:filter(fun(I) -> (I < 1) orelse (I > 6) end, Q175)), + {true, Q176} = pqueue4:remove_unique(fun(I) -> I == 4 end, Q175), + [{-1, [0, 1, 2]}, {0, [3, 5]}, {1, [6, 7, 8]}] = pqueue4:to_plist(Q176), + {true, Q177} = pqueue4:remove_unique(fun(I) -> I == 1 end, Q176), + [{-1, [0, 2]}, {0, [3, 5]}, {1, [6, 7, 8]}] = pqueue4:to_plist(Q177), + {true, Q178} = pqueue4:remove_unique(fun(I) -> I == 7 end, Q177), + [{-1, [0, 2]}, {0, [3, 5]}, {1, [6, 8]}] = pqueue4:to_plist(Q178), + 6 = pqueue4:len(Q178), + {{value, 0, -1}, Q179} = pqueue4:pout(Q178), + {{value, 2}, Q180} = pqueue4:out(Q179), + {{value, 6}, Q181} = pqueue4:out(1, Q180), + {false, Q181} = pqueue4:remove_unique(fun(I) -> I == 7 end, Q181), + [{0, [3, 5]}, {1, [8]}] = pqueue4:to_plist(Q181), + {true, Q182} = pqueue4:remove_unique(fun(I) -> I == 5 end, Q181), + {true, Q183} = pqueue4:remove_unique(fun(I) -> I == 8 end, 1, Q182), + {true, Q184} = pqueue4:remove_unique(fun(I) -> I == 3 end, Q183), + {empty, Q184} = pqueue4:pout(Q184), + {empty, Q184} = pqueue4:out(Q184), + {empty, Q184} = pqueue4:out(0, Q184), + ok. + +%%%------------------------------------------------------------------------ +%%% Private functions +%%%------------------------------------------------------------------------ + +%% @hidden +-define(FILTER_P_Qn128(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121, + Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113}, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + V3, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qn112(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, + {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105, + Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97}, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, + V3, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qn96(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, + {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89, + Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81}, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, + V3, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qn80(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, + {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73, + Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65}, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, + V3, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qn64(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, + {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57, + Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49}, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, + V3, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qn48(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, + {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41, + Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33}, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, + V3, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qn32(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25, + Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17}, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + V3, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qn16(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9, + Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + V3, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qp16(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8, + Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16}, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + V3, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qp32(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24, + Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32}, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + V3, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qp48(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40, + Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48}, + Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + V3, + Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qp64(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56, + Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64}, + Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + V3, + Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qp80(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72, + Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80}, + Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + V3, + Qp96, Qp112, Qp128}). +-define(FILTER_P_Qp96(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88, + Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96}, + Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + V3, + Qp112, Qp128}). +-define(FILTER_P_Qp112(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104, + Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112}, + Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + V3, + Qp128}). +-define(FILTER_P_Qp128(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + V3}). + +?FILTER_P_Qn128(-128, + Qn128, NewQn128, + {NewQn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-127, + Qn127, NewQn127, + {Qn128, NewQn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-126, + Qn126, NewQn126, + {Qn128, Qn127, NewQn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-125, + Qn125, NewQn125, + {Qn128, Qn127, Qn126, NewQn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-124, + Qn124, NewQn124, + {Qn128, Qn127, Qn126, Qn125, NewQn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-123, + Qn123, NewQn123, + {Qn128, Qn127, Qn126, Qn125, Qn124, + NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-122, + Qn122, NewQn122, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-121, + Qn121, NewQn121, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-120, + Qn120, NewQn120, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-119, + Qn119, NewQn119, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-118, + Qn118, NewQn118, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-117, + Qn117, NewQn117, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + NewQn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-116, + Qn116, NewQn116, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, NewQn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-115, + Qn115, NewQn115, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, NewQn115, Qn114, Qn113}); +?FILTER_P_Qn128(-114, + Qn114, NewQn114, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, NewQn114, Qn113}); +?FILTER_P_Qn128(-113, + Qn113, NewQn113, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, NewQn113}); +?FILTER_P_Qn112(-112, + Qn112, NewQn112, + {NewQn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-111, + Qn111, NewQn111, + {Qn112, NewQn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-110, + Qn110, NewQn110, + {Qn112, Qn111, NewQn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-109, + Qn109, NewQn109, + {Qn112, Qn111, Qn110, NewQn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-108, + Qn108, NewQn108, + {Qn112, Qn111, Qn110, Qn109, NewQn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-107, + Qn107, NewQn107, + {Qn112, Qn111, Qn110, Qn109, Qn108, + NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-106, + Qn106, NewQn106, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-105, + Qn105, NewQn105, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-104, + Qn104, NewQn104, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-103, + Qn103, NewQn103, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-102, + Qn102, NewQn102, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-101, + Qn101, NewQn101, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + NewQn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-100, + Qn100, NewQn100, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, NewQn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-99, + Qn99, NewQn99, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, NewQn99, Qn98, Qn97}); +?FILTER_P_Qn112(-98, + Qn98, NewQn98, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, NewQn98, Qn97}); +?FILTER_P_Qn112(-97, + Qn97, NewQn97, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, NewQn97}); +?FILTER_P_Qn96(-96, + Qn96, NewQn96, + {NewQn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-95, + Qn95, NewQn95, + {Qn96, NewQn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-94, + Qn94, NewQn94, + {Qn96, Qn95, NewQn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-93, + Qn93, NewQn93, + {Qn96, Qn95, Qn94, NewQn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-92, + Qn92, NewQn92, + {Qn96, Qn95, Qn94, Qn93, NewQn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-91, + Qn91, NewQn91, + {Qn96, Qn95, Qn94, Qn93, Qn92, + NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-90, + Qn90, NewQn90, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-89, + Qn89, NewQn89, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-88, + Qn88, NewQn88, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-87, + Qn87, NewQn87, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-86, + Qn86, NewQn86, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-85, + Qn85, NewQn85, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + NewQn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-84, + Qn84, NewQn84, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, NewQn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-83, + Qn83, NewQn83, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, NewQn83, Qn82, Qn81}); +?FILTER_P_Qn96(-82, + Qn82, NewQn82, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, NewQn82, Qn81}); +?FILTER_P_Qn96(-81, + Qn81, NewQn81, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, NewQn81}); +?FILTER_P_Qn80(-80, + Qn80, NewQn80, + {NewQn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-79, + Qn79, NewQn79, + {Qn80, NewQn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-78, + Qn78, NewQn78, + {Qn80, Qn79, NewQn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-77, + Qn77, NewQn77, + {Qn80, Qn79, Qn78, NewQn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-76, + Qn76, NewQn76, + {Qn80, Qn79, Qn78, Qn77, NewQn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-75, + Qn75, NewQn75, + {Qn80, Qn79, Qn78, Qn77, Qn76, + NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-74, + Qn74, NewQn74, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-73, + Qn73, NewQn73, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-72, + Qn72, NewQn72, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-71, + Qn71, NewQn71, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-70, + Qn70, NewQn70, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-69, + Qn69, NewQn69, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + NewQn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-68, + Qn68, NewQn68, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, NewQn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-67, + Qn67, NewQn67, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, NewQn67, Qn66, Qn65}); +?FILTER_P_Qn80(-66, + Qn66, NewQn66, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, NewQn66, Qn65}); +?FILTER_P_Qn80(-65, + Qn65, NewQn65, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, NewQn65}); +?FILTER_P_Qn64(-64, + Qn64, NewQn64, + {NewQn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-63, + Qn63, NewQn63, + {Qn64, NewQn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-62, + Qn62, NewQn62, + {Qn64, Qn63, NewQn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-61, + Qn61, NewQn61, + {Qn64, Qn63, Qn62, NewQn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-60, + Qn60, NewQn60, + {Qn64, Qn63, Qn62, Qn61, NewQn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-59, + Qn59, NewQn59, + {Qn64, Qn63, Qn62, Qn61, Qn60, + NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-58, + Qn58, NewQn58, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-57, + Qn57, NewQn57, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-56, + Qn56, NewQn56, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-55, + Qn55, NewQn55, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-54, + Qn54, NewQn54, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-53, + Qn53, NewQn53, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + NewQn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-52, + Qn52, NewQn52, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, NewQn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-51, + Qn51, NewQn51, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, NewQn51, Qn50, Qn49}); +?FILTER_P_Qn64(-50, + Qn50, NewQn50, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, NewQn50, Qn49}); +?FILTER_P_Qn64(-49, + Qn49, NewQn49, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, NewQn49}); +?FILTER_P_Qn48(-48, + Qn48, NewQn48, + {NewQn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-47, + Qn47, NewQn47, + {Qn48, NewQn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-46, + Qn46, NewQn46, + {Qn48, Qn47, NewQn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-45, + Qn45, NewQn45, + {Qn48, Qn47, Qn46, NewQn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-44, + Qn44, NewQn44, + {Qn48, Qn47, Qn46, Qn45, NewQn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-43, + Qn43, NewQn43, + {Qn48, Qn47, Qn46, Qn45, Qn44, + NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-42, + Qn42, NewQn42, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-41, + Qn41, NewQn41, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-40, + Qn40, NewQn40, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-39, + Qn39, NewQn39, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-38, + Qn38, NewQn38, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-37, + Qn37, NewQn37, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + NewQn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-36, + Qn36, NewQn36, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, NewQn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-35, + Qn35, NewQn35, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, NewQn35, Qn34, Qn33}); +?FILTER_P_Qn48(-34, + Qn34, NewQn34, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, NewQn34, Qn33}); +?FILTER_P_Qn48(-33, + Qn33, NewQn33, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, NewQn33}); +?FILTER_P_Qn32(-32, + Qn32, NewQn32, + {NewQn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-31, + Qn31, NewQn31, + {Qn32, NewQn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-30, + Qn30, NewQn30, + {Qn32, Qn31, NewQn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-29, + Qn29, NewQn29, + {Qn32, Qn31, Qn30, NewQn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-28, + Qn28, NewQn28, + {Qn32, Qn31, Qn30, Qn29, NewQn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-27, + Qn27, NewQn27, + {Qn32, Qn31, Qn30, Qn29, Qn28, + NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-26, + Qn26, NewQn26, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-25, + Qn25, NewQn25, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-24, + Qn24, NewQn24, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-23, + Qn23, NewQn23, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-22, + Qn22, NewQn22, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-21, + Qn21, NewQn21, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + NewQn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-20, + Qn20, NewQn20, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, NewQn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-19, + Qn19, NewQn19, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, NewQn19, Qn18, Qn17}); +?FILTER_P_Qn32(-18, + Qn18, NewQn18, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, NewQn18, Qn17}); +?FILTER_P_Qn32(-17, + Qn17, NewQn17, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, NewQn17}); +?FILTER_P_Qn16(-16, + Qn16, NewQn16, + {NewQn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-15, + Qn15, NewQn15, + {Qn16, NewQn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-14, + Qn14, NewQn14, + {Qn16, Qn15, NewQn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-13, + Qn13, NewQn13, + {Qn16, Qn15, Qn14, NewQn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-12, + Qn12, NewQn12, + {Qn16, Qn15, Qn14, Qn13, NewQn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-11, + Qn11, NewQn11, + {Qn16, Qn15, Qn14, Qn13, Qn12, + NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-10, + Qn10, NewQn10, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-9, + Qn9, NewQn9, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-8, + Qn8, NewQn8, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-7, + Qn7, NewQn7, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-6, + Qn6, NewQn6, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-5, + Qn5, NewQn5, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + NewQn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-4, + Qn4, NewQn4, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, NewQn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-3, + Qn3, NewQn3, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, NewQn3, Qn2, Qn1}); +?FILTER_P_Qn16(-2, + Qn2, NewQn2, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, NewQn2, Qn1}); +?FILTER_P_Qn16(-1, + Qn1, NewQn1, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, NewQn1}); +filter_priority(0, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + NewQ0 = queue:filter(F, Q0), + NewSize = Size - (queue:len(Q0) - queue:len(NewQ0)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + NewQ0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}; +?FILTER_P_Qp16(1, + Qp1, NewQp1, + {NewQp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(2, + Qp2, NewQp2, + {Qp1, NewQp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(3, + Qp3, NewQp3, + {Qp1, Qp2, NewQp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(4, + Qp4, NewQp4, + {Qp1, Qp2, Qp3, NewQp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(5, + Qp5, NewQp5, + {Qp1, Qp2, Qp3, Qp4, NewQp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(6, + Qp6, NewQp6, + {Qp1, Qp2, Qp3, Qp4, Qp5, + NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(7, + Qp7, NewQp7, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(8, + Qp8, NewQp8, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(9, + Qp9, NewQp9, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(10, + Qp10, NewQp10, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(11, + Qp11, NewQp11, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(12, + Qp12, NewQp12, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + NewQp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(13, + Qp13, NewQp13, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, NewQp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(14, + Qp14, NewQp14, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, NewQp14, Qp15, Qp16}); +?FILTER_P_Qp16(15, + Qp15, NewQp15, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, NewQp15, Qp16}); +?FILTER_P_Qp16(16, + Qp16, NewQp16, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, NewQp16}); +?FILTER_P_Qp32(17, + Qp17, NewQp17, + {NewQp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(18, + Qp18, NewQp18, + {Qp17, NewQp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(19, + Qp19, NewQp19, + {Qp17, Qp18, NewQp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(20, + Qp20, NewQp20, + {Qp17, Qp18, Qp19, NewQp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(21, + Qp21, NewQp21, + {Qp17, Qp18, Qp19, Qp20, NewQp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(22, + Qp22, NewQp22, + {Qp17, Qp18, Qp19, Qp20, Qp21, + NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(23, + Qp23, NewQp23, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(24, + Qp24, NewQp24, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(25, + Qp25, NewQp25, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(26, + Qp26, NewQp26, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(27, + Qp27, NewQp27, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(28, + Qp28, NewQp28, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + NewQp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(29, + Qp29, NewQp29, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, NewQp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(30, + Qp30, NewQp30, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, NewQp30, Qp31, Qp32}); +?FILTER_P_Qp32(31, + Qp31, NewQp31, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, NewQp31, Qp32}); +?FILTER_P_Qp32(32, + Qp32, NewQp32, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, NewQp32}); +?FILTER_P_Qp48(33, + Qp33, NewQp33, + {NewQp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(34, + Qp34, NewQp34, + {Qp33, NewQp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(35, + Qp35, NewQp35, + {Qp33, Qp34, NewQp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(36, + Qp36, NewQp36, + {Qp33, Qp34, Qp35, NewQp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(37, + Qp37, NewQp37, + {Qp33, Qp34, Qp35, Qp36, NewQp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(38, + Qp38, NewQp38, + {Qp33, Qp34, Qp35, Qp36, Qp37, + NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(39, + Qp39, NewQp39, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(40, + Qp40, NewQp40, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(41, + Qp41, NewQp41, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(42, + Qp42, NewQp42, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(43, + Qp43, NewQp43, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(44, + Qp44, NewQp44, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + NewQp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(45, + Qp45, NewQp45, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, NewQp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(46, + Qp46, NewQp46, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, NewQp46, Qp47, Qp48}); +?FILTER_P_Qp48(47, + Qp47, NewQp47, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, NewQp47, Qp48}); +?FILTER_P_Qp48(48, + Qp48, NewQp48, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, NewQp48}); +?FILTER_P_Qp64(49, + Qp49, NewQp49, + {NewQp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(50, + Qp50, NewQp50, + {Qp49, NewQp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(51, + Qp51, NewQp51, + {Qp49, Qp50, NewQp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(52, + Qp52, NewQp52, + {Qp49, Qp50, Qp51, NewQp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(53, + Qp53, NewQp53, + {Qp49, Qp50, Qp51, Qp52, NewQp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(54, + Qp54, NewQp54, + {Qp49, Qp50, Qp51, Qp52, Qp53, + NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(55, + Qp55, NewQp55, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(56, + Qp56, NewQp56, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(57, + Qp57, NewQp57, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(58, + Qp58, NewQp58, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(59, + Qp59, NewQp59, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(60, + Qp60, NewQp60, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + NewQp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(61, + Qp61, NewQp61, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, NewQp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(62, + Qp62, NewQp62, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, NewQp62, Qp63, Qp64}); +?FILTER_P_Qp64(63, + Qp63, NewQp63, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, NewQp63, Qp64}); +?FILTER_P_Qp64(64, + Qp64, NewQp64, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, NewQp64}); +?FILTER_P_Qp80(65, + Qp65, NewQp65, + {NewQp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(66, + Qp66, NewQp66, + {Qp65, NewQp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(67, + Qp67, NewQp67, + {Qp65, Qp66, NewQp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(68, + Qp68, NewQp68, + {Qp65, Qp66, Qp67, NewQp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(69, + Qp69, NewQp69, + {Qp65, Qp66, Qp67, Qp68, NewQp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(70, + Qp70, NewQp70, + {Qp65, Qp66, Qp67, Qp68, Qp69, + NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(71, + Qp71, NewQp71, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(72, + Qp72, NewQp72, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(73, + Qp73, NewQp73, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(74, + Qp74, NewQp74, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(75, + Qp75, NewQp75, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(76, + Qp76, NewQp76, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + NewQp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(77, + Qp77, NewQp77, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, NewQp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(78, + Qp78, NewQp78, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, NewQp78, Qp79, Qp80}); +?FILTER_P_Qp80(79, + Qp79, NewQp79, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, NewQp79, Qp80}); +?FILTER_P_Qp80(80, + Qp80, NewQp80, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, NewQp80}); +?FILTER_P_Qp96(81, + Qp81, NewQp81, + {NewQp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(82, + Qp82, NewQp82, + {Qp81, NewQp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(83, + Qp83, NewQp83, + {Qp81, Qp82, NewQp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(84, + Qp84, NewQp84, + {Qp81, Qp82, Qp83, NewQp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(85, + Qp85, NewQp85, + {Qp81, Qp82, Qp83, Qp84, NewQp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(86, + Qp86, NewQp86, + {Qp81, Qp82, Qp83, Qp84, Qp85, + NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(87, + Qp87, NewQp87, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(88, + Qp88, NewQp88, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(89, + Qp89, NewQp89, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(90, + Qp90, NewQp90, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(91, + Qp91, NewQp91, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(92, + Qp92, NewQp92, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + NewQp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(93, + Qp93, NewQp93, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, NewQp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(94, + Qp94, NewQp94, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, NewQp94, Qp95, Qp96}); +?FILTER_P_Qp96(95, + Qp95, NewQp95, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, NewQp95, Qp96}); +?FILTER_P_Qp96(96, + Qp96, NewQp96, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, NewQp96}); +?FILTER_P_Qp112(97, + Qp97, NewQp97, + {NewQp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(98, + Qp98, NewQp98, + {Qp97, NewQp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(99, + Qp99, NewQp99, + {Qp97, Qp98, NewQp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(100, + Qp100, NewQp100, + {Qp97, Qp98, Qp99, NewQp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(101, + Qp101, NewQp101, + {Qp97, Qp98, Qp99, Qp100, NewQp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(102, + Qp102, NewQp102, + {Qp97, Qp98, Qp99, Qp100, Qp101, + NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(103, + Qp103, NewQp103, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(104, + Qp104, NewQp104, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(105, + Qp105, NewQp105, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(106, + Qp106, NewQp106, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(107, + Qp107, NewQp107, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(108, + Qp108, NewQp108, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + NewQp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(109, + Qp109, NewQp109, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, NewQp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(110, + Qp110, NewQp110, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, NewQp110, Qp111, Qp112}); +?FILTER_P_Qp112(111, + Qp111, NewQp111, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, NewQp111, Qp112}); +?FILTER_P_Qp112(112, + Qp112, NewQp112, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, NewQp112}); +?FILTER_P_Qp128(113, + Qp113, NewQp113, + {NewQp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(114, + Qp114, NewQp114, + {Qp113, NewQp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(115, + Qp115, NewQp115, + {Qp113, Qp114, NewQp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(116, + Qp116, NewQp116, + {Qp113, Qp114, Qp115, NewQp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(117, + Qp117, NewQp117, + {Qp113, Qp114, Qp115, Qp116, NewQp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(118, + Qp118, NewQp118, + {Qp113, Qp114, Qp115, Qp116, Qp117, + NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(119, + Qp119, NewQp119, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(120, + Qp120, NewQp120, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(121, + Qp121, NewQp121, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(122, + Qp122, NewQp122, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(123, + Qp123, NewQp123, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(124, + Qp124, NewQp124, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + NewQp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(125, + Qp125, NewQp125, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, NewQp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(126, + Qp126, NewQp126, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, NewQp126, Qp127, Qp128}); +?FILTER_P_Qp128(127, + Qp127, NewQp127, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, NewQp127, Qp128}); +?FILTER_P_Qp128(128, + Qp128, NewQp128, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, NewQp128}). + +%% @hidden +-define(IN_HIGHER_Qn128(P, V), +in_higher(P, + {_, + Size, + {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121, + Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113}, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + V, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qn112(P, V), +in_higher(P, + {_, + Size, + Qn128, + {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105, + Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97}, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, + V, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qn96(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, + {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89, + Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81}, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, + V, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qn80(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, + {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73, + Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65}, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, + V, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qn64(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, + {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57, + Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49}, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, + V, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qn48(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, + {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41, + Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33}, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, + V, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qn32(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25, + Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17}, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + V, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qn16(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9, + Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + V, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qp16(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8, + Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16}, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + V, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qp32(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24, + Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32}, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + V, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qp48(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40, + Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48}, + Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + V, + Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qp64(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56, + Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64}, + Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + V, + Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qp80(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72, + Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80}, + Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + V, + Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qp96(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88, + Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96}, + Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + V, + Qp112, Qp128}). +-define(IN_HIGHER_Qp112(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104, + Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112}, + Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + V, + Qp128}). +-define(IN_HIGHER_Qp128(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + V}). + +?IN_HIGHER_Qn128(-128, + {queue:in(X, Qn128), Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-127, + {Qn128, queue:in(X, Qn127), Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-126, + {Qn128, Qn127, queue:in(X, Qn126), Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-125, + {Qn128, Qn127, Qn126, queue:in(X, Qn125), Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-124, + {Qn128, Qn127, Qn126, Qn125, queue:in(X, Qn124), + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-123, + {Qn128, Qn127, Qn126, Qn125, Qn124, + queue:in(X, Qn123), Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-122, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, queue:in(X, Qn122), Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-121, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, queue:in(X, Qn121), Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-120, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, queue:in(X, Qn120), Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-119, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, queue:in(X, Qn119), Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-118, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, queue:in(X, Qn118), + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-117, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + queue:in(X, Qn117), Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-116, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, queue:in(X, Qn116), Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-115, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, queue:in(X, Qn115), Qn114, Qn113}); +?IN_HIGHER_Qn128(-114, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, queue:in(X, Qn114), Qn113}); +?IN_HIGHER_Qn128(-113, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, queue:in(X, Qn113)}); +?IN_HIGHER_Qn112(-112, + {queue:in(X, Qn112), Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-111, + {Qn112, queue:in(X, Qn111), Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-110, + {Qn112, Qn111, queue:in(X, Qn110), Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-109, + {Qn112, Qn111, Qn110, queue:in(X, Qn109), Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-108, + {Qn112, Qn111, Qn110, Qn109, queue:in(X, Qn108), + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-107, + {Qn112, Qn111, Qn110, Qn109, Qn108, + queue:in(X, Qn107), Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-106, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, queue:in(X, Qn106), Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-105, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, queue:in(X, Qn105), Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-104, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, queue:in(X, Qn104), Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-103, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, queue:in(X, Qn103), Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-102, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, queue:in(X, Qn102), + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-101, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + queue:in(X, Qn101), Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-100, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, queue:in(X, Qn100), Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-99, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, queue:in(X, Qn99), Qn98, Qn97}); +?IN_HIGHER_Qn112(-98, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, queue:in(X, Qn98), Qn97}); +?IN_HIGHER_Qn112(-97, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, queue:in(X, Qn97)}); +?IN_HIGHER_Qn96(-96, + {queue:in(X, Qn96), Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-95, + {Qn96, queue:in(X, Qn95), Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-94, + {Qn96, Qn95, queue:in(X, Qn94), Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-93, + {Qn96, Qn95, Qn94, queue:in(X, Qn93), Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-92, + {Qn96, Qn95, Qn94, Qn93, queue:in(X, Qn92), + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-91, + {Qn96, Qn95, Qn94, Qn93, Qn92, + queue:in(X, Qn91), Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-90, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, queue:in(X, Qn90), Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-89, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, queue:in(X, Qn89), Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-88, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, queue:in(X, Qn88), Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-87, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, queue:in(X, Qn87), Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-86, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, queue:in(X, Qn86), + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-85, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + queue:in(X, Qn85), Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-84, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, queue:in(X, Qn84), Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-83, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, queue:in(X, Qn83), Qn82, Qn81}); +?IN_HIGHER_Qn96(-82, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, queue:in(X, Qn82), Qn81}); +?IN_HIGHER_Qn96(-81, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, queue:in(X, Qn81)}); +?IN_HIGHER_Qn80(-80, + {queue:in(X, Qn80), Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-79, + {Qn80, queue:in(X, Qn79), Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-78, + {Qn80, Qn79, queue:in(X, Qn78), Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-77, + {Qn80, Qn79, Qn78, queue:in(X, Qn77), Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-76, + {Qn80, Qn79, Qn78, Qn77, queue:in(X, Qn76), + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-75, + {Qn80, Qn79, Qn78, Qn77, Qn76, + queue:in(X, Qn75), Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-74, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, queue:in(X, Qn74), Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-73, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, queue:in(X, Qn73), Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-72, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, queue:in(X, Qn72), Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-71, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, queue:in(X, Qn71), Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-70, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, queue:in(X, Qn70), + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-69, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + queue:in(X, Qn69), Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-68, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, queue:in(X, Qn68), Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-67, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, queue:in(X, Qn67), Qn66, Qn65}); +?IN_HIGHER_Qn80(-66, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, queue:in(X, Qn66), Qn65}); +?IN_HIGHER_Qn80(-65, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, queue:in(X, Qn65)}); +?IN_HIGHER_Qn64(-64, + {queue:in(X, Qn64), Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-63, + {Qn64, queue:in(X, Qn63), Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-62, + {Qn64, Qn63, queue:in(X, Qn62), Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-61, + {Qn64, Qn63, Qn62, queue:in(X, Qn61), Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-60, + {Qn64, Qn63, Qn62, Qn61, queue:in(X, Qn60), + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-59, + {Qn64, Qn63, Qn62, Qn61, Qn60, + queue:in(X, Qn59), Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-58, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, queue:in(X, Qn58), Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-57, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, queue:in(X, Qn57), Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-56, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, queue:in(X, Qn56), Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-55, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, queue:in(X, Qn55), Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-54, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, queue:in(X, Qn54), + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-53, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + queue:in(X, Qn53), Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-52, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, queue:in(X, Qn52), Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-51, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, queue:in(X, Qn51), Qn50, Qn49}); +?IN_HIGHER_Qn64(-50, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, queue:in(X, Qn50), Qn49}); +?IN_HIGHER_Qn64(-49, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, queue:in(X, Qn49)}); +?IN_HIGHER_Qn48(-48, + {queue:in(X, Qn48), Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-47, + {Qn48, queue:in(X, Qn47), Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-46, + {Qn48, Qn47, queue:in(X, Qn46), Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-45, + {Qn48, Qn47, Qn46, queue:in(X, Qn45), Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-44, + {Qn48, Qn47, Qn46, Qn45, queue:in(X, Qn44), + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-43, + {Qn48, Qn47, Qn46, Qn45, Qn44, + queue:in(X, Qn43), Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-42, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, queue:in(X, Qn42), Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-41, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, queue:in(X, Qn41), Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-40, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, queue:in(X, Qn40), Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-39, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, queue:in(X, Qn39), Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-38, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, queue:in(X, Qn38), + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-37, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + queue:in(X, Qn37), Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-36, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, queue:in(X, Qn36), Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-35, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, queue:in(X, Qn35), Qn34, Qn33}); +?IN_HIGHER_Qn48(-34, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, queue:in(X, Qn34), Qn33}); +?IN_HIGHER_Qn48(-33, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, queue:in(X, Qn33)}); +?IN_HIGHER_Qn32(-32, + {queue:in(X, Qn32), Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-31, + {Qn32, queue:in(X, Qn31), Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-30, + {Qn32, Qn31, queue:in(X, Qn30), Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-29, + {Qn32, Qn31, Qn30, queue:in(X, Qn29), Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-28, + {Qn32, Qn31, Qn30, Qn29, queue:in(X, Qn28), + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-27, + {Qn32, Qn31, Qn30, Qn29, Qn28, + queue:in(X, Qn27), Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-26, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, queue:in(X, Qn26), Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-25, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, queue:in(X, Qn25), Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-24, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, queue:in(X, Qn24), Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-23, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, queue:in(X, Qn23), Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-22, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, queue:in(X, Qn22), + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-21, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + queue:in(X, Qn21), Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-20, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, queue:in(X, Qn20), Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-19, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, queue:in(X, Qn19), Qn18, Qn17}); +?IN_HIGHER_Qn32(-18, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, queue:in(X, Qn18), Qn17}); +?IN_HIGHER_Qn32(-17, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, queue:in(X, Qn17)}); +?IN_HIGHER_Qn16(-16, + {queue:in(X, Qn16), Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-15, + {Qn16, queue:in(X, Qn15), Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-14, + {Qn16, Qn15, queue:in(X, Qn14), Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-13, + {Qn16, Qn15, Qn14, queue:in(X, Qn13), Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-12, + {Qn16, Qn15, Qn14, Qn13, queue:in(X, Qn12), + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-11, + {Qn16, Qn15, Qn14, Qn13, Qn12, + queue:in(X, Qn11), Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-10, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, queue:in(X, Qn10), Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-9, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, queue:in(X, Qn9), Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-8, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, queue:in(X, Qn8), Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-7, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, queue:in(X, Qn7), Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-6, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, queue:in(X, Qn6), + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-5, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + queue:in(X, Qn5), Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-4, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, queue:in(X, Qn4), Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-3, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, queue:in(X, Qn3), Qn2, Qn1}); +?IN_HIGHER_Qn16(-2, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, queue:in(X, Qn2), Qn1}); +?IN_HIGHER_Qn16(-1, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, queue:in(X, Qn1)}); +in_higher(0, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {0, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + queue:in(X, Q0), + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}; +?IN_HIGHER_Qp16(1, + {queue:in(X, Qp1), Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(2, + {Qp1, queue:in(X, Qp2), Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(3, + {Qp1, Qp2, queue:in(X, Qp3), Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(4, + {Qp1, Qp2, Qp3, queue:in(X, Qp4), Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(5, + {Qp1, Qp2, Qp3, Qp4, queue:in(X, Qp5), + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(6, + {Qp1, Qp2, Qp3, Qp4, Qp5, + queue:in(X, Qp6), Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(7, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, queue:in(X, Qp7), Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(8, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, queue:in(X, Qp8), Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(9, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, queue:in(X, Qp9), Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(10, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, queue:in(X, Qp10), Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(11, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, queue:in(X, Qp11), + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(12, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + queue:in(X, Qp12), Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(13, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, queue:in(X, Qp13), Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(14, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, queue:in(X, Qp14), Qp15, Qp16}); +?IN_HIGHER_Qp16(15, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, queue:in(X, Qp15), Qp16}); +?IN_HIGHER_Qp16(16, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, queue:in(X, Qp16)}); +?IN_HIGHER_Qp32(17, + {queue:in(X, Qp17), Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(18, + {Qp17, queue:in(X, Qp18), Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(19, + {Qp17, Qp18, queue:in(X, Qp19), Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(20, + {Qp17, Qp18, Qp19, queue:in(X, Qp20), Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(21, + {Qp17, Qp18, Qp19, Qp20, queue:in(X, Qp21), + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(22, + {Qp17, Qp18, Qp19, Qp20, Qp21, + queue:in(X, Qp22), Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(23, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, queue:in(X, Qp23), Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(24, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, queue:in(X, Qp24), Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(25, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, queue:in(X, Qp25), Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(26, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, queue:in(X, Qp26), Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(27, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, queue:in(X, Qp27), + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(28, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + queue:in(X, Qp28), Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(29, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, queue:in(X, Qp29), Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(30, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, queue:in(X, Qp30), Qp31, Qp32}); +?IN_HIGHER_Qp32(31, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, queue:in(X, Qp31), Qp32}); +?IN_HIGHER_Qp32(32, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, queue:in(X, Qp32)}); +?IN_HIGHER_Qp48(33, + {queue:in(X, Qp33), Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(34, + {Qp33, queue:in(X, Qp34), Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(35, + {Qp33, Qp34, queue:in(X, Qp35), Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(36, + {Qp33, Qp34, Qp35, queue:in(X, Qp36), Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(37, + {Qp33, Qp34, Qp35, Qp36, queue:in(X, Qp37), + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(38, + {Qp33, Qp34, Qp35, Qp36, Qp37, + queue:in(X, Qp38), Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(39, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, queue:in(X, Qp39), Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(40, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, queue:in(X, Qp40), Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(41, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, queue:in(X, Qp41), Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(42, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, queue:in(X, Qp42), Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(43, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, queue:in(X, Qp43), + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(44, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + queue:in(X, Qp44), Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(45, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, queue:in(X, Qp45), Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(46, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, queue:in(X, Qp46), Qp47, Qp48}); +?IN_HIGHER_Qp48(47, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, queue:in(X, Qp47), Qp48}); +?IN_HIGHER_Qp48(48, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, queue:in(X, Qp48)}); +?IN_HIGHER_Qp64(49, + {queue:in(X, Qp49), Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(50, + {Qp49, queue:in(X, Qp50), Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(51, + {Qp49, Qp50, queue:in(X, Qp51), Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(52, + {Qp49, Qp50, Qp51, queue:in(X, Qp52), Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(53, + {Qp49, Qp50, Qp51, Qp52, queue:in(X, Qp53), + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(54, + {Qp49, Qp50, Qp51, Qp52, Qp53, + queue:in(X, Qp54), Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(55, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, queue:in(X, Qp55), Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(56, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, queue:in(X, Qp56), Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(57, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, queue:in(X, Qp57), Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(58, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, queue:in(X, Qp58), Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(59, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, queue:in(X, Qp59), + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(60, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + queue:in(X, Qp60), Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(61, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, queue:in(X, Qp61), Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(62, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, queue:in(X, Qp62), Qp63, Qp64}); +?IN_HIGHER_Qp64(63, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, queue:in(X, Qp63), Qp64}); +?IN_HIGHER_Qp64(64, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, queue:in(X, Qp64)}); +?IN_HIGHER_Qp80(65, + {queue:in(X, Qp65), Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(66, + {Qp65, queue:in(X, Qp66), Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(67, + {Qp65, Qp66, queue:in(X, Qp67), Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(68, + {Qp65, Qp66, Qp67, queue:in(X, Qp68), Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(69, + {Qp65, Qp66, Qp67, Qp68, queue:in(X, Qp69), + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(70, + {Qp65, Qp66, Qp67, Qp68, Qp69, + queue:in(X, Qp70), Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(71, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, queue:in(X, Qp71), Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(72, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, queue:in(X, Qp72), Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(73, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, queue:in(X, Qp73), Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(74, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, queue:in(X, Qp74), Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(75, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, queue:in(X, Qp75), + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(76, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + queue:in(X, Qp76), Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(77, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, queue:in(X, Qp77), Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(78, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, queue:in(X, Qp78), Qp79, Qp80}); +?IN_HIGHER_Qp80(79, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, queue:in(X, Qp79), Qp80}); +?IN_HIGHER_Qp80(80, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, queue:in(X, Qp80)}); +?IN_HIGHER_Qp96(81, + {queue:in(X, Qp81), Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(82, + {Qp81, queue:in(X, Qp82), Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(83, + {Qp81, Qp82, queue:in(X, Qp83), Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(84, + {Qp81, Qp82, Qp83, queue:in(X, Qp84), Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(85, + {Qp81, Qp82, Qp83, Qp84, queue:in(X, Qp85), + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(86, + {Qp81, Qp82, Qp83, Qp84, Qp85, + queue:in(X, Qp86), Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(87, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, queue:in(X, Qp87), Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(88, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, queue:in(X, Qp88), Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(89, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, queue:in(X, Qp89), Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(90, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, queue:in(X, Qp90), Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(91, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, queue:in(X, Qp91), + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(92, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + queue:in(X, Qp92), Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(93, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, queue:in(X, Qp93), Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(94, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, queue:in(X, Qp94), Qp95, Qp96}); +?IN_HIGHER_Qp96(95, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, queue:in(X, Qp95), Qp96}); +?IN_HIGHER_Qp96(96, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, queue:in(X, Qp96)}); +?IN_HIGHER_Qp112(97, + {queue:in(X, Qp97), Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(98, + {Qp97, queue:in(X, Qp98), Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(99, + {Qp97, Qp98, queue:in(X, Qp99), Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(100, + {Qp97, Qp98, Qp99, queue:in(X, Qp100), Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(101, + {Qp97, Qp98, Qp99, Qp100, queue:in(X, Qp101), + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(102, + {Qp97, Qp98, Qp99, Qp100, Qp101, + queue:in(X, Qp102), Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(103, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, queue:in(X, Qp103), Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(104, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, queue:in(X, Qp104), Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(105, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, queue:in(X, Qp105), Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(106, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, queue:in(X, Qp106), Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(107, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, queue:in(X, Qp107), + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(108, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + queue:in(X, Qp108), Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(109, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, queue:in(X, Qp109), Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(110, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, queue:in(X, Qp110), Qp111, Qp112}); +?IN_HIGHER_Qp112(111, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, queue:in(X, Qp111), Qp112}); +?IN_HIGHER_Qp112(112, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, queue:in(X, Qp112)}); +?IN_HIGHER_Qp128(113, + {queue:in(X, Qp113), Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(114, + {Qp113, queue:in(X, Qp114), Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(115, + {Qp113, Qp114, queue:in(X, Qp115), Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(116, + {Qp113, Qp114, Qp115, queue:in(X, Qp116), Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(117, + {Qp113, Qp114, Qp115, Qp116, queue:in(X, Qp117), + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(118, + {Qp113, Qp114, Qp115, Qp116, Qp117, + queue:in(X, Qp118), Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(119, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, queue:in(X, Qp119), Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(120, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, queue:in(X, Qp120), Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(121, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, queue:in(X, Qp121), Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(122, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, queue:in(X, Qp122), Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(123, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, queue:in(X, Qp123), + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(124, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + queue:in(X, Qp124), Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(125, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, queue:in(X, Qp125), Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(126, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, queue:in(X, Qp126), Qp127, Qp128}); +?IN_HIGHER_Qp128(127, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, queue:in(X, Qp127), Qp128}); +?IN_HIGHER_Qp128(128, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, queue:in(X, Qp128)}). + +%% @hidden +-define(IN_LOWER_Qn128(P, V), +in_lower(P, + {Pc, + Size, + {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121, + Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113}, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + V, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qn112(P, V), +in_lower(P, + {Pc, + Size, + Qn128, + {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105, + Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97}, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, + V, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qn96(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, + {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89, + Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81}, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, + V, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qn80(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, + {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73, + Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65}, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, + V, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qn64(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, + {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57, + Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49}, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, + V, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qn48(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, + {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41, + Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33}, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, + V, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qn32(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25, + Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17}, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + V, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qn16(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9, + Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + V, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qp16(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8, + Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16}, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + V, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qp32(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24, + Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32}, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + V, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qp48(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40, + Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48}, + Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + V, + Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qp64(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56, + Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64}, + Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + V, + Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qp80(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72, + Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80}, + Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + V, + Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qp96(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88, + Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96}, + Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + V, + Qp112, Qp128}). +-define(IN_LOWER_Qp112(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104, + Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112}, + Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + V, + Qp128}). +-define(IN_LOWER_Qp128(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + V}). + +?IN_LOWER_Qn128(-128, + {queue:in(X, Qn128), Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-127, + {Qn128, queue:in(X, Qn127), Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-126, + {Qn128, Qn127, queue:in(X, Qn126), Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-125, + {Qn128, Qn127, Qn126, queue:in(X, Qn125), Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-124, + {Qn128, Qn127, Qn126, Qn125, queue:in(X, Qn124), + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-123, + {Qn128, Qn127, Qn126, Qn125, Qn124, + queue:in(X, Qn123), Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-122, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, queue:in(X, Qn122), Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-121, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, queue:in(X, Qn121), Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-120, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, queue:in(X, Qn120), Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-119, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, queue:in(X, Qn119), Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-118, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, queue:in(X, Qn118), + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-117, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + queue:in(X, Qn117), Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-116, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, queue:in(X, Qn116), Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-115, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, queue:in(X, Qn115), Qn114, Qn113}); +?IN_LOWER_Qn128(-114, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, queue:in(X, Qn114), Qn113}); +?IN_LOWER_Qn128(-113, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, queue:in(X, Qn113)}); +?IN_LOWER_Qn112(-112, + {queue:in(X, Qn112), Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-111, + {Qn112, queue:in(X, Qn111), Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-110, + {Qn112, Qn111, queue:in(X, Qn110), Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-109, + {Qn112, Qn111, Qn110, queue:in(X, Qn109), Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-108, + {Qn112, Qn111, Qn110, Qn109, queue:in(X, Qn108), + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-107, + {Qn112, Qn111, Qn110, Qn109, Qn108, + queue:in(X, Qn107), Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-106, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, queue:in(X, Qn106), Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-105, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, queue:in(X, Qn105), Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-104, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, queue:in(X, Qn104), Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-103, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, queue:in(X, Qn103), Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-102, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, queue:in(X, Qn102), + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-101, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + queue:in(X, Qn101), Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-100, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, queue:in(X, Qn100), Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-99, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, queue:in(X, Qn99), Qn98, Qn97}); +?IN_LOWER_Qn112(-98, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, queue:in(X, Qn98), Qn97}); +?IN_LOWER_Qn112(-97, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, queue:in(X, Qn97)}); +?IN_LOWER_Qn96(-96, + {queue:in(X, Qn96), Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-95, + {Qn96, queue:in(X, Qn95), Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-94, + {Qn96, Qn95, queue:in(X, Qn94), Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-93, + {Qn96, Qn95, Qn94, queue:in(X, Qn93), Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-92, + {Qn96, Qn95, Qn94, Qn93, queue:in(X, Qn92), + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-91, + {Qn96, Qn95, Qn94, Qn93, Qn92, + queue:in(X, Qn91), Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-90, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, queue:in(X, Qn90), Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-89, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, queue:in(X, Qn89), Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-88, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, queue:in(X, Qn88), Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-87, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, queue:in(X, Qn87), Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-86, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, queue:in(X, Qn86), + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-85, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + queue:in(X, Qn85), Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-84, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, queue:in(X, Qn84), Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-83, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, queue:in(X, Qn83), Qn82, Qn81}); +?IN_LOWER_Qn96(-82, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, queue:in(X, Qn82), Qn81}); +?IN_LOWER_Qn96(-81, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, queue:in(X, Qn81)}); +?IN_LOWER_Qn80(-80, + {queue:in(X, Qn80), Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-79, + {Qn80, queue:in(X, Qn79), Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-78, + {Qn80, Qn79, queue:in(X, Qn78), Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-77, + {Qn80, Qn79, Qn78, queue:in(X, Qn77), Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-76, + {Qn80, Qn79, Qn78, Qn77, queue:in(X, Qn76), + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-75, + {Qn80, Qn79, Qn78, Qn77, Qn76, + queue:in(X, Qn75), Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-74, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, queue:in(X, Qn74), Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-73, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, queue:in(X, Qn73), Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-72, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, queue:in(X, Qn72), Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-71, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, queue:in(X, Qn71), Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-70, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, queue:in(X, Qn70), + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-69, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + queue:in(X, Qn69), Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-68, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, queue:in(X, Qn68), Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-67, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, queue:in(X, Qn67), Qn66, Qn65}); +?IN_LOWER_Qn80(-66, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, queue:in(X, Qn66), Qn65}); +?IN_LOWER_Qn80(-65, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, queue:in(X, Qn65)}); +?IN_LOWER_Qn64(-64, + {queue:in(X, Qn64), Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-63, + {Qn64, queue:in(X, Qn63), Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-62, + {Qn64, Qn63, queue:in(X, Qn62), Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-61, + {Qn64, Qn63, Qn62, queue:in(X, Qn61), Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-60, + {Qn64, Qn63, Qn62, Qn61, queue:in(X, Qn60), + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-59, + {Qn64, Qn63, Qn62, Qn61, Qn60, + queue:in(X, Qn59), Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-58, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, queue:in(X, Qn58), Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-57, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, queue:in(X, Qn57), Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-56, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, queue:in(X, Qn56), Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-55, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, queue:in(X, Qn55), Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-54, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, queue:in(X, Qn54), + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-53, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + queue:in(X, Qn53), Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-52, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, queue:in(X, Qn52), Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-51, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, queue:in(X, Qn51), Qn50, Qn49}); +?IN_LOWER_Qn64(-50, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, queue:in(X, Qn50), Qn49}); +?IN_LOWER_Qn64(-49, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, queue:in(X, Qn49)}); +?IN_LOWER_Qn48(-48, + {queue:in(X, Qn48), Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-47, + {Qn48, queue:in(X, Qn47), Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-46, + {Qn48, Qn47, queue:in(X, Qn46), Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-45, + {Qn48, Qn47, Qn46, queue:in(X, Qn45), Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-44, + {Qn48, Qn47, Qn46, Qn45, queue:in(X, Qn44), + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-43, + {Qn48, Qn47, Qn46, Qn45, Qn44, + queue:in(X, Qn43), Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-42, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, queue:in(X, Qn42), Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-41, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, queue:in(X, Qn41), Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-40, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, queue:in(X, Qn40), Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-39, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, queue:in(X, Qn39), Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-38, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, queue:in(X, Qn38), + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-37, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + queue:in(X, Qn37), Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-36, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, queue:in(X, Qn36), Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-35, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, queue:in(X, Qn35), Qn34, Qn33}); +?IN_LOWER_Qn48(-34, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, queue:in(X, Qn34), Qn33}); +?IN_LOWER_Qn48(-33, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, queue:in(X, Qn33)}); +?IN_LOWER_Qn32(-32, + {queue:in(X, Qn32), Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-31, + {Qn32, queue:in(X, Qn31), Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-30, + {Qn32, Qn31, queue:in(X, Qn30), Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-29, + {Qn32, Qn31, Qn30, queue:in(X, Qn29), Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-28, + {Qn32, Qn31, Qn30, Qn29, queue:in(X, Qn28), + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-27, + {Qn32, Qn31, Qn30, Qn29, Qn28, + queue:in(X, Qn27), Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-26, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, queue:in(X, Qn26), Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-25, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, queue:in(X, Qn25), Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-24, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, queue:in(X, Qn24), Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-23, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, queue:in(X, Qn23), Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-22, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, queue:in(X, Qn22), + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-21, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + queue:in(X, Qn21), Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-20, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, queue:in(X, Qn20), Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-19, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, queue:in(X, Qn19), Qn18, Qn17}); +?IN_LOWER_Qn32(-18, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, queue:in(X, Qn18), Qn17}); +?IN_LOWER_Qn32(-17, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, queue:in(X, Qn17)}); +?IN_LOWER_Qn16(-16, + {queue:in(X, Qn16), Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-15, + {Qn16, queue:in(X, Qn15), Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-14, + {Qn16, Qn15, queue:in(X, Qn14), Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-13, + {Qn16, Qn15, Qn14, queue:in(X, Qn13), Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-12, + {Qn16, Qn15, Qn14, Qn13, queue:in(X, Qn12), + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-11, + {Qn16, Qn15, Qn14, Qn13, Qn12, + queue:in(X, Qn11), Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-10, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, queue:in(X, Qn10), Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-9, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, queue:in(X, Qn9), Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-8, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, queue:in(X, Qn8), Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-7, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, queue:in(X, Qn7), Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-6, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, queue:in(X, Qn6), + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-5, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + queue:in(X, Qn5), Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-4, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, queue:in(X, Qn4), Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-3, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, queue:in(X, Qn3), Qn2, Qn1}); +?IN_LOWER_Qn16(-2, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, queue:in(X, Qn2), Qn1}); +?IN_LOWER_Qn16(-1, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, queue:in(X, Qn1)}); +in_lower(0, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + queue:in(X, Q0), + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}; +?IN_LOWER_Qp16(1, + {queue:in(X, Qp1), Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(2, + {Qp1, queue:in(X, Qp2), Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(3, + {Qp1, Qp2, queue:in(X, Qp3), Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(4, + {Qp1, Qp2, Qp3, queue:in(X, Qp4), Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(5, + {Qp1, Qp2, Qp3, Qp4, queue:in(X, Qp5), + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(6, + {Qp1, Qp2, Qp3, Qp4, Qp5, + queue:in(X, Qp6), Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(7, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, queue:in(X, Qp7), Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(8, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, queue:in(X, Qp8), Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(9, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, queue:in(X, Qp9), Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(10, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, queue:in(X, Qp10), Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(11, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, queue:in(X, Qp11), + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(12, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + queue:in(X, Qp12), Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(13, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, queue:in(X, Qp13), Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(14, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, queue:in(X, Qp14), Qp15, Qp16}); +?IN_LOWER_Qp16(15, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, queue:in(X, Qp15), Qp16}); +?IN_LOWER_Qp16(16, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, queue:in(X, Qp16)}); +?IN_LOWER_Qp32(17, + {queue:in(X, Qp17), Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(18, + {Qp17, queue:in(X, Qp18), Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(19, + {Qp17, Qp18, queue:in(X, Qp19), Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(20, + {Qp17, Qp18, Qp19, queue:in(X, Qp20), Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(21, + {Qp17, Qp18, Qp19, Qp20, queue:in(X, Qp21), + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(22, + {Qp17, Qp18, Qp19, Qp20, Qp21, + queue:in(X, Qp22), Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(23, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, queue:in(X, Qp23), Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(24, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, queue:in(X, Qp24), Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(25, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, queue:in(X, Qp25), Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(26, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, queue:in(X, Qp26), Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(27, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, queue:in(X, Qp27), + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(28, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + queue:in(X, Qp28), Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(29, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, queue:in(X, Qp29), Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(30, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, queue:in(X, Qp30), Qp31, Qp32}); +?IN_LOWER_Qp32(31, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, queue:in(X, Qp31), Qp32}); +?IN_LOWER_Qp32(32, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, queue:in(X, Qp32)}); +?IN_LOWER_Qp48(33, + {queue:in(X, Qp33), Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(34, + {Qp33, queue:in(X, Qp34), Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(35, + {Qp33, Qp34, queue:in(X, Qp35), Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(36, + {Qp33, Qp34, Qp35, queue:in(X, Qp36), Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(37, + {Qp33, Qp34, Qp35, Qp36, queue:in(X, Qp37), + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(38, + {Qp33, Qp34, Qp35, Qp36, Qp37, + queue:in(X, Qp38), Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(39, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, queue:in(X, Qp39), Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(40, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, queue:in(X, Qp40), Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(41, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, queue:in(X, Qp41), Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(42, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, queue:in(X, Qp42), Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(43, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, queue:in(X, Qp43), + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(44, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + queue:in(X, Qp44), Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(45, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, queue:in(X, Qp45), Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(46, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, queue:in(X, Qp46), Qp47, Qp48}); +?IN_LOWER_Qp48(47, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, queue:in(X, Qp47), Qp48}); +?IN_LOWER_Qp48(48, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, queue:in(X, Qp48)}); +?IN_LOWER_Qp64(49, + {queue:in(X, Qp49), Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(50, + {Qp49, queue:in(X, Qp50), Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(51, + {Qp49, Qp50, queue:in(X, Qp51), Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(52, + {Qp49, Qp50, Qp51, queue:in(X, Qp52), Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(53, + {Qp49, Qp50, Qp51, Qp52, queue:in(X, Qp53), + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(54, + {Qp49, Qp50, Qp51, Qp52, Qp53, + queue:in(X, Qp54), Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(55, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, queue:in(X, Qp55), Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(56, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, queue:in(X, Qp56), Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(57, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, queue:in(X, Qp57), Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(58, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, queue:in(X, Qp58), Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(59, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, queue:in(X, Qp59), + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(60, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + queue:in(X, Qp60), Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(61, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, queue:in(X, Qp61), Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(62, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, queue:in(X, Qp62), Qp63, Qp64}); +?IN_LOWER_Qp64(63, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, queue:in(X, Qp63), Qp64}); +?IN_LOWER_Qp64(64, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, queue:in(X, Qp64)}); +?IN_LOWER_Qp80(65, + {queue:in(X, Qp65), Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(66, + {Qp65, queue:in(X, Qp66), Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(67, + {Qp65, Qp66, queue:in(X, Qp67), Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(68, + {Qp65, Qp66, Qp67, queue:in(X, Qp68), Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(69, + {Qp65, Qp66, Qp67, Qp68, queue:in(X, Qp69), + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(70, + {Qp65, Qp66, Qp67, Qp68, Qp69, + queue:in(X, Qp70), Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(71, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, queue:in(X, Qp71), Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(72, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, queue:in(X, Qp72), Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(73, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, queue:in(X, Qp73), Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(74, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, queue:in(X, Qp74), Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(75, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, queue:in(X, Qp75), + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(76, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + queue:in(X, Qp76), Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(77, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, queue:in(X, Qp77), Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(78, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, queue:in(X, Qp78), Qp79, Qp80}); +?IN_LOWER_Qp80(79, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, queue:in(X, Qp79), Qp80}); +?IN_LOWER_Qp80(80, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, queue:in(X, Qp80)}); +?IN_LOWER_Qp96(81, + {queue:in(X, Qp81), Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(82, + {Qp81, queue:in(X, Qp82), Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(83, + {Qp81, Qp82, queue:in(X, Qp83), Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(84, + {Qp81, Qp82, Qp83, queue:in(X, Qp84), Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(85, + {Qp81, Qp82, Qp83, Qp84, queue:in(X, Qp85), + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(86, + {Qp81, Qp82, Qp83, Qp84, Qp85, + queue:in(X, Qp86), Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(87, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, queue:in(X, Qp87), Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(88, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, queue:in(X, Qp88), Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(89, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, queue:in(X, Qp89), Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(90, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, queue:in(X, Qp90), Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(91, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, queue:in(X, Qp91), + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(92, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + queue:in(X, Qp92), Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(93, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, queue:in(X, Qp93), Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(94, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, queue:in(X, Qp94), Qp95, Qp96}); +?IN_LOWER_Qp96(95, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, queue:in(X, Qp95), Qp96}); +?IN_LOWER_Qp96(96, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, queue:in(X, Qp96)}); +?IN_LOWER_Qp112(97, + {queue:in(X, Qp97), Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(98, + {Qp97, queue:in(X, Qp98), Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(99, + {Qp97, Qp98, queue:in(X, Qp99), Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(100, + {Qp97, Qp98, Qp99, queue:in(X, Qp100), Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(101, + {Qp97, Qp98, Qp99, Qp100, queue:in(X, Qp101), + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(102, + {Qp97, Qp98, Qp99, Qp100, Qp101, + queue:in(X, Qp102), Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(103, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, queue:in(X, Qp103), Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(104, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, queue:in(X, Qp104), Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(105, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, queue:in(X, Qp105), Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(106, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, queue:in(X, Qp106), Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(107, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, queue:in(X, Qp107), + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(108, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + queue:in(X, Qp108), Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(109, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, queue:in(X, Qp109), Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(110, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, queue:in(X, Qp110), Qp111, Qp112}); +?IN_LOWER_Qp112(111, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, queue:in(X, Qp111), Qp112}); +?IN_LOWER_Qp112(112, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, queue:in(X, Qp112)}); +?IN_LOWER_Qp128(113, + {queue:in(X, Qp113), Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(114, + {Qp113, queue:in(X, Qp114), Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(115, + {Qp113, Qp114, queue:in(X, Qp115), Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(116, + {Qp113, Qp114, Qp115, queue:in(X, Qp116), Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(117, + {Qp113, Qp114, Qp115, Qp116, queue:in(X, Qp117), + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(118, + {Qp113, Qp114, Qp115, Qp116, Qp117, + queue:in(X, Qp118), Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(119, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, queue:in(X, Qp119), Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(120, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, queue:in(X, Qp120), Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(121, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, queue:in(X, Qp121), Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(122, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, queue:in(X, Qp122), Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(123, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, queue:in(X, Qp123), + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(124, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + queue:in(X, Qp124), Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(125, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, queue:in(X, Qp125), Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(126, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, queue:in(X, Qp126), Qp127, Qp128}); +?IN_LOWER_Qp128(127, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, queue:in(X, Qp127), Qp128}); +?IN_LOWER_Qp128(128, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, queue:in(X, Qp128)}). + +%% @hidden +-define(OUT_CURRENT_Qn128(P, V1, V2, V3), +out_current(P, + {_, + Size, + {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121, + Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113}, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + V3, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qn112(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, + {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105, + Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97}, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, + V3, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qn96(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, + {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89, + Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81}, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, + V3, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qn80(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, + {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73, + Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65}, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, + V3, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qn64(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, + {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57, + Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49}, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, + V3, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qn48(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, + {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41, + Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33}, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, + V3, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qn32(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25, + Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17}, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + V3, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qn16(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9, + Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + V3, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qp16(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8, + Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16}, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + V3, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qp32(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24, + Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32}, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + V3, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qp48(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40, + Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48}, + Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + V3, + Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qp64(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56, + Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64}, + Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + V3, + Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qp80(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72, + Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80}, + Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + V3, + Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qp96(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88, + Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96}, + Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + V3, + Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qp112(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104, + Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112}, + Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + V3, + Qp128}} + end). +-define(OUT_CURRENT_Qp128(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + V3}} + end). + +?OUT_CURRENT_Qn128(-128, + Qn128, NewQn128, + {NewQn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-127, + Qn127, NewQn127, + {Qn128, NewQn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-126, + Qn126, NewQn126, + {Qn128, Qn127, NewQn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-125, + Qn125, NewQn125, + {Qn128, Qn127, Qn126, NewQn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-124, + Qn124, NewQn124, + {Qn128, Qn127, Qn126, Qn125, NewQn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-123, + Qn123, NewQn123, + {Qn128, Qn127, Qn126, Qn125, Qn124, + NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-122, + Qn122, NewQn122, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-121, + Qn121, NewQn121, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-120, + Qn120, NewQn120, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-119, + Qn119, NewQn119, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-118, + Qn118, NewQn118, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-117, + Qn117, NewQn117, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + NewQn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-116, + Qn116, NewQn116, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, NewQn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-115, + Qn115, NewQn115, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, NewQn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-114, + Qn114, NewQn114, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, NewQn114, Qn113}); +?OUT_CURRENT_Qn128(-113, + Qn113, NewQn113, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, NewQn113}); +?OUT_CURRENT_Qn112(-112, + Qn112, NewQn112, + {NewQn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-111, + Qn111, NewQn111, + {Qn112, NewQn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-110, + Qn110, NewQn110, + {Qn112, Qn111, NewQn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-109, + Qn109, NewQn109, + {Qn112, Qn111, Qn110, NewQn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-108, + Qn108, NewQn108, + {Qn112, Qn111, Qn110, Qn109, NewQn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-107, + Qn107, NewQn107, + {Qn112, Qn111, Qn110, Qn109, Qn108, + NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-106, + Qn106, NewQn106, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-105, + Qn105, NewQn105, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-104, + Qn104, NewQn104, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-103, + Qn103, NewQn103, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-102, + Qn102, NewQn102, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-101, + Qn101, NewQn101, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + NewQn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-100, + Qn100, NewQn100, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, NewQn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-99, + Qn99, NewQn99, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, NewQn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-98, + Qn98, NewQn98, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, NewQn98, Qn97}); +?OUT_CURRENT_Qn112(-97, + Qn97, NewQn97, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, NewQn97}); +?OUT_CURRENT_Qn96(-96, + Qn96, NewQn96, + {NewQn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-95, + Qn95, NewQn95, + {Qn96, NewQn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-94, + Qn94, NewQn94, + {Qn96, Qn95, NewQn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-93, + Qn93, NewQn93, + {Qn96, Qn95, Qn94, NewQn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-92, + Qn92, NewQn92, + {Qn96, Qn95, Qn94, Qn93, NewQn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-91, + Qn91, NewQn91, + {Qn96, Qn95, Qn94, Qn93, Qn92, + NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-90, + Qn90, NewQn90, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-89, + Qn89, NewQn89, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-88, + Qn88, NewQn88, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-87, + Qn87, NewQn87, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-86, + Qn86, NewQn86, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-85, + Qn85, NewQn85, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + NewQn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-84, + Qn84, NewQn84, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, NewQn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-83, + Qn83, NewQn83, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, NewQn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-82, + Qn82, NewQn82, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, NewQn82, Qn81}); +?OUT_CURRENT_Qn96(-81, + Qn81, NewQn81, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, NewQn81}); +?OUT_CURRENT_Qn80(-80, + Qn80, NewQn80, + {NewQn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-79, + Qn79, NewQn79, + {Qn80, NewQn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-78, + Qn78, NewQn78, + {Qn80, Qn79, NewQn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-77, + Qn77, NewQn77, + {Qn80, Qn79, Qn78, NewQn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-76, + Qn76, NewQn76, + {Qn80, Qn79, Qn78, Qn77, NewQn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-75, + Qn75, NewQn75, + {Qn80, Qn79, Qn78, Qn77, Qn76, + NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-74, + Qn74, NewQn74, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-73, + Qn73, NewQn73, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-72, + Qn72, NewQn72, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-71, + Qn71, NewQn71, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-70, + Qn70, NewQn70, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-69, + Qn69, NewQn69, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + NewQn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-68, + Qn68, NewQn68, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, NewQn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-67, + Qn67, NewQn67, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, NewQn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-66, + Qn66, NewQn66, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, NewQn66, Qn65}); +?OUT_CURRENT_Qn80(-65, + Qn65, NewQn65, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, NewQn65}); +?OUT_CURRENT_Qn64(-64, + Qn64, NewQn64, + {NewQn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-63, + Qn63, NewQn63, + {Qn64, NewQn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-62, + Qn62, NewQn62, + {Qn64, Qn63, NewQn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-61, + Qn61, NewQn61, + {Qn64, Qn63, Qn62, NewQn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-60, + Qn60, NewQn60, + {Qn64, Qn63, Qn62, Qn61, NewQn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-59, + Qn59, NewQn59, + {Qn64, Qn63, Qn62, Qn61, Qn60, + NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-58, + Qn58, NewQn58, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-57, + Qn57, NewQn57, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-56, + Qn56, NewQn56, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-55, + Qn55, NewQn55, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-54, + Qn54, NewQn54, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-53, + Qn53, NewQn53, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + NewQn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-52, + Qn52, NewQn52, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, NewQn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-51, + Qn51, NewQn51, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, NewQn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-50, + Qn50, NewQn50, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, NewQn50, Qn49}); +?OUT_CURRENT_Qn64(-49, + Qn49, NewQn49, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, NewQn49}); +?OUT_CURRENT_Qn48(-48, + Qn48, NewQn48, + {NewQn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-47, + Qn47, NewQn47, + {Qn48, NewQn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-46, + Qn46, NewQn46, + {Qn48, Qn47, NewQn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-45, + Qn45, NewQn45, + {Qn48, Qn47, Qn46, NewQn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-44, + Qn44, NewQn44, + {Qn48, Qn47, Qn46, Qn45, NewQn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-43, + Qn43, NewQn43, + {Qn48, Qn47, Qn46, Qn45, Qn44, + NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-42, + Qn42, NewQn42, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-41, + Qn41, NewQn41, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-40, + Qn40, NewQn40, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-39, + Qn39, NewQn39, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-38, + Qn38, NewQn38, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-37, + Qn37, NewQn37, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + NewQn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-36, + Qn36, NewQn36, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, NewQn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-35, + Qn35, NewQn35, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, NewQn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-34, + Qn34, NewQn34, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, NewQn34, Qn33}); +?OUT_CURRENT_Qn48(-33, + Qn33, NewQn33, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, NewQn33}); +?OUT_CURRENT_Qn32(-32, + Qn32, NewQn32, + {NewQn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-31, + Qn31, NewQn31, + {Qn32, NewQn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-30, + Qn30, NewQn30, + {Qn32, Qn31, NewQn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-29, + Qn29, NewQn29, + {Qn32, Qn31, Qn30, NewQn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-28, + Qn28, NewQn28, + {Qn32, Qn31, Qn30, Qn29, NewQn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-27, + Qn27, NewQn27, + {Qn32, Qn31, Qn30, Qn29, Qn28, + NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-26, + Qn26, NewQn26, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-25, + Qn25, NewQn25, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-24, + Qn24, NewQn24, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-23, + Qn23, NewQn23, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-22, + Qn22, NewQn22, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-21, + Qn21, NewQn21, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + NewQn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-20, + Qn20, NewQn20, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, NewQn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-19, + Qn19, NewQn19, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, NewQn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-18, + Qn18, NewQn18, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, NewQn18, Qn17}); +?OUT_CURRENT_Qn32(-17, + Qn17, NewQn17, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, NewQn17}); +?OUT_CURRENT_Qn16(-16, + Qn16, NewQn16, + {NewQn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-15, + Qn15, NewQn15, + {Qn16, NewQn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-14, + Qn14, NewQn14, + {Qn16, Qn15, NewQn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-13, + Qn13, NewQn13, + {Qn16, Qn15, Qn14, NewQn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-12, + Qn12, NewQn12, + {Qn16, Qn15, Qn14, Qn13, NewQn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-11, + Qn11, NewQn11, + {Qn16, Qn15, Qn14, Qn13, Qn12, + NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-10, + Qn10, NewQn10, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-9, + Qn9, NewQn9, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-8, + Qn8, NewQn8, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-7, + Qn7, NewQn7, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-6, + Qn6, NewQn6, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-5, + Qn5, NewQn5, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + NewQn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-4, + Qn4, NewQn4, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, NewQn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-3, + Qn3, NewQn3, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, NewQn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-2, + Qn2, NewQn2, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, NewQn2, Qn1}); +?OUT_CURRENT_Qn16(-1, + Qn1, NewQn1, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, NewQn1}); +out_current(0, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, NewQ0} = queue:out(Q0), + if + Value =:= empty -> + out_current(1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> 0 end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + NewQ0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end; +?OUT_CURRENT_Qp16(1, + Qp1, NewQp1, + {NewQp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(2, + Qp2, NewQp2, + {Qp1, NewQp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(3, + Qp3, NewQp3, + {Qp1, Qp2, NewQp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(4, + Qp4, NewQp4, + {Qp1, Qp2, Qp3, NewQp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(5, + Qp5, NewQp5, + {Qp1, Qp2, Qp3, Qp4, NewQp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(6, + Qp6, NewQp6, + {Qp1, Qp2, Qp3, Qp4, Qp5, + NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(7, + Qp7, NewQp7, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(8, + Qp8, NewQp8, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(9, + Qp9, NewQp9, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(10, + Qp10, NewQp10, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(11, + Qp11, NewQp11, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(12, + Qp12, NewQp12, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + NewQp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(13, + Qp13, NewQp13, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, NewQp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(14, + Qp14, NewQp14, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, NewQp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(15, + Qp15, NewQp15, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, NewQp15, Qp16}); +?OUT_CURRENT_Qp16(16, + Qp16, NewQp16, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, NewQp16}); +?OUT_CURRENT_Qp32(17, + Qp17, NewQp17, + {NewQp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(18, + Qp18, NewQp18, + {Qp17, NewQp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(19, + Qp19, NewQp19, + {Qp17, Qp18, NewQp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(20, + Qp20, NewQp20, + {Qp17, Qp18, Qp19, NewQp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(21, + Qp21, NewQp21, + {Qp17, Qp18, Qp19, Qp20, NewQp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(22, + Qp22, NewQp22, + {Qp17, Qp18, Qp19, Qp20, Qp21, + NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(23, + Qp23, NewQp23, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(24, + Qp24, NewQp24, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(25, + Qp25, NewQp25, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(26, + Qp26, NewQp26, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(27, + Qp27, NewQp27, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(28, + Qp28, NewQp28, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + NewQp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(29, + Qp29, NewQp29, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, NewQp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(30, + Qp30, NewQp30, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, NewQp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(31, + Qp31, NewQp31, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, NewQp31, Qp32}); +?OUT_CURRENT_Qp32(32, + Qp32, NewQp32, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, NewQp32}); +?OUT_CURRENT_Qp48(33, + Qp33, NewQp33, + {NewQp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(34, + Qp34, NewQp34, + {Qp33, NewQp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(35, + Qp35, NewQp35, + {Qp33, Qp34, NewQp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(36, + Qp36, NewQp36, + {Qp33, Qp34, Qp35, NewQp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(37, + Qp37, NewQp37, + {Qp33, Qp34, Qp35, Qp36, NewQp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(38, + Qp38, NewQp38, + {Qp33, Qp34, Qp35, Qp36, Qp37, + NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(39, + Qp39, NewQp39, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(40, + Qp40, NewQp40, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(41, + Qp41, NewQp41, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(42, + Qp42, NewQp42, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(43, + Qp43, NewQp43, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(44, + Qp44, NewQp44, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + NewQp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(45, + Qp45, NewQp45, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, NewQp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(46, + Qp46, NewQp46, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, NewQp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(47, + Qp47, NewQp47, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, NewQp47, Qp48}); +?OUT_CURRENT_Qp48(48, + Qp48, NewQp48, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, NewQp48}); +?OUT_CURRENT_Qp64(49, + Qp49, NewQp49, + {NewQp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(50, + Qp50, NewQp50, + {Qp49, NewQp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(51, + Qp51, NewQp51, + {Qp49, Qp50, NewQp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(52, + Qp52, NewQp52, + {Qp49, Qp50, Qp51, NewQp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(53, + Qp53, NewQp53, + {Qp49, Qp50, Qp51, Qp52, NewQp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(54, + Qp54, NewQp54, + {Qp49, Qp50, Qp51, Qp52, Qp53, + NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(55, + Qp55, NewQp55, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(56, + Qp56, NewQp56, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(57, + Qp57, NewQp57, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(58, + Qp58, NewQp58, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(59, + Qp59, NewQp59, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(60, + Qp60, NewQp60, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + NewQp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(61, + Qp61, NewQp61, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, NewQp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(62, + Qp62, NewQp62, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, NewQp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(63, + Qp63, NewQp63, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, NewQp63, Qp64}); +?OUT_CURRENT_Qp64(64, + Qp64, NewQp64, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, NewQp64}); +?OUT_CURRENT_Qp80(65, + Qp65, NewQp65, + {NewQp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(66, + Qp66, NewQp66, + {Qp65, NewQp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(67, + Qp67, NewQp67, + {Qp65, Qp66, NewQp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(68, + Qp68, NewQp68, + {Qp65, Qp66, Qp67, NewQp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(69, + Qp69, NewQp69, + {Qp65, Qp66, Qp67, Qp68, NewQp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(70, + Qp70, NewQp70, + {Qp65, Qp66, Qp67, Qp68, Qp69, + NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(71, + Qp71, NewQp71, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(72, + Qp72, NewQp72, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(73, + Qp73, NewQp73, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(74, + Qp74, NewQp74, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(75, + Qp75, NewQp75, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(76, + Qp76, NewQp76, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + NewQp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(77, + Qp77, NewQp77, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, NewQp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(78, + Qp78, NewQp78, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, NewQp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(79, + Qp79, NewQp79, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, NewQp79, Qp80}); +?OUT_CURRENT_Qp80(80, + Qp80, NewQp80, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, NewQp80}); +?OUT_CURRENT_Qp96(81, + Qp81, NewQp81, + {NewQp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(82, + Qp82, NewQp82, + {Qp81, NewQp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(83, + Qp83, NewQp83, + {Qp81, Qp82, NewQp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(84, + Qp84, NewQp84, + {Qp81, Qp82, Qp83, NewQp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(85, + Qp85, NewQp85, + {Qp81, Qp82, Qp83, Qp84, NewQp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(86, + Qp86, NewQp86, + {Qp81, Qp82, Qp83, Qp84, Qp85, + NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(87, + Qp87, NewQp87, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(88, + Qp88, NewQp88, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(89, + Qp89, NewQp89, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(90, + Qp90, NewQp90, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(91, + Qp91, NewQp91, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(92, + Qp92, NewQp92, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + NewQp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(93, + Qp93, NewQp93, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, NewQp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(94, + Qp94, NewQp94, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, NewQp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(95, + Qp95, NewQp95, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, NewQp95, Qp96}); +?OUT_CURRENT_Qp96(96, + Qp96, NewQp96, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, NewQp96}); +?OUT_CURRENT_Qp112(97, + Qp97, NewQp97, + {NewQp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(98, + Qp98, NewQp98, + {Qp97, NewQp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(99, + Qp99, NewQp99, + {Qp97, Qp98, NewQp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(100, + Qp100, NewQp100, + {Qp97, Qp98, Qp99, NewQp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(101, + Qp101, NewQp101, + {Qp97, Qp98, Qp99, Qp100, NewQp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(102, + Qp102, NewQp102, + {Qp97, Qp98, Qp99, Qp100, Qp101, + NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(103, + Qp103, NewQp103, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(104, + Qp104, NewQp104, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(105, + Qp105, NewQp105, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(106, + Qp106, NewQp106, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(107, + Qp107, NewQp107, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(108, + Qp108, NewQp108, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + NewQp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(109, + Qp109, NewQp109, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, NewQp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(110, + Qp110, NewQp110, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, NewQp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(111, + Qp111, NewQp111, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, NewQp111, Qp112}); +?OUT_CURRENT_Qp112(112, + Qp112, NewQp112, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, NewQp112}); +?OUT_CURRENT_Qp128(113, + Qp113, NewQp113, + {NewQp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(114, + Qp114, NewQp114, + {Qp113, NewQp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(115, + Qp115, NewQp115, + {Qp113, Qp114, NewQp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(116, + Qp116, NewQp116, + {Qp113, Qp114, Qp115, NewQp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(117, + Qp117, NewQp117, + {Qp113, Qp114, Qp115, Qp116, NewQp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(118, + Qp118, NewQp118, + {Qp113, Qp114, Qp115, Qp116, Qp117, + NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(119, + Qp119, NewQp119, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(120, + Qp120, NewQp120, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(121, + Qp121, NewQp121, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(122, + Qp122, NewQp122, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(123, + Qp123, NewQp123, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(124, + Qp124, NewQp124, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + NewQp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(125, + Qp125, NewQp125, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, NewQp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(126, + Qp126, NewQp126, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, NewQp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(127, + Qp127, NewQp127, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, NewQp127, Qp128}); +out_current(128, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) -> + {Value, NewQp128} = queue:out(Qp128), + if + Value =:= empty -> + {empty, + {empty, + 0, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, NewQp128}}}; + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> 128 end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, NewQp128}}} + end. + +%% @hidden +-define(OUT_CURRENT_P_Qn128(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121, + Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113}, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + V3, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qn112(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, + {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105, + Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97}, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, + V3, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qn96(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, + {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89, + Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81}, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, + V3, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qn80(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, + {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73, + Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65}, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, + V3, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qn64(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, + {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57, + Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49}, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, + V3, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qn48(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, + {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41, + Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33}, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, + V3, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qn32(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25, + Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17}, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + V3, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qn16(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9, + Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + V3, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qp16(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8, + Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16}, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + V3, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qp32(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24, + Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32}, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + V3, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qp48(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40, + Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48}, + Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + V3, + Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qp64(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56, + Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64}, + Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + V3, + Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qp80(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72, + Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80}, + Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + V3, + Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qp96(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88, + Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96}, + Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + V3, + Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qp112(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104, + Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112}, + Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + V3, + Qp128}} + end). +-define(OUT_CURRENT_P_Qp128(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + V3}} + end). + +?OUT_CURRENT_P_Qn128(-128, + Qn128, NewQn128, + {NewQn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-127, + Qn127, NewQn127, + {Qn128, NewQn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-126, + Qn126, NewQn126, + {Qn128, Qn127, NewQn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-125, + Qn125, NewQn125, + {Qn128, Qn127, Qn126, NewQn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-124, + Qn124, NewQn124, + {Qn128, Qn127, Qn126, Qn125, NewQn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-123, + Qn123, NewQn123, + {Qn128, Qn127, Qn126, Qn125, Qn124, + NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-122, + Qn122, NewQn122, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-121, + Qn121, NewQn121, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-120, + Qn120, NewQn120, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-119, + Qn119, NewQn119, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-118, + Qn118, NewQn118, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-117, + Qn117, NewQn117, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + NewQn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-116, + Qn116, NewQn116, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, NewQn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-115, + Qn115, NewQn115, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, NewQn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-114, + Qn114, NewQn114, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, NewQn114, Qn113}); +?OUT_CURRENT_P_Qn128(-113, + Qn113, NewQn113, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, NewQn113}); +?OUT_CURRENT_P_Qn112(-112, + Qn112, NewQn112, + {NewQn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-111, + Qn111, NewQn111, + {Qn112, NewQn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-110, + Qn110, NewQn110, + {Qn112, Qn111, NewQn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-109, + Qn109, NewQn109, + {Qn112, Qn111, Qn110, NewQn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-108, + Qn108, NewQn108, + {Qn112, Qn111, Qn110, Qn109, NewQn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-107, + Qn107, NewQn107, + {Qn112, Qn111, Qn110, Qn109, Qn108, + NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-106, + Qn106, NewQn106, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-105, + Qn105, NewQn105, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-104, + Qn104, NewQn104, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-103, + Qn103, NewQn103, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-102, + Qn102, NewQn102, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-101, + Qn101, NewQn101, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + NewQn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-100, + Qn100, NewQn100, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, NewQn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-99, + Qn99, NewQn99, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, NewQn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-98, + Qn98, NewQn98, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, NewQn98, Qn97}); +?OUT_CURRENT_P_Qn112(-97, + Qn97, NewQn97, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, NewQn97}); +?OUT_CURRENT_P_Qn96(-96, + Qn96, NewQn96, + {NewQn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-95, + Qn95, NewQn95, + {Qn96, NewQn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-94, + Qn94, NewQn94, + {Qn96, Qn95, NewQn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-93, + Qn93, NewQn93, + {Qn96, Qn95, Qn94, NewQn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-92, + Qn92, NewQn92, + {Qn96, Qn95, Qn94, Qn93, NewQn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-91, + Qn91, NewQn91, + {Qn96, Qn95, Qn94, Qn93, Qn92, + NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-90, + Qn90, NewQn90, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-89, + Qn89, NewQn89, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-88, + Qn88, NewQn88, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-87, + Qn87, NewQn87, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-86, + Qn86, NewQn86, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-85, + Qn85, NewQn85, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + NewQn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-84, + Qn84, NewQn84, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, NewQn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-83, + Qn83, NewQn83, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, NewQn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-82, + Qn82, NewQn82, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, NewQn82, Qn81}); +?OUT_CURRENT_P_Qn96(-81, + Qn81, NewQn81, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, NewQn81}); +?OUT_CURRENT_P_Qn80(-80, + Qn80, NewQn80, + {NewQn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-79, + Qn79, NewQn79, + {Qn80, NewQn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-78, + Qn78, NewQn78, + {Qn80, Qn79, NewQn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-77, + Qn77, NewQn77, + {Qn80, Qn79, Qn78, NewQn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-76, + Qn76, NewQn76, + {Qn80, Qn79, Qn78, Qn77, NewQn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-75, + Qn75, NewQn75, + {Qn80, Qn79, Qn78, Qn77, Qn76, + NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-74, + Qn74, NewQn74, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-73, + Qn73, NewQn73, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-72, + Qn72, NewQn72, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-71, + Qn71, NewQn71, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-70, + Qn70, NewQn70, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-69, + Qn69, NewQn69, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + NewQn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-68, + Qn68, NewQn68, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, NewQn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-67, + Qn67, NewQn67, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, NewQn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-66, + Qn66, NewQn66, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, NewQn66, Qn65}); +?OUT_CURRENT_P_Qn80(-65, + Qn65, NewQn65, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, NewQn65}); +?OUT_CURRENT_P_Qn64(-64, + Qn64, NewQn64, + {NewQn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-63, + Qn63, NewQn63, + {Qn64, NewQn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-62, + Qn62, NewQn62, + {Qn64, Qn63, NewQn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-61, + Qn61, NewQn61, + {Qn64, Qn63, Qn62, NewQn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-60, + Qn60, NewQn60, + {Qn64, Qn63, Qn62, Qn61, NewQn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-59, + Qn59, NewQn59, + {Qn64, Qn63, Qn62, Qn61, Qn60, + NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-58, + Qn58, NewQn58, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-57, + Qn57, NewQn57, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-56, + Qn56, NewQn56, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-55, + Qn55, NewQn55, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-54, + Qn54, NewQn54, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-53, + Qn53, NewQn53, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + NewQn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-52, + Qn52, NewQn52, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, NewQn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-51, + Qn51, NewQn51, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, NewQn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-50, + Qn50, NewQn50, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, NewQn50, Qn49}); +?OUT_CURRENT_P_Qn64(-49, + Qn49, NewQn49, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, NewQn49}); +?OUT_CURRENT_P_Qn48(-48, + Qn48, NewQn48, + {NewQn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-47, + Qn47, NewQn47, + {Qn48, NewQn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-46, + Qn46, NewQn46, + {Qn48, Qn47, NewQn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-45, + Qn45, NewQn45, + {Qn48, Qn47, Qn46, NewQn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-44, + Qn44, NewQn44, + {Qn48, Qn47, Qn46, Qn45, NewQn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-43, + Qn43, NewQn43, + {Qn48, Qn47, Qn46, Qn45, Qn44, + NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-42, + Qn42, NewQn42, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-41, + Qn41, NewQn41, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-40, + Qn40, NewQn40, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-39, + Qn39, NewQn39, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-38, + Qn38, NewQn38, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-37, + Qn37, NewQn37, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + NewQn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-36, + Qn36, NewQn36, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, NewQn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-35, + Qn35, NewQn35, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, NewQn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-34, + Qn34, NewQn34, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, NewQn34, Qn33}); +?OUT_CURRENT_P_Qn48(-33, + Qn33, NewQn33, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, NewQn33}); +?OUT_CURRENT_P_Qn32(-32, + Qn32, NewQn32, + {NewQn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-31, + Qn31, NewQn31, + {Qn32, NewQn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-30, + Qn30, NewQn30, + {Qn32, Qn31, NewQn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-29, + Qn29, NewQn29, + {Qn32, Qn31, Qn30, NewQn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-28, + Qn28, NewQn28, + {Qn32, Qn31, Qn30, Qn29, NewQn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-27, + Qn27, NewQn27, + {Qn32, Qn31, Qn30, Qn29, Qn28, + NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-26, + Qn26, NewQn26, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-25, + Qn25, NewQn25, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-24, + Qn24, NewQn24, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-23, + Qn23, NewQn23, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-22, + Qn22, NewQn22, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-21, + Qn21, NewQn21, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + NewQn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-20, + Qn20, NewQn20, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, NewQn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-19, + Qn19, NewQn19, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, NewQn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-18, + Qn18, NewQn18, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, NewQn18, Qn17}); +?OUT_CURRENT_P_Qn32(-17, + Qn17, NewQn17, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, NewQn17}); +?OUT_CURRENT_P_Qn16(-16, + Qn16, NewQn16, + {NewQn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-15, + Qn15, NewQn15, + {Qn16, NewQn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-14, + Qn14, NewQn14, + {Qn16, Qn15, NewQn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-13, + Qn13, NewQn13, + {Qn16, Qn15, Qn14, NewQn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-12, + Qn12, NewQn12, + {Qn16, Qn15, Qn14, Qn13, NewQn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-11, + Qn11, NewQn11, + {Qn16, Qn15, Qn14, Qn13, Qn12, + NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-10, + Qn10, NewQn10, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-9, + Qn9, NewQn9, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-8, + Qn8, NewQn8, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-7, + Qn7, NewQn7, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-6, + Qn6, NewQn6, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-5, + Qn5, NewQn5, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + NewQn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-4, + Qn4, NewQn4, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, NewQn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-3, + Qn3, NewQn3, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, NewQn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-2, + Qn2, NewQn2, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, NewQn2, Qn1}); +?OUT_CURRENT_P_Qn16(-1, + Qn1, NewQn1, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, NewQn1}); +out_current_p(0, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(Q0) of + {empty, _} -> + out_current_p(1, Q); + {{value, X}, NewQ0} -> + NewSize = Size - 1, + {{value, X, 0}, + {if NewSize == 0 -> empty; true -> 0 end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + NewQ0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end; +?OUT_CURRENT_P_Qp16(1, + Qp1, NewQp1, + {NewQp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(2, + Qp2, NewQp2, + {Qp1, NewQp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(3, + Qp3, NewQp3, + {Qp1, Qp2, NewQp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(4, + Qp4, NewQp4, + {Qp1, Qp2, Qp3, NewQp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(5, + Qp5, NewQp5, + {Qp1, Qp2, Qp3, Qp4, NewQp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(6, + Qp6, NewQp6, + {Qp1, Qp2, Qp3, Qp4, Qp5, + NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(7, + Qp7, NewQp7, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(8, + Qp8, NewQp8, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(9, + Qp9, NewQp9, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(10, + Qp10, NewQp10, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(11, + Qp11, NewQp11, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(12, + Qp12, NewQp12, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + NewQp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(13, + Qp13, NewQp13, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, NewQp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(14, + Qp14, NewQp14, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, NewQp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(15, + Qp15, NewQp15, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, NewQp15, Qp16}); +?OUT_CURRENT_P_Qp16(16, + Qp16, NewQp16, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, NewQp16}); +?OUT_CURRENT_P_Qp32(17, + Qp17, NewQp17, + {NewQp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(18, + Qp18, NewQp18, + {Qp17, NewQp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(19, + Qp19, NewQp19, + {Qp17, Qp18, NewQp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(20, + Qp20, NewQp20, + {Qp17, Qp18, Qp19, NewQp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(21, + Qp21, NewQp21, + {Qp17, Qp18, Qp19, Qp20, NewQp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(22, + Qp22, NewQp22, + {Qp17, Qp18, Qp19, Qp20, Qp21, + NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(23, + Qp23, NewQp23, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(24, + Qp24, NewQp24, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(25, + Qp25, NewQp25, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(26, + Qp26, NewQp26, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(27, + Qp27, NewQp27, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(28, + Qp28, NewQp28, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + NewQp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(29, + Qp29, NewQp29, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, NewQp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(30, + Qp30, NewQp30, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, NewQp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(31, + Qp31, NewQp31, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, NewQp31, Qp32}); +?OUT_CURRENT_P_Qp32(32, + Qp32, NewQp32, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, NewQp32}); +?OUT_CURRENT_P_Qp48(33, + Qp33, NewQp33, + {NewQp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(34, + Qp34, NewQp34, + {Qp33, NewQp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(35, + Qp35, NewQp35, + {Qp33, Qp34, NewQp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(36, + Qp36, NewQp36, + {Qp33, Qp34, Qp35, NewQp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(37, + Qp37, NewQp37, + {Qp33, Qp34, Qp35, Qp36, NewQp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(38, + Qp38, NewQp38, + {Qp33, Qp34, Qp35, Qp36, Qp37, + NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(39, + Qp39, NewQp39, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(40, + Qp40, NewQp40, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(41, + Qp41, NewQp41, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(42, + Qp42, NewQp42, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(43, + Qp43, NewQp43, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(44, + Qp44, NewQp44, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + NewQp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(45, + Qp45, NewQp45, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, NewQp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(46, + Qp46, NewQp46, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, NewQp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(47, + Qp47, NewQp47, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, NewQp47, Qp48}); +?OUT_CURRENT_P_Qp48(48, + Qp48, NewQp48, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, NewQp48}); +?OUT_CURRENT_P_Qp64(49, + Qp49, NewQp49, + {NewQp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(50, + Qp50, NewQp50, + {Qp49, NewQp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(51, + Qp51, NewQp51, + {Qp49, Qp50, NewQp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(52, + Qp52, NewQp52, + {Qp49, Qp50, Qp51, NewQp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(53, + Qp53, NewQp53, + {Qp49, Qp50, Qp51, Qp52, NewQp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(54, + Qp54, NewQp54, + {Qp49, Qp50, Qp51, Qp52, Qp53, + NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(55, + Qp55, NewQp55, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(56, + Qp56, NewQp56, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(57, + Qp57, NewQp57, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(58, + Qp58, NewQp58, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(59, + Qp59, NewQp59, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(60, + Qp60, NewQp60, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + NewQp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(61, + Qp61, NewQp61, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, NewQp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(62, + Qp62, NewQp62, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, NewQp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(63, + Qp63, NewQp63, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, NewQp63, Qp64}); +?OUT_CURRENT_P_Qp64(64, + Qp64, NewQp64, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, NewQp64}); +?OUT_CURRENT_P_Qp80(65, + Qp65, NewQp65, + {NewQp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(66, + Qp66, NewQp66, + {Qp65, NewQp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(67, + Qp67, NewQp67, + {Qp65, Qp66, NewQp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(68, + Qp68, NewQp68, + {Qp65, Qp66, Qp67, NewQp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(69, + Qp69, NewQp69, + {Qp65, Qp66, Qp67, Qp68, NewQp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(70, + Qp70, NewQp70, + {Qp65, Qp66, Qp67, Qp68, Qp69, + NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(71, + Qp71, NewQp71, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(72, + Qp72, NewQp72, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(73, + Qp73, NewQp73, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(74, + Qp74, NewQp74, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(75, + Qp75, NewQp75, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(76, + Qp76, NewQp76, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + NewQp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(77, + Qp77, NewQp77, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, NewQp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(78, + Qp78, NewQp78, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, NewQp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(79, + Qp79, NewQp79, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, NewQp79, Qp80}); +?OUT_CURRENT_P_Qp80(80, + Qp80, NewQp80, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, NewQp80}); +?OUT_CURRENT_P_Qp96(81, + Qp81, NewQp81, + {NewQp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(82, + Qp82, NewQp82, + {Qp81, NewQp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(83, + Qp83, NewQp83, + {Qp81, Qp82, NewQp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(84, + Qp84, NewQp84, + {Qp81, Qp82, Qp83, NewQp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(85, + Qp85, NewQp85, + {Qp81, Qp82, Qp83, Qp84, NewQp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(86, + Qp86, NewQp86, + {Qp81, Qp82, Qp83, Qp84, Qp85, + NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(87, + Qp87, NewQp87, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(88, + Qp88, NewQp88, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(89, + Qp89, NewQp89, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(90, + Qp90, NewQp90, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(91, + Qp91, NewQp91, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(92, + Qp92, NewQp92, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + NewQp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(93, + Qp93, NewQp93, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, NewQp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(94, + Qp94, NewQp94, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, NewQp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(95, + Qp95, NewQp95, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, NewQp95, Qp96}); +?OUT_CURRENT_P_Qp96(96, + Qp96, NewQp96, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, NewQp96}); +?OUT_CURRENT_P_Qp112(97, + Qp97, NewQp97, + {NewQp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(98, + Qp98, NewQp98, + {Qp97, NewQp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(99, + Qp99, NewQp99, + {Qp97, Qp98, NewQp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(100, + Qp100, NewQp100, + {Qp97, Qp98, Qp99, NewQp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(101, + Qp101, NewQp101, + {Qp97, Qp98, Qp99, Qp100, NewQp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(102, + Qp102, NewQp102, + {Qp97, Qp98, Qp99, Qp100, Qp101, + NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(103, + Qp103, NewQp103, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(104, + Qp104, NewQp104, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(105, + Qp105, NewQp105, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(106, + Qp106, NewQp106, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(107, + Qp107, NewQp107, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(108, + Qp108, NewQp108, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + NewQp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(109, + Qp109, NewQp109, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, NewQp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(110, + Qp110, NewQp110, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, NewQp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(111, + Qp111, NewQp111, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, NewQp111, Qp112}); +?OUT_CURRENT_P_Qp112(112, + Qp112, NewQp112, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, NewQp112}); +?OUT_CURRENT_P_Qp128(113, + Qp113, NewQp113, + {NewQp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(114, + Qp114, NewQp114, + {Qp113, NewQp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(115, + Qp115, NewQp115, + {Qp113, Qp114, NewQp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(116, + Qp116, NewQp116, + {Qp113, Qp114, Qp115, NewQp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(117, + Qp117, NewQp117, + {Qp113, Qp114, Qp115, Qp116, NewQp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(118, + Qp118, NewQp118, + {Qp113, Qp114, Qp115, Qp116, Qp117, + NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(119, + Qp119, NewQp119, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(120, + Qp120, NewQp120, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(121, + Qp121, NewQp121, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(122, + Qp122, NewQp122, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(123, + Qp123, NewQp123, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(124, + Qp124, NewQp124, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + NewQp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(125, + Qp125, NewQp125, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, NewQp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(126, + Qp126, NewQp126, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, NewQp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(127, + Qp127, NewQp127, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, NewQp127, Qp128}); +out_current_p(128, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) -> + case queue:out(Qp128) of + {empty, _} -> + {empty, + {empty, + 0, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}}; + {{value, X}, NewQp128} -> + NewSize = Size - 1, + {{value, X, 128}, + {if NewSize == 0 -> empty; true -> 128 end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, NewQp128}}} + end. + +%% @hidden +-define(OUT_SPECIFIC_Qn128(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121, + Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113}, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + V3, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qn112(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, + {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105, + Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97}, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, + V3, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qn96(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, + {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89, + Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81}, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, + V3, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qn80(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, + {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73, + Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65}, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, + V3, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qn64(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, + {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57, + Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49}, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, + V3, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qn48(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, + {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41, + Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33}, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, + V3, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qn32(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25, + Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17}, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + V3, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qn16(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9, + Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + V3, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qp16(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8, + Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16}, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + V3, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qp32(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24, + Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32}, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + V3, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qp48(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40, + Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48}, + Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + V3, + Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qp64(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56, + Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64}, + Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + V3, + Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qp80(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72, + Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80}, + Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + V3, + Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qp96(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88, + Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96}, + Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + V3, + Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qp112(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104, + Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112}, + Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + V3, + Qp128}}). +-define(OUT_SPECIFIC_Qp128(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + V3}}). + +?OUT_SPECIFIC_Qn128(-128, + Qn128, NewQn128, + {NewQn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-127, + Qn127, NewQn127, + {Qn128, NewQn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-126, + Qn126, NewQn126, + {Qn128, Qn127, NewQn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-125, + Qn125, NewQn125, + {Qn128, Qn127, Qn126, NewQn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-124, + Qn124, NewQn124, + {Qn128, Qn127, Qn126, Qn125, NewQn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-123, + Qn123, NewQn123, + {Qn128, Qn127, Qn126, Qn125, Qn124, + NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-122, + Qn122, NewQn122, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-121, + Qn121, NewQn121, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-120, + Qn120, NewQn120, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-119, + Qn119, NewQn119, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-118, + Qn118, NewQn118, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-117, + Qn117, NewQn117, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + NewQn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-116, + Qn116, NewQn116, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, NewQn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-115, + Qn115, NewQn115, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, NewQn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-114, + Qn114, NewQn114, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, NewQn114, Qn113}); +?OUT_SPECIFIC_Qn128(-113, + Qn113, NewQn113, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, NewQn113}); +?OUT_SPECIFIC_Qn112(-112, + Qn112, NewQn112, + {NewQn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-111, + Qn111, NewQn111, + {Qn112, NewQn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-110, + Qn110, NewQn110, + {Qn112, Qn111, NewQn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-109, + Qn109, NewQn109, + {Qn112, Qn111, Qn110, NewQn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-108, + Qn108, NewQn108, + {Qn112, Qn111, Qn110, Qn109, NewQn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-107, + Qn107, NewQn107, + {Qn112, Qn111, Qn110, Qn109, Qn108, + NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-106, + Qn106, NewQn106, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-105, + Qn105, NewQn105, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-104, + Qn104, NewQn104, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-103, + Qn103, NewQn103, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-102, + Qn102, NewQn102, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-101, + Qn101, NewQn101, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + NewQn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-100, + Qn100, NewQn100, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, NewQn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-99, + Qn99, NewQn99, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, NewQn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-98, + Qn98, NewQn98, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, NewQn98, Qn97}); +?OUT_SPECIFIC_Qn112(-97, + Qn97, NewQn97, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, NewQn97}); +?OUT_SPECIFIC_Qn96(-96, + Qn96, NewQn96, + {NewQn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-95, + Qn95, NewQn95, + {Qn96, NewQn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-94, + Qn94, NewQn94, + {Qn96, Qn95, NewQn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-93, + Qn93, NewQn93, + {Qn96, Qn95, Qn94, NewQn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-92, + Qn92, NewQn92, + {Qn96, Qn95, Qn94, Qn93, NewQn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-91, + Qn91, NewQn91, + {Qn96, Qn95, Qn94, Qn93, Qn92, + NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-90, + Qn90, NewQn90, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-89, + Qn89, NewQn89, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-88, + Qn88, NewQn88, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-87, + Qn87, NewQn87, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-86, + Qn86, NewQn86, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-85, + Qn85, NewQn85, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + NewQn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-84, + Qn84, NewQn84, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, NewQn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-83, + Qn83, NewQn83, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, NewQn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-82, + Qn82, NewQn82, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, NewQn82, Qn81}); +?OUT_SPECIFIC_Qn96(-81, + Qn81, NewQn81, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, NewQn81}); +?OUT_SPECIFIC_Qn80(-80, + Qn80, NewQn80, + {NewQn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-79, + Qn79, NewQn79, + {Qn80, NewQn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-78, + Qn78, NewQn78, + {Qn80, Qn79, NewQn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-77, + Qn77, NewQn77, + {Qn80, Qn79, Qn78, NewQn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-76, + Qn76, NewQn76, + {Qn80, Qn79, Qn78, Qn77, NewQn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-75, + Qn75, NewQn75, + {Qn80, Qn79, Qn78, Qn77, Qn76, + NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-74, + Qn74, NewQn74, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-73, + Qn73, NewQn73, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-72, + Qn72, NewQn72, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-71, + Qn71, NewQn71, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-70, + Qn70, NewQn70, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-69, + Qn69, NewQn69, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + NewQn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-68, + Qn68, NewQn68, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, NewQn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-67, + Qn67, NewQn67, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, NewQn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-66, + Qn66, NewQn66, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, NewQn66, Qn65}); +?OUT_SPECIFIC_Qn80(-65, + Qn65, NewQn65, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, NewQn65}); +?OUT_SPECIFIC_Qn64(-64, + Qn64, NewQn64, + {NewQn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-63, + Qn63, NewQn63, + {Qn64, NewQn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-62, + Qn62, NewQn62, + {Qn64, Qn63, NewQn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-61, + Qn61, NewQn61, + {Qn64, Qn63, Qn62, NewQn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-60, + Qn60, NewQn60, + {Qn64, Qn63, Qn62, Qn61, NewQn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-59, + Qn59, NewQn59, + {Qn64, Qn63, Qn62, Qn61, Qn60, + NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-58, + Qn58, NewQn58, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-57, + Qn57, NewQn57, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-56, + Qn56, NewQn56, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-55, + Qn55, NewQn55, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-54, + Qn54, NewQn54, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-53, + Qn53, NewQn53, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + NewQn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-52, + Qn52, NewQn52, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, NewQn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-51, + Qn51, NewQn51, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, NewQn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-50, + Qn50, NewQn50, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, NewQn50, Qn49}); +?OUT_SPECIFIC_Qn64(-49, + Qn49, NewQn49, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, NewQn49}); +?OUT_SPECIFIC_Qn48(-48, + Qn48, NewQn48, + {NewQn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-47, + Qn47, NewQn47, + {Qn48, NewQn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-46, + Qn46, NewQn46, + {Qn48, Qn47, NewQn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-45, + Qn45, NewQn45, + {Qn48, Qn47, Qn46, NewQn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-44, + Qn44, NewQn44, + {Qn48, Qn47, Qn46, Qn45, NewQn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-43, + Qn43, NewQn43, + {Qn48, Qn47, Qn46, Qn45, Qn44, + NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-42, + Qn42, NewQn42, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-41, + Qn41, NewQn41, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-40, + Qn40, NewQn40, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-39, + Qn39, NewQn39, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-38, + Qn38, NewQn38, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-37, + Qn37, NewQn37, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + NewQn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-36, + Qn36, NewQn36, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, NewQn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-35, + Qn35, NewQn35, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, NewQn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-34, + Qn34, NewQn34, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, NewQn34, Qn33}); +?OUT_SPECIFIC_Qn48(-33, + Qn33, NewQn33, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, NewQn33}); +?OUT_SPECIFIC_Qn32(-32, + Qn32, NewQn32, + {NewQn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-31, + Qn31, NewQn31, + {Qn32, NewQn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-30, + Qn30, NewQn30, + {Qn32, Qn31, NewQn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-29, + Qn29, NewQn29, + {Qn32, Qn31, Qn30, NewQn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-28, + Qn28, NewQn28, + {Qn32, Qn31, Qn30, Qn29, NewQn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-27, + Qn27, NewQn27, + {Qn32, Qn31, Qn30, Qn29, Qn28, + NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-26, + Qn26, NewQn26, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-25, + Qn25, NewQn25, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-24, + Qn24, NewQn24, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-23, + Qn23, NewQn23, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-22, + Qn22, NewQn22, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-21, + Qn21, NewQn21, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + NewQn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-20, + Qn20, NewQn20, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, NewQn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-19, + Qn19, NewQn19, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, NewQn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-18, + Qn18, NewQn18, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, NewQn18, Qn17}); +?OUT_SPECIFIC_Qn32(-17, + Qn17, NewQn17, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, NewQn17}); +?OUT_SPECIFIC_Qn16(-16, + Qn16, NewQn16, + {NewQn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-15, + Qn15, NewQn15, + {Qn16, NewQn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-14, + Qn14, NewQn14, + {Qn16, Qn15, NewQn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-13, + Qn13, NewQn13, + {Qn16, Qn15, Qn14, NewQn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-12, + Qn12, NewQn12, + {Qn16, Qn15, Qn14, Qn13, NewQn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-11, + Qn11, NewQn11, + {Qn16, Qn15, Qn14, Qn13, Qn12, + NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-10, + Qn10, NewQn10, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-9, + Qn9, NewQn9, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-8, + Qn8, NewQn8, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-7, + Qn7, NewQn7, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-6, + Qn6, NewQn6, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-5, + Qn5, NewQn5, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + NewQn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-4, + Qn4, NewQn4, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, NewQn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-3, + Qn3, NewQn3, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, NewQn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-2, + Qn2, NewQn2, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, NewQn2, Qn1}); +?OUT_SPECIFIC_Qn16(-1, + Qn1, NewQn1, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, NewQn1}); +out_specific(0, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, NewQ0} = queue:out(Q0), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + NewQ0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}; +?OUT_SPECIFIC_Qp16(1, + Qp1, NewQp1, + {NewQp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(2, + Qp2, NewQp2, + {Qp1, NewQp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(3, + Qp3, NewQp3, + {Qp1, Qp2, NewQp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(4, + Qp4, NewQp4, + {Qp1, Qp2, Qp3, NewQp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(5, + Qp5, NewQp5, + {Qp1, Qp2, Qp3, Qp4, NewQp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(6, + Qp6, NewQp6, + {Qp1, Qp2, Qp3, Qp4, Qp5, + NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(7, + Qp7, NewQp7, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(8, + Qp8, NewQp8, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(9, + Qp9, NewQp9, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(10, + Qp10, NewQp10, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(11, + Qp11, NewQp11, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(12, + Qp12, NewQp12, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + NewQp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(13, + Qp13, NewQp13, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, NewQp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(14, + Qp14, NewQp14, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, NewQp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(15, + Qp15, NewQp15, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, NewQp15, Qp16}); +?OUT_SPECIFIC_Qp16(16, + Qp16, NewQp16, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, NewQp16}); +?OUT_SPECIFIC_Qp32(17, + Qp17, NewQp17, + {NewQp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(18, + Qp18, NewQp18, + {Qp17, NewQp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(19, + Qp19, NewQp19, + {Qp17, Qp18, NewQp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(20, + Qp20, NewQp20, + {Qp17, Qp18, Qp19, NewQp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(21, + Qp21, NewQp21, + {Qp17, Qp18, Qp19, Qp20, NewQp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(22, + Qp22, NewQp22, + {Qp17, Qp18, Qp19, Qp20, Qp21, + NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(23, + Qp23, NewQp23, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(24, + Qp24, NewQp24, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(25, + Qp25, NewQp25, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(26, + Qp26, NewQp26, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(27, + Qp27, NewQp27, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(28, + Qp28, NewQp28, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + NewQp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(29, + Qp29, NewQp29, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, NewQp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(30, + Qp30, NewQp30, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, NewQp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(31, + Qp31, NewQp31, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, NewQp31, Qp32}); +?OUT_SPECIFIC_Qp32(32, + Qp32, NewQp32, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, NewQp32}); +?OUT_SPECIFIC_Qp48(33, + Qp33, NewQp33, + {NewQp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(34, + Qp34, NewQp34, + {Qp33, NewQp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(35, + Qp35, NewQp35, + {Qp33, Qp34, NewQp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(36, + Qp36, NewQp36, + {Qp33, Qp34, Qp35, NewQp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(37, + Qp37, NewQp37, + {Qp33, Qp34, Qp35, Qp36, NewQp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(38, + Qp38, NewQp38, + {Qp33, Qp34, Qp35, Qp36, Qp37, + NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(39, + Qp39, NewQp39, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(40, + Qp40, NewQp40, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(41, + Qp41, NewQp41, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(42, + Qp42, NewQp42, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(43, + Qp43, NewQp43, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(44, + Qp44, NewQp44, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + NewQp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(45, + Qp45, NewQp45, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, NewQp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(46, + Qp46, NewQp46, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, NewQp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(47, + Qp47, NewQp47, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, NewQp47, Qp48}); +?OUT_SPECIFIC_Qp48(48, + Qp48, NewQp48, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, NewQp48}); +?OUT_SPECIFIC_Qp64(49, + Qp49, NewQp49, + {NewQp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(50, + Qp50, NewQp50, + {Qp49, NewQp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(51, + Qp51, NewQp51, + {Qp49, Qp50, NewQp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(52, + Qp52, NewQp52, + {Qp49, Qp50, Qp51, NewQp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(53, + Qp53, NewQp53, + {Qp49, Qp50, Qp51, Qp52, NewQp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(54, + Qp54, NewQp54, + {Qp49, Qp50, Qp51, Qp52, Qp53, + NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(55, + Qp55, NewQp55, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(56, + Qp56, NewQp56, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(57, + Qp57, NewQp57, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(58, + Qp58, NewQp58, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(59, + Qp59, NewQp59, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(60, + Qp60, NewQp60, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + NewQp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(61, + Qp61, NewQp61, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, NewQp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(62, + Qp62, NewQp62, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, NewQp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(63, + Qp63, NewQp63, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, NewQp63, Qp64}); +?OUT_SPECIFIC_Qp64(64, + Qp64, NewQp64, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, NewQp64}); +?OUT_SPECIFIC_Qp80(65, + Qp65, NewQp65, + {NewQp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(66, + Qp66, NewQp66, + {Qp65, NewQp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(67, + Qp67, NewQp67, + {Qp65, Qp66, NewQp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(68, + Qp68, NewQp68, + {Qp65, Qp66, Qp67, NewQp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(69, + Qp69, NewQp69, + {Qp65, Qp66, Qp67, Qp68, NewQp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(70, + Qp70, NewQp70, + {Qp65, Qp66, Qp67, Qp68, Qp69, + NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(71, + Qp71, NewQp71, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(72, + Qp72, NewQp72, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(73, + Qp73, NewQp73, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(74, + Qp74, NewQp74, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(75, + Qp75, NewQp75, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(76, + Qp76, NewQp76, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + NewQp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(77, + Qp77, NewQp77, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, NewQp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(78, + Qp78, NewQp78, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, NewQp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(79, + Qp79, NewQp79, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, NewQp79, Qp80}); +?OUT_SPECIFIC_Qp80(80, + Qp80, NewQp80, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, NewQp80}); +?OUT_SPECIFIC_Qp96(81, + Qp81, NewQp81, + {NewQp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(82, + Qp82, NewQp82, + {Qp81, NewQp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(83, + Qp83, NewQp83, + {Qp81, Qp82, NewQp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(84, + Qp84, NewQp84, + {Qp81, Qp82, Qp83, NewQp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(85, + Qp85, NewQp85, + {Qp81, Qp82, Qp83, Qp84, NewQp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(86, + Qp86, NewQp86, + {Qp81, Qp82, Qp83, Qp84, Qp85, + NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(87, + Qp87, NewQp87, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(88, + Qp88, NewQp88, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(89, + Qp89, NewQp89, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(90, + Qp90, NewQp90, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(91, + Qp91, NewQp91, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(92, + Qp92, NewQp92, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + NewQp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(93, + Qp93, NewQp93, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, NewQp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(94, + Qp94, NewQp94, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, NewQp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(95, + Qp95, NewQp95, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, NewQp95, Qp96}); +?OUT_SPECIFIC_Qp96(96, + Qp96, NewQp96, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, NewQp96}); +?OUT_SPECIFIC_Qp112(97, + Qp97, NewQp97, + {NewQp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(98, + Qp98, NewQp98, + {Qp97, NewQp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(99, + Qp99, NewQp99, + {Qp97, Qp98, NewQp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(100, + Qp100, NewQp100, + {Qp97, Qp98, Qp99, NewQp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(101, + Qp101, NewQp101, + {Qp97, Qp98, Qp99, Qp100, NewQp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(102, + Qp102, NewQp102, + {Qp97, Qp98, Qp99, Qp100, Qp101, + NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(103, + Qp103, NewQp103, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(104, + Qp104, NewQp104, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(105, + Qp105, NewQp105, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(106, + Qp106, NewQp106, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(107, + Qp107, NewQp107, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(108, + Qp108, NewQp108, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + NewQp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(109, + Qp109, NewQp109, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, NewQp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(110, + Qp110, NewQp110, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, NewQp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(111, + Qp111, NewQp111, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, NewQp111, Qp112}); +?OUT_SPECIFIC_Qp112(112, + Qp112, NewQp112, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, NewQp112}); +?OUT_SPECIFIC_Qp128(113, + Qp113, NewQp113, + {NewQp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(114, + Qp114, NewQp114, + {Qp113, NewQp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(115, + Qp115, NewQp115, + {Qp113, Qp114, NewQp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(116, + Qp116, NewQp116, + {Qp113, Qp114, Qp115, NewQp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(117, + Qp117, NewQp117, + {Qp113, Qp114, Qp115, Qp116, NewQp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(118, + Qp118, NewQp118, + {Qp113, Qp114, Qp115, Qp116, Qp117, + NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(119, + Qp119, NewQp119, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(120, + Qp120, NewQp120, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(121, + Qp121, NewQp121, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(122, + Qp122, NewQp122, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(123, + Qp123, NewQp123, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(124, + Qp124, NewQp124, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + NewQp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(125, + Qp125, NewQp125, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, NewQp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(126, + Qp126, NewQp126, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, NewQp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(127, + Qp127, NewQp127, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, NewQp127, Qp128}); +?OUT_SPECIFIC_Qp128(128, + Qp128, NewQp128, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, NewQp128}). + +%% @hidden +-define(REMOVE_UNIQ_P_Qn128(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121, + Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113}, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + V3, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qn112(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, + {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105, + Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97}, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, + V3, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qn96(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, + {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89, + Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81}, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, + V3, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qn80(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, + {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73, + Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65}, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, + V3, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qn64(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, + {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57, + Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49}, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, + V3, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qn48(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, + {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41, + Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33}, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, + V3, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qn32(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25, + Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17}, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + V3, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qn16(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9, + Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + V3, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qp16(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8, + Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16}, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + V3, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qp32(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24, + Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32}, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + V3, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qp48(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40, + Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48}, + Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + V3, + Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qp64(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56, + Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64}, + Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + V3, + Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qp80(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72, + Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80}, + Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + V3, + Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qp96(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88, + Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96}, + Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + V3, + Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qp112(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104, + Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112}, + Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + V3, + Qp128}}). +-define(REMOVE_UNIQ_P_Qp128(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + V3}}). + +?REMOVE_UNIQ_P_Qn128(-128, + Qn128, NewQn128, + {NewQn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-127, + Qn127, NewQn127, + {Qn128, NewQn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-126, + Qn126, NewQn126, + {Qn128, Qn127, NewQn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-125, + Qn125, NewQn125, + {Qn128, Qn127, Qn126, NewQn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-124, + Qn124, NewQn124, + {Qn128, Qn127, Qn126, Qn125, NewQn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-123, + Qn123, NewQn123, + {Qn128, Qn127, Qn126, Qn125, Qn124, + NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-122, + Qn122, NewQn122, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-121, + Qn121, NewQn121, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-120, + Qn120, NewQn120, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-119, + Qn119, NewQn119, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-118, + Qn118, NewQn118, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-117, + Qn117, NewQn117, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + NewQn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-116, + Qn116, NewQn116, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, NewQn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-115, + Qn115, NewQn115, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, NewQn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-114, + Qn114, NewQn114, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, NewQn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-113, + Qn113, NewQn113, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, NewQn113}); +?REMOVE_UNIQ_P_Qn112(-112, + Qn112, NewQn112, + {NewQn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-111, + Qn111, NewQn111, + {Qn112, NewQn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-110, + Qn110, NewQn110, + {Qn112, Qn111, NewQn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-109, + Qn109, NewQn109, + {Qn112, Qn111, Qn110, NewQn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-108, + Qn108, NewQn108, + {Qn112, Qn111, Qn110, Qn109, NewQn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-107, + Qn107, NewQn107, + {Qn112, Qn111, Qn110, Qn109, Qn108, + NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-106, + Qn106, NewQn106, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-105, + Qn105, NewQn105, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-104, + Qn104, NewQn104, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-103, + Qn103, NewQn103, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-102, + Qn102, NewQn102, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-101, + Qn101, NewQn101, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + NewQn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-100, + Qn100, NewQn100, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, NewQn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-99, + Qn99, NewQn99, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, NewQn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-98, + Qn98, NewQn98, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, NewQn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-97, + Qn97, NewQn97, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, NewQn97}); +?REMOVE_UNIQ_P_Qn96(-96, + Qn96, NewQn96, + {NewQn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-95, + Qn95, NewQn95, + {Qn96, NewQn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-94, + Qn94, NewQn94, + {Qn96, Qn95, NewQn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-93, + Qn93, NewQn93, + {Qn96, Qn95, Qn94, NewQn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-92, + Qn92, NewQn92, + {Qn96, Qn95, Qn94, Qn93, NewQn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-91, + Qn91, NewQn91, + {Qn96, Qn95, Qn94, Qn93, Qn92, + NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-90, + Qn90, NewQn90, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-89, + Qn89, NewQn89, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-88, + Qn88, NewQn88, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-87, + Qn87, NewQn87, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-86, + Qn86, NewQn86, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-85, + Qn85, NewQn85, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + NewQn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-84, + Qn84, NewQn84, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, NewQn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-83, + Qn83, NewQn83, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, NewQn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-82, + Qn82, NewQn82, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, NewQn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-81, + Qn81, NewQn81, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, NewQn81}); +?REMOVE_UNIQ_P_Qn80(-80, + Qn80, NewQn80, + {NewQn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-79, + Qn79, NewQn79, + {Qn80, NewQn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-78, + Qn78, NewQn78, + {Qn80, Qn79, NewQn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-77, + Qn77, NewQn77, + {Qn80, Qn79, Qn78, NewQn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-76, + Qn76, NewQn76, + {Qn80, Qn79, Qn78, Qn77, NewQn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-75, + Qn75, NewQn75, + {Qn80, Qn79, Qn78, Qn77, Qn76, + NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-74, + Qn74, NewQn74, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-73, + Qn73, NewQn73, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-72, + Qn72, NewQn72, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-71, + Qn71, NewQn71, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-70, + Qn70, NewQn70, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-69, + Qn69, NewQn69, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + NewQn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-68, + Qn68, NewQn68, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, NewQn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-67, + Qn67, NewQn67, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, NewQn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-66, + Qn66, NewQn66, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, NewQn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-65, + Qn65, NewQn65, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, NewQn65}); +?REMOVE_UNIQ_P_Qn64(-64, + Qn64, NewQn64, + {NewQn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-63, + Qn63, NewQn63, + {Qn64, NewQn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-62, + Qn62, NewQn62, + {Qn64, Qn63, NewQn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-61, + Qn61, NewQn61, + {Qn64, Qn63, Qn62, NewQn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-60, + Qn60, NewQn60, + {Qn64, Qn63, Qn62, Qn61, NewQn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-59, + Qn59, NewQn59, + {Qn64, Qn63, Qn62, Qn61, Qn60, + NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-58, + Qn58, NewQn58, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-57, + Qn57, NewQn57, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-56, + Qn56, NewQn56, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-55, + Qn55, NewQn55, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-54, + Qn54, NewQn54, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-53, + Qn53, NewQn53, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + NewQn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-52, + Qn52, NewQn52, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, NewQn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-51, + Qn51, NewQn51, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, NewQn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-50, + Qn50, NewQn50, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, NewQn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-49, + Qn49, NewQn49, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, NewQn49}); +?REMOVE_UNIQ_P_Qn48(-48, + Qn48, NewQn48, + {NewQn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-47, + Qn47, NewQn47, + {Qn48, NewQn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-46, + Qn46, NewQn46, + {Qn48, Qn47, NewQn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-45, + Qn45, NewQn45, + {Qn48, Qn47, Qn46, NewQn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-44, + Qn44, NewQn44, + {Qn48, Qn47, Qn46, Qn45, NewQn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-43, + Qn43, NewQn43, + {Qn48, Qn47, Qn46, Qn45, Qn44, + NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-42, + Qn42, NewQn42, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-41, + Qn41, NewQn41, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-40, + Qn40, NewQn40, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-39, + Qn39, NewQn39, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-38, + Qn38, NewQn38, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-37, + Qn37, NewQn37, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + NewQn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-36, + Qn36, NewQn36, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, NewQn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-35, + Qn35, NewQn35, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, NewQn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-34, + Qn34, NewQn34, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, NewQn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-33, + Qn33, NewQn33, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, NewQn33}); +?REMOVE_UNIQ_P_Qn32(-32, + Qn32, NewQn32, + {NewQn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-31, + Qn31, NewQn31, + {Qn32, NewQn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-30, + Qn30, NewQn30, + {Qn32, Qn31, NewQn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-29, + Qn29, NewQn29, + {Qn32, Qn31, Qn30, NewQn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-28, + Qn28, NewQn28, + {Qn32, Qn31, Qn30, Qn29, NewQn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-27, + Qn27, NewQn27, + {Qn32, Qn31, Qn30, Qn29, Qn28, + NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-26, + Qn26, NewQn26, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-25, + Qn25, NewQn25, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-24, + Qn24, NewQn24, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-23, + Qn23, NewQn23, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-22, + Qn22, NewQn22, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-21, + Qn21, NewQn21, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + NewQn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-20, + Qn20, NewQn20, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, NewQn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-19, + Qn19, NewQn19, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, NewQn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-18, + Qn18, NewQn18, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, NewQn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-17, + Qn17, NewQn17, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, NewQn17}); +?REMOVE_UNIQ_P_Qn16(-16, + Qn16, NewQn16, + {NewQn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-15, + Qn15, NewQn15, + {Qn16, NewQn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-14, + Qn14, NewQn14, + {Qn16, Qn15, NewQn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-13, + Qn13, NewQn13, + {Qn16, Qn15, Qn14, NewQn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-12, + Qn12, NewQn12, + {Qn16, Qn15, Qn14, Qn13, NewQn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-11, + Qn11, NewQn11, + {Qn16, Qn15, Qn14, Qn13, Qn12, + NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-10, + Qn10, NewQn10, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-9, + Qn9, NewQn9, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-8, + Qn8, NewQn8, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-7, + Qn7, NewQn7, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-6, + Qn6, NewQn6, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-5, + Qn5, NewQn5, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + NewQn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-4, + Qn4, NewQn4, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, NewQn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-3, + Qn3, NewQn3, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, NewQn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-2, + Qn2, NewQn2, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, NewQn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-1, + Qn1, NewQn1, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, NewQn1}); +remove_unique_p(0, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, NewQ0} = queue_remove_unique(F, Q0), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + NewQ0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}; +?REMOVE_UNIQ_P_Qp16(1, + Qp1, NewQp1, + {NewQp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(2, + Qp2, NewQp2, + {Qp1, NewQp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(3, + Qp3, NewQp3, + {Qp1, Qp2, NewQp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(4, + Qp4, NewQp4, + {Qp1, Qp2, Qp3, NewQp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(5, + Qp5, NewQp5, + {Qp1, Qp2, Qp3, Qp4, NewQp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(6, + Qp6, NewQp6, + {Qp1, Qp2, Qp3, Qp4, Qp5, + NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(7, + Qp7, NewQp7, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(8, + Qp8, NewQp8, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(9, + Qp9, NewQp9, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(10, + Qp10, NewQp10, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(11, + Qp11, NewQp11, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(12, + Qp12, NewQp12, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + NewQp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(13, + Qp13, NewQp13, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, NewQp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(14, + Qp14, NewQp14, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, NewQp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(15, + Qp15, NewQp15, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, NewQp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(16, + Qp16, NewQp16, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, NewQp16}); +?REMOVE_UNIQ_P_Qp32(17, + Qp17, NewQp17, + {NewQp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(18, + Qp18, NewQp18, + {Qp17, NewQp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(19, + Qp19, NewQp19, + {Qp17, Qp18, NewQp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(20, + Qp20, NewQp20, + {Qp17, Qp18, Qp19, NewQp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(21, + Qp21, NewQp21, + {Qp17, Qp18, Qp19, Qp20, NewQp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(22, + Qp22, NewQp22, + {Qp17, Qp18, Qp19, Qp20, Qp21, + NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(23, + Qp23, NewQp23, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(24, + Qp24, NewQp24, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(25, + Qp25, NewQp25, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(26, + Qp26, NewQp26, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(27, + Qp27, NewQp27, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(28, + Qp28, NewQp28, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + NewQp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(29, + Qp29, NewQp29, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, NewQp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(30, + Qp30, NewQp30, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, NewQp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(31, + Qp31, NewQp31, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, NewQp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(32, + Qp32, NewQp32, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, NewQp32}); +?REMOVE_UNIQ_P_Qp48(33, + Qp33, NewQp33, + {NewQp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(34, + Qp34, NewQp34, + {Qp33, NewQp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(35, + Qp35, NewQp35, + {Qp33, Qp34, NewQp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(36, + Qp36, NewQp36, + {Qp33, Qp34, Qp35, NewQp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(37, + Qp37, NewQp37, + {Qp33, Qp34, Qp35, Qp36, NewQp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(38, + Qp38, NewQp38, + {Qp33, Qp34, Qp35, Qp36, Qp37, + NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(39, + Qp39, NewQp39, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(40, + Qp40, NewQp40, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(41, + Qp41, NewQp41, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(42, + Qp42, NewQp42, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(43, + Qp43, NewQp43, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(44, + Qp44, NewQp44, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + NewQp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(45, + Qp45, NewQp45, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, NewQp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(46, + Qp46, NewQp46, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, NewQp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(47, + Qp47, NewQp47, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, NewQp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(48, + Qp48, NewQp48, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, NewQp48}); +?REMOVE_UNIQ_P_Qp64(49, + Qp49, NewQp49, + {NewQp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(50, + Qp50, NewQp50, + {Qp49, NewQp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(51, + Qp51, NewQp51, + {Qp49, Qp50, NewQp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(52, + Qp52, NewQp52, + {Qp49, Qp50, Qp51, NewQp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(53, + Qp53, NewQp53, + {Qp49, Qp50, Qp51, Qp52, NewQp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(54, + Qp54, NewQp54, + {Qp49, Qp50, Qp51, Qp52, Qp53, + NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(55, + Qp55, NewQp55, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(56, + Qp56, NewQp56, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(57, + Qp57, NewQp57, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(58, + Qp58, NewQp58, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(59, + Qp59, NewQp59, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(60, + Qp60, NewQp60, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + NewQp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(61, + Qp61, NewQp61, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, NewQp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(62, + Qp62, NewQp62, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, NewQp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(63, + Qp63, NewQp63, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, NewQp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(64, + Qp64, NewQp64, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, NewQp64}); +?REMOVE_UNIQ_P_Qp80(65, + Qp65, NewQp65, + {NewQp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(66, + Qp66, NewQp66, + {Qp65, NewQp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(67, + Qp67, NewQp67, + {Qp65, Qp66, NewQp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(68, + Qp68, NewQp68, + {Qp65, Qp66, Qp67, NewQp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(69, + Qp69, NewQp69, + {Qp65, Qp66, Qp67, Qp68, NewQp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(70, + Qp70, NewQp70, + {Qp65, Qp66, Qp67, Qp68, Qp69, + NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(71, + Qp71, NewQp71, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(72, + Qp72, NewQp72, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(73, + Qp73, NewQp73, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(74, + Qp74, NewQp74, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(75, + Qp75, NewQp75, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(76, + Qp76, NewQp76, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + NewQp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(77, + Qp77, NewQp77, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, NewQp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(78, + Qp78, NewQp78, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, NewQp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(79, + Qp79, NewQp79, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, NewQp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(80, + Qp80, NewQp80, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, NewQp80}); +?REMOVE_UNIQ_P_Qp96(81, + Qp81, NewQp81, + {NewQp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(82, + Qp82, NewQp82, + {Qp81, NewQp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(83, + Qp83, NewQp83, + {Qp81, Qp82, NewQp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(84, + Qp84, NewQp84, + {Qp81, Qp82, Qp83, NewQp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(85, + Qp85, NewQp85, + {Qp81, Qp82, Qp83, Qp84, NewQp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(86, + Qp86, NewQp86, + {Qp81, Qp82, Qp83, Qp84, Qp85, + NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(87, + Qp87, NewQp87, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(88, + Qp88, NewQp88, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(89, + Qp89, NewQp89, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(90, + Qp90, NewQp90, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(91, + Qp91, NewQp91, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(92, + Qp92, NewQp92, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + NewQp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(93, + Qp93, NewQp93, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, NewQp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(94, + Qp94, NewQp94, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, NewQp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(95, + Qp95, NewQp95, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, NewQp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(96, + Qp96, NewQp96, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, NewQp96}); +?REMOVE_UNIQ_P_Qp112(97, + Qp97, NewQp97, + {NewQp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(98, + Qp98, NewQp98, + {Qp97, NewQp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(99, + Qp99, NewQp99, + {Qp97, Qp98, NewQp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(100, + Qp100, NewQp100, + {Qp97, Qp98, Qp99, NewQp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(101, + Qp101, NewQp101, + {Qp97, Qp98, Qp99, Qp100, NewQp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(102, + Qp102, NewQp102, + {Qp97, Qp98, Qp99, Qp100, Qp101, + NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(103, + Qp103, NewQp103, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(104, + Qp104, NewQp104, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(105, + Qp105, NewQp105, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(106, + Qp106, NewQp106, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(107, + Qp107, NewQp107, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(108, + Qp108, NewQp108, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + NewQp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(109, + Qp109, NewQp109, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, NewQp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(110, + Qp110, NewQp110, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, NewQp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(111, + Qp111, NewQp111, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, NewQp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(112, + Qp112, NewQp112, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, NewQp112}); +?REMOVE_UNIQ_P_Qp128(113, + Qp113, NewQp113, + {NewQp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(114, + Qp114, NewQp114, + {Qp113, NewQp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(115, + Qp115, NewQp115, + {Qp113, Qp114, NewQp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(116, + Qp116, NewQp116, + {Qp113, Qp114, Qp115, NewQp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(117, + Qp117, NewQp117, + {Qp113, Qp114, Qp115, Qp116, NewQp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(118, + Qp118, NewQp118, + {Qp113, Qp114, Qp115, Qp116, Qp117, + NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(119, + Qp119, NewQp119, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(120, + Qp120, NewQp120, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(121, + Qp121, NewQp121, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(122, + Qp122, NewQp122, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(123, + Qp123, NewQp123, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(124, + Qp124, NewQp124, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + NewQp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(125, + Qp125, NewQp125, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, NewQp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(126, + Qp126, NewQp126, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, NewQp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(127, + Qp127, NewQp127, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, NewQp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(128, + Qp128, NewQp128, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, NewQp128}). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). + +-include("pqueue_test.hrl"). + +module_test_() -> + {timeout, ?TEST_TIMEOUT, [ + {"internal tests", ?_assertOk(test())} + ]}. + +long_test_() -> + test_condition([ + {"proper tests", ?_assert(pqueue_proper:qc_pq4())} + ], ?CLOUDI_LONG_TEST_TIMEOUT). + +-endif. + +%%------------------------------------------------------------------------- +%% @hidden +%% remove a unique value from a queue based on a binary predicate, +%% traversal order is undefined to keep it efficient (i.e., shouldn't matter) +%% (based on the implementation of queue:filter/2 +%% which is under the Apache License 2.0) +%%------------------------------------------------------------------------- + +-spec queue_remove_unique(F :: fun((any()) -> boolean()), + Q :: {list(), list()}) -> + {boolean(), {list(), list()}}. + +queue_remove_unique(Fun, {R0, F0} = Q) + when is_function(Fun, 1), is_list(R0), is_list(F0) -> + case queue_remove_unique_f(Fun, F0) of + {true, []} -> + {true, queue_r2f(R0)}; + {true, F1} -> + {true, {R0, F1}}; + {false, F1} -> + %true = F1 == F0, + case queue_remove_unique_f(Fun, R0) of % backwards + {true, []} -> + {true, queue_f2r(F1)}; + {true, R1} -> + {true, {R1, F1}}; + {false, _} -> + {false, Q} + end + end; +queue_remove_unique(Fun, Q) -> + erlang:error(badarg, [Fun,Q]). + +% Call Fun in front to back order +queue_remove_unique_f(_, [] = F) -> + {false, F}; +queue_remove_unique_f(Fun, F) -> + queue_remove_unique_f(F, [], F, Fun). + +queue_remove_unique_f([], _, F, _) -> + {false, F}; +queue_remove_unique_f([X | F0], F1, F, Fun) -> + case Fun(X) of + true -> + {true, lists:reverse(F1, F0)}; + false -> + queue_remove_unique_f(F0, [X | F1], F, Fun) + end. + +-compile({inline, [{queue_r2f,1},{queue_f2r,1}]}). + +% Move half of elements from R to F, if there are at least three +queue_r2f([]) -> + {[],[]}; +queue_r2f([_]=R) -> + {[],R}; +queue_r2f([X,Y]) -> + {[X],[Y]}; +queue_r2f(List) -> + {FF,RR} = lists:split(length(List) div 2 + 1, List), + {FF,lists:reverse(RR, [])}. + +% Move half of elements from F to R, if there are enough +queue_f2r([]) -> + {[],[]}; +queue_f2r([_]=F) -> + {F,[]}; +queue_f2r([X,Y]) -> + {[Y],[X]}; +queue_f2r(List) -> + {FF,RR} = lists:split(length(List) div 2 + 1, List), + {lists:reverse(RR, []),FF}. + diff --git a/aoc2023/build/dev/erlang/pqueue/src/pqueue_test.hrl b/aoc2023/build/dev/erlang/pqueue/src/pqueue_test.hrl new file mode 100644 index 0000000..cedffe0 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/src/pqueue_test.hrl @@ -0,0 +1,49 @@ +%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*- +% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod: +%%% +%%%------------------------------------------------------------------------ +%%% pqueue eunit common functionality +%%% +%%% MIT License +%%% +%%% Copyright (c) 2020 Michael Truog <mjtruog at protonmail dot com> +%%% +%%% Permission is hereby granted, free of charge, to any person obtaining a +%%% copy of this software and associated documentation files (the "Software"), +%%% to deal in the Software without restriction, including without limitation +%%% the rights to use, copy, modify, merge, publish, distribute, sublicense, +%%% and/or sell copies of the Software, and to permit persons to whom the +%%% Software is furnished to do so, subject to the following conditions: +%%% +%%% The above copyright notice and this permission notice shall be included in +%%% all copies or substantial portions of the Software. +%%% +%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +%%% DEALINGS IN THE SOFTWARE. +%%% +%%%------------------------------------------------------------------------ + +-ifndef(_assertOk). +-define(_assertOk(Expr), ?_assertEqual(ok, Expr)). +-endif. + +-ifdef(CLOUDI_TEST_TIMEOUT). +-define(TEST_TIMEOUT, ?CLOUDI_TEST_TIMEOUT). % seconds +-else. +-define(TEST_TIMEOUT, 10). % seconds +-endif. +-ifndef(CLOUDI_LONG_TEST_TIMEOUT). +-define(CLOUDI_LONG_TEST_TIMEOUT, 60). % minutes +-endif. + +test_condition(_, 0) -> + []; +test_condition(L, LongTestTimeout) + when LongTestTimeout > 0 -> + {timeout, LongTestTimeout * 60, L}. + diff --git a/aoc2023/build/dev/erlang/pqueue/test/pqueue_proper.erl b/aoc2023/build/dev/erlang/pqueue/test/pqueue_proper.erl new file mode 100644 index 0000000..6702960 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/test/pqueue_proper.erl @@ -0,0 +1,156 @@ +-module(pqueue_proper). +-ifdef(TEST). +-include_lib("proper/include/proper.hrl"). + +-behaviour(proper_statem). + +-export([qc_pq/0, qc_pq2/0, qc_pq3/0, qc_pq4/0, correct/1]). + +-export([command/1, initial_state/0, next_state/3, postcondition/3, + precondition/2]). + +-type value() :: integer(). +-record(state, { in_queue :: [{value(), term()}] }). +-define(SERVER, queue_srv). + +priority() -> + integer(-20, 20). + +%% Selects priorities we have added +priority(InQ) -> + elements([P || {P, _} <- InQ]). + +value() -> + integer(). + +initial_state() -> + #state { in_queue = [] }. + +command(#state { in_queue = InQ }) -> + oneof([{call, ?SERVER, in, [value()]}, + {call, ?SERVER, in, [value(), priority()]}, + {call, ?SERVER, is_empty, []}, + {call, ?SERVER, is_queue, []}, + {call, ?SERVER, len, []}, + {call, ?SERVER, out, []}] ++ + [{call, ?SERVER, out, [priority(InQ)]} || InQ =/= []] ++ + [{call, ?SERVER, pout, []}, + {call, ?SERVER, to_list, []}]). + +next_state(#state { in_queue = InQ } = S, _V, {call, _, out, []}) -> + S#state { in_queue = listq_rem(InQ) }; +next_state(#state { in_queue = InQ } = S, _V, {call, _, out, [Prio]}) -> + S#state { in_queue = listq_rem(InQ, Prio) }; +next_state(#state { in_queue = InQ } = S, _V, {call, _, pout, _}) -> + S#state { in_queue = listq_rem(InQ) }; +next_state(S, _V, {call, _, to_list, _}) -> S; +next_state(S, _V, {call, _, is_queue, _}) -> S; +next_state(S, _V, {call, _, is_empty, _}) -> S; +next_state(S, _V, {call, _, len, _}) -> S; +next_state(#state { in_queue = InQ } = S, _V, {call, _, in, [Value, Prio]}) -> + S#state { in_queue = listq_insert({Prio, Value}, InQ) }; +next_state(#state { in_queue = InQ } = S, _V, {call, _, in, [Value]}) -> + S#state { in_queue = listq_insert({0, Value}, InQ) }. + +precondition(_S, _Call) -> + true. % No limitation on the things we can call at all. + +postcondition(#state { in_queue = InQ }, {call, _, out, [Prio]}, R) -> + R == listq_prio_peek(InQ, Prio); +postcondition(#state { in_queue = InQ }, {call, _, pout, _}, R) -> + R == listq_ppeek(InQ); +postcondition(#state { in_queue = InQ }, {call, _, out, _}, R) -> + R == listq_peek(InQ); +postcondition(S, {call, _, to_list, _}, R) -> + R == listq_to_list(S#state.in_queue); +postcondition(S, {call, _, len, _}, L) -> + L == listq_length(S#state.in_queue); +postcondition(_S, {call, _, is_queue, _}, true) -> true; +postcondition(S, {call, _, is_empty, _}, Res) -> + Res == (S#state.in_queue == []); +postcondition(_S, {call, _, in, _}, _) -> + true; +postcondition(_, _, _) -> + false. + +correct(M) -> + ?FORALL(Cmds, commands(?MODULE), + ?TRAPEXIT( + begin + ?SERVER:start_link(M), + {History,State,Result} = run_commands(?MODULE, Cmds), + ?SERVER:stop(), + ?WHENFAIL(io:format("History: ~w\nState: ~w\nResult: ~w\n", + [History,State,Result]), + aggregate(command_names(Cmds), Result =:= ok)) + end)). + +qc_opts() -> + [{numtests, 10000}]. + +qc_pq() -> + proper:quickcheck(pqueue_proper:correct(pqueue), qc_opts()). + +qc_pq2() -> + proper:quickcheck(pqueue_proper:correct(pqueue2), qc_opts()). + +qc_pq3() -> + proper:quickcheck(pqueue_proper:correct(pqueue3), qc_opts()). + +qc_pq4() -> + proper:quickcheck(pqueue_proper:correct(pqueue4), qc_opts()). + +%% ---------------------------------------------------------------------- + +%% A listq is a sorted list of priorities +listq_insert({P, V}, []) -> + [{P, [V]}]; +listq_insert({P, V}, [{P1, _} | _] = LQ) when P < P1 -> + [{P, [V]} | LQ]; +listq_insert({P, V}, [{P1, Vs} | Next]) when P == P1 -> + [{P, Vs ++ [V]} | Next]; +listq_insert({P, V}, [{P1, Vs} | Next]) when P > P1 -> + [{P1, Vs} | listq_insert({P, V}, Next)]. + +listq_to_list(L) -> + lists:concat( + [ Vals || {_Prio, Vals} <- L]). + +listq_length(L) -> + lists:sum( + [ length(Vs) || {_Prio, Vs} <- L]). + +listq_rem([]) -> + []; +listq_rem([{_P, [_V]} | Next]) -> + Next; +listq_rem([{P, [_V1 | Vs]} | Next]) -> + [{P, Vs} | Next]. + +listq_rem([], _P) -> + []; +listq_rem([{P, [_]} | Next], P) -> + Next; +listq_rem([{P, [_ | Vs]} | Next], P) -> + [{P, Vs} | Next]; +listq_rem([{P1, Vs} | Next], P) -> + [{P1, Vs} | listq_rem(Next, P)]. + +listq_peek([]) -> + empty; +listq_peek([{_P, [V | _]} | _]) -> + {value, V}. + +listq_prio_peek([{P, [V | _]} | _], P) -> + {value, V}; +listq_prio_peek([{_P1, _} | Next], P) -> + listq_prio_peek(Next, P); +listq_prio_peek([], _P) -> + empty. + +listq_ppeek([]) -> + empty; +listq_ppeek([{P, [V | _]} | _]) -> + {value, V, P}. + +-endif. diff --git a/aoc2023/build/dev/erlang/pqueue/test/queue_srv.erl b/aoc2023/build/dev/erlang/pqueue/test/queue_srv.erl new file mode 100644 index 0000000..7fcb0a1 --- /dev/null +++ b/aoc2023/build/dev/erlang/pqueue/test/queue_srv.erl @@ -0,0 +1,183 @@ +%%%------------------------------------------------------------------- +%%% @author Jesper Louis andersen <> +%%% @copyright (C) 2011, Jesper Louis andersen +%%% @doc +%%% +%%% @end +%%% Created : 11 Nov 2011 by Jesper Louis andersen <> +%%%------------------------------------------------------------------- +-module(queue_srv). + +-behaviour(gen_server). + +%% API +-export([start_link/1, stop/0, len/0, in/1, in/2, is_empty/0, + out/0, out/1, pout/0, + is_queue/0, to_list/0]). + +%% gen_server callbacks +-export([init/1, handle_call/3, handle_cast/2, handle_info/2, + terminate/2, code_change/3]). + +-define(SERVER, ?MODULE). + +-record(state, { mod, q }). + +%%%=================================================================== +%%% API +%%%=================================================================== + +%%-------------------------------------------------------------------- +%% @doc +%% Starts the server +%% +%% @spec start_link(Mod) -> {ok, Pid} | ignore | {error, Error} +%% @end +%%-------------------------------------------------------------------- +start_link(Mod) -> + gen_server:start_link({local, ?SERVER}, ?MODULE, [Mod], []). + +stop() -> + gen_server:stop(?SERVER). + +call(M) -> + gen_server:call(?SERVER, M, infinity). + +in(I) -> + call({in, I}). + +in(I, P) -> + call({in, I, P}). + +len() -> + call(len). + +is_empty() -> + call(is_empty). + +is_queue() -> + call(is_queue). + +to_list() -> + call(to_list). + +out() -> + call(out). + +out(P) -> + call({out, P}). + +pout() -> + call(pout). + +%%%=================================================================== +%%% gen_server callbacks +%%%=================================================================== + +%%-------------------------------------------------------------------- +%% @private +%% @doc +%% Initializes the server +%% +%% @spec init(Args) -> {ok, State} | +%% {ok, State, Timeout} | +%% ignore | +%% {stop, Reason} +%% @end +%%-------------------------------------------------------------------- +init([Mod]) -> + {ok, #state{ mod = Mod, + q = Mod:new() }}. + +%%-------------------------------------------------------------------- +%% @private +%% @doc +%% Handling call messages +%% +%% @spec handle_call(Request, From, State) -> +%% {reply, Reply, State} | +%% {reply, Reply, State, Timeout} | +%% {noreply, State} | +%% {noreply, State, Timeout} | +%% {stop, Reason, Reply, State} | +%% {stop, Reason, State} +%% @end +%%-------------------------------------------------------------------- +handle_call({in, Item}, _F, #state { q = Q, mod = M } = S) -> + NQ = M:in(Item, Q), + {reply, ok, S#state { q = NQ }}; +handle_call({in, Item, Prio}, _F, #state { q = Q, mod = M } = S) -> + NQ = M:in(Item, Prio, Q), + {reply, ok, S#state { q = NQ }}; +handle_call({out, P}, _F, #state { q = Q, mod = M } = S) -> + {R, NQ} = M:out(P, Q), + {reply, R, S#state { q = NQ }}; +handle_call(Ty, _F, #state { q = Q, mod = M } = S) when Ty == out; + Ty == pout -> + {R, NQ} = M:Ty(Q), + {reply, R, S#state { q = NQ }}; +handle_call(Ty, _F, #state { q = Q, mod = M } = S) when Ty == is_queue; + Ty == is_empty; + Ty == len; + Ty == to_list -> + R = M:Ty(Q), + {reply, R, S}; +handle_call(Req, From, State) -> + error_logger:info_report([{handle_call, Req, From, State}]), + Reply = ok, + {reply, Reply, State}. + +%%-------------------------------------------------------------------- +%% @private +%% @doc +%% Handling cast messages +%% +%% @spec handle_cast(Msg, State) -> {noreply, State} | +%% {noreply, State, Timeout} | +%% {stop, Reason, State} +%% @end +%%-------------------------------------------------------------------- +handle_cast(_Msg, State) -> + {noreply, State}. + +%%-------------------------------------------------------------------- +%% @private +%% @doc +%% Handling all non call/cast messages +%% +%% @spec handle_info(Info, State) -> {noreply, State} | +%% {noreply, State, Timeout} | +%% {stop, Reason, State} +%% @end +%%-------------------------------------------------------------------- +handle_info(_Info, State) -> + {noreply, State}. + +%%-------------------------------------------------------------------- +%% @private +%% @doc +%% This function is called by a gen_server when it is about to +%% terminate. It should be the opposite of Module:init/1 and do any +%% necessary cleaning up. When it returns, the gen_server terminates +%% with Reason. The return value is ignored. +%% +%% @spec terminate(Reason, State) -> void() +%% @end +%%-------------------------------------------------------------------- +terminate(_Reason, _State) -> + ok. + +%%-------------------------------------------------------------------- +%% @private +%% @doc +%% Convert process state when code is changed +%% +%% @spec code_change(OldVsn, State, Extra) -> {ok, NewState} +%% @end +%%-------------------------------------------------------------------- +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +%%%=================================================================== +%%% Internal functions +%%%=================================================================== diff --git a/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/gleam@@compile.erl new file mode 100644 index 0000000..543db88 --- /dev/null +++ b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/gleam@@compile.erl @@ -0,0 +1,157 @@ +#!/usr/bin/env escript + +% TODO: Don't concurrently print warnings and errors +% TODO: Some tests + +-record(arguments, {lib = "./", out = "./", modules = []}). + +main(Args) -> + #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args), + IsElixirModule = fun(Module) -> + filename:extension(Module) =:= ".ex" + end, + {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules), + ok = configure_logging(), + ok = add_lib_to_erlang_path(Lib), + ok = filelib:ensure_dir([Out, $/]), + {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out), + {ElixirOk, _ElixirBeams} = case ErlangOk of + true -> compile_elixir(ElixirModules, Out); + false -> {false, []} + end, + case ErlangOk and ElixirOk of + true -> ok; + false -> erlang:halt(1) + end. + +compile_erlang(Modules, Out) -> + Workers = start_compiler_workers(Out), + ok = producer_loop(Modules, Workers), + collect_results({true, []}). + +collect_results(Acc = {Result, Beams}) -> + receive + {compiled, Beam} -> collect_results({Result, [Beam | Beams]}); + failed -> collect_results({false, Beams}) + after 0 -> Acc + end. + +producer_loop([], 0) -> + ok; +producer_loop([], Workers) -> + receive + {work_please, _} -> producer_loop([], Workers - 1) + end; +producer_loop([Module | Modules], Workers) -> + receive + {work_please, Worker} -> + erlang:send(Worker, {module, Module}), + producer_loop(Modules, Workers) + end. + +start_compiler_workers(Out) -> + Parent = self(), + NumSchedulers = erlang:system_info(schedulers), + SpawnWorker = fun(_) -> + erlang:spawn_link(fun() -> worker_loop(Parent, Out) end) + end, + lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)), + NumSchedulers. + +worker_loop(Parent, Out) -> + Options = [report_errors, report_warnings, debug_info, {outdir, Out}], + erlang:send(Parent, {work_please, self()}), + receive + {module, Module} -> + log({compiling, Module}), + case compile:file(Module, Options) of + {ok, ModuleName} -> + Beam = filename:join(Out, ModuleName) ++ ".beam", + Message = {compiled, Beam}, + log(Message), + erlang:send(Parent, Message); + error -> + log({failed, Module}), + erlang:send(Parent, failed) + end, + worker_loop(Parent, Out) + end. + +compile_elixir(Modules, Out) -> + Error = [ + "The program elixir was not found. Is it installed?", + $\n, + "Documentation for installing Elixir can be viewed here:", + $\n, + "https://elixir-lang.org/install.html" + ], + case Modules of + [] -> {true, []}; + _ -> + log({starting, "compiler.app"}), + ok = application:start(compiler), + log({starting, "elixir.app"}), + case application:start(elixir) of + ok -> do_compile_elixir(Modules, Out); + _ -> + io:put_chars(standard_error, [Error, $\n]), + {false, []} + end + end. + +do_compile_elixir(Modules, Out) -> + ModuleBins = lists:map(fun(Module) -> + log({compiling, Module}), + list_to_binary(Module) + end, Modules), + OutBin = list_to_binary(Out), + Options = [{dest, OutBin}], + % Silence "redefining module" warnings. + % Compiled modules in the build directory are added to the code path. + % These warnings result from recompiling loaded modules. + % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation. + 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]), + case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of + {ok, ModuleAtoms, _} -> + ToBeam = fun(ModuleAtom) -> + Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam", + log({compiled, Beam}), + Beam + end, + {true, lists:map(ToBeam, ModuleAtoms)}; + {error, Errors, _} -> + % Log all filenames associated with modules that failed to compile. + % Note: The compiler prints compilation errors upon encountering them. + ErrorFiles = lists:usort([File || {File, _, _} <- Errors]), + Log = fun(File) -> + log({failed, binary_to_list(File)}) + end, + lists:foreach(Log, ErrorFiles), + {false, []}; + _ -> {false, []} + end. + +add_lib_to_erlang_path(Lib) -> + code:add_paths(filelib:wildcard([Lib, "/*/ebin"])). + +parse(Args) -> + parse(Args, #arguments{}). + +parse([], Arguments) -> + Arguments; +parse(["--lib", Lib | Rest], Arguments) -> + parse(Rest, Arguments#arguments{lib = Lib}); +parse(["--out", Out | Rest], Arguments) -> + parse(Rest, Arguments#arguments{out = Out}); +parse([Module | Rest], Arguments = #arguments{modules = Modules}) -> + parse(Rest, Arguments#arguments{modules = [Module | Modules]}). + +configure_logging() -> + Enabled = os:getenv("GLEAM_LOG") /= false, + persistent_term:put(gleam_logging_enabled, Enabled). + +log(Term) -> + case persistent_term:get(gleam_logging_enabled) of + true -> erlang:display(Term), ok; + false -> ok + end. diff --git a/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.cache b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.cache Binary files differnew file mode 100644 index 0000000..4ef501f --- /dev/null +++ b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.cache diff --git a/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.cache_meta b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.cache_meta Binary files differnew file mode 100644 index 0000000..90aa893 --- /dev/null +++ b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.cache_meta diff --git a/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.erl b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.erl new file mode 100644 index 0000000..59361a2 --- /dev/null +++ b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.erl @@ -0,0 +1,287 @@ +-module(simplifile). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([read/1, write/2, delete/1, delete_all/1, append/2, read_bits/1, write_bits/2, append_bits/2, is_directory/1, create_directory/1, read_directory/1, is_file/1, create_file/1, get_files/1, create_directory_all/1, copy_directory/2, rename_directory/2, copy_file/2, rename_file/2]). +-export_type([file_error/0]). + +-type file_error() :: eacces | + eagain | + ebadf | + ebadmsg | + ebusy | + edeadlk | + edeadlock | + edquot | + eexist | + efault | + efbig | + eftype | + eintr | + einval | + eio | + eisdir | + eloop | + emfile | + emlink | + emultihop | + enametoolong | + enfile | + enobufs | + enodev | + enolck | + enolink | + enoent | + enomem | + enospc | + enosr | + enostr | + enosys | + enotblk | + enotdir | + enotsup | + enxio | + eopnotsupp | + eoverflow | + eperm | + epipe | + erange | + erofs | + espipe | + esrch | + estale | + etxtbsy | + exdev | + not_utf8 | + unknown. + +-spec do_append(binary(), binary()) -> {ok, nil} | {error, file_error()}. +do_append(Content, Filepath) -> + _pipe = Content, + _pipe@1 = gleam_stdlib:identity(_pipe), + simplifile_erl:append_file(_pipe@1, Filepath). + +-spec do_write(binary(), binary()) -> {ok, nil} | {error, file_error()}. +do_write(Content, Filepath) -> + _pipe = Content, + _pipe@1 = gleam_stdlib:identity(_pipe), + simplifile_erl:write_file(_pipe@1, Filepath). + +-spec do_read(binary()) -> {ok, binary()} | {error, file_error()}. +do_read(Filepath) -> + case simplifile_erl:read_file(Filepath) of + {ok, Bits} -> + case gleam@bit_array:to_string(Bits) of + {ok, Str} -> + {ok, Str}; + + _ -> + {error, not_utf8} + end; + + {error, E} -> + {error, E} + end. + +-spec cast_error({ok, JXG} | {error, file_error()}) -> {ok, JXG} | + {error, file_error()}. +cast_error(Input) -> + Input. + +-spec read(binary()) -> {ok, binary()} | {error, file_error()}. +read(Filepath) -> + _pipe = do_read(Filepath), + cast_error(_pipe). + +-spec write(binary(), binary()) -> {ok, nil} | {error, file_error()}. +write(Filepath, Contents) -> + _pipe = do_write(Contents, Filepath), + cast_error(_pipe). + +-spec delete(binary()) -> {ok, nil} | {error, file_error()}. +delete(Path) -> + _pipe = simplifile_erl:recursive_delete(Path), + cast_error(_pipe). + +-spec delete_all(list(binary())) -> {ok, nil} | {error, file_error()}. +delete_all(Paths) -> + case Paths of + [] -> + {ok, nil}; + + [Path | Rest] -> + case delete(Path) of + {ok, nil} -> + delete_all(Rest); + + {error, enoent} -> + delete_all(Rest); + + E -> + E + end + end. + +-spec append(binary(), binary()) -> {ok, nil} | {error, file_error()}. +append(Filepath, Contents) -> + _pipe = do_append(Contents, Filepath), + cast_error(_pipe). + +-spec read_bits(binary()) -> {ok, bitstring()} | {error, file_error()}. +read_bits(Filepath) -> + _pipe = simplifile_erl:read_file(Filepath), + cast_error(_pipe). + +-spec write_bits(binary(), bitstring()) -> {ok, nil} | {error, file_error()}. +write_bits(Filepath, Bits) -> + _pipe = simplifile_erl:write_file(Bits, Filepath), + cast_error(_pipe). + +-spec append_bits(binary(), bitstring()) -> {ok, nil} | {error, file_error()}. +append_bits(Filepath, Bits) -> + _pipe = simplifile_erl:append_file(Bits, Filepath), + cast_error(_pipe). + +-spec is_directory(binary()) -> boolean(). +is_directory(Filepath) -> + filelib:is_dir(Filepath). + +-spec create_directory(binary()) -> {ok, nil} | {error, file_error()}. +create_directory(Filepath) -> + _pipe = simplifile_erl:make_directory(Filepath), + cast_error(_pipe). + +-spec read_directory(binary()) -> {ok, list(binary())} | {error, file_error()}. +read_directory(Path) -> + _pipe = simplifile_erl:list_directory(Path), + cast_error(_pipe). + +-spec is_file(binary()) -> boolean(). +is_file(Filepath) -> + simplifile_erl:is_file(Filepath). + +-spec create_file(binary()) -> {ok, nil} | {error, file_error()}. +create_file(Filepath) -> + case begin + _pipe = Filepath, + is_file(_pipe) + end + orelse begin + _pipe@1 = Filepath, + is_directory(_pipe@1) + end of + true -> + {error, eexist}; + + false -> + write_bits(Filepath, <<>>) + end. + +-spec do_copy_directory(binary(), binary()) -> {ok, nil} | {error, file_error()}. +do_copy_directory(Src, Dest) -> + gleam@result:'try'( + read_directory(Src), + fun(Segments) -> + _pipe = Segments, + gleam@list:each( + _pipe, + fun(Segment) -> + Src_path = <<<<Src/binary, "/"/utf8>>/binary, + Segment/binary>>, + Dest_path = <<<<Dest/binary, "/"/utf8>>/binary, + Segment/binary>>, + case {is_file(Src_path), is_directory(Src_path)} of + {true, false} -> + gleam@result:'try'( + read_bits(Src_path), + fun(Content) -> _pipe@1 = Content, + write_bits(Dest_path, _pipe@1) end + ); + + {false, true} -> + gleam@result:'try'( + create_directory(Dest_path), + fun(_) -> + do_copy_directory(Src_path, Dest_path) + end + ); + + {_, _} -> + erlang:error(#{gleam_error => panic, + message => <<"unreachable"/utf8>>, + module => <<"simplifile"/utf8>>, + function => <<"do_copy_directory"/utf8>>, + line => 341}) + end + end + ), + {ok, nil} + end + ). + +-spec get_files(binary()) -> {ok, list(binary())} | {error, file_error()}. +get_files(Directory) -> + gleam@result:'try'( + read_directory(Directory), + fun(Contents) -> + Paths = gleam@list:map( + Contents, + fun(Segment) -> + <<<<Directory/binary, "/"/utf8>>/binary, Segment/binary>> + end + ), + Files = gleam@list:filter(Paths, fun is_file/1), + case gleam@list:filter(Paths, fun is_directory/1) of + [] -> + {ok, Files}; + + Directories -> + gleam@result:'try'( + gleam@list:try_map(Directories, fun get_files/1), + fun(Nested_files) -> + {ok, + gleam@list:append( + Files, + gleam@list:flatten(Nested_files) + )} + end + ) + end + end + ). + +-spec create_directory_all(binary()) -> {ok, nil} | {error, file_error()}. +create_directory_all(Dirpath) -> + Path = case begin + _pipe = Dirpath, + gleam@string:ends_with(_pipe, <<"/"/utf8>>) + end of + true -> + Dirpath; + + false -> + <<Dirpath/binary, "/"/utf8>> + end, + _pipe@1 = simplifile_erl:create_dir_all(Path), + cast_error(_pipe@1). + +-spec copy_directory(binary(), binary()) -> {ok, nil} | {error, file_error()}. +copy_directory(Src, Dest) -> + gleam@result:'try'( + create_directory_all(Dest), + fun(_) -> do_copy_directory(Src, Dest) end + ). + +-spec rename_directory(binary(), binary()) -> {ok, nil} | {error, file_error()}. +rename_directory(Src, Dest) -> + gleam@result:'try'(copy_directory(Src, Dest), fun(_) -> delete(Src) end). + +-spec copy_file(binary(), binary()) -> {ok, nil} | {error, file_error()}. +copy_file(Src, Dest) -> + _pipe = file:copy(Src, Dest), + _pipe@1 = gleam@result:replace(_pipe, nil), + cast_error(_pipe@1). + +-spec rename_file(binary(), binary()) -> {ok, nil} | {error, file_error()}. +rename_file(Src, Dest) -> + _pipe = simplifile_erl:rename_file(Src, Dest), + cast_error(_pipe). diff --git a/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile_erl.erl b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile_erl.erl new file mode 100644 index 0000000..dac135a --- /dev/null +++ b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile_erl.erl @@ -0,0 +1,70 @@ +-module(simplifile_erl). +-export([ + read_file/1, + append_file/2, write_file/2, delete_file/1, delete_directory/1, recursive_delete/1, + list_directory/1, make_directory/1, is_file/1, create_dir_all/1, rename_file/2 +]). + +-define(is_posix_error(Error), + Error =:= eacces orelse Error =:= eagain orelse Error =:= ebadf orelse + Error =:= ebadmsg orelse Error =:= ebusy orelse Error =:= edeadlk orelse + Error =:= edeadlock orelse Error =:= edquot orelse Error =:= eexist orelse + Error =:= efault orelse Error =:= efbig orelse Error =:= eftype orelse + Error =:= eintr orelse Error =:= einval orelse Error =:= eio orelse + Error =:= eisdir orelse Error =:= eloop orelse Error =:= emfile orelse + Error =:= emlink orelse Error =:= emultihop orelse Error =:= enametoolong orelse + Error =:= enfile orelse Error =:= enobufs orelse Error =:= enodev orelse + Error =:= enolck orelse Error =:= enolink orelse Error =:= enoent orelse + Error =:= enomem orelse Error =:= enospc orelse Error =:= enosr orelse + Error =:= enostr orelse Error =:= enosys orelse Error =:= enotblk orelse + Error =:= enotdir orelse Error =:= enotsup orelse Error =:= enxio orelse + Error =:= eopnotsupp orelse Error =:= eoverflow orelse Error =:= eperm orelse + Error =:= epipe orelse Error =:= erange orelse Error =:= erofs orelse + Error =:= espipe orelse Error =:= esrch orelse Error =:= estale orelse + Error =:= etxtbsy orelse Error =:= exdev +). + +posix_result(Result) -> + case Result of + ok -> {ok, nil}; + {ok, Value} -> {ok, Value}; + {error, Reason} when ?is_posix_error(Reason) -> {error, Reason} + end. + +read_file(Filename) -> + posix_result(file:read_file(Filename)). + +write_file(Contents, Filename) -> + posix_result(file:write_file(Filename, Contents)). + +append_file(Contents, Filename) -> + posix_result(file:write_file(Filename, Contents, [append])). + +delete_file(Filename) -> + posix_result(file:delete(Filename)). + +make_directory(Dir) -> + posix_result(file:make_dir(Dir)). + +list_directory(Dir) -> + case file:list_dir(Dir) of + {ok, Filenames} -> + {ok, [list_to_binary(Filename) || Filename <- Filenames]}; + {error, Reason} when ?is_posix_error(Reason) -> + {error, Reason} + end. + +delete_directory(Dir) -> + posix_result(file:del_dir(Dir)). + +recursive_delete(Dir) -> + posix_result(file:del_dir_r(Dir)). + +is_file(Filename) -> + not (file:read_file_info(Filename) == {error, enoent}) and not filelib: is_dir(Filename). + +create_dir_all(Filename) -> + posix_result(filelib:ensure_dir(Filename)). + +rename_file(Source, Destination) -> + posix_result(file:rename(Source, Destination)). diff --git a/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile_js.mjs b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile_js.mjs new file mode 100644 index 0000000..faf4109 --- /dev/null +++ b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile_js.mjs @@ -0,0 +1,102 @@ +import fs from "node:fs" +import path from "node:path" +import { BitArray, Ok, Error as GError, toList} from "./gleam.mjs"; + +export function readBits(filepath) { + try { + const contents = fs.readFileSync(path.normalize(filepath)) + return new Ok(new BitArray(new Uint8Array(contents))) + } catch(e) { + return new GError(stringifyError(e)) + } +} + +export function writeBits(contents, filepath) { + try { + fs.writeFileSync(path.normalize(filepath), contents.buffer) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +export function appendBits(contents, filepath) { + try { + fs.appendFileSync(path.normalize(filepath), contents.buffer) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +function stringifyError(e) { + return e.code +} + +export function isFile(filepath) { + let fp = path.normalize(filepath) + return fs.existsSync(fp) && fs.lstatSync(fp).isFile(); +} + +export function isDirectory(filepath) { + let fp = path.normalize(filepath) + return fs.existsSync(fp) && fs.lstatSync(fp).isDirectory(); +} + +export function makeDirectory(filepath) { + try { + fs.mkdirSync(path.normalize(filepath)) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +export function createDirAll(filepath) { + try { + fs.mkdirSync(filepath, { recursive: true }) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +export function deleteFileOrDirRecursive(fileOrDirPath) { + try { + if (isDirectory(fileOrDirPath)) { + fs.rmSync(path.normalize(fileOrDirPath), { recursive: true }) + } else { + fs.unlinkSync(path.normalize(fileOrDirPath)) + } + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +export function listContents(filepath) { + try { + const stuff = toList(fs.readdirSync(path.normalize(filepath))) + return new Ok(stuff) + } catch(e) { + return new GError(stringifyError(e)) + } +} + +export function copyFile(srcpath, destpath) { + try { + fs.copyFileSync(path.normalize(srcpath), path.normalize(destpath)) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +export function renameFile(srcpath, destpath) { + try { + fs.renameSync(path.normalize(srcpath), path.normalize(destpath)) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +}
\ No newline at end of file diff --git a/aoc2023/build/dev/erlang/simplifile/ebin/simplifile.app b/aoc2023/build/dev/erlang/simplifile/ebin/simplifile.app new file mode 100644 index 0000000..3bb63fa --- /dev/null +++ b/aoc2023/build/dev/erlang/simplifile/ebin/simplifile.app @@ -0,0 +1,7 @@ +{application, simplifile, [ + {vsn, "1.0.0"}, + {applications, [gleam_stdlib]}, + {description, "Basic file operations that work on all targets"}, + {modules, []}, + {registered, []} +]}. diff --git a/aoc2023/build/dev/erlang/simplifile/ebin/simplifile.beam b/aoc2023/build/dev/erlang/simplifile/ebin/simplifile.beam Binary files differnew file mode 100644 index 0000000..7d3bcd6 --- /dev/null +++ b/aoc2023/build/dev/erlang/simplifile/ebin/simplifile.beam diff --git a/aoc2023/build/dev/erlang/simplifile/ebin/simplifile_erl.beam b/aoc2023/build/dev/erlang/simplifile/ebin/simplifile_erl.beam Binary files differnew file mode 100644 index 0000000..b859e1e --- /dev/null +++ b/aoc2023/build/dev/erlang/simplifile/ebin/simplifile_erl.beam diff --git a/aoc2023/build/dev/erlang/snag/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/snag/_gleam_artefacts/gleam@@compile.erl new file mode 100644 index 0000000..543db88 --- /dev/null +++ b/aoc2023/build/dev/erlang/snag/_gleam_artefacts/gleam@@compile.erl @@ -0,0 +1,157 @@ +#!/usr/bin/env escript + +% TODO: Don't concurrently print warnings and errors +% TODO: Some tests + +-record(arguments, {lib = "./", out = "./", modules = []}). + +main(Args) -> + #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args), + IsElixirModule = fun(Module) -> + filename:extension(Module) =:= ".ex" + end, + {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules), + ok = configure_logging(), + ok = add_lib_to_erlang_path(Lib), + ok = filelib:ensure_dir([Out, $/]), + {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out), + {ElixirOk, _ElixirBeams} = case ErlangOk of + true -> compile_elixir(ElixirModules, Out); + false -> {false, []} + end, + case ErlangOk and ElixirOk of + true -> ok; + false -> erlang:halt(1) + end. + +compile_erlang(Modules, Out) -> + Workers = start_compiler_workers(Out), + ok = producer_loop(Modules, Workers), + collect_results({true, []}). + +collect_results(Acc = {Result, Beams}) -> + receive + {compiled, Beam} -> collect_results({Result, [Beam | Beams]}); + failed -> collect_results({false, Beams}) + after 0 -> Acc + end. + +producer_loop([], 0) -> + ok; +producer_loop([], Workers) -> + receive + {work_please, _} -> producer_loop([], Workers - 1) + end; +producer_loop([Module | Modules], Workers) -> + receive + {work_please, Worker} -> + erlang:send(Worker, {module, Module}), + producer_loop(Modules, Workers) + end. + +start_compiler_workers(Out) -> + Parent = self(), + NumSchedulers = erlang:system_info(schedulers), + SpawnWorker = fun(_) -> + erlang:spawn_link(fun() -> worker_loop(Parent, Out) end) + end, + lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)), + NumSchedulers. + +worker_loop(Parent, Out) -> + Options = [report_errors, report_warnings, debug_info, {outdir, Out}], + erlang:send(Parent, {work_please, self()}), + receive + {module, Module} -> + log({compiling, Module}), + case compile:file(Module, Options) of + {ok, ModuleName} -> + Beam = filename:join(Out, ModuleName) ++ ".beam", + Message = {compiled, Beam}, + log(Message), + erlang:send(Parent, Message); + error -> + log({failed, Module}), + erlang:send(Parent, failed) + end, + worker_loop(Parent, Out) + end. + +compile_elixir(Modules, Out) -> + Error = [ + "The program elixir was not found. Is it installed?", + $\n, + "Documentation for installing Elixir can be viewed here:", + $\n, + "https://elixir-lang.org/install.html" + ], + case Modules of + [] -> {true, []}; + _ -> + log({starting, "compiler.app"}), + ok = application:start(compiler), + log({starting, "elixir.app"}), + case application:start(elixir) of + ok -> do_compile_elixir(Modules, Out); + _ -> + io:put_chars(standard_error, [Error, $\n]), + {false, []} + end + end. + +do_compile_elixir(Modules, Out) -> + ModuleBins = lists:map(fun(Module) -> + log({compiling, Module}), + list_to_binary(Module) + end, Modules), + OutBin = list_to_binary(Out), + Options = [{dest, OutBin}], + % Silence "redefining module" warnings. + % Compiled modules in the build directory are added to the code path. + % These warnings result from recompiling loaded modules. + % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation. + 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]), + case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of + {ok, ModuleAtoms, _} -> + ToBeam = fun(ModuleAtom) -> + Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam", + log({compiled, Beam}), + Beam + end, + {true, lists:map(ToBeam, ModuleAtoms)}; + {error, Errors, _} -> + % Log all filenames associated with modules that failed to compile. + % Note: The compiler prints compilation errors upon encountering them. + ErrorFiles = lists:usort([File || {File, _, _} <- Errors]), + Log = fun(File) -> + log({failed, binary_to_list(File)}) + end, + lists:foreach(Log, ErrorFiles), + {false, []}; + _ -> {false, []} + end. + +add_lib_to_erlang_path(Lib) -> + code:add_paths(filelib:wildcard([Lib, "/*/ebin"])). + +parse(Args) -> + parse(Args, #arguments{}). + +parse([], Arguments) -> + Arguments; +parse(["--lib", Lib | Rest], Arguments) -> + parse(Rest, Arguments#arguments{lib = Lib}); +parse(["--out", Out | Rest], Arguments) -> + parse(Rest, Arguments#arguments{out = Out}); +parse([Module | Rest], Arguments = #arguments{modules = Modules}) -> + parse(Rest, Arguments#arguments{modules = [Module | Modules]}). + +configure_logging() -> + Enabled = os:getenv("GLEAM_LOG") /= false, + persistent_term:put(gleam_logging_enabled, Enabled). + +log(Term) -> + case persistent_term:get(gleam_logging_enabled) of + true -> erlang:display(Term), ok; + false -> ok + end. diff --git a/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.cache b/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.cache Binary files differnew file mode 100644 index 0000000..7fa2fe5 --- /dev/null +++ b/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.cache diff --git a/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.cache_meta b/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.cache_meta Binary files differnew file mode 100644 index 0000000..daef1e9 --- /dev/null +++ b/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.cache_meta diff --git a/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.erl b/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.erl new file mode 100644 index 0000000..a3ad8f4 --- /dev/null +++ b/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.erl @@ -0,0 +1,74 @@ +-module(snag). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([new/1, error/1, layer/2, context/2, pretty_print/1, line_print/1]). +-export_type([snag/0]). + +-type snag() :: {snag, binary(), list(binary())}. + +-spec new(binary()) -> snag(). +new(Issue) -> + {snag, Issue, []}. + +-spec error(binary()) -> {ok, any()} | {error, snag()}. +error(Issue) -> + {error, new(Issue)}. + +-spec layer(snag(), binary()) -> snag(). +layer(Snag, Issue) -> + {snag, Issue, [erlang:element(2, Snag) | erlang:element(3, Snag)]}. + +-spec context({ok, IOV} | {error, snag()}, binary()) -> {ok, IOV} | + {error, snag()}. +context(Result, Issue) -> + case Result of + {ok, _} -> + Result; + + {error, Snag} -> + {error, layer(Snag, Issue)} + end. + +-spec pretty_print_cause(list(binary())) -> gleam@string_builder:string_builder(). +pretty_print_cause(Cause) -> + _pipe = Cause, + _pipe@1 = gleam@list:index_map( + _pipe, + fun(Index, Line) -> + gleam@string:concat( + [<<" "/utf8>>, + gleam@int:to_string(Index), + <<": "/utf8>>, + Line, + <<"\n"/utf8>>] + ) + end + ), + gleam@string_builder:from_strings(_pipe@1). + +-spec pretty_print(snag()) -> binary(). +pretty_print(Snag) -> + Builder = gleam@string_builder:from_strings( + [<<"error: "/utf8>>, erlang:element(2, Snag), <<"\n"/utf8>>] + ), + gleam@string_builder:to_string(case erlang:element(3, Snag) of + [] -> + Builder; + + Cause -> + _pipe = Builder, + _pipe@1 = gleam@string_builder:append( + _pipe, + <<"\ncause:\n"/utf8>> + ), + gleam@string_builder:append_builder( + _pipe@1, + pretty_print_cause(Cause) + ) + end). + +-spec line_print(snag()) -> binary(). +line_print(Snag) -> + _pipe = [gleam@string:append(<<"error: "/utf8>>, erlang:element(2, Snag)) | + erlang:element(3, Snag)], + gleam@string:join(_pipe, <<" <- "/utf8>>). diff --git a/aoc2023/build/dev/erlang/snag/ebin/snag.app b/aoc2023/build/dev/erlang/snag/ebin/snag.app new file mode 100644 index 0000000..724fb97 --- /dev/null +++ b/aoc2023/build/dev/erlang/snag/ebin/snag.app @@ -0,0 +1,7 @@ +{application, snag, [ + {vsn, "0.2.1"}, + {applications, [gleam_stdlib]}, + {description, "A boilerplate-free ad-hoc error type"}, + {modules, []}, + {registered, []} +]}. diff --git a/aoc2023/build/dev/erlang/snag/ebin/snag.beam b/aoc2023/build/dev/erlang/snag/ebin/snag.beam Binary files differnew file mode 100644 index 0000000..4af73ad --- /dev/null +++ b/aoc2023/build/dev/erlang/snag/ebin/snag.beam diff --git a/aoc2023/build/dev/erlang/snag/include/snag_Snag.hrl b/aoc2023/build/dev/erlang/snag/include/snag_Snag.hrl new file mode 100644 index 0000000..5d6614e --- /dev/null +++ b/aoc2023/build/dev/erlang/snag/include/snag_Snag.hrl @@ -0,0 +1 @@ +-record(snag, {issue :: binary(), cause :: list(binary())}). diff --git a/aoc2023/build/dev/erlang/tom/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/tom/_gleam_artefacts/gleam@@compile.erl new file mode 100644 index 0000000..543db88 --- /dev/null +++ b/aoc2023/build/dev/erlang/tom/_gleam_artefacts/gleam@@compile.erl @@ -0,0 +1,157 @@ +#!/usr/bin/env escript + +% TODO: Don't concurrently print warnings and errors +% TODO: Some tests + +-record(arguments, {lib = "./", out = "./", modules = []}). + +main(Args) -> + #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args), + IsElixirModule = fun(Module) -> + filename:extension(Module) =:= ".ex" + end, + {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules), + ok = configure_logging(), + ok = add_lib_to_erlang_path(Lib), + ok = filelib:ensure_dir([Out, $/]), + {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out), + {ElixirOk, _ElixirBeams} = case ErlangOk of + true -> compile_elixir(ElixirModules, Out); + false -> {false, []} + end, + case ErlangOk and ElixirOk of + true -> ok; + false -> erlang:halt(1) + end. + +compile_erlang(Modules, Out) -> + Workers = start_compiler_workers(Out), + ok = producer_loop(Modules, Workers), + collect_results({true, []}). + +collect_results(Acc = {Result, Beams}) -> + receive + {compiled, Beam} -> collect_results({Result, [Beam | Beams]}); + failed -> collect_results({false, Beams}) + after 0 -> Acc + end. + +producer_loop([], 0) -> + ok; +producer_loop([], Workers) -> + receive + {work_please, _} -> producer_loop([], Workers - 1) + end; +producer_loop([Module | Modules], Workers) -> + receive + {work_please, Worker} -> + erlang:send(Worker, {module, Module}), + producer_loop(Modules, Workers) + end. + +start_compiler_workers(Out) -> + Parent = self(), + NumSchedulers = erlang:system_info(schedulers), + SpawnWorker = fun(_) -> + erlang:spawn_link(fun() -> worker_loop(Parent, Out) end) + end, + lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)), + NumSchedulers. + +worker_loop(Parent, Out) -> + Options = [report_errors, report_warnings, debug_info, {outdir, Out}], + erlang:send(Parent, {work_please, self()}), + receive + {module, Module} -> + log({compiling, Module}), + case compile:file(Module, Options) of + {ok, ModuleName} -> + Beam = filename:join(Out, ModuleName) ++ ".beam", + Message = {compiled, Beam}, + log(Message), + erlang:send(Parent, Message); + error -> + log({failed, Module}), + erlang:send(Parent, failed) + end, + worker_loop(Parent, Out) + end. + +compile_elixir(Modules, Out) -> + Error = [ + "The program elixir was not found. Is it installed?", + $\n, + "Documentation for installing Elixir can be viewed here:", + $\n, + "https://elixir-lang.org/install.html" + ], + case Modules of + [] -> {true, []}; + _ -> + log({starting, "compiler.app"}), + ok = application:start(compiler), + log({starting, "elixir.app"}), + case application:start(elixir) of + ok -> do_compile_elixir(Modules, Out); + _ -> + io:put_chars(standard_error, [Error, $\n]), + {false, []} + end + end. + +do_compile_elixir(Modules, Out) -> + ModuleBins = lists:map(fun(Module) -> + log({compiling, Module}), + list_to_binary(Module) + end, Modules), + OutBin = list_to_binary(Out), + Options = [{dest, OutBin}], + % Silence "redefining module" warnings. + % Compiled modules in the build directory are added to the code path. + % These warnings result from recompiling loaded modules. + % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation. + 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]), + case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of + {ok, ModuleAtoms, _} -> + ToBeam = fun(ModuleAtom) -> + Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam", + log({compiled, Beam}), + Beam + end, + {true, lists:map(ToBeam, ModuleAtoms)}; + {error, Errors, _} -> + % Log all filenames associated with modules that failed to compile. + % Note: The compiler prints compilation errors upon encountering them. + ErrorFiles = lists:usort([File || {File, _, _} <- Errors]), + Log = fun(File) -> + log({failed, binary_to_list(File)}) + end, + lists:foreach(Log, ErrorFiles), + {false, []}; + _ -> {false, []} + end. + +add_lib_to_erlang_path(Lib) -> + code:add_paths(filelib:wildcard([Lib, "/*/ebin"])). + +parse(Args) -> + parse(Args, #arguments{}). + +parse([], Arguments) -> + Arguments; +parse(["--lib", Lib | Rest], Arguments) -> + parse(Rest, Arguments#arguments{lib = Lib}); +parse(["--out", Out | Rest], Arguments) -> + parse(Rest, Arguments#arguments{out = Out}); +parse([Module | Rest], Arguments = #arguments{modules = Modules}) -> + parse(Rest, Arguments#arguments{modules = [Module | Modules]}). + +configure_logging() -> + Enabled = os:getenv("GLEAM_LOG") /= false, + persistent_term:put(gleam_logging_enabled, Enabled). + +log(Term) -> + case persistent_term:get(gleam_logging_enabled) of + true -> erlang:display(Term), ok; + false -> ok + end. diff --git a/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.cache b/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.cache Binary files differnew file mode 100644 index 0000000..036c033 --- /dev/null +++ b/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.cache diff --git a/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.cache_meta b/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.cache_meta Binary files differnew file mode 100644 index 0000000..492599b --- /dev/null +++ b/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.cache_meta diff --git a/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.erl b/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.erl new file mode 100644 index 0000000..0429a31 --- /dev/null +++ b/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.erl @@ -0,0 +1,2142 @@ +-module(tom). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([get/2, get_int/2, get_float/2, get_bool/2, get_string/2, get_date/2, get_time/2, get_date_time/2, get_array/2, get_table/2, get_number/2, parse/1]). +-export_type([toml/0, date_time/0, date/0, time/0, offset/0, sign/0, parse_error/0, number_/0, get_error/0]). + +-type toml() :: {int, integer()} | + {float, float()} | + {infinity, sign()} | + {nan, sign()} | + {bool, boolean()} | + {string, binary()} | + {date, date()} | + {time, time()} | + {date_time, date_time()} | + {array, list(toml())} | + {array_of_tables, list(gleam@dict:dict(binary(), toml()))} | + {table, gleam@dict:dict(binary(), toml())} | + {inline_table, gleam@dict:dict(binary(), toml())}. + +-type date_time() :: {date_time_value, date(), time(), offset()}. + +-type date() :: {date_value, integer(), integer(), integer()}. + +-type time() :: {time_value, integer(), integer(), integer(), integer()}. + +-type offset() :: local | {offset, sign(), integer(), integer()}. + +-type sign() :: positive | negative. + +-type parse_error() :: {unexpected, binary(), binary()} | + {key_already_in_use, list(binary())}. + +-type number_() :: {number_int, integer()} | + {number_float, float()} | + {number_infinity, sign()} | + {number_nan, sign()}. + +-type get_error() :: {not_found, list(binary())} | + {wrong_type, list(binary()), binary(), binary()}. + +-spec classify(toml()) -> binary(). +classify(Toml) -> + case Toml of + {int, _} -> + <<"Int"/utf8>>; + + {float, _} -> + <<"Float"/utf8>>; + + {nan, positive} -> + <<"NaN"/utf8>>; + + {nan, negative} -> + <<"Negative NaN"/utf8>>; + + {infinity, positive} -> + <<"Infinity"/utf8>>; + + {infinity, negative} -> + <<"Negative Infinity"/utf8>>; + + {bool, _} -> + <<"Bool"/utf8>>; + + {string, _} -> + <<"String"/utf8>>; + + {date, _} -> + <<"Date"/utf8>>; + + {time, _} -> + <<"Time"/utf8>>; + + {date_time, _} -> + <<"DateTime"/utf8>>; + + {array, _} -> + <<"Array"/utf8>>; + + {array_of_tables, _} -> + <<"Array"/utf8>>; + + {table, _} -> + <<"Table"/utf8>>; + + {inline_table, _} -> + <<"Table"/utf8>> + end. + +-spec push_key({ok, KFC} | {error, get_error()}, binary()) -> {ok, KFC} | + {error, get_error()}. +push_key(Result, Key) -> + case Result of + {ok, T} -> + {ok, T}; + + {error, {not_found, Path}} -> + {error, {not_found, [Key | Path]}}; + + {error, {wrong_type, Path@1, Expected, Got}} -> + {error, {wrong_type, [Key | Path@1], Expected, Got}} + end. + +-spec get(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok, toml()} | + {error, get_error()}. +get(Toml, Key) -> + case Key of + [] -> + {error, {not_found, []}}; + + [K] -> + gleam@result:replace_error(gleam@map:get(Toml, K), {not_found, [K]}); + + [K@1 | Key@1] -> + case gleam@map:get(Toml, K@1) of + {ok, {table, T}} -> + push_key(get(T, Key@1), K@1); + + {ok, Other} -> + {error, + {wrong_type, [K@1], <<"Table"/utf8>>, classify(Other)}}; + + {error, _} -> + {error, {not_found, [K@1]}} + end + end. + +-spec get_int(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok, + integer()} | + {error, get_error()}. +get_int(Toml, Key) -> + case get(Toml, Key) of + {ok, {int, I}} -> + {ok, I}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"Int"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_float(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok, + float()} | + {error, get_error()}. +get_float(Toml, Key) -> + case get(Toml, Key) of + {ok, {float, I}} -> + {ok, I}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"Float"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_bool(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok, + boolean()} | + {error, get_error()}. +get_bool(Toml, Key) -> + case get(Toml, Key) of + {ok, {bool, I}} -> + {ok, I}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"Bool"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_string(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok, + binary()} | + {error, get_error()}. +get_string(Toml, Key) -> + case get(Toml, Key) of + {ok, {string, I}} -> + {ok, I}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"String"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_date(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok, + date()} | + {error, get_error()}. +get_date(Toml, Key) -> + case get(Toml, Key) of + {ok, {date, I}} -> + {ok, I}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"Date"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_time(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok, + time()} | + {error, get_error()}. +get_time(Toml, Key) -> + case get(Toml, Key) of + {ok, {time, I}} -> + {ok, I}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"Time"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_date_time(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok, + date_time()} | + {error, get_error()}. +get_date_time(Toml, Key) -> + case get(Toml, Key) of + {ok, {date_time, I}} -> + {ok, I}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"DateTime"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_array(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok, + list(toml())} | + {error, get_error()}. +get_array(Toml, Key) -> + case get(Toml, Key) of + {ok, {array, I}} -> + {ok, I}; + + {ok, {array_of_tables, I@1}} -> + {ok, gleam@list:map(I@1, fun(Field@0) -> {table, Field@0} end)}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"Array"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_table(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok, + gleam@dict:dict(binary(), toml())} | + {error, get_error()}. +get_table(Toml, Key) -> + case get(Toml, Key) of + {ok, {table, I}} -> + {ok, I}; + + {ok, {inline_table, I@1}} -> + {ok, I@1}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"Table"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_number(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok, + number_()} | + {error, get_error()}. +get_number(Toml, Key) -> + case get(Toml, Key) of + {ok, {int, X}} -> + {ok, {number_int, X}}; + + {ok, {float, X@1}} -> + {ok, {number_float, X@1}}; + + {ok, {nan, X@2}} -> + {ok, {number_nan, X@2}}; + + {ok, {infinity, X@3}} -> + {ok, {number_infinity, X@3}}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"Number"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec merge(gleam@dict:dict(binary(), toml()), binary(), toml(), toml()) -> {ok, + gleam@dict:dict(binary(), toml())} | + {error, list(binary())}. +merge(Table, Key, Old, New) -> + case {Old, New} of + {{array_of_tables, Tables}, {array_of_tables, New@1}} -> + {ok, + gleam@map:insert( + Table, + Key, + {array_of_tables, gleam@list:append(New@1, Tables)} + )}; + + {_, _} -> + {error, [Key]} + end. + +-spec insert_loop(gleam@dict:dict(binary(), toml()), list(binary()), toml()) -> {ok, + gleam@dict:dict(binary(), toml())} | + {error, list(binary())}. +insert_loop(Table, Key, Value) -> + case Key of + [] -> + erlang:error(#{gleam_error => panic, + message => <<"unreachable"/utf8>>, + module => <<"tom"/utf8>>, + function => <<"insert_loop"/utf8>>, + line => 511}); + + [K] -> + case gleam@map:get(Table, K) of + {error, nil} -> + {ok, gleam@map:insert(Table, K, Value)}; + + {ok, Old} -> + merge(Table, K, Old, Value) + end; + + [K@1 | Key@1] -> + case gleam@map:get(Table, K@1) of + {error, nil} -> + case insert_loop(gleam@map:new(), Key@1, Value) of + {ok, Inner} -> + {ok, gleam@map:insert(Table, K@1, {table, Inner})}; + + {error, Path} -> + {error, [K@1 | Path]} + end; + + {ok, {array_of_tables, [Inner@1 | Rest]}} -> + case insert_loop(Inner@1, Key@1, Value) of + {ok, Inner@2} -> + {ok, + gleam@map:insert( + Table, + K@1, + {array_of_tables, [Inner@2 | Rest]} + )}; + + {error, Path@1} -> + {error, [K@1 | Path@1]} + end; + + {ok, {table, Inner@3}} -> + case insert_loop(Inner@3, Key@1, Value) of + {ok, Inner@4} -> + {ok, gleam@map:insert(Table, K@1, {table, Inner@4})}; + + {error, Path@2} -> + {error, [K@1 | Path@2]} + end; + + {ok, _} -> + {error, [K@1]} + end + end. + +-spec insert(gleam@dict:dict(binary(), toml()), list(binary()), toml()) -> {ok, + gleam@dict:dict(binary(), toml())} | + {error, parse_error()}. +insert(Table, Key, Value) -> + case insert_loop(Table, Key, Value) of + {ok, Table@1} -> + {ok, Table@1}; + + {error, Path} -> + {error, {key_already_in_use, Path}} + end. + +-spec expect_end_of_line( + list(binary()), + fun((list(binary())) -> {ok, {KHH, list(binary())}} | {error, parse_error()}) +) -> {ok, {KHH, list(binary())}} | {error, parse_error()}. +expect_end_of_line(Input, Next) -> + case Input of + [<<"\n"/utf8>> | Input@1] -> + Next(Input@1); + + [<<"\r\n"/utf8>> | Input@2] -> + Next(Input@2); + + [G | _] -> + {error, {unexpected, G, <<"\n"/utf8>>}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"\n"/utf8>>}} + end. + +-spec parse_key_quoted(list(binary()), binary(), binary()) -> {ok, + {binary(), list(binary())}} | + {error, parse_error()}. +parse_key_quoted(Input, Close, Name) -> + case Input of + [G | Input@1] when G =:= Close -> + {ok, {Name, Input@1}}; + + [G@1 | Input@2] -> + parse_key_quoted(Input@2, Close, <<Name/binary, G@1/binary>>); + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, Close}} + end. + +-spec parse_key_bare(list(binary()), binary()) -> {ok, + {binary(), list(binary())}} | + {error, parse_error()}. +parse_key_bare(Input, Name) -> + case Input of + [<<" "/utf8>> | Input@1] when Name =/= <<""/utf8>> -> + {ok, {Name, Input@1}}; + + [<<"="/utf8>> | _] when Name =/= <<""/utf8>> -> + {ok, {Name, Input}}; + + [<<"."/utf8>> | _] when Name =/= <<""/utf8>> -> + {ok, {Name, Input}}; + + [<<"]"/utf8>> | _] when Name =/= <<""/utf8>> -> + {ok, {Name, Input}}; + + [<<","/utf8>> | _] when Name =/= <<""/utf8>> -> + {error, {unexpected, <<","/utf8>>, <<"="/utf8>>}}; + + [<<"\n"/utf8>> | _] when Name =/= <<""/utf8>> -> + {error, {unexpected, <<"\n"/utf8>>, <<"="/utf8>>}}; + + [<<"\r\n"/utf8>> | _] when Name =/= <<""/utf8>> -> + {error, {unexpected, <<"\r\n"/utf8>>, <<"="/utf8>>}}; + + [<<"\n"/utf8>> | _] -> + {error, {unexpected, <<"\n"/utf8>>, <<"key"/utf8>>}}; + + [<<"\r\n"/utf8>> | _] -> + {error, {unexpected, <<"\r\n"/utf8>>, <<"key"/utf8>>}}; + + [<<"]"/utf8>> | _] -> + {error, {unexpected, <<"]"/utf8>>, <<"key"/utf8>>}}; + + [<<","/utf8>> | _] -> + {error, {unexpected, <<","/utf8>>, <<"key"/utf8>>}}; + + [G | Input@2] -> + parse_key_bare(Input@2, <<Name/binary, G/binary>>); + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"key"/utf8>>}} + end. + +-spec skip_line_whitespace(list(binary())) -> list(binary()). +skip_line_whitespace(Input) -> + gleam@list:drop_while( + Input, + fun(G) -> (G =:= <<" "/utf8>>) orelse (G =:= <<"\t"/utf8>>) end + ). + +-spec parse_key_segment(list(binary())) -> {ok, {binary(), list(binary())}} | + {error, parse_error()}. +parse_key_segment(Input) -> + Input@1 = skip_line_whitespace(Input), + case Input@1 of + [<<"="/utf8>> | _] -> + {error, {unexpected, <<"="/utf8>>, <<"Key"/utf8>>}}; + + [<<"\n"/utf8>> | _] -> + {error, {unexpected, <<"\n"/utf8>>, <<"Key"/utf8>>}}; + + [<<"\r\n"/utf8>> | _] -> + {error, {unexpected, <<"\r\n"/utf8>>, <<"Key"/utf8>>}}; + + [<<"["/utf8>> | _] -> + {error, {unexpected, <<"["/utf8>>, <<"Key"/utf8>>}}; + + [<<"\""/utf8>> | Input@2] -> + parse_key_quoted(Input@2, <<"\""/utf8>>, <<""/utf8>>); + + [<<"'"/utf8>> | Input@3] -> + parse_key_quoted(Input@3, <<"'"/utf8>>, <<""/utf8>>); + + _ -> + parse_key_bare(Input@1, <<""/utf8>>) + end. + +-spec skip_whitespace(list(binary())) -> list(binary()). +skip_whitespace(Input) -> + case Input of + [<<" "/utf8>> | Input@1] -> + skip_whitespace(Input@1); + + [<<"\t"/utf8>> | Input@2] -> + skip_whitespace(Input@2); + + [<<"\n"/utf8>> | Input@3] -> + skip_whitespace(Input@3); + + [<<"\r\n"/utf8>> | Input@4] -> + skip_whitespace(Input@4); + + Input@5 -> + Input@5 + end. + +-spec drop_comments(list(binary()), list(binary())) -> list(binary()). +drop_comments(Input, Acc) -> + case Input of + [<<"#"/utf8>> | Input@1] -> + _pipe = Input@1, + _pipe@1 = gleam@list:drop_while( + _pipe, + fun(G) -> G /= <<"\n"/utf8>> end + ), + drop_comments(_pipe@1, Acc); + + [G@1 | Input@2] -> + drop_comments(Input@2, [G@1 | Acc]); + + [] -> + gleam@list:reverse(Acc) + end. + +-spec do( + {ok, {KHS, list(binary())}} | {error, parse_error()}, + fun((KHS, list(binary())) -> {ok, KHV} | {error, parse_error()}) +) -> {ok, KHV} | {error, parse_error()}. +do(Result, Next) -> + case Result of + {ok, {A, Input}} -> + Next(A, Input); + + {error, E} -> + {error, E} + end. + +-spec parse_key(list(binary()), list(binary())) -> {ok, + {list(binary()), list(binary())}} | + {error, parse_error()}. +parse_key(Input, Segments) -> + do( + parse_key_segment(Input), + fun(Segment, Input@1) -> + Segments@1 = [Segment | Segments], + Input@2 = skip_line_whitespace(Input@1), + case Input@2 of + [<<"."/utf8>> | Input@3] -> + parse_key(Input@3, Segments@1); + + _ -> + {ok, {gleam@list:reverse(Segments@1), Input@2}} + end + end + ). + +-spec expect( + list(binary()), + binary(), + fun((list(binary())) -> {ok, {KIA, list(binary())}} | {error, parse_error()}) +) -> {ok, {KIA, list(binary())}} | {error, parse_error()}. +expect(Input, Expected, Next) -> + case Input of + [G | Input@1] when G =:= Expected -> + Next(Input@1); + + [G@1 | _] -> + {error, {unexpected, G@1, Expected}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, Expected}} + end. + +-spec parse_table_header(list(binary())) -> {ok, + {list(binary()), list(binary())}} | + {error, parse_error()}. +parse_table_header(Input) -> + Input@1 = skip_line_whitespace(Input), + do( + parse_key(Input@1, []), + fun(Key, Input@2) -> + expect( + Input@2, + <<"]"/utf8>>, + fun(Input@3) -> + Input@4 = skip_line_whitespace(Input@3), + expect_end_of_line( + Input@4, + fun(Input@5) -> {ok, {Key, Input@5}} end + ) + end + ) + end + ). + +-spec parse_hex(list(binary()), integer(), sign()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_hex(Input, Number, Sign) -> + case Input of + [<<"_"/utf8>> | Input@1] -> + parse_hex(Input@1, Number, Sign); + + [<<"0"/utf8>> | Input@2] -> + parse_hex(Input@2, (Number * 16) + 0, Sign); + + [<<"1"/utf8>> | Input@3] -> + parse_hex(Input@3, (Number * 16) + 1, Sign); + + [<<"2"/utf8>> | Input@4] -> + parse_hex(Input@4, (Number * 16) + 2, Sign); + + [<<"3"/utf8>> | Input@5] -> + parse_hex(Input@5, (Number * 16) + 3, Sign); + + [<<"4"/utf8>> | Input@6] -> + parse_hex(Input@6, (Number * 16) + 4, Sign); + + [<<"5"/utf8>> | Input@7] -> + parse_hex(Input@7, (Number * 16) + 5, Sign); + + [<<"6"/utf8>> | Input@8] -> + parse_hex(Input@8, (Number * 16) + 6, Sign); + + [<<"7"/utf8>> | Input@9] -> + parse_hex(Input@9, (Number * 16) + 7, Sign); + + [<<"8"/utf8>> | Input@10] -> + parse_hex(Input@10, (Number * 16) + 8, Sign); + + [<<"9"/utf8>> | Input@11] -> + parse_hex(Input@11, (Number * 16) + 9, Sign); + + [<<"a"/utf8>> | Input@12] -> + parse_hex(Input@12, (Number * 16) + 10, Sign); + + [<<"b"/utf8>> | Input@13] -> + parse_hex(Input@13, (Number * 16) + 11, Sign); + + [<<"c"/utf8>> | Input@14] -> + parse_hex(Input@14, (Number * 16) + 12, Sign); + + [<<"d"/utf8>> | Input@15] -> + parse_hex(Input@15, (Number * 16) + 13, Sign); + + [<<"e"/utf8>> | Input@16] -> + parse_hex(Input@16, (Number * 16) + 14, Sign); + + [<<"f"/utf8>> | Input@17] -> + parse_hex(Input@17, (Number * 16) + 15, Sign); + + [<<"A"/utf8>> | Input@18] -> + parse_hex(Input@18, (Number * 16) + 10, Sign); + + [<<"B"/utf8>> | Input@19] -> + parse_hex(Input@19, (Number * 16) + 11, Sign); + + [<<"C"/utf8>> | Input@20] -> + parse_hex(Input@20, (Number * 16) + 12, Sign); + + [<<"D"/utf8>> | Input@21] -> + parse_hex(Input@21, (Number * 16) + 13, Sign); + + [<<"E"/utf8>> | Input@22] -> + parse_hex(Input@22, (Number * 16) + 14, Sign); + + [<<"F"/utf8>> | Input@23] -> + parse_hex(Input@23, (Number * 16) + 15, Sign); + + Input@24 -> + Number@1 = case Sign of + positive -> + Number; + + negative -> + - Number + end, + {ok, {{int, Number@1}, Input@24}} + end. + +-spec parse_octal(list(binary()), integer(), sign()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_octal(Input, Number, Sign) -> + case Input of + [<<"_"/utf8>> | Input@1] -> + parse_octal(Input@1, Number, Sign); + + [<<"0"/utf8>> | Input@2] -> + parse_octal(Input@2, (Number * 8) + 0, Sign); + + [<<"1"/utf8>> | Input@3] -> + parse_octal(Input@3, (Number * 8) + 1, Sign); + + [<<"2"/utf8>> | Input@4] -> + parse_octal(Input@4, (Number * 8) + 2, Sign); + + [<<"3"/utf8>> | Input@5] -> + parse_octal(Input@5, (Number * 8) + 3, Sign); + + [<<"4"/utf8>> | Input@6] -> + parse_octal(Input@6, (Number * 8) + 4, Sign); + + [<<"5"/utf8>> | Input@7] -> + parse_octal(Input@7, (Number * 8) + 5, Sign); + + [<<"6"/utf8>> | Input@8] -> + parse_octal(Input@8, (Number * 8) + 6, Sign); + + [<<"7"/utf8>> | Input@9] -> + parse_octal(Input@9, (Number * 8) + 7, Sign); + + Input@10 -> + Number@1 = case Sign of + positive -> + Number; + + negative -> + - Number + end, + {ok, {{int, Number@1}, Input@10}} + end. + +-spec parse_binary(list(binary()), integer(), sign()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_binary(Input, Number, Sign) -> + case Input of + [<<"_"/utf8>> | Input@1] -> + parse_binary(Input@1, Number, Sign); + + [<<"0"/utf8>> | Input@2] -> + parse_binary(Input@2, (Number * 2) + 0, Sign); + + [<<"1"/utf8>> | Input@3] -> + parse_binary(Input@3, (Number * 2) + 1, Sign); + + Input@4 -> + Number@1 = case Sign of + positive -> + Number; + + negative -> + - Number + end, + {ok, {{int, Number@1}, Input@4}} + end. + +-spec parse_exponent(list(binary()), float(), sign(), integer(), sign()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_exponent(Input, N, N_sign, Ex, Ex_sign) -> + case Input of + [<<"_"/utf8>> | Input@1] -> + parse_exponent(Input@1, N, N_sign, Ex, Ex_sign); + + [<<"0"/utf8>> | Input@2] -> + parse_exponent(Input@2, N, N_sign, Ex * 10, Ex_sign); + + [<<"1"/utf8>> | Input@3] -> + parse_exponent(Input@3, N, N_sign, (Ex * 10) + 1, Ex_sign); + + [<<"2"/utf8>> | Input@4] -> + parse_exponent(Input@4, N, N_sign, (Ex * 10) + 2, Ex_sign); + + [<<"3"/utf8>> | Input@5] -> + parse_exponent(Input@5, N, N_sign, (Ex * 10) + 3, Ex_sign); + + [<<"4"/utf8>> | Input@6] -> + parse_exponent(Input@6, N, N_sign, (Ex * 10) + 4, Ex_sign); + + [<<"5"/utf8>> | Input@7] -> + parse_exponent(Input@7, N, N_sign, (Ex * 10) + 5, Ex_sign); + + [<<"6"/utf8>> | Input@8] -> + parse_exponent(Input@8, N, N_sign, (Ex * 10) + 6, Ex_sign); + + [<<"7"/utf8>> | Input@9] -> + parse_exponent(Input@9, N, N_sign, (Ex * 10) + 7, Ex_sign); + + [<<"8"/utf8>> | Input@10] -> + parse_exponent(Input@10, N, N_sign, (Ex * 10) + 8, Ex_sign); + + [<<"9"/utf8>> | Input@11] -> + parse_exponent(Input@11, N, N_sign, (Ex * 10) + 9, Ex_sign); + + Input@12 -> + Number = case N_sign of + positive -> + N; + + negative -> + N * -1.0 + end, + Exponent = gleam@int:to_float(case Ex_sign of + positive -> + Ex; + + negative -> + - Ex + end), + Multiplier@1 = case gleam@float:power(10.0, Exponent) of + {ok, Multiplier} -> + Multiplier; + + {error, _} -> + 1.0 + end, + {ok, {{float, Number * Multiplier@1}, Input@12}} + end. + +-spec parse_float(list(binary()), float(), sign(), float()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_float(Input, Number, Sign, Unit) -> + case Input of + [<<"_"/utf8>> | Input@1] -> + parse_float(Input@1, Number, Sign, Unit); + + [<<"0"/utf8>> | Input@2] -> + parse_float(Input@2, Number, Sign, Unit * 0.1); + + [<<"1"/utf8>> | Input@3] -> + parse_float(Input@3, Number + (1.0 * Unit), Sign, Unit * 0.1); + + [<<"2"/utf8>> | Input@4] -> + parse_float(Input@4, Number + (2.0 * Unit), Sign, Unit * 0.1); + + [<<"3"/utf8>> | Input@5] -> + parse_float(Input@5, Number + (3.0 * Unit), Sign, Unit * 0.1); + + [<<"4"/utf8>> | Input@6] -> + parse_float(Input@6, Number + (4.0 * Unit), Sign, Unit * 0.1); + + [<<"5"/utf8>> | Input@7] -> + parse_float(Input@7, Number + (5.0 * Unit), Sign, Unit * 0.1); + + [<<"6"/utf8>> | Input@8] -> + parse_float(Input@8, Number + (6.0 * Unit), Sign, Unit * 0.1); + + [<<"7"/utf8>> | Input@9] -> + parse_float(Input@9, Number + (7.0 * Unit), Sign, Unit * 0.1); + + [<<"8"/utf8>> | Input@10] -> + parse_float(Input@10, Number + (8.0 * Unit), Sign, Unit * 0.1); + + [<<"9"/utf8>> | Input@11] -> + parse_float(Input@11, Number + (9.0 * Unit), Sign, Unit * 0.1); + + [<<"e"/utf8>>, <<"+"/utf8>> | Input@12] -> + parse_exponent(Input@12, Number, Sign, 0, positive); + + [<<"e"/utf8>>, <<"-"/utf8>> | Input@13] -> + parse_exponent(Input@13, Number, Sign, 0, negative); + + [<<"e"/utf8>> | Input@14] -> + parse_exponent(Input@14, Number, Sign, 0, positive); + + [<<"E"/utf8>>, <<"+"/utf8>> | Input@15] -> + parse_exponent(Input@15, Number, Sign, 0, positive); + + [<<"E"/utf8>>, <<"-"/utf8>> | Input@16] -> + parse_exponent(Input@16, Number, Sign, 0, negative); + + [<<"E"/utf8>> | Input@17] -> + parse_exponent(Input@17, Number, Sign, 0, positive); + + Input@18 -> + Number@1 = case Sign of + positive -> + Number; + + negative -> + Number * -1.0 + end, + {ok, {{float, Number@1}, Input@18}} + end. + +-spec parse_string(list(binary()), binary()) -> {ok, {toml(), list(binary())}} | + {error, parse_error()}. +parse_string(Input, String) -> + case Input of + [<<"\""/utf8>> | Input@1] -> + {ok, {{string, String}, Input@1}}; + + [<<"\\"/utf8>>, <<"t"/utf8>> | Input@2] -> + parse_string(Input@2, <<String/binary, "\t"/utf8>>); + + [<<"\\"/utf8>>, <<"n"/utf8>> | Input@3] -> + parse_string(Input@3, <<String/binary, "\n"/utf8>>); + + [<<"\\"/utf8>>, <<"r"/utf8>> | Input@4] -> + parse_string(Input@4, <<String/binary, "\r"/utf8>>); + + [<<"\\"/utf8>>, <<"\""/utf8>> | Input@5] -> + parse_string(Input@5, <<String/binary, "\""/utf8>>); + + [<<"\\"/utf8>>, <<"\\"/utf8>> | Input@6] -> + parse_string(Input@6, <<String/binary, "\\"/utf8>>); + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"\""/utf8>>}}; + + [<<"\n"/utf8>> | _] -> + {error, {unexpected, <<"\n"/utf8>>, <<"\""/utf8>>}}; + + [<<"\r\n"/utf8>> | _] -> + {error, {unexpected, <<"\r\n"/utf8>>, <<"\""/utf8>>}}; + + [G | Input@7] -> + parse_string(Input@7, <<String/binary, G/binary>>) + end. + +-spec parse_multi_line_string(list(binary()), binary()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_multi_line_string(Input, String) -> + case Input of + [<<"\""/utf8>>, <<"\""/utf8>>, <<"\""/utf8>> | Input@1] -> + {ok, {{string, String}, Input@1}}; + + [<<"\\"/utf8>>, <<"\n"/utf8>> | Input@2] -> + parse_multi_line_string(skip_whitespace(Input@2), String); + + [<<"\\"/utf8>>, <<"\r\n"/utf8>> | Input@3] -> + parse_multi_line_string(skip_whitespace(Input@3), String); + + [<<"\r\n"/utf8>> | Input@4] when String =:= <<""/utf8>> -> + parse_multi_line_string(Input@4, String); + + [<<"\n"/utf8>> | Input@5] when String =:= <<""/utf8>> -> + parse_multi_line_string(Input@5, String); + + [<<"\r\n"/utf8>> | Input@6] when String =:= <<""/utf8>> -> + parse_multi_line_string(Input@6, String); + + [<<"\\"/utf8>>, <<"t"/utf8>> | Input@7] -> + parse_multi_line_string(Input@7, <<String/binary, "\t"/utf8>>); + + [<<"\\"/utf8>>, <<"n"/utf8>> | Input@8] -> + parse_multi_line_string(Input@8, <<String/binary, "\n"/utf8>>); + + [<<"\\"/utf8>>, <<"r"/utf8>> | Input@9] -> + parse_multi_line_string(Input@9, <<String/binary, "\r"/utf8>>); + + [<<"\\"/utf8>>, <<"\""/utf8>> | Input@10] -> + parse_multi_line_string(Input@10, <<String/binary, "\""/utf8>>); + + [<<"\\"/utf8>>, <<"\\"/utf8>> | Input@11] -> + parse_multi_line_string(Input@11, <<String/binary, "\\"/utf8>>); + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"\""/utf8>>}}; + + [G | Input@12] -> + parse_multi_line_string(Input@12, <<String/binary, G/binary>>) + end. + +-spec parse_multi_line_literal_string(list(binary()), binary()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_multi_line_literal_string(Input, String) -> + case Input of + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"\""/utf8>>}}; + + [<<"'"/utf8>>, <<"'"/utf8>>, <<"'"/utf8>>, <<"'"/utf8>> | _] -> + {error, {unexpected, <<"''''"/utf8>>, <<"'''"/utf8>>}}; + + [<<"'"/utf8>>, <<"'"/utf8>>, <<"'"/utf8>> | Input@1] -> + {ok, {{string, String}, Input@1}}; + + [<<"\n"/utf8>> | Input@2] when String =:= <<""/utf8>> -> + parse_multi_line_literal_string(Input@2, String); + + [<<"\r\n"/utf8>> | Input@3] when String =:= <<""/utf8>> -> + parse_multi_line_literal_string(Input@3, String); + + [G | Input@4] -> + parse_multi_line_literal_string( + Input@4, + <<String/binary, G/binary>> + ) + end. + +-spec parse_literal_string(list(binary()), binary()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_literal_string(Input, String) -> + case Input of + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"\""/utf8>>}}; + + [<<"\n"/utf8>> | _] -> + {error, {unexpected, <<"\n"/utf8>>, <<"'"/utf8>>}}; + + [<<"\r\n"/utf8>> | _] -> + {error, {unexpected, <<"\r\n"/utf8>>, <<"'"/utf8>>}}; + + [<<"'"/utf8>> | Input@1] -> + {ok, {{string, String}, Input@1}}; + + [G | Input@2] -> + parse_literal_string(Input@2, <<String/binary, G/binary>>) + end. + +-spec parse_time_ms(list(binary()), integer(), integer()) -> {ok, + {{integer(), integer()}, list(binary())}} | + {error, parse_error()}. +parse_time_ms(Input, Seconds, Ms) -> + case Input of + [<<"0"/utf8>> | Input@1] when Ms < 100000 -> + parse_time_ms(Input@1, Seconds, (Ms * 10) + 0); + + [<<"1"/utf8>> | Input@2] when Ms < 100000 -> + parse_time_ms(Input@2, Seconds, (Ms * 10) + 1); + + [<<"2"/utf8>> | Input@3] when Ms < 100000 -> + parse_time_ms(Input@3, Seconds, (Ms * 10) + 2); + + [<<"3"/utf8>> | Input@4] when Ms < 100000 -> + parse_time_ms(Input@4, Seconds, (Ms * 10) + 3); + + [<<"4"/utf8>> | Input@5] when Ms < 100000 -> + parse_time_ms(Input@5, Seconds, (Ms * 10) + 4); + + [<<"5"/utf8>> | Input@6] when Ms < 100000 -> + parse_time_ms(Input@6, Seconds, (Ms * 10) + 5); + + [<<"6"/utf8>> | Input@7] when Ms < 100000 -> + parse_time_ms(Input@7, Seconds, (Ms * 10) + 6); + + [<<"7"/utf8>> | Input@8] when Ms < 100000 -> + parse_time_ms(Input@8, Seconds, (Ms * 10) + 7); + + [<<"8"/utf8>> | Input@9] when Ms < 100000 -> + parse_time_ms(Input@9, Seconds, (Ms * 10) + 8); + + [<<"9"/utf8>> | Input@10] when Ms < 100000 -> + parse_time_ms(Input@10, Seconds, (Ms * 10) + 9); + + _ -> + {ok, {{Seconds, Ms}, Input}} + end. + +-spec parse_number_under_60(list(binary()), binary()) -> {ok, + {integer(), list(binary())}} | + {error, parse_error()}. +parse_number_under_60(Input, Expected) -> + case Input of + [<<"0"/utf8>>, <<"0"/utf8>> | Input@1] -> + {ok, {0, Input@1}}; + + [<<"0"/utf8>>, <<"1"/utf8>> | Input@2] -> + {ok, {1, Input@2}}; + + [<<"0"/utf8>>, <<"2"/utf8>> | Input@3] -> + {ok, {2, Input@3}}; + + [<<"0"/utf8>>, <<"3"/utf8>> | Input@4] -> + {ok, {3, Input@4}}; + + [<<"0"/utf8>>, <<"4"/utf8>> | Input@5] -> + {ok, {4, Input@5}}; + + [<<"0"/utf8>>, <<"5"/utf8>> | Input@6] -> + {ok, {5, Input@6}}; + + [<<"0"/utf8>>, <<"6"/utf8>> | Input@7] -> + {ok, {6, Input@7}}; + + [<<"0"/utf8>>, <<"7"/utf8>> | Input@8] -> + {ok, {7, Input@8}}; + + [<<"0"/utf8>>, <<"8"/utf8>> | Input@9] -> + {ok, {8, Input@9}}; + + [<<"0"/utf8>>, <<"9"/utf8>> | Input@10] -> + {ok, {9, Input@10}}; + + [<<"1"/utf8>>, <<"0"/utf8>> | Input@11] -> + {ok, {10, Input@11}}; + + [<<"1"/utf8>>, <<"1"/utf8>> | Input@12] -> + {ok, {11, Input@12}}; + + [<<"1"/utf8>>, <<"2"/utf8>> | Input@13] -> + {ok, {12, Input@13}}; + + [<<"1"/utf8>>, <<"3"/utf8>> | Input@14] -> + {ok, {13, Input@14}}; + + [<<"1"/utf8>>, <<"4"/utf8>> | Input@15] -> + {ok, {14, Input@15}}; + + [<<"1"/utf8>>, <<"5"/utf8>> | Input@16] -> + {ok, {15, Input@16}}; + + [<<"1"/utf8>>, <<"6"/utf8>> | Input@17] -> + {ok, {16, Input@17}}; + + [<<"1"/utf8>>, <<"7"/utf8>> | Input@18] -> + {ok, {17, Input@18}}; + + [<<"1"/utf8>>, <<"8"/utf8>> | Input@19] -> + {ok, {18, Input@19}}; + + [<<"1"/utf8>>, <<"9"/utf8>> | Input@20] -> + {ok, {19, Input@20}}; + + [<<"2"/utf8>>, <<"0"/utf8>> | Input@21] -> + {ok, {20, Input@21}}; + + [<<"2"/utf8>>, <<"1"/utf8>> | Input@22] -> + {ok, {21, Input@22}}; + + [<<"2"/utf8>>, <<"2"/utf8>> | Input@23] -> + {ok, {22, Input@23}}; + + [<<"2"/utf8>>, <<"3"/utf8>> | Input@24] -> + {ok, {23, Input@24}}; + + [<<"2"/utf8>>, <<"4"/utf8>> | Input@25] -> + {ok, {24, Input@25}}; + + [<<"2"/utf8>>, <<"5"/utf8>> | Input@26] -> + {ok, {25, Input@26}}; + + [<<"2"/utf8>>, <<"6"/utf8>> | Input@27] -> + {ok, {26, Input@27}}; + + [<<"2"/utf8>>, <<"7"/utf8>> | Input@28] -> + {ok, {27, Input@28}}; + + [<<"2"/utf8>>, <<"8"/utf8>> | Input@29] -> + {ok, {28, Input@29}}; + + [<<"2"/utf8>>, <<"9"/utf8>> | Input@30] -> + {ok, {29, Input@30}}; + + [<<"3"/utf8>>, <<"0"/utf8>> | Input@31] -> + {ok, {30, Input@31}}; + + [<<"3"/utf8>>, <<"1"/utf8>> | Input@32] -> + {ok, {31, Input@32}}; + + [<<"3"/utf8>>, <<"2"/utf8>> | Input@33] -> + {ok, {32, Input@33}}; + + [<<"3"/utf8>>, <<"3"/utf8>> | Input@34] -> + {ok, {33, Input@34}}; + + [<<"3"/utf8>>, <<"4"/utf8>> | Input@35] -> + {ok, {34, Input@35}}; + + [<<"3"/utf8>>, <<"5"/utf8>> | Input@36] -> + {ok, {35, Input@36}}; + + [<<"3"/utf8>>, <<"6"/utf8>> | Input@37] -> + {ok, {36, Input@37}}; + + [<<"3"/utf8>>, <<"7"/utf8>> | Input@38] -> + {ok, {37, Input@38}}; + + [<<"3"/utf8>>, <<"8"/utf8>> | Input@39] -> + {ok, {38, Input@39}}; + + [<<"3"/utf8>>, <<"9"/utf8>> | Input@40] -> + {ok, {39, Input@40}}; + + [<<"4"/utf8>>, <<"0"/utf8>> | Input@41] -> + {ok, {40, Input@41}}; + + [<<"4"/utf8>>, <<"1"/utf8>> | Input@42] -> + {ok, {41, Input@42}}; + + [<<"4"/utf8>>, <<"2"/utf8>> | Input@43] -> + {ok, {42, Input@43}}; + + [<<"4"/utf8>>, <<"3"/utf8>> | Input@44] -> + {ok, {43, Input@44}}; + + [<<"4"/utf8>>, <<"4"/utf8>> | Input@45] -> + {ok, {44, Input@45}}; + + [<<"4"/utf8>>, <<"5"/utf8>> | Input@46] -> + {ok, {45, Input@46}}; + + [<<"4"/utf8>>, <<"6"/utf8>> | Input@47] -> + {ok, {46, Input@47}}; + + [<<"4"/utf8>>, <<"7"/utf8>> | Input@48] -> + {ok, {47, Input@48}}; + + [<<"4"/utf8>>, <<"8"/utf8>> | Input@49] -> + {ok, {48, Input@49}}; + + [<<"4"/utf8>>, <<"9"/utf8>> | Input@50] -> + {ok, {49, Input@50}}; + + [<<"5"/utf8>>, <<"0"/utf8>> | Input@51] -> + {ok, {50, Input@51}}; + + [<<"5"/utf8>>, <<"1"/utf8>> | Input@52] -> + {ok, {51, Input@52}}; + + [<<"5"/utf8>>, <<"2"/utf8>> | Input@53] -> + {ok, {52, Input@53}}; + + [<<"5"/utf8>>, <<"3"/utf8>> | Input@54] -> + {ok, {53, Input@54}}; + + [<<"5"/utf8>>, <<"4"/utf8>> | Input@55] -> + {ok, {54, Input@55}}; + + [<<"5"/utf8>>, <<"5"/utf8>> | Input@56] -> + {ok, {55, Input@56}}; + + [<<"5"/utf8>>, <<"6"/utf8>> | Input@57] -> + {ok, {56, Input@57}}; + + [<<"5"/utf8>>, <<"7"/utf8>> | Input@58] -> + {ok, {57, Input@58}}; + + [<<"5"/utf8>>, <<"8"/utf8>> | Input@59] -> + {ok, {58, Input@59}}; + + [<<"5"/utf8>>, <<"9"/utf8>> | Input@60] -> + {ok, {59, Input@60}}; + + [G | _] -> + {error, {unexpected, G, Expected}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, Expected}} + end. + +-spec parse_hour_minute(list(binary())) -> {ok, + {{integer(), integer()}, list(binary())}} | + {error, parse_error()}. +parse_hour_minute(Input) -> + do(case Input of + [<<"0"/utf8>>, <<"0"/utf8>>, <<":"/utf8>> | Input@1] -> + {ok, {0, Input@1}}; + + [<<"0"/utf8>>, <<"1"/utf8>>, <<":"/utf8>> | Input@2] -> + {ok, {1, Input@2}}; + + [<<"0"/utf8>>, <<"2"/utf8>>, <<":"/utf8>> | Input@3] -> + {ok, {2, Input@3}}; + + [<<"0"/utf8>>, <<"3"/utf8>>, <<":"/utf8>> | Input@4] -> + {ok, {3, Input@4}}; + + [<<"0"/utf8>>, <<"4"/utf8>>, <<":"/utf8>> | Input@5] -> + {ok, {4, Input@5}}; + + [<<"0"/utf8>>, <<"5"/utf8>>, <<":"/utf8>> | Input@6] -> + {ok, {5, Input@6}}; + + [<<"0"/utf8>>, <<"6"/utf8>>, <<":"/utf8>> | Input@7] -> + {ok, {6, Input@7}}; + + [<<"0"/utf8>>, <<"7"/utf8>>, <<":"/utf8>> | Input@8] -> + {ok, {7, Input@8}}; + + [<<"0"/utf8>>, <<"8"/utf8>>, <<":"/utf8>> | Input@9] -> + {ok, {8, Input@9}}; + + [<<"0"/utf8>>, <<"9"/utf8>>, <<":"/utf8>> | Input@10] -> + {ok, {9, Input@10}}; + + [<<"1"/utf8>>, <<"0"/utf8>>, <<":"/utf8>> | Input@11] -> + {ok, {10, Input@11}}; + + [<<"1"/utf8>>, <<"1"/utf8>>, <<":"/utf8>> | Input@12] -> + {ok, {11, Input@12}}; + + [<<"1"/utf8>>, <<"2"/utf8>>, <<":"/utf8>> | Input@13] -> + {ok, {12, Input@13}}; + + [<<"1"/utf8>>, <<"3"/utf8>>, <<":"/utf8>> | Input@14] -> + {ok, {13, Input@14}}; + + [<<"1"/utf8>>, <<"4"/utf8>>, <<":"/utf8>> | Input@15] -> + {ok, {14, Input@15}}; + + [<<"1"/utf8>>, <<"5"/utf8>>, <<":"/utf8>> | Input@16] -> + {ok, {15, Input@16}}; + + [<<"1"/utf8>>, <<"6"/utf8>>, <<":"/utf8>> | Input@17] -> + {ok, {16, Input@17}}; + + [<<"1"/utf8>>, <<"7"/utf8>>, <<":"/utf8>> | Input@18] -> + {ok, {17, Input@18}}; + + [<<"1"/utf8>>, <<"8"/utf8>>, <<":"/utf8>> | Input@19] -> + {ok, {18, Input@19}}; + + [<<"1"/utf8>>, <<"9"/utf8>>, <<":"/utf8>> | Input@20] -> + {ok, {19, Input@20}}; + + [<<"2"/utf8>>, <<"0"/utf8>>, <<":"/utf8>> | Input@21] -> + {ok, {20, Input@21}}; + + [<<"2"/utf8>>, <<"1"/utf8>>, <<":"/utf8>> | Input@22] -> + {ok, {21, Input@22}}; + + [<<"2"/utf8>>, <<"2"/utf8>>, <<":"/utf8>> | Input@23] -> + {ok, {22, Input@23}}; + + [<<"2"/utf8>>, <<"3"/utf8>>, <<":"/utf8>> | Input@24] -> + {ok, {23, Input@24}}; + + [G | _] -> + {error, {unexpected, G, <<"time"/utf8>>}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"time"/utf8>>}} + end, fun(Hours, Input@25) -> + do( + parse_number_under_60(Input@25, <<"minutes"/utf8>>), + fun(Minutes, Input@26) -> {ok, {{Hours, Minutes}, Input@26}} end + ) + end). + +-spec parse_time_s_ms(list(binary())) -> {ok, + {{integer(), integer()}, list(binary())}} | + {error, parse_error()}. +parse_time_s_ms(Input) -> + case Input of + [<<":"/utf8>> | Input@1] -> + do( + parse_number_under_60(Input@1, <<"seconds"/utf8>>), + fun(Seconds, Input@2) -> case Input@2 of + [<<"."/utf8>> | Input@3] -> + parse_time_ms(Input@3, Seconds, 0); + + _ -> + {ok, {{Seconds, 0}, Input@2}} + end end + ); + + _ -> + {ok, {{0, 0}, Input}} + end. + +-spec parse_time_minute(list(binary()), integer()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_time_minute(Input, Hours) -> + do( + parse_number_under_60(Input, <<"minutes"/utf8>>), + fun(Minutes, Input@1) -> + do( + parse_time_s_ms(Input@1), + fun(_use0, Input@2) -> + {Seconds, Ms} = _use0, + Time = {time_value, Hours, Minutes, Seconds, Ms}, + {ok, {{time, Time}, Input@2}} + end + ) + end + ). + +-spec parse_time_value(list(binary())) -> {ok, {time(), list(binary())}} | + {error, parse_error()}. +parse_time_value(Input) -> + do( + parse_hour_minute(Input), + fun(_use0, Input@1) -> + {Hours, Minutes} = _use0, + do( + parse_time_s_ms(Input@1), + fun(_use0@1, Input@2) -> + {Seconds, Ms} = _use0@1, + Time = {time_value, Hours, Minutes, Seconds, Ms}, + {ok, {Time, Input@2}} + end + ) + end + ). + +-spec parse_offset_hours(list(binary()), sign()) -> {ok, + {offset(), list(binary())}} | + {error, parse_error()}. +parse_offset_hours(Input, Sign) -> + do( + parse_hour_minute(Input), + fun(_use0, Input@1) -> + {Hours, Minutes} = _use0, + {ok, {{offset, Sign, Hours, Minutes}, Input@1}} + end + ). + +-spec parse_offset(list(binary())) -> {ok, {offset(), list(binary())}} | + {error, parse_error()}. +parse_offset(Input) -> + case Input of + [<<"Z"/utf8>> | Input@1] -> + {ok, {{offset, positive, 0, 0}, Input@1}}; + + [<<"+"/utf8>> | Input@2] -> + parse_offset_hours(Input@2, positive); + + [<<"-"/utf8>> | Input@3] -> + parse_offset_hours(Input@3, negative); + + _ -> + {ok, {local, Input}} + end. + +-spec parse_date_end(list(binary()), integer(), integer(), integer()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_date_end(Input, Year, Month, Day) -> + Date = {date_value, Year, Month, Day}, + case Input of + [<<" "/utf8>> | Input@1] -> + do( + parse_time_value(Input@1), + fun(Time, Input@2) -> + do( + parse_offset(Input@2), + fun(Offset, Input@3) -> + {ok, + {{date_time, + {date_time_value, Date, Time, Offset}}, + Input@3}} + end + ) + end + ); + + [<<"T"/utf8>> | Input@1] -> + do( + parse_time_value(Input@1), + fun(Time, Input@2) -> + do( + parse_offset(Input@2), + fun(Offset, Input@3) -> + {ok, + {{date_time, + {date_time_value, Date, Time, Offset}}, + Input@3}} + end + ) + end + ); + + _ -> + {ok, {{date, Date}, Input}} + end. + +-spec parse_date_day(list(binary()), integer(), integer()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_date_day(Input, Year, Month) -> + case Input of + [<<"0"/utf8>>, <<"1"/utf8>> | Input@1] -> + parse_date_end(Input@1, Year, Month, 1); + + [<<"0"/utf8>>, <<"2"/utf8>> | Input@2] -> + parse_date_end(Input@2, Year, Month, 2); + + [<<"0"/utf8>>, <<"3"/utf8>> | Input@3] -> + parse_date_end(Input@3, Year, Month, 3); + + [<<"0"/utf8>>, <<"4"/utf8>> | Input@4] -> + parse_date_end(Input@4, Year, Month, 4); + + [<<"0"/utf8>>, <<"5"/utf8>> | Input@5] -> + parse_date_end(Input@5, Year, Month, 5); + + [<<"0"/utf8>>, <<"6"/utf8>> | Input@6] -> + parse_date_end(Input@6, Year, Month, 6); + + [<<"0"/utf8>>, <<"7"/utf8>> | Input@7] -> + parse_date_end(Input@7, Year, Month, 7); + + [<<"0"/utf8>>, <<"8"/utf8>> | Input@8] -> + parse_date_end(Input@8, Year, Month, 8); + + [<<"0"/utf8>>, <<"9"/utf8>> | Input@9] -> + parse_date_end(Input@9, Year, Month, 9); + + [<<"1"/utf8>>, <<"0"/utf8>> | Input@10] -> + parse_date_end(Input@10, Year, Month, 10); + + [<<"1"/utf8>>, <<"1"/utf8>> | Input@11] -> + parse_date_end(Input@11, Year, Month, 11); + + [<<"1"/utf8>>, <<"2"/utf8>> | Input@12] -> + parse_date_end(Input@12, Year, Month, 12); + + [<<"1"/utf8>>, <<"3"/utf8>> | Input@13] -> + parse_date_end(Input@13, Year, Month, 13); + + [<<"1"/utf8>>, <<"4"/utf8>> | Input@14] -> + parse_date_end(Input@14, Year, Month, 14); + + [<<"1"/utf8>>, <<"5"/utf8>> | Input@15] -> + parse_date_end(Input@15, Year, Month, 15); + + [<<"1"/utf8>>, <<"6"/utf8>> | Input@16] -> + parse_date_end(Input@16, Year, Month, 16); + + [<<"1"/utf8>>, <<"7"/utf8>> | Input@17] -> + parse_date_end(Input@17, Year, Month, 17); + + [<<"1"/utf8>>, <<"8"/utf8>> | Input@18] -> + parse_date_end(Input@18, Year, Month, 18); + + [<<"1"/utf8>>, <<"9"/utf8>> | Input@19] -> + parse_date_end(Input@19, Year, Month, 19); + + [<<"2"/utf8>>, <<"0"/utf8>> | Input@20] -> + parse_date_end(Input@20, Year, Month, 20); + + [<<"2"/utf8>>, <<"1"/utf8>> | Input@21] -> + parse_date_end(Input@21, Year, Month, 21); + + [<<"2"/utf8>>, <<"2"/utf8>> | Input@22] -> + parse_date_end(Input@22, Year, Month, 22); + + [<<"2"/utf8>>, <<"3"/utf8>> | Input@23] -> + parse_date_end(Input@23, Year, Month, 23); + + [<<"2"/utf8>>, <<"4"/utf8>> | Input@24] -> + parse_date_end(Input@24, Year, Month, 24); + + [<<"2"/utf8>>, <<"5"/utf8>> | Input@25] -> + parse_date_end(Input@25, Year, Month, 25); + + [<<"2"/utf8>>, <<"6"/utf8>> | Input@26] -> + parse_date_end(Input@26, Year, Month, 26); + + [<<"2"/utf8>>, <<"7"/utf8>> | Input@27] -> + parse_date_end(Input@27, Year, Month, 27); + + [<<"2"/utf8>>, <<"8"/utf8>> | Input@28] -> + parse_date_end(Input@28, Year, Month, 28); + + [<<"2"/utf8>>, <<"9"/utf8>> | Input@29] -> + parse_date_end(Input@29, Year, Month, 29); + + [<<"3"/utf8>>, <<"0"/utf8>> | Input@30] -> + parse_date_end(Input@30, Year, Month, 30); + + [<<"3"/utf8>>, <<"1"/utf8>> | Input@31] -> + parse_date_end(Input@31, Year, Month, 31); + + [G | _] -> + {error, {unexpected, G, <<"date day"/utf8>>}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"date day"/utf8>>}} + end. + +-spec parse_date(list(binary()), integer()) -> {ok, {toml(), list(binary())}} | + {error, parse_error()}. +parse_date(Input, Year) -> + case Input of + [<<"0"/utf8>>, <<"1"/utf8>>, <<"-"/utf8>> | Input@1] -> + parse_date_day(Input@1, Year, 1); + + [<<"0"/utf8>>, <<"2"/utf8>>, <<"-"/utf8>> | Input@2] -> + parse_date_day(Input@2, Year, 2); + + [<<"0"/utf8>>, <<"3"/utf8>>, <<"-"/utf8>> | Input@3] -> + parse_date_day(Input@3, Year, 3); + + [<<"0"/utf8>>, <<"4"/utf8>>, <<"-"/utf8>> | Input@4] -> + parse_date_day(Input@4, Year, 4); + + [<<"0"/utf8>>, <<"5"/utf8>>, <<"-"/utf8>> | Input@5] -> + parse_date_day(Input@5, Year, 5); + + [<<"0"/utf8>>, <<"6"/utf8>>, <<"-"/utf8>> | Input@6] -> + parse_date_day(Input@6, Year, 6); + + [<<"0"/utf8>>, <<"7"/utf8>>, <<"-"/utf8>> | Input@7] -> + parse_date_day(Input@7, Year, 7); + + [<<"0"/utf8>>, <<"8"/utf8>>, <<"-"/utf8>> | Input@8] -> + parse_date_day(Input@8, Year, 8); + + [<<"0"/utf8>>, <<"9"/utf8>>, <<"-"/utf8>> | Input@9] -> + parse_date_day(Input@9, Year, 9); + + [<<"1"/utf8>>, <<"0"/utf8>>, <<"-"/utf8>> | Input@10] -> + parse_date_day(Input@10, Year, 10); + + [<<"1"/utf8>>, <<"1"/utf8>>, <<"-"/utf8>> | Input@11] -> + parse_date_day(Input@11, Year, 11); + + [<<"1"/utf8>>, <<"2"/utf8>>, <<"-"/utf8>> | Input@12] -> + parse_date_day(Input@12, Year, 12); + + [G | _] -> + {error, {unexpected, G, <<"date month"/utf8>>}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"date month"/utf8>>}} + end. + +-spec parse_number(list(binary()), integer(), sign()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_number(Input, Number, Sign) -> + case Input of + [<<"_"/utf8>> | Input@1] -> + parse_number(Input@1, Number, Sign); + + [<<"0"/utf8>> | Input@2] -> + parse_number(Input@2, (Number * 10) + 0, Sign); + + [<<"1"/utf8>> | Input@3] -> + parse_number(Input@3, (Number * 10) + 1, Sign); + + [<<"2"/utf8>> | Input@4] -> + parse_number(Input@4, (Number * 10) + 2, Sign); + + [<<"3"/utf8>> | Input@5] -> + parse_number(Input@5, (Number * 10) + 3, Sign); + + [<<"4"/utf8>> | Input@6] -> + parse_number(Input@6, (Number * 10) + 4, Sign); + + [<<"5"/utf8>> | Input@7] -> + parse_number(Input@7, (Number * 10) + 5, Sign); + + [<<"6"/utf8>> | Input@8] -> + parse_number(Input@8, (Number * 10) + 6, Sign); + + [<<"7"/utf8>> | Input@9] -> + parse_number(Input@9, (Number * 10) + 7, Sign); + + [<<"8"/utf8>> | Input@10] -> + parse_number(Input@10, (Number * 10) + 8, Sign); + + [<<"9"/utf8>> | Input@11] -> + parse_number(Input@11, (Number * 10) + 9, Sign); + + [<<"-"/utf8>> | Input@12] -> + parse_date(Input@12, Number); + + [<<":"/utf8>> | Input@13] when Number < 24 -> + parse_time_minute(Input@13, Number); + + [<<"."/utf8>> | Input@14] -> + parse_float(Input@14, gleam@int:to_float(Number), Sign, 0.1); + + [<<"e"/utf8>>, <<"+"/utf8>> | Input@15] -> + parse_exponent( + Input@15, + gleam@int:to_float(Number), + Sign, + 0, + positive + ); + + [<<"e"/utf8>>, <<"-"/utf8>> | Input@16] -> + parse_exponent( + Input@16, + gleam@int:to_float(Number), + Sign, + 0, + negative + ); + + [<<"e"/utf8>> | Input@17] -> + parse_exponent( + Input@17, + gleam@int:to_float(Number), + Sign, + 0, + positive + ); + + [<<"E"/utf8>>, <<"+"/utf8>> | Input@18] -> + parse_exponent( + Input@18, + gleam@int:to_float(Number), + Sign, + 0, + positive + ); + + [<<"E"/utf8>>, <<"-"/utf8>> | Input@19] -> + parse_exponent( + Input@19, + gleam@int:to_float(Number), + Sign, + 0, + negative + ); + + [<<"E"/utf8>> | Input@20] -> + parse_exponent( + Input@20, + gleam@int:to_float(Number), + Sign, + 0, + positive + ); + + Input@21 -> + Number@1 = case Sign of + positive -> + Number; + + negative -> + - Number + end, + {ok, {{int, Number@1}, Input@21}} + end. + +-spec reverse_arrays_of_tables(toml()) -> toml(). +reverse_arrays_of_tables(Toml) -> + case Toml of + {array_of_tables, Tables} -> + {array_of_tables, reverse_arrays_of_tables_array(Tables, [])}; + + {table, Table} -> + {table, reverse_arrays_of_tables_table(Table)}; + + _ -> + Toml + end. + +-spec reverse_arrays_of_tables_table(gleam@dict:dict(binary(), toml())) -> gleam@dict:dict(binary(), toml()). +reverse_arrays_of_tables_table(Table) -> + gleam@map:map_values(Table, fun(_, V) -> reverse_arrays_of_tables(V) end). + +-spec reverse_arrays_of_tables_array( + list(gleam@dict:dict(binary(), toml())), + list(gleam@dict:dict(binary(), toml())) +) -> list(gleam@dict:dict(binary(), toml())). +reverse_arrays_of_tables_array(Array, Acc) -> + case Array of + [] -> + Acc; + + [First | Rest] -> + First@1 = reverse_arrays_of_tables_table(First), + reverse_arrays_of_tables_array(Rest, [First@1 | Acc]) + end. + +-spec parse_inline_table_property( + list(binary()), + gleam@dict:dict(binary(), toml()) +) -> {ok, {gleam@dict:dict(binary(), toml()), list(binary())}} | + {error, parse_error()}. +parse_inline_table_property(Input, Properties) -> + Input@1 = skip_whitespace(Input), + do( + parse_key(Input@1, []), + fun(Key, Input@2) -> + Input@3 = skip_line_whitespace(Input@2), + expect( + Input@3, + <<"="/utf8>>, + fun(Input@4) -> + Input@5 = skip_line_whitespace(Input@4), + do( + parse_value(Input@5), + fun(Value, Input@6) -> + case insert(Properties, Key, Value) of + {ok, Properties@1} -> + {ok, {Properties@1, Input@6}}; + + {error, E} -> + {error, E} + end + end + ) + end + ) + end + ). + +-spec parse_value(list(binary())) -> {ok, {toml(), list(binary())}} | + {error, parse_error()}. +parse_value(Input) -> + case Input of + [<<"t"/utf8>>, <<"r"/utf8>>, <<"u"/utf8>>, <<"e"/utf8>> | Input@1] -> + {ok, {{bool, true}, Input@1}}; + + [<<"f"/utf8>>, + <<"a"/utf8>>, + <<"l"/utf8>>, + <<"s"/utf8>>, + <<"e"/utf8>> | + Input@2] -> + {ok, {{bool, false}, Input@2}}; + + [<<"n"/utf8>>, <<"a"/utf8>>, <<"n"/utf8>> | Input@3] -> + {ok, {{nan, positive}, Input@3}}; + + [<<"+"/utf8>>, <<"n"/utf8>>, <<"a"/utf8>>, <<"n"/utf8>> | Input@4] -> + {ok, {{nan, positive}, Input@4}}; + + [<<"-"/utf8>>, <<"n"/utf8>>, <<"a"/utf8>>, <<"n"/utf8>> | Input@5] -> + {ok, {{nan, negative}, Input@5}}; + + [<<"i"/utf8>>, <<"n"/utf8>>, <<"f"/utf8>> | Input@6] -> + {ok, {{infinity, positive}, Input@6}}; + + [<<"+"/utf8>>, <<"i"/utf8>>, <<"n"/utf8>>, <<"f"/utf8>> | Input@7] -> + {ok, {{infinity, positive}, Input@7}}; + + [<<"-"/utf8>>, <<"i"/utf8>>, <<"n"/utf8>>, <<"f"/utf8>> | Input@8] -> + {ok, {{infinity, negative}, Input@8}}; + + [<<"["/utf8>> | Input@9] -> + parse_array(Input@9, []); + + [<<"{"/utf8>> | Input@10] -> + parse_inline_table(Input@10, gleam@map:new()); + + [<<"0"/utf8>>, <<"x"/utf8>> | Input@11] -> + parse_hex(Input@11, 0, positive); + + [<<"+"/utf8>>, <<"0"/utf8>>, <<"x"/utf8>> | Input@12] -> + parse_hex(Input@12, 0, positive); + + [<<"-"/utf8>>, <<"0"/utf8>>, <<"x"/utf8>> | Input@13] -> + parse_hex(Input@13, 0, negative); + + [<<"0"/utf8>>, <<"o"/utf8>> | Input@14] -> + parse_octal(Input@14, 0, positive); + + [<<"+"/utf8>>, <<"0"/utf8>>, <<"o"/utf8>> | Input@15] -> + parse_octal(Input@15, 0, positive); + + [<<"-"/utf8>>, <<"0"/utf8>>, <<"o"/utf8>> | Input@16] -> + parse_octal(Input@16, 0, negative); + + [<<"0"/utf8>>, <<"b"/utf8>> | Input@17] -> + parse_binary(Input@17, 0, positive); + + [<<"+"/utf8>>, <<"0"/utf8>>, <<"b"/utf8>> | Input@18] -> + parse_binary(Input@18, 0, positive); + + [<<"-"/utf8>>, <<"0"/utf8>>, <<"b"/utf8>> | Input@19] -> + parse_binary(Input@19, 0, negative); + + [<<"+"/utf8>> | Input@20] -> + parse_number(Input@20, 0, positive); + + [<<"-"/utf8>> | Input@21] -> + parse_number(Input@21, 0, negative); + + [<<"0"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"1"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"2"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"3"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"4"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"5"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"6"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"7"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"8"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"9"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"\""/utf8>>, <<"\""/utf8>>, <<"\""/utf8>> | Input@22] -> + parse_multi_line_string(Input@22, <<""/utf8>>); + + [<<"\""/utf8>> | Input@23] -> + parse_string(Input@23, <<""/utf8>>); + + [<<"'"/utf8>>, <<"'"/utf8>>, <<"'"/utf8>> | Input@24] -> + parse_multi_line_literal_string(Input@24, <<""/utf8>>); + + [<<"'"/utf8>> | Input@25] -> + parse_literal_string(Input@25, <<""/utf8>>); + + [G | _] -> + {error, {unexpected, G, <<"value"/utf8>>}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"value"/utf8>>}} + end. + +-spec parse_inline_table(list(binary()), gleam@dict:dict(binary(), toml())) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_inline_table(Input, Properties) -> + Input@1 = skip_whitespace(Input), + case Input@1 of + [<<"}"/utf8>> | Input@2] -> + {ok, {{inline_table, Properties}, Input@2}}; + + _ -> + case parse_inline_table_property(Input@1, Properties) of + {ok, {Properties@1, Input@3}} -> + Input@4 = skip_whitespace(Input@3), + case Input@4 of + [<<"}"/utf8>> | Input@5] -> + {ok, {{inline_table, Properties@1}, Input@5}}; + + [<<","/utf8>> | Input@6] -> + Input@7 = skip_whitespace(Input@6), + parse_inline_table(Input@7, Properties@1); + + [G | _] -> + {error, {unexpected, G, <<"}"/utf8>>}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"}"/utf8>>}} + end; + + {error, E} -> + {error, E} + end + end. + +-spec parse_key_value(list(binary()), gleam@dict:dict(binary(), toml())) -> {ok, + {gleam@dict:dict(binary(), toml()), list(binary())}} | + {error, parse_error()}. +parse_key_value(Input, Toml) -> + do( + parse_key(Input, []), + fun(Key, Input@1) -> + Input@2 = skip_line_whitespace(Input@1), + expect( + Input@2, + <<"="/utf8>>, + fun(Input@3) -> + Input@4 = skip_line_whitespace(Input@3), + do( + parse_value(Input@4), + fun(Value, Input@5) -> case insert(Toml, Key, Value) of + {ok, Toml@1} -> + {ok, {Toml@1, Input@5}}; + + {error, E} -> + {error, E} + end end + ) + end + ) + end + ). + +-spec parse_table(list(binary()), gleam@dict:dict(binary(), toml())) -> {ok, + {gleam@dict:dict(binary(), toml()), list(binary())}} | + {error, parse_error()}. +parse_table(Input, Toml) -> + Input@1 = skip_whitespace(Input), + case Input@1 of + [<<"["/utf8>> | _] -> + {ok, {Toml, Input@1}}; + + [] -> + {ok, {Toml, Input@1}}; + + _ -> + case parse_key_value(Input@1, Toml) of + {ok, {Toml@1, Input@2}} -> + case skip_line_whitespace(Input@2) of + [] -> + {ok, {Toml@1, []}}; + + [<<"\n"/utf8>> | In] -> + parse_table(In, Toml@1); + + [<<"\r\n"/utf8>> | In] -> + parse_table(In, Toml@1); + + [G | _] -> + {error, {unexpected, G, <<"\n"/utf8>>}} + end; + + E -> + E + end + end. + +-spec parse_array_of_tables(list(binary())) -> {ok, + {{list(binary()), gleam@dict:dict(binary(), toml())}, list(binary())}} | + {error, parse_error()}. +parse_array_of_tables(Input) -> + Input@1 = skip_line_whitespace(Input), + do( + parse_key(Input@1, []), + fun(Key, Input@2) -> + expect( + Input@2, + <<"]"/utf8>>, + fun(Input@3) -> + expect( + Input@3, + <<"]"/utf8>>, + fun(Input@4) -> + do( + parse_table(Input@4, gleam@map:new()), + fun(Table, Input@5) -> + {ok, {{Key, Table}, Input@5}} + end + ) + end + ) + end + ) + end + ). + +-spec parse_table_and_header(list(binary())) -> {ok, + {{list(binary()), gleam@dict:dict(binary(), toml())}, list(binary())}} | + {error, parse_error()}. +parse_table_and_header(Input) -> + do( + parse_table_header(Input), + fun(Key, Input@1) -> + do( + parse_table(Input@1, gleam@map:new()), + fun(Table, Input@2) -> {ok, {{Key, Table}, Input@2}} end + ) + end + ). + +-spec parse_tables(list(binary()), gleam@dict:dict(binary(), toml())) -> {ok, + gleam@dict:dict(binary(), toml())} | + {error, parse_error()}. +parse_tables(Input, Toml) -> + case Input of + [<<"["/utf8>>, <<"["/utf8>> | Input@1] -> + case parse_array_of_tables(Input@1) of + {error, E} -> + {error, E}; + + {ok, {{Key, Table}, Input@2}} -> + case insert(Toml, Key, {array_of_tables, [Table]}) of + {ok, Toml@1} -> + parse_tables(Input@2, Toml@1); + + {error, E@1} -> + {error, E@1} + end + end; + + [<<"["/utf8>> | Input@3] -> + case parse_table_and_header(Input@3) of + {error, E@2} -> + {error, E@2}; + + {ok, {{Key@1, Table@1}, Input@4}} -> + case insert(Toml, Key@1, {table, Table@1}) of + {ok, Toml@2} -> + parse_tables(Input@4, Toml@2); + + {error, E@3} -> + {error, E@3} + end + end; + + [G | _] -> + {error, {unexpected, G, <<"["/utf8>>}}; + + [] -> + {ok, Toml} + end. + +-spec parse(binary()) -> {ok, gleam@dict:dict(binary(), toml())} | + {error, parse_error()}. +parse(Input) -> + Input@1 = gleam@string:to_graphemes(Input), + Input@2 = drop_comments(Input@1, []), + Input@3 = skip_whitespace(Input@2), + do( + parse_table(Input@3, gleam@map:new()), + fun(Toml, Input@4) -> case parse_tables(Input@4, Toml) of + {ok, Toml@1} -> + {ok, reverse_arrays_of_tables_table(Toml@1)}; + + {error, E} -> + {error, E} + end end + ). + +-spec parse_array(list(binary()), list(toml())) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_array(Input, Elements) -> + Input@1 = skip_whitespace(Input), + case Input@1 of + [<<"]"/utf8>> | Input@2] -> + {ok, {{array, gleam@list:reverse(Elements)}, Input@2}}; + + _ -> + do( + parse_value(Input@1), + fun(Element, Input@3) -> + Elements@1 = [Element | Elements], + Input@4 = skip_whitespace(Input@3), + case Input@4 of + [<<"]"/utf8>> | Input@5] -> + {ok, + {{array, gleam@list:reverse(Elements@1)}, + Input@5}}; + + [<<","/utf8>> | Input@6] -> + Input@7 = skip_whitespace(Input@6), + parse_array(Input@7, Elements@1); + + [G | _] -> + {error, {unexpected, G, <<"]"/utf8>>}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"]"/utf8>>}} + end + end + ) + end. diff --git a/aoc2023/build/dev/erlang/tom/ebin/tom.app b/aoc2023/build/dev/erlang/tom/ebin/tom.app new file mode 100644 index 0000000..ade9be1 --- /dev/null +++ b/aoc2023/build/dev/erlang/tom/ebin/tom.app @@ -0,0 +1,7 @@ +{application, tom, [ + {vsn, "0.2.1"}, + {applications, [gleam_stdlib]}, + {description, "A pure Gleam TOML parser!"}, + {modules, []}, + {registered, []} +]}. diff --git a/aoc2023/build/dev/erlang/tom/ebin/tom.beam b/aoc2023/build/dev/erlang/tom/ebin/tom.beam Binary files differnew file mode 100644 index 0000000..0d4e0d2 --- /dev/null +++ b/aoc2023/build/dev/erlang/tom/ebin/tom.beam diff --git a/aoc2023/build/dev/erlang/tom/include/tom_DateTimeValue.hrl b/aoc2023/build/dev/erlang/tom/include/tom_DateTimeValue.hrl new file mode 100644 index 0000000..3b1e660 --- /dev/null +++ b/aoc2023/build/dev/erlang/tom/include/tom_DateTimeValue.hrl @@ -0,0 +1,5 @@ +-record(date_time_value, { + date :: tom:date(), + time :: tom:time(), + offset :: tom:offset() +}). diff --git a/aoc2023/build/dev/erlang/tom/include/tom_DateValue.hrl b/aoc2023/build/dev/erlang/tom/include/tom_DateValue.hrl new file mode 100644 index 0000000..c41f901 --- /dev/null +++ b/aoc2023/build/dev/erlang/tom/include/tom_DateValue.hrl @@ -0,0 +1 @@ +-record(date_value, {year :: integer(), month :: integer(), day :: integer()}). diff --git a/aoc2023/build/dev/erlang/tom/include/tom_KeyAlreadyInUse.hrl b/aoc2023/build/dev/erlang/tom/include/tom_KeyAlreadyInUse.hrl new file mode 100644 index 0000000..930df26 --- /dev/null +++ b/aoc2023/build/dev/erlang/tom/include/tom_KeyAlreadyInUse.hrl @@ -0,0 +1 @@ +-record(key_already_in_use, {key :: list(binary())}). diff --git a/aoc2023/build/dev/erlang/tom/include/tom_NotFound.hrl b/aoc2023/build/dev/erlang/tom/include/tom_NotFound.hrl new file mode 100644 index 0000000..19c9a17 --- /dev/null +++ b/aoc2023/build/dev/erlang/tom/include/tom_NotFound.hrl @@ -0,0 +1 @@ +-record(not_found, {key :: list(binary())}). diff --git a/aoc2023/build/dev/erlang/tom/include/tom_Offset.hrl b/aoc2023/build/dev/erlang/tom/include/tom_Offset.hrl new file mode 100644 index 0000000..a58a8e1 --- /dev/null +++ b/aoc2023/build/dev/erlang/tom/include/tom_Offset.hrl @@ -0,0 +1,5 @@ +-record(offset, { + direction :: tom:sign(), + hours :: integer(), + minutes :: integer() +}). diff --git a/aoc2023/build/dev/erlang/tom/include/tom_TimeValue.hrl b/aoc2023/build/dev/erlang/tom/include/tom_TimeValue.hrl new file mode 100644 index 0000000..e1275de --- /dev/null +++ b/aoc2023/build/dev/erlang/tom/include/tom_TimeValue.hrl @@ -0,0 +1,6 @@ +-record(time_value, { + hour :: integer(), + minute :: integer(), + second :: integer(), + millisecond :: integer() +}). diff --git a/aoc2023/build/dev/erlang/tom/include/tom_Unexpected.hrl b/aoc2023/build/dev/erlang/tom/include/tom_Unexpected.hrl new file mode 100644 index 0000000..ab1091c --- /dev/null +++ b/aoc2023/build/dev/erlang/tom/include/tom_Unexpected.hrl @@ -0,0 +1 @@ +-record(unexpected, {got :: binary(), expected :: binary()}). diff --git a/aoc2023/build/dev/erlang/tom/include/tom_WrongType.hrl b/aoc2023/build/dev/erlang/tom/include/tom_WrongType.hrl new file mode 100644 index 0000000..ae57352 --- /dev/null +++ b/aoc2023/build/dev/erlang/tom/include/tom_WrongType.hrl @@ -0,0 +1,5 @@ +-record(wrong_type, { + key :: list(binary()), + expected :: binary(), + got :: binary() +}). diff --git a/aoc2023/build/dev/javascript/gleam.lock b/aoc2023/build/dev/javascript/gleam.lock new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/aoc2023/build/dev/javascript/gleam.lock diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent.cache Binary files differnew file mode 100644 index 0000000..521ceaf --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent.cache_meta Binary files differnew file mode 100644 index 0000000..5b2e4fa --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@day.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@day.cache Binary files differnew file mode 100644 index 0000000..4a84a17 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@day.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@day.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@day.cache_meta Binary files differnew file mode 100644 index 0000000..13db829 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@day.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@init.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@init.cache Binary files differnew file mode 100644 index 0000000..fc93f49 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@init.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@init.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@init.cache_meta Binary files differnew file mode 100644 index 0000000..25d46c5 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@init.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache Binary files differnew file mode 100644 index 0000000..3f2627e --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache_meta Binary files differnew file mode 100644 index 0000000..ea20543 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@errors.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@errors.cache Binary files differnew file mode 100644 index 0000000..6b372e3 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@errors.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@errors.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@errors.cache_meta Binary files differnew file mode 100644 index 0000000..d74550f --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@errors.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@prompt.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@prompt.cache Binary files differnew file mode 100644 index 0000000..892378a --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@prompt.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@prompt.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@prompt.cache_meta Binary files differnew file mode 100644 index 0000000..6069b5f --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@prompt.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@template.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@template.cache Binary files differnew file mode 100644 index 0000000..59c03e8 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@template.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@template.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@template.cache_meta Binary files differnew file mode 100644 index 0000000..4280edf --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@template.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache Binary files differnew file mode 100644 index 0000000..eabceb6 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache_meta Binary files differnew file mode 100644 index 0000000..efc3c1e --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache Binary files differnew file mode 100644 index 0000000..7941b60 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache_meta Binary files differnew file mode 100644 index 0000000..a43f871 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache Binary files differnew file mode 100644 index 0000000..3c13e17 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache_meta Binary files differnew file mode 100644 index 0000000..171b42d --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache Binary files differnew file mode 100644 index 0000000..6f3ef24 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache_meta Binary files differnew file mode 100644 index 0000000..943d5d1 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@toml.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@toml.cache Binary files differnew file mode 100644 index 0000000..689de34 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@toml.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@toml.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@toml.cache_meta Binary files differnew file mode 100644 index 0000000..dd43210 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@toml.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime.cache Binary files differnew file mode 100644 index 0000000..222be7f --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime.cache_meta Binary files differnew file mode 100644 index 0000000..a6a146a --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache Binary files differnew file mode 100644 index 0000000..2827e6a --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache_meta Binary files differnew file mode 100644 index 0000000..7772183 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache Binary files differnew file mode 100644 index 0000000..be4949e --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache_meta Binary files differnew file mode 100644 index 0000000..c4fec3d --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache Binary files differnew file mode 100644 index 0000000..e21cf07 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache_meta Binary files differnew file mode 100644 index 0000000..1756ecb --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache Binary files differnew file mode 100644 index 0000000..6fc886b --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache_meta Binary files differnew file mode 100644 index 0000000..6ee96ca --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache Binary files differnew file mode 100644 index 0000000..1fb5bce --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache_meta Binary files differnew file mode 100644 index 0000000..f515230 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache Binary files differnew file mode 100644 index 0000000..a37646a --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache_meta Binary files differnew file mode 100644 index 0000000..7cfc212 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache Binary files differnew file mode 100644 index 0000000..2215915 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache_meta Binary files differnew file mode 100644 index 0000000..39219c2 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache Binary files differnew file mode 100644 index 0000000..6d99c72 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache_meta Binary files differnew file mode 100644 index 0000000..3c79f10 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache Binary files differnew file mode 100644 index 0000000..552c884 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache_meta Binary files differnew file mode 100644 index 0000000..b8918d9 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache Binary files differnew file mode 100644 index 0000000..1a93299 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache_meta Binary files differnew file mode 100644 index 0000000..8edfde1 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache Binary files differnew file mode 100644 index 0000000..90c98f2 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache_meta Binary files differnew file mode 100644 index 0000000..b116b96 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache Binary files differnew file mode 100644 index 0000000..6fbddc2 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache_meta Binary files differnew file mode 100644 index 0000000..ff3b647 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache Binary files differnew file mode 100644 index 0000000..6d293dd --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache_meta Binary files differnew file mode 100644 index 0000000..1236a4e --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache Binary files differnew file mode 100644 index 0000000..56d5588 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache_meta Binary files differnew file mode 100644 index 0000000..8458464 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache_meta diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache Binary files differnew file mode 100644 index 0000000..18e4c90 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache_meta Binary files differnew file mode 100644 index 0000000..784c0c6 --- /dev/null +++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023.cache Binary files differnew file mode 100644 index 0000000..03ccd8d --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023.cache_meta Binary files differnew file mode 100644 index 0000000..010588b --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache Binary files differnew file mode 100644 index 0000000..a3e359f --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache_meta Binary files differnew file mode 100644 index 0000000..7e5812c --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache Binary files differnew file mode 100644 index 0000000..679e63b --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache_meta Binary files differnew file mode 100644 index 0000000..492226f --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@solve.cache Binary files differnew file mode 100644 index 0000000..cac1824 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@solve.cache_meta Binary files differnew file mode 100644 index 0000000..f684afc --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache Binary files differnew file mode 100644 index 0000000..1924a60 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache_meta Binary files differnew file mode 100644 index 0000000..e9f22f9 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@solve.cache Binary files differnew file mode 100644 index 0000000..94061b3 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@solve.cache_meta Binary files differnew file mode 100644 index 0000000..fb68ddf --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache Binary files differnew file mode 100644 index 0000000..ae12c19 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache_meta Binary files differnew file mode 100644 index 0000000..8696694 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@solve.cache Binary files differnew file mode 100644 index 0000000..d66a1b7 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@solve.cache_meta Binary files differnew file mode 100644 index 0000000..dbcb771 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache Binary files differnew file mode 100644 index 0000000..6605c0f --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache_meta Binary files differnew file mode 100644 index 0000000..e8e1290 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@solve.cache Binary files differnew file mode 100644 index 0000000..285fc49 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@solve.cache_meta Binary files differnew file mode 100644 index 0000000..7ef4eea --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache Binary files differnew file mode 100644 index 0000000..99eb8b4 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache_meta Binary files differnew file mode 100644 index 0000000..c6b6dc6 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@solve.cache Binary files differnew file mode 100644 index 0000000..19fc049 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@solve.cache_meta Binary files differnew file mode 100644 index 0000000..eb4b13e --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache Binary files differnew file mode 100644 index 0000000..2cd9b6f --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache_meta Binary files differnew file mode 100644 index 0000000..a5a8349 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@solve.cache Binary files differnew file mode 100644 index 0000000..ec1b22a --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@solve.cache_meta Binary files differnew file mode 100644 index 0000000..c27e086 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache Binary files differnew file mode 100644 index 0000000..9aed405 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache_meta Binary files differnew file mode 100644 index 0000000..a3e7398 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@solve.cache Binary files differnew file mode 100644 index 0000000..30d5d19 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@solve.cache_meta Binary files differnew file mode 100644 index 0000000..09cc64c --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache Binary files differnew file mode 100644 index 0000000..a859e78 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache_meta Binary files differnew file mode 100644 index 0000000..1de55c9 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@solve.cache Binary files differnew file mode 100644 index 0000000..2efed01 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@solve.cache_meta Binary files differnew file mode 100644 index 0000000..71761c7 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache Binary files differnew file mode 100644 index 0000000..65f231e --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache_meta Binary files differnew file mode 100644 index 0000000..8373480 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@solve.cache Binary files differnew file mode 100644 index 0000000..f9f0f27 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@solve.cache_meta Binary files differnew file mode 100644 index 0000000..dcebbaf --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache Binary files differnew file mode 100644 index 0000000..b29c52a --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache_meta Binary files differnew file mode 100644 index 0000000..51fdff1 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@solve.cache Binary files differnew file mode 100644 index 0000000..586dc8a --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@solve.cache_meta Binary files differnew file mode 100644 index 0000000..7d7d9f7 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache Binary files differnew file mode 100644 index 0000000..81e1b95 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache_meta Binary files differnew file mode 100644 index 0000000..216bc61 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@solve.cache Binary files differnew file mode 100644 index 0000000..7fb41c1 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@solve.cache_meta Binary files differnew file mode 100644 index 0000000..683844e --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache Binary files differnew file mode 100644 index 0000000..17bd031 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache_meta Binary files differnew file mode 100644 index 0000000..a62c67e --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@solve.cache Binary files differnew file mode 100644 index 0000000..b0eb623 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@solve.cache_meta Binary files differnew file mode 100644 index 0000000..2fec13e --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@day21_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@day21_test.cache Binary files differnew file mode 100644 index 0000000..6ca601f --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@day21_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@day21_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@day21_test.cache_meta Binary files differnew file mode 100644 index 0000000..d2ccb36 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@day21_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@solve.cache Binary files differnew file mode 100644 index 0000000..696553d --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@solve.cache_meta Binary files differnew file mode 100644 index 0000000..d86557e --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@day22_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@day22_test.cache Binary files differnew file mode 100644 index 0000000..ba7b665 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@day22_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@day22_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@day22_test.cache_meta Binary files differnew file mode 100644 index 0000000..e3b757f --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@day22_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@solve.cache Binary files differnew file mode 100644 index 0000000..4367d01 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@solve.cache_meta Binary files differnew file mode 100644 index 0000000..1debfe9 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@day23_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@day23_test.cache Binary files differnew file mode 100644 index 0000000..a911091 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@day23_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@day23_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@day23_test.cache_meta Binary files differnew file mode 100644 index 0000000..828230e --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@day23_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@solve.cache Binary files differnew file mode 100644 index 0000000..9b88d01 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@solve.cache_meta Binary files differnew file mode 100644 index 0000000..35a9a48 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache Binary files differnew file mode 100644 index 0000000..482a3bf --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache_meta Binary files differnew file mode 100644 index 0000000..2af1fbe --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@solve.cache Binary files differnew file mode 100644 index 0000000..50d9065 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@solve.cache_meta Binary files differnew file mode 100644 index 0000000..e326f72 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache Binary files differnew file mode 100644 index 0000000..80b9225 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache_meta Binary files differnew file mode 100644 index 0000000..e9df393 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@solve.cache Binary files differnew file mode 100644 index 0000000..52a1a03 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@solve.cache_meta Binary files differnew file mode 100644 index 0000000..bb3d942 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache Binary files differnew file mode 100644 index 0000000..9adb008 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache_meta Binary files differnew file mode 100644 index 0000000..d80de98 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@solve.cache Binary files differnew file mode 100644 index 0000000..fc70a08 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@solve.cache_meta Binary files differnew file mode 100644 index 0000000..3b1a2a0 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache Binary files differnew file mode 100644 index 0000000..d2b4607 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache_meta Binary files differnew file mode 100644 index 0000000..eca9fea --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@solve.cache Binary files differnew file mode 100644 index 0000000..0a13d69 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@solve.cache_meta Binary files differnew file mode 100644 index 0000000..054cd0e --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache Binary files differnew file mode 100644 index 0000000..6764230 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache_meta Binary files differnew file mode 100644 index 0000000..d316cb3 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@solve.cache Binary files differnew file mode 100644 index 0000000..0172460 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@solve.cache_meta Binary files differnew file mode 100644 index 0000000..bd28173 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache Binary files differnew file mode 100644 index 0000000..fefff2d --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache_meta Binary files differnew file mode 100644 index 0000000..5355703 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@solve.cache Binary files differnew file mode 100644 index 0000000..2c9cded --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@solve.cache_meta Binary files differnew file mode 100644 index 0000000..a7d2130 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache Binary files differnew file mode 100644 index 0000000..4d54d49 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache_meta Binary files differnew file mode 100644 index 0000000..4f164d5 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@solve.cache Binary files differnew file mode 100644 index 0000000..5fa8a20 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@solve.cache_meta Binary files differnew file mode 100644 index 0000000..c13d429 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache Binary files differnew file mode 100644 index 0000000..a99c932 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache_meta Binary files differnew file mode 100644 index 0000000..bff2f05 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@solve.cache Binary files differnew file mode 100644 index 0000000..beefe36 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@solve.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@solve.cache_meta Binary files differnew file mode 100644 index 0000000..de6a9ae --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@solve.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache Binary files differnew file mode 100644 index 0000000..afe092f --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache_meta Binary files differnew file mode 100644 index 0000000..88a04e0 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache Binary files differnew file mode 100644 index 0000000..9273efb --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache_meta Binary files differnew file mode 100644 index 0000000..f81ca7a --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache_meta diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache Binary files differnew file mode 100644 index 0000000..5a113a7 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache_meta Binary files differnew file mode 100644 index 0000000..f3cebb8 --- /dev/null +++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache_meta diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap.cache b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap.cache Binary files differnew file mode 100644 index 0000000..58fdf0a --- /dev/null +++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap.cache diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap.cache_meta b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap.cache_meta Binary files differnew file mode 100644 index 0000000..edd8d2a --- /dev/null +++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap.cache_meta diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@comparison.cache b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@comparison.cache Binary files differnew file mode 100644 index 0000000..df62224 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@comparison.cache diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@comparison.cache_meta b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@comparison.cache_meta Binary files differnew file mode 100644 index 0000000..3bc139d --- /dev/null +++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@comparison.cache_meta diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@myers.cache b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@myers.cache Binary files differnew file mode 100644 index 0000000..bbfe5ed --- /dev/null +++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@myers.cache diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@myers.cache_meta b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@myers.cache_meta Binary files differnew file mode 100644 index 0000000..4a36f3c --- /dev/null +++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@myers.cache_meta diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache Binary files differnew file mode 100644 index 0000000..65752d7 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache_meta b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache_meta Binary files differnew file mode 100644 index 0000000..ca915f3 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache_meta diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styling.cache b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styling.cache Binary files differnew file mode 100644 index 0000000..c0172d9 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styling.cache diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styling.cache_meta b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styling.cache_meta Binary files differnew file mode 100644 index 0000000..3773567 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styling.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam.lock b/aoc2023/build/lsp/erlang/gleam.lock new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam.lock diff --git a/aoc2023/build/lsp/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache b/aoc2023/build/lsp/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache Binary files differnew file mode 100644 index 0000000..5163da7 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache diff --git a/aoc2023/build/lsp/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache_meta Binary files differnew file mode 100644 index 0000000..6988904 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache b/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache Binary files differnew file mode 100644 index 0000000..d1acf6b --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache diff --git a/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache_meta Binary files differnew file mode 100644 index 0000000..53e1ad9 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache b/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache Binary files differnew file mode 100644 index 0000000..7012d28 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache diff --git a/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache_meta Binary files differnew file mode 100644 index 0000000..e926edf --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache Binary files differnew file mode 100644 index 0000000..dbe18f4 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache_meta Binary files differnew file mode 100644 index 0000000..ac9cd0c --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache Binary files differnew file mode 100644 index 0000000..82de246 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache_meta Binary files differnew file mode 100644 index 0000000..8124d25 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache Binary files differnew file mode 100644 index 0000000..18e058a --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache_meta Binary files differnew file mode 100644 index 0000000..eada136 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache Binary files differnew file mode 100644 index 0000000..706c48f --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache_meta Binary files differnew file mode 100644 index 0000000..ade0e09 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache Binary files differnew file mode 100644 index 0000000..e21f351 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache_meta Binary files differnew file mode 100644 index 0000000..7edd566 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache Binary files differnew file mode 100644 index 0000000..31e4bd8 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache_meta Binary files differnew file mode 100644 index 0000000..14c1d0f --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache Binary files differnew file mode 100644 index 0000000..a0c65e8 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache_meta Binary files differnew file mode 100644 index 0000000..8d56c49 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache Binary files differnew file mode 100644 index 0000000..c1adae5 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache_meta Binary files differnew file mode 100644 index 0000000..3cfa2ef --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache Binary files differnew file mode 100644 index 0000000..ecca197 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache_meta Binary files differnew file mode 100644 index 0000000..e8cada3 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache Binary files differnew file mode 100644 index 0000000..9cb4b7e --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache_meta b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache_meta Binary files differnew file mode 100644 index 0000000..d76e6b6 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache Binary files differnew file mode 100644 index 0000000..ee9e3c5 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_meta b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_meta Binary files differnew file mode 100644 index 0000000..bfd938d --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache Binary files differnew file mode 100644 index 0000000..223f016 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_meta b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_meta Binary files differnew file mode 100644 index 0000000..7996afc --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache Binary files differnew file mode 100644 index 0000000..e935a8b --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache_meta b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache_meta Binary files differnew file mode 100644 index 0000000..e194cad --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache Binary files differnew file mode 100644 index 0000000..b0b77f7 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_meta b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_meta Binary files differnew file mode 100644 index 0000000..4423143 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache Binary files differnew file mode 100644 index 0000000..977e362 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache_meta b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache_meta Binary files differnew file mode 100644 index 0000000..a5a851f --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache Binary files differnew file mode 100644 index 0000000..4c47a8f --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_meta b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_meta Binary files differnew file mode 100644 index 0000000..90df4b9 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http.cache b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http.cache Binary files differnew file mode 100644 index 0000000..6b925a9 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http.cache diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http.cache_meta b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http.cache_meta Binary files differnew file mode 100644 index 0000000..f53edb8 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache Binary files differnew file mode 100644 index 0000000..ab6b66d --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache_meta b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache_meta Binary files differnew file mode 100644 index 0000000..89d9a4d --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache Binary files differnew file mode 100644 index 0000000..a5cf562 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache_meta b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache_meta Binary files differnew file mode 100644 index 0000000..91001e2 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache Binary files differnew file mode 100644 index 0000000..19c78e4 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache_meta b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache_meta Binary files differnew file mode 100644 index 0000000..37ee645 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache Binary files differnew file mode 100644 index 0000000..903ffa4 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache_meta b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache_meta Binary files differnew file mode 100644 index 0000000..30e0838 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache b/aoc2023/build/lsp/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache Binary files differnew file mode 100644 index 0000000..ba9ef78 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache diff --git a/aoc2023/build/lsp/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache_meta b/aoc2023/build/lsp/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache_meta Binary files differnew file mode 100644 index 0000000..d66a2c3 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache Binary files differnew file mode 100644 index 0000000..739be7d --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache_meta b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache_meta Binary files differnew file mode 100644 index 0000000..01991ea --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache Binary files differnew file mode 100644 index 0000000..24b814e --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache_meta b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache_meta Binary files differnew file mode 100644 index 0000000..ad921d2 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache Binary files differnew file mode 100644 index 0000000..b35f9fd --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache_meta b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache_meta Binary files differnew file mode 100644 index 0000000..ac4a4c2 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache Binary files differnew file mode 100644 index 0000000..30fbb09 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache_meta b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache_meta Binary files differnew file mode 100644 index 0000000..a58472a --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache Binary files differnew file mode 100644 index 0000000..9992f8e --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache_meta b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache_meta Binary files differnew file mode 100644 index 0000000..830d435 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache Binary files differnew file mode 100644 index 0000000..fb7d4a6 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache_meta b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache_meta Binary files differnew file mode 100644 index 0000000..26c03cf --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache Binary files differnew file mode 100644 index 0000000..c447835 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache_meta b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache_meta Binary files differnew file mode 100644 index 0000000..6beed5e --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache Binary files differnew file mode 100644 index 0000000..e295cef --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache_meta Binary files differnew file mode 100644 index 0000000..d03bd4e --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache Binary files differnew file mode 100644 index 0000000..6b43913 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_meta Binary files differnew file mode 100644 index 0000000..09e2f8a --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache Binary files differnew file mode 100644 index 0000000..122b269 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache_meta Binary files differnew file mode 100644 index 0000000..b59a80e --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache Binary files differnew file mode 100644 index 0000000..7a80622 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache_meta Binary files differnew file mode 100644 index 0000000..e7f013d --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache Binary files differnew file mode 100644 index 0000000..06a6c96 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_meta Binary files differnew file mode 100644 index 0000000..e616ec0 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache Binary files differnew file mode 100644 index 0000000..01ea426 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache_meta Binary files differnew file mode 100644 index 0000000..701db1f --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache Binary files differnew file mode 100644 index 0000000..49f4e5c --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_meta Binary files differnew file mode 100644 index 0000000..fd97a7e --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache Binary files differnew file mode 100644 index 0000000..cbc0f1c --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_meta Binary files differnew file mode 100644 index 0000000..e0ebbda --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache Binary files differnew file mode 100644 index 0000000..189b9ad --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache_meta Binary files differnew file mode 100644 index 0000000..8778fab --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache Binary files differnew file mode 100644 index 0000000..726a070 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache_meta Binary files differnew file mode 100644 index 0000000..8bfae6d --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache Binary files differnew file mode 100644 index 0000000..83be3b0 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache_meta Binary files differnew file mode 100644 index 0000000..7c99d5d --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache Binary files differnew file mode 100644 index 0000000..b20af0e --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache_meta Binary files differnew file mode 100644 index 0000000..48ca73e --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache Binary files differnew file mode 100644 index 0000000..c3d8348 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache_meta Binary files differnew file mode 100644 index 0000000..fb52d57 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache Binary files differnew file mode 100644 index 0000000..752dab0 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache_meta Binary files differnew file mode 100644 index 0000000..6587875 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache Binary files differnew file mode 100644 index 0000000..ba87194 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache_meta Binary files differnew file mode 100644 index 0000000..0b52486 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache Binary files differnew file mode 100644 index 0000000..100fb62 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache_meta Binary files differnew file mode 100644 index 0000000..8b36f47 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache Binary files differnew file mode 100644 index 0000000..cf6532f --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache_meta Binary files differnew file mode 100644 index 0000000..2395015 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache Binary files differnew file mode 100644 index 0000000..8b90bd7 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_meta Binary files differnew file mode 100644 index 0000000..a2089a5 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache Binary files differnew file mode 100644 index 0000000..cbb4139 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache_meta Binary files differnew file mode 100644 index 0000000..6ec02d2 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache Binary files differnew file mode 100644 index 0000000..04900e9 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache_meta Binary files differnew file mode 100644 index 0000000..d6129ae --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache Binary files differnew file mode 100644 index 0000000..fa35d18 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache_meta Binary files differnew file mode 100644 index 0000000..f4e8874 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache Binary files differnew file mode 100644 index 0000000..d33ebc9 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache_meta Binary files differnew file mode 100644 index 0000000..e4e832b --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache Binary files differnew file mode 100644 index 0000000..64e10ec --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache_meta Binary files differnew file mode 100644 index 0000000..0f375fd --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache Binary files differnew file mode 100644 index 0000000..2130157 --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache_meta Binary files differnew file mode 100644 index 0000000..b367bfd --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache Binary files differnew file mode 100644 index 0000000..0e387bb --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_meta Binary files differnew file mode 100644 index 0000000..2ae412b --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_meta diff --git a/aoc2023/build/lsp/erlang/gleam_version b/aoc2023/build/lsp/erlang/gleam_version new file mode 100644 index 0000000..048acbd --- /dev/null +++ b/aoc2023/build/lsp/erlang/gleam_version @@ -0,0 +1 @@ +0.33.0-rc2
\ No newline at end of file diff --git a/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint.cache b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint.cache Binary files differnew file mode 100644 index 0000000..eb7ff68 --- /dev/null +++ b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint.cache diff --git a/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint.cache_meta b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint.cache_meta Binary files differnew file mode 100644 index 0000000..961512a --- /dev/null +++ b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint.cache_meta diff --git a/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag.cache b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag.cache Binary files differnew file mode 100644 index 0000000..80596e9 --- /dev/null +++ b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag.cache diff --git a/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag.cache_meta b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag.cache_meta Binary files differnew file mode 100644 index 0000000..1c9f1af --- /dev/null +++ b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag.cache_meta diff --git a/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache Binary files differnew file mode 100644 index 0000000..cc6fd56 --- /dev/null +++ b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache diff --git a/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache_meta b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache_meta Binary files differnew file mode 100644 index 0000000..9339182 --- /dev/null +++ b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache_meta diff --git a/aoc2023/build/lsp/erlang/simplifile/_gleam_artefacts/simplifile.cache b/aoc2023/build/lsp/erlang/simplifile/_gleam_artefacts/simplifile.cache Binary files differnew file mode 100644 index 0000000..6012ccd --- /dev/null +++ b/aoc2023/build/lsp/erlang/simplifile/_gleam_artefacts/simplifile.cache diff --git a/aoc2023/build/lsp/erlang/simplifile/_gleam_artefacts/simplifile.cache_meta b/aoc2023/build/lsp/erlang/simplifile/_gleam_artefacts/simplifile.cache_meta Binary files differnew file mode 100644 index 0000000..2120b13 --- /dev/null +++ b/aoc2023/build/lsp/erlang/simplifile/_gleam_artefacts/simplifile.cache_meta diff --git a/aoc2023/build/lsp/erlang/snag/_gleam_artefacts/snag.cache b/aoc2023/build/lsp/erlang/snag/_gleam_artefacts/snag.cache Binary files differnew file mode 100644 index 0000000..72355df --- /dev/null +++ b/aoc2023/build/lsp/erlang/snag/_gleam_artefacts/snag.cache diff --git a/aoc2023/build/lsp/erlang/snag/_gleam_artefacts/snag.cache_meta b/aoc2023/build/lsp/erlang/snag/_gleam_artefacts/snag.cache_meta Binary files differnew file mode 100644 index 0000000..181b01e --- /dev/null +++ b/aoc2023/build/lsp/erlang/snag/_gleam_artefacts/snag.cache_meta diff --git a/aoc2023/build/lsp/erlang/tom/_gleam_artefacts/tom.cache b/aoc2023/build/lsp/erlang/tom/_gleam_artefacts/tom.cache Binary files differnew file mode 100644 index 0000000..c632faf --- /dev/null +++ b/aoc2023/build/lsp/erlang/tom/_gleam_artefacts/tom.cache diff --git a/aoc2023/build/lsp/erlang/tom/_gleam_artefacts/tom.cache_meta b/aoc2023/build/lsp/erlang/tom/_gleam_artefacts/tom.cache_meta Binary files differnew file mode 100644 index 0000000..3371771 --- /dev/null +++ b/aoc2023/build/lsp/erlang/tom/_gleam_artefacts/tom.cache_meta diff --git a/aoc2023/build/lsp/javascript/gleam.lock b/aoc2023/build/lsp/javascript/gleam.lock new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/aoc2023/build/lsp/javascript/gleam.lock diff --git a/aoc2023/build/packages/adglent/LICENSE b/aoc2023/build/packages/adglent/LICENSE new file mode 100644 index 0000000..c7c82cc --- /dev/null +++ b/aoc2023/build/packages/adglent/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright 2023 John Björk + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/aoc2023/build/packages/adglent/README.md b/aoc2023/build/packages/adglent/README.md new file mode 100644 index 0000000..fcd81eb --- /dev/null +++ b/aoc2023/build/packages/adglent/README.md @@ -0,0 +1,115 @@ +# adglent + +[](https://hex.pm/packages/adglent) +[](https://hexdocs.pm/adglent/) + +## About + +`adglent` is a Gleam library which can be used to setup testing code and a template for implementing solution to [Advent of code](https://adventofcode.com/) problems. + +> NOTE: `adglent` **only** supports `erlang` target (default) for Gleam. + +## Prerequisites + +`adglent` is written in `gleam` and runs and tests solutions written in Gleam. Read more about `gleam` at [gleam.run](https://gleam.run). + +The easiest way to install `gleam` is to use `asdf`: + +1. Install `asdf` according to the instructions at the [asdf website](https://asdf-vm.com/) +2. Install the gleam asdf plugin: `asdf plugin-add gleam` +3. Install the latest `asdf install gleam latest` +4. Use the latest gleam version globally: `asdf global gleam latest` + +> HINT: `asdf` can manage multiple versions of gleam and the version can be set globally and also locally (`asdf local gleam <VERSION>`) to use a specific gleam version in a project. + +## Installation + +Start a new gleam project for your AOC soluctions with `gleam new`. In the project folder run: + +```sh +gleam add --dev adglent +``` + +## Usage + +### Initializing + +First log in to [Advent of code](https://adventofcode.com/) and copy your personal `session-cookie`. The value can be found using developer tools in the browser (in Chrome: "Application->Cookies->https://adventofcode.com->session" and copy the Cookie-value) + +```sh +gleam run -m adglent/init +``` + +Input the AOC year, you personal AOC session cookie and select if `showtime` should be used for tests (otherwise it will assume the project uses `gleeunit` as is default for `gleam new <project>`) + +> NOTE: `showtime` is an alternate gleam test-runner. It is still quite new and havn't been tested in as many project as `gleeunit`. It has a different way of formatting the test-results and also supports the possibility to run specific test-modules (which can be useful in AOC). `showtime` is a standalone project but have been embedded into `adglent`. + +### Add day + +To start working on the solution for a specific day run: + +```sh +gleam run -m adglent/day <NUM> +``` + +Where `<NUM>` is the day number of the day you want to solve a problem for. + +> Example (start solving 1st of December): +> +> ```sh +> gleam run -m adglent/day 1 +> ``` + +Adding a day will add tests in `test/day<NUM>/day<NUM>_test.gleam`and a `src/day<NUM>/solve.gleam` file where the solution can be implemented. + +Furthermore it will also download the input for the problem to `src/day<NUM>/input.txt` + +Before running the tests you need to provide one or more example. These can be found in the problem description for that day at the AOC website. + +Add an example to a part of the problem by adding examples to the `part1_examples` or `part2_examples` lists. + +> Example (input "Hello Joe!" should give answer 613411): +> +> ```gleam +> const part1_examples: List(Example(Problem1AnswerType)) = [ +> Example("Hello Joe!", "613411"), +> ] +> ``` + +The type of the answer for a part can be adjusted if needed by changing the type aliases `Problem1AnswerType` / `Problem2AnswerType`. Note that this will change the type that the `part1` / `part2` functions in `solve.gleam` expect to return. + +### Testing + +To test all days in the project use: + +```sh +gleam test +``` + +If you are using `showtime` you can test a single day by running: + +```sh +gleam test -- --modules=day<NUM>/day<NUM>_test +``` + +> Example (test solution for 1st of December): +> +> ```sh +> gleam test -- modules=day1/day1_test +> ``` + +### Get the answer + +To get the (hopefully correct) answer after the tests are ok run: + +```sh +gleam run -m day<NUM>/solve <PART> +``` + +where `<NUM>` is the day to solve and `<PART>` is the part of the problem (1 or 2) to solve. + +This will run the solver and print the answer to stdout. + +### Module documentation + +Module documentation can be found at <https://hexdocs.pm/adglent>. diff --git a/aoc2023/build/packages/adglent/gleam.toml b/aoc2023/build/packages/adglent/gleam.toml new file mode 100644 index 0000000..e1d81b8 --- /dev/null +++ b/aoc2023/build/packages/adglent/gleam.toml @@ -0,0 +1,29 @@ +name = "adglent" +version = "1.2.0" + +description = "Advent of code helper - automating setup of tests, solution template and problem input" +licences = ["Apache-2.0"] +repository = { type = "github", user = "JohnBjrk", repo = "adglent" } + +internal_modules = [ + "adglent/priv", + "adglent/priv/*", + "showtime/internal/*", +] +gleam = ">= 0.32.0" + +[dependencies] +gleam_stdlib = "~> 0.32" +simplifile = "~> 1.0" +gleam_http = "~> 3.5" +gleam_erlang = "~> 0.23.0" +gleam_otp = "~> 0.8.0" +gleam_community_ansi = "~> 1.2" +glint = "~> 0.13.0" +gap = "~> 1.0" +snag = "~> 0.2.0" +tom = "~> 0.2.0" +gleam_httpc = "~> 2.1" + +[dev-dependencies] +gleeunit = "~> 1.0" diff --git a/aoc2023/build/packages/adglent/include/adglent_Example.hrl b/aoc2023/build/packages/adglent/include/adglent_Example.hrl new file mode 100644 index 0000000..615e473 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/adglent_Example.hrl @@ -0,0 +1 @@ +-record(example, {input :: binary(), answer :: any()}). diff --git a/aoc2023/build/packages/adglent/include/priv@toml_TomGetError.hrl b/aoc2023/build/packages/adglent/include/priv@toml_TomGetError.hrl new file mode 100644 index 0000000..4cd5ddd --- /dev/null +++ b/aoc2023/build/packages/adglent/include/priv@toml_TomGetError.hrl @@ -0,0 +1 @@ +-record(tom_get_error, {error :: tom:get_error()}). diff --git a/aoc2023/build/packages/adglent/include/priv@toml_TomParseError.hrl b/aoc2023/build/packages/adglent/include/priv@toml_TomParseError.hrl new file mode 100644 index 0000000..7306934 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/priv@toml_TomParseError.hrl @@ -0,0 +1 @@ +-record(tom_parse_error, {error :: tom:parse_error()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@common_event_handler_Finished.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@common_event_handler_Finished.hrl new file mode 100644 index 0000000..7d24e52 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@common_event_handler_Finished.hrl @@ -0,0 +1 @@ +-record(finished, {num_modules :: integer()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@common_event_handler_HandlerState.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@common_event_handler_HandlerState.hrl new file mode 100644 index 0000000..2eceb23 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@common_event_handler_HandlerState.hrl @@ -0,0 +1,5 @@ +-record(handler_state, { + test_state :: showtime@internal@common@common_event_handler:test_state(), + num_done :: integer(), + events :: gleam@map:map_(binary(), gleam@map:map_(binary(), showtime@internal@common@test_suite:test_run())) +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ArgList.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ArgList.hrl new file mode 100644 index 0000000..79f34f8 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ArgList.hrl @@ -0,0 +1 @@ +-record(arg_list, {arg_list :: list(gleam@dynamic:dynamic_())}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertEqual.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertEqual.hrl new file mode 100644 index 0000000..c6458ba --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertEqual.hrl @@ -0,0 +1,3 @@ +-record(assert_equal, { + details :: list(showtime@internal@common@test_result:reason_detail()) +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertMatch.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertMatch.hrl new file mode 100644 index 0000000..4920304 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertMatch.hrl @@ -0,0 +1,3 @@ +-record(assert_match, { + details :: list(showtime@internal@common@test_result:reason_detail()) +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertNotEqual.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertNotEqual.hrl new file mode 100644 index 0000000..221c15f --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertNotEqual.hrl @@ -0,0 +1,3 @@ +-record(assert_not_equal, { + details :: list(showtime@internal@common@test_result:reason_detail()) +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ErlangException.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ErlangException.hrl new file mode 100644 index 0000000..9a31ba8 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ErlangException.hrl @@ -0,0 +1,6 @@ +-record(erlang_exception, { + class :: showtime@internal@common@test_result:class(), + reason :: showtime@internal@common@test_result:reason(), + stacktrace :: showtime@internal@common@test_result:trace_list(), + output_buffer :: list(binary()) +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ErrorInfo.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ErrorInfo.hrl new file mode 100644 index 0000000..97d0802 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ErrorInfo.hrl @@ -0,0 +1,3 @@ +-record(error_info, { + error_info :: gleam@map:map_(gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Expected.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Expected.hrl new file mode 100644 index 0000000..5e40ad3 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Expected.hrl @@ -0,0 +1 @@ +-record(expected, {value :: gleam@dynamic:dynamic_()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Expression.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Expression.hrl new file mode 100644 index 0000000..7aa0c35 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Expression.hrl @@ -0,0 +1 @@ +-record(expression, {expression :: binary()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_File.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_File.hrl new file mode 100644 index 0000000..1274b74 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_File.hrl @@ -0,0 +1 @@ +-record(file, {filename :: binary()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GenericException.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GenericException.hrl new file mode 100644 index 0000000..7c33d0d --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GenericException.hrl @@ -0,0 +1 @@ +-record(generic_exception, {value :: gleam@dynamic:dynamic_()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GleamAssert.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GleamAssert.hrl new file mode 100644 index 0000000..095748c --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GleamAssert.hrl @@ -0,0 +1 @@ +-record(gleam_assert, {value :: gleam@dynamic:dynamic_(), line_no :: integer()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GleamError.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GleamError.hrl new file mode 100644 index 0000000..68e6645 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GleamError.hrl @@ -0,0 +1,3 @@ +-record(gleam_error, { + details :: showtime@internal@common@test_result:gleam_error_detail() +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Ignored.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Ignored.hrl new file mode 100644 index 0000000..87b7e2f --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Ignored.hrl @@ -0,0 +1 @@ +-record(ignored, {reason :: showtime@internal@common@test_result:ignore_reason()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_LetAssert.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_LetAssert.hrl new file mode 100644 index 0000000..5f3f60d --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_LetAssert.hrl @@ -0,0 +1,7 @@ +-record(let_assert, { + module :: binary(), + function :: binary(), + line_no :: integer(), + message :: binary(), + value :: gleam@dynamic:dynamic_() +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Line.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Line.hrl new file mode 100644 index 0000000..9807df6 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Line.hrl @@ -0,0 +1 @@ +-record(line, {line_no :: integer()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Module.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Module.hrl new file mode 100644 index 0000000..8002c0c --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Module.hrl @@ -0,0 +1 @@ +-record(module, {name :: binary()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Num.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Num.hrl new file mode 100644 index 0000000..c36efa3 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Num.hrl @@ -0,0 +1 @@ +-record(num, {arity :: integer()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Pattern.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Pattern.hrl new file mode 100644 index 0000000..6aa9c84 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Pattern.hrl @@ -0,0 +1 @@ +-record(pattern, {pattern :: binary()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ReasonLine.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ReasonLine.hrl new file mode 100644 index 0000000..b7ad1ab --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ReasonLine.hrl @@ -0,0 +1 @@ +-record(reason_line, {line_no :: integer()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TestFunctionReturn.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TestFunctionReturn.hrl new file mode 100644 index 0000000..b0bc294 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TestFunctionReturn.hrl @@ -0,0 +1,4 @@ +-record(test_function_return, { + value :: gleam@dynamic:dynamic_(), + output_buffer :: list(binary()) +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Trace.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Trace.hrl new file mode 100644 index 0000000..4cb007c --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Trace.hrl @@ -0,0 +1,5 @@ +-record(trace, { + function :: binary(), + arity :: showtime@internal@common@test_result:arity_(), + extra_info :: list(showtime@internal@common@test_result:extra_info()) +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TraceList.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TraceList.hrl new file mode 100644 index 0000000..c1aa9c5 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TraceList.hrl @@ -0,0 +1,3 @@ +-record(trace_list, { + traces :: list(showtime@internal@common@test_result:trace()) +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TraceModule.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TraceModule.hrl new file mode 100644 index 0000000..595362f --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TraceModule.hrl @@ -0,0 +1,6 @@ +-record(trace_module, { + module :: binary(), + function :: binary(), + arity :: showtime@internal@common@test_result:arity_(), + extra_info :: list(showtime@internal@common@test_result:extra_info()) +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Value.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Value.hrl new file mode 100644 index 0000000..3a4b0dd --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Value.hrl @@ -0,0 +1 @@ +-record(value, {value :: gleam@dynamic:dynamic_()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_CompletedTestRun.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_CompletedTestRun.hrl new file mode 100644 index 0000000..927a0cf --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_CompletedTestRun.hrl @@ -0,0 +1,6 @@ +-record(completed_test_run, { + test_function :: showtime@internal@common@test_suite:test_function(), + total_time :: integer(), + result :: {ok, showtime@internal@common@test_result:test_return()} | + {error, showtime@internal@common@test_result:exception()} +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTest.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTest.hrl new file mode 100644 index 0000000..13df1bf --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTest.hrl @@ -0,0 +1,6 @@ +-record(end_test, { + test_module :: showtime@internal@common@test_suite:test_module(), + test_function :: showtime@internal@common@test_suite:test_function(), + result :: {ok, showtime@internal@common@test_result:test_return()} | + {error, showtime@internal@common@test_result:exception()} +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTestRun.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTestRun.hrl new file mode 100644 index 0000000..3f78991 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTestRun.hrl @@ -0,0 +1 @@ +-record(end_test_run, {num_modules :: integer()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTestSuite.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTestSuite.hrl new file mode 100644 index 0000000..a7f37b3 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTestSuite.hrl @@ -0,0 +1,3 @@ +-record(end_test_suite, { + test_module :: showtime@internal@common@test_suite:test_module() +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_OngoingTestRun.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_OngoingTestRun.hrl new file mode 100644 index 0000000..f52e5cc --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_OngoingTestRun.hrl @@ -0,0 +1,4 @@ +-record(ongoing_test_run, { + test_function :: showtime@internal@common@test_suite:test_function(), + started_at :: integer() +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_StartTest.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_StartTest.hrl new file mode 100644 index 0000000..d532609 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_StartTest.hrl @@ -0,0 +1,4 @@ +-record(start_test, { + test_module :: showtime@internal@common@test_suite:test_module(), + test_function :: showtime@internal@common@test_suite:test_function() +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_StartTestSuite.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_StartTestSuite.hrl new file mode 100644 index 0000000..d5a03d3 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_StartTestSuite.hrl @@ -0,0 +1,3 @@ +-record(start_test_suite, { + test_module :: showtime@internal@common@test_suite:test_module() +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestFunction.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestFunction.hrl new file mode 100644 index 0000000..a783ba4 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestFunction.hrl @@ -0,0 +1 @@ +-record(test_function, {name :: binary()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestModule.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestModule.hrl new file mode 100644 index 0000000..ee9baaf --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestModule.hrl @@ -0,0 +1 @@ +-record(test_module, {name :: binary(), path :: gleam@option:option(binary())}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestSuite.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestSuite.hrl new file mode 100644 index 0000000..253a946 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestSuite.hrl @@ -0,0 +1,4 @@ +-record(test_suite, { + module :: showtime@internal@common@test_suite:test_module(), + tests :: list(showtime@internal@common@test_suite:test_function()) +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignLeft.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignLeft.hrl new file mode 100644 index 0000000..ca52968 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignLeft.hrl @@ -0,0 +1,4 @@ +-record(align_left, { + content :: showtime@internal@reports@table:content(), + margin :: integer() +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignLeftOverflow.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignLeftOverflow.hrl new file mode 100644 index 0000000..8d5a673 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignLeftOverflow.hrl @@ -0,0 +1,4 @@ +-record(align_left_overflow, { + content :: showtime@internal@reports@table:content(), + margin :: integer() +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignRight.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignRight.hrl new file mode 100644 index 0000000..7f7a3f0 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignRight.hrl @@ -0,0 +1,4 @@ +-record(align_right, { + content :: showtime@internal@reports@table:content(), + margin :: integer() +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignRightOverflow.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignRightOverflow.hrl new file mode 100644 index 0000000..4fc4536 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignRightOverflow.hrl @@ -0,0 +1,4 @@ +-record(align_right_overflow, { + content :: showtime@internal@reports@table:content(), + margin :: integer() +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Aligned.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Aligned.hrl new file mode 100644 index 0000000..2343dfd --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Aligned.hrl @@ -0,0 +1 @@ +-record(aligned, {content :: binary()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Content.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Content.hrl new file mode 100644 index 0000000..044891b --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Content.hrl @@ -0,0 +1 @@ +-record(content, {unstyled_text :: binary()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Separator.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Separator.hrl new file mode 100644 index 0000000..db3f822 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Separator.hrl @@ -0,0 +1 @@ +-record(separator, {char :: binary()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_StyledContent.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_StyledContent.hrl new file mode 100644 index 0000000..ed500df --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_StyledContent.hrl @@ -0,0 +1 @@ +-record(styled_content, {styled_text :: binary()}). diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Table.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Table.hrl new file mode 100644 index 0000000..5b41bb1 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Table.hrl @@ -0,0 +1,4 @@ +-record(table, { + header :: gleam@option:option(binary()), + rows :: list(list(showtime@internal@reports@table:col())) +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@tests@meta_Meta.hrl b/aoc2023/build/packages/adglent/include/showtime@tests@meta_Meta.hrl new file mode 100644 index 0000000..14184fb --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@tests@meta_Meta.hrl @@ -0,0 +1 @@ +-record(meta, {description :: binary(), tags :: list(binary())}). diff --git a/aoc2023/build/packages/adglent/include/showtime@tests@should_Eq.hrl b/aoc2023/build/packages/adglent/include/showtime@tests@should_Eq.hrl new file mode 100644 index 0000000..6ebea34 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@tests@should_Eq.hrl @@ -0,0 +1,5 @@ +-record(eq, { + a :: any(), + b :: any(), + meta :: gleam@option:option(showtime@tests@meta:meta()) +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@tests@should_Fail.hrl b/aoc2023/build/packages/adglent/include/showtime@tests@should_Fail.hrl new file mode 100644 index 0000000..cf06a3c --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@tests@should_Fail.hrl @@ -0,0 +1 @@ +-record(fail, {meta :: gleam@option:option(showtime@tests@meta:meta())}). diff --git a/aoc2023/build/packages/adglent/include/showtime@tests@should_IsError.hrl b/aoc2023/build/packages/adglent/include/showtime@tests@should_IsError.hrl new file mode 100644 index 0000000..e9cabf3 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@tests@should_IsError.hrl @@ -0,0 +1,4 @@ +-record(is_error, { + a :: {ok, any()} | {error, any()}, + meta :: gleam@option:option(showtime@tests@meta:meta()) +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@tests@should_IsOk.hrl b/aoc2023/build/packages/adglent/include/showtime@tests@should_IsOk.hrl new file mode 100644 index 0000000..37c24ca --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@tests@should_IsOk.hrl @@ -0,0 +1,4 @@ +-record(is_ok, { + a :: {ok, any()} | {error, any()}, + meta :: gleam@option:option(showtime@tests@meta:meta()) +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@tests@should_NotEq.hrl b/aoc2023/build/packages/adglent/include/showtime@tests@should_NotEq.hrl new file mode 100644 index 0000000..2a6bf48 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@tests@should_NotEq.hrl @@ -0,0 +1,5 @@ +-record(not_eq, { + a :: any(), + b :: any(), + meta :: gleam@option:option(showtime@tests@meta:meta()) +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@tests@test_MetaShould.hrl b/aoc2023/build/packages/adglent/include/showtime@tests@test_MetaShould.hrl new file mode 100644 index 0000000..a814a93 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@tests@test_MetaShould.hrl @@ -0,0 +1,4 @@ +-record(meta_should, { + equal :: fun((any(), any()) -> nil), + not_equal :: fun((any(), any()) -> nil) +}). diff --git a/aoc2023/build/packages/adglent/include/showtime@tests@test_Test.hrl b/aoc2023/build/packages/adglent/include/showtime@tests@test_Test.hrl new file mode 100644 index 0000000..e75a0b7 --- /dev/null +++ b/aoc2023/build/packages/adglent/include/showtime@tests@test_Test.hrl @@ -0,0 +1,4 @@ +-record(test, { + meta :: showtime@tests@meta:meta(), + test_function :: fun(() -> nil) +}). diff --git a/aoc2023/build/packages/adglent/src/adglent.app.src b/aoc2023/build/packages/adglent/src/adglent.app.src new file mode 100644 index 0000000..aa44f8b --- /dev/null +++ b/aoc2023/build/packages/adglent/src/adglent.app.src @@ -0,0 +1,45 @@ +{application, adglent, [ + {vsn, "1.2.0"}, + {applications, [gap, + gleam_community_ansi, + gleam_erlang, + gleam_http, + gleam_httpc, + gleam_otp, + gleam_stdlib, + gleeunit, + glint, + simplifile, + snag, + tom]}, + {description, "Advent of code helper - automating setup of tests, solution template and problem input"}, + {modules, [adglent, + adglent@day, + adglent@init, + priv@aoc_client, + priv@errors, + priv@prompt, + priv@template, + priv@templates@solution, + priv@templates@test_main, + priv@templates@testfile_gleeunit, + priv@templates@testfile_showtime, + priv@toml, + showtime, + showtime@internal@common@cli, + showtime@internal@common@common_event_handler, + showtime@internal@common@test_result, + showtime@internal@common@test_suite, + showtime@internal@erlang@discover, + showtime@internal@erlang@event_handler, + showtime@internal@erlang@module_handler, + showtime@internal@erlang@runner, + showtime@internal@reports@compare, + showtime@internal@reports@formatter, + showtime@internal@reports@styles, + showtime@internal@reports@table, + showtime@tests@meta, + showtime@tests@should, + showtime@tests@test]}, + {registered, []} +]}. diff --git a/aoc2023/build/packages/adglent/src/adglent.erl b/aoc2023/build/packages/adglent/src/adglent.erl new file mode 100644 index 0000000..e9df2b7 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/adglent.erl @@ -0,0 +1,55 @@ +-module(adglent). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([inspect/1, get_input/1, get_test_folder/1, start_arguments/0, get_part/0]). +-export_type([example/1, problem/0, charlist/0]). + +-type example(OFF) :: {example, binary(), OFF}. + +-type problem() :: first | second. + +-type charlist() :: any(). + +-spec inspect(any()) -> binary(). +inspect(Value) -> + Inspected_value = gleam@string:inspect(Value), + case begin + _pipe = Inspected_value, + gleam@string:starts_with(_pipe, <<"\""/utf8>>) + end of + true -> + _pipe@1 = Inspected_value, + _pipe@2 = gleam@string:drop_left(_pipe@1, 1), + gleam@string:drop_right(_pipe@2, 1); + + false -> + Inspected_value + end. + +-spec get_input(binary()) -> {ok, binary()} | {error, simplifile:file_error()}. +get_input(Day) -> + simplifile:read( + <<<<"src/day"/utf8, Day/binary>>/binary, "/input.txt"/utf8>> + ). + +-spec get_test_folder(binary()) -> binary(). +get_test_folder(Day) -> + <<"test/day"/utf8, Day/binary>>. + +-spec start_arguments() -> list(binary()). +start_arguments() -> + _pipe = init:get_plain_arguments(), + gleam@list:map(_pipe, fun unicode:characters_to_binary/1). + +-spec get_part() -> {ok, problem()} | {error, nil}. +get_part() -> + case start_arguments() of + [<<"1"/utf8>>] -> + {ok, first}; + + [<<"2"/utf8>>] -> + {ok, second}; + + _ -> + {error, nil} + end. diff --git a/aoc2023/build/packages/adglent/src/adglent.gleam b/aoc2023/build/packages/adglent/src/adglent.gleam new file mode 100644 index 0000000..077d49d --- /dev/null +++ b/aoc2023/build/packages/adglent/src/adglent.gleam @@ -0,0 +1,56 @@ +import simplifile.{type FileError} +import gleam/list +import gleam/string + +pub type Example(a) { + Example(input: String, answer: a) +} + +pub fn inspect(value: a) -> String { + let inspected_value = string.inspect(value) + case + inspected_value + |> string.starts_with("\"") + { + True -> + inspected_value + |> string.drop_left(1) + |> string.drop_right(1) + False -> inspected_value + } +} + +pub fn get_input(day: String) -> Result(String, FileError) { + simplifile.read("src/day" <> day <> "/input.txt") +} + +pub fn get_test_folder(day: String) -> String { + "test/day" <> day +} + +pub type Problem { + First + Second +} + +pub fn get_part() -> Result(Problem, Nil) { + case start_arguments() { + ["1"] -> Ok(First) + ["2"] -> Ok(Second) + _ -> Error(Nil) + } +} + +pub fn start_arguments() -> List(String) { + get_start_arguments() + |> list.map(to_string) +} + +type Charlist + +/// Transform a charlist to a string +@external(erlang, "unicode", "characters_to_binary") +fn to_string(a: Charlist) -> String + +@external(erlang, "init", "get_plain_arguments") +fn get_start_arguments() -> List(Charlist) diff --git a/aoc2023/build/packages/adglent/src/adglent/day.gleam b/aoc2023/build/packages/adglent/src/adglent/day.gleam new file mode 100644 index 0000000..69e4ccc --- /dev/null +++ b/aoc2023/build/packages/adglent/src/adglent/day.gleam @@ -0,0 +1,126 @@ +import adglent +import gleam/string +import gleam/result +import priv/template +import priv/templates/testfile_gleeunit +import priv/templates/testfile_showtime +import priv/templates/solution +import priv/toml +import priv/aoc_client +import priv/errors +import simplifile + +pub fn main() { + let day = + case adglent.start_arguments() { + [day] -> Ok(day) + args -> Error("Expected day - found: " <> string.join(args, ", ")) + } + |> errors.map_error("Error when parsing command args") + |> errors.print_error + |> errors.assert_ok + + let aoc_toml = + simplifile.read("aoc.toml") + |> errors.map_error("Could not read aoc.toml") + |> errors.print_error + |> errors.assert_ok + + let aoc_toml_version = toml.get_int(aoc_toml, ["version"]) + let year = + toml.get_string(aoc_toml, ["year"]) + |> errors.map_error("Could not read \"year\" from aoc.toml") + |> errors.print_error + |> errors.assert_ok + let session = + toml.get_string(aoc_toml, ["session"]) + |> errors.map_error("Could not read \"session\" from aoc.toml") + |> errors.print_error + |> errors.assert_ok + + let showtime = case aoc_toml_version { + Ok(2) -> { + toml.get_bool(aoc_toml, ["showtime"]) + |> errors.map_error("Could not read \"showtime\" from aoc.toml") + |> errors.print_error + |> errors.assert_ok + } + _ -> + toml.get_string(aoc_toml, ["showtime"]) + |> result.map(fn(bool_string) { + case bool_string { + "True" -> True + _ -> False + } + }) + |> errors.map_error("Could not read \"showtime\" from aoc.toml") + |> errors.print_error + |> errors.assert_ok + } + + let test_folder = adglent.get_test_folder(day) + let test_file = test_folder <> "/day" <> day <> "_test.gleam" + + simplifile.create_directory_all(test_folder) + |> errors.map_error("Could not create folder \"" <> test_folder <> "\"") + |> errors.print_error + |> errors.assert_ok + + let testfile_template = case showtime { + True -> testfile_showtime.template + False -> testfile_gleeunit.template + } + + template.render(testfile_template, [#("day", day)]) + |> create_file_if_not_present(test_file) + |> errors.print_result + |> errors.assert_ok + + let solutions_folder = "src/day" <> day + let solution_file = solutions_folder <> "/solve.gleam" + + simplifile.create_directory_all(solutions_folder) + |> errors.map_error("Could not create folder \"" <> solutions_folder <> "\"") + |> errors.print_error + |> errors.assert_ok + + template.render(solution.template, [#("day", day)]) + |> create_file_if_not_present(solution_file) + |> errors.print_result + |> errors.assert_ok + + create_file_if_not_present("input.txt", solutions_folder <> "/.gitignore") + |> errors.print_result + |> errors.assert_ok + + let input = + aoc_client.get_input(year, day, session) + |> errors.map_error("Error when fetching input") + |> errors.print_error + |> errors.assert_ok + + input + |> string.trim + |> create_file_if_not_present(solutions_folder <> "/input.txt") + |> errors.print_result + |> errors.assert_ok +} + +fn create_file_if_not_present( + content: String, + path: String, +) -> Result(String, String) { + case simplifile.is_file(path) { + True -> { + Ok(path <> " already exists - skipped") + } + False -> { + use _ <- result.try( + simplifile.create_file(path) + |> errors.map_messages("Created " <> path, "Could not create " <> path), + ) + simplifile.write(content, to: path) + |> errors.map_messages("Wrote " <> path, "Could not write to " <> path) + } + } +} diff --git a/aoc2023/build/packages/adglent/src/adglent/init.gleam b/aoc2023/build/packages/adglent/src/adglent/init.gleam new file mode 100644 index 0000000..42eb833 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/adglent/init.gleam @@ -0,0 +1,110 @@ +import priv/prompt +import priv/template +import priv/templates/test_main +import priv/errors +import priv/toml +import simplifile +import gleam/string +import gleam/list +import gleam/result +import gleam/bool + +const aoc_toml_template = " +version = {{ version }} +year = \"{{ year }}\" +session = \"{{ session }}\" +showtime = {{ showtime }} +" + +pub fn main() { + let year = prompt.value("Year", "2023", False) + let session = prompt.value("Session Cookie", "", False) + let use_showtime = prompt.confirm("Use showtime", False) + + let aoc_toml_file = "aoc.toml" + let overwrite = case simplifile.create_file(aoc_toml_file) { + Ok(_) -> True + Error(simplifile.Eexist) -> + prompt.confirm("aoc.toml exits - overwrite", False) + _ -> panic as "Could not create aoc.toml" + } + case overwrite { + True -> { + template.render( + aoc_toml_template, + [ + #("version", "2"), + #("year", year), + #("session", session), + #( + "showtime", + bool.to_string(use_showtime) + |> string.lowercase, + ), + ], + ) + |> simplifile.write(to: aoc_toml_file) + |> errors.map_messages( + "aoc.toml - written", + "Error when writing aoc.toml", + ) + } + + False -> Ok("aoc.toml - skipped") + } + |> errors.print_result + + let gleam_toml = + simplifile.read("gleam.toml") + |> errors.map_error("Could not read gleam.toml") + |> errors.print_error + |> errors.assert_ok + + let name = + toml.get_string(gleam_toml, ["name"]) + |> errors.map_error("Could not read \"name\" from gleam.toml") + |> errors.print_error + |> errors.assert_ok + + let test_main_file = "test/" <> name <> "_test.gleam" + + case use_showtime { + True -> { + template.render(test_main.template, []) + |> simplifile.write(to: test_main_file) + |> errors.map_messages( + "Wrote " <> test_main_file, + "Could not write to " <> test_main_file, + ) + } + False -> Ok("Using existing (gleeunit) " <> test_main_file) + } + |> errors.print_result + |> errors.assert_ok + + case simplifile.is_file(".gitignore") { + True -> { + use gitignore <- result.try( + simplifile.read(".gitignore") + |> result.map_error(fn(err) { + "Could not read .gitignore: " <> string.inspect(err) + }), + ) + let aoc_toml_ignored = + string.split(gitignore, "\n") + |> list.find(fn(line) { line == "aoc.toml" }) + case aoc_toml_ignored { + Error(_) -> { + simplifile.append("\naoc.toml", to: ".gitignore") + |> errors.map_messages( + ".gitignore written", + "Error when writing .gitignore", + ) + } + Ok(_) -> Ok(".gitignore - skipped (already configured)") + } + } + False -> Error("Could not find .gitignore") + } + |> errors.print_result +} diff --git a/aoc2023/build/packages/adglent/src/adglent@day.erl b/aoc2023/build/packages/adglent/src/adglent@day.erl new file mode 100644 index 0000000..b80368f --- /dev/null +++ b/aoc2023/build/packages/adglent/src/adglent@day.erl @@ -0,0 +1,278 @@ +-module(adglent@day). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([main/0]). + +-spec create_file_if_not_present(binary(), binary()) -> {ok, binary()} | + {error, binary()}. +create_file_if_not_present(Content, Path) -> + case simplifile:is_file(Path) of + true -> + {ok, <<Path/binary, " already exists - skipped"/utf8>>}; + + false -> + gleam@result:'try'( + begin + _pipe = simplifile:create_file(Path), + priv@errors:map_messages( + _pipe, + <<"Created "/utf8, Path/binary>>, + <<"Could not create "/utf8, Path/binary>> + ) + end, + fun(_) -> _pipe@1 = simplifile:write(Path, Content), + priv@errors:map_messages( + _pipe@1, + <<"Wrote "/utf8, Path/binary>>, + <<"Could not write to "/utf8, Path/binary>> + ) end + ) + end. + +-spec main() -> binary(). +main() -> + Day@1 = begin + _pipe = case adglent:start_arguments() of + [Day] -> + {ok, Day}; + + Args -> + {error, + <<"Expected day - found: "/utf8, + (gleam@string:join(Args, <<", "/utf8>>))/binary>>} + end, + _pipe@1 = priv@errors:map_error( + _pipe, + <<"Error when parsing command args"/utf8>> + ), + _pipe@2 = priv@errors:print_error(_pipe@1), + priv@errors:assert_ok(_pipe@2) + end, + Aoc_toml = begin + _pipe@3 = simplifile:read(<<"aoc.toml"/utf8>>), + _pipe@4 = priv@errors:map_error( + _pipe@3, + <<"Could not read aoc.toml"/utf8>> + ), + _pipe@5 = priv@errors:print_error(_pipe@4), + priv@errors:assert_ok(_pipe@5) + end, + Aoc_toml_version = priv@toml:get_int(Aoc_toml, [<<"version"/utf8>>]), + Year = begin + _pipe@6 = priv@toml:get_string(Aoc_toml, [<<"year"/utf8>>]), + _pipe@7 = priv@errors:map_error( + _pipe@6, + <<"Could not read \"year\" from aoc.toml"/utf8>> + ), + _pipe@8 = priv@errors:print_error(_pipe@7), + priv@errors:assert_ok(_pipe@8) + end, + Session = begin + _pipe@9 = priv@toml:get_string(Aoc_toml, [<<"session"/utf8>>]), + _pipe@10 = priv@errors:map_error( + _pipe@9, + <<"Could not read \"session\" from aoc.toml"/utf8>> + ), + _pipe@11 = priv@errors:print_error(_pipe@10), + priv@errors:assert_ok(_pipe@11) + end, + Showtime = case Aoc_toml_version of + {ok, 2} -> + _pipe@12 = priv@toml:get_bool(Aoc_toml, [<<"showtime"/utf8>>]), + _pipe@13 = priv@errors:map_error( + _pipe@12, + <<"Could not read \"showtime\" from aoc.toml"/utf8>> + ), + _pipe@14 = priv@errors:print_error(_pipe@13), + priv@errors:assert_ok(_pipe@14); + + _ -> + _pipe@15 = priv@toml:get_string(Aoc_toml, [<<"showtime"/utf8>>]), + _pipe@16 = gleam@result:map( + _pipe@15, + fun(Bool_string) -> case Bool_string of + <<"True"/utf8>> -> + true; + + _ -> + false + end end + ), + _pipe@17 = priv@errors:map_error( + _pipe@16, + <<"Could not read \"showtime\" from aoc.toml"/utf8>> + ), + _pipe@18 = priv@errors:print_error(_pipe@17), + priv@errors:assert_ok(_pipe@18) + end, + Test_folder = adglent:get_test_folder(Day@1), + Test_file = <<<<<<Test_folder/binary, "/day"/utf8>>/binary, Day@1/binary>>/binary, + "_test.gleam"/utf8>>, + _pipe@19 = simplifile:create_directory_all(Test_folder), + _pipe@20 = priv@errors:map_error( + _pipe@19, + <<<<"Could not create folder \""/utf8, Test_folder/binary>>/binary, + "\""/utf8>> + ), + _pipe@21 = priv@errors:print_error(_pipe@20), + priv@errors:assert_ok(_pipe@21), + Testfile_template = case Showtime of + true -> + <<" +import gleam/list +import showtime/tests/should +import adglent.{type Example, Example} +import day{{ day }}/solve + +type Problem1AnswerType = + String + +type Problem2AnswerType = + String + +/// Add examples for part 1 here: +/// ```gleam +///const part1_examples: List(Example(Problem1AnswerType)) = [Example(\"some input\", \"\")] +/// ``` +const part1_examples: List(Example(Problem1AnswerType)) = [] + +/// Add examples for part 2 here: +/// ```gleam +///const part2_examples: List(Example(Problem2AnswerType)) = [Example(\"some input\", \"\")] +/// ``` +const part2_examples: List(Example(Problem2AnswerType)) = [] + +pub fn part1_test() { + part1_examples + |> should.not_equal([]) + use example <- list.map(part1_examples) + solve.part1(example.input) + |> should.equal(example.answer) +} + +pub fn part2_test() { + part2_examples + |> should.not_equal([]) + use example <- list.map(part2_examples) + solve.part2(example.input) + |> should.equal(example.answer) +} + +"/utf8>>; + + false -> + <<" +import gleam/list +import gleeunit/should +import adglent.{type Example, Example} +import day{{ day }}/solve + +type Problem1AnswerType = + String + +type Problem2AnswerType = + String + +/// Add examples for part 1 here: +/// ```gleam +///const part1_examples: List(Example(Problem1AnswerType)) = [Example(\"some input\", \"\")] +/// ``` +const part1_examples: List(Example(Problem1AnswerType)) = [] + +/// Add examples for part 2 here: +/// ```gleam +///const part2_examples: List(Example(Problem2AnswerType)) = [Example(\"some input\", \"\")] +/// ``` +const part2_examples: List(Example(Problem2AnswerType)) = [] + +pub fn part1_test() { + part1_examples + |> should.not_equal([]) + use example <- list.map(part1_examples) + solve.part1(example.input) + |> should.equal(example.answer) +} + +pub fn part2_test() { + part2_examples + |> should.not_equal([]) + use example <- list.map(part2_examples) + solve.part2(example.input) + |> should.equal(example.answer) +} + +"/utf8>> + end, + _pipe@22 = priv@template:render( + Testfile_template, + [{<<"day"/utf8>>, Day@1}] + ), + _pipe@23 = create_file_if_not_present(_pipe@22, Test_file), + _pipe@24 = priv@errors:print_result(_pipe@23), + priv@errors:assert_ok(_pipe@24), + Solutions_folder = <<"src/day"/utf8, Day@1/binary>>, + Solution_file = <<Solutions_folder/binary, "/solve.gleam"/utf8>>, + _pipe@25 = simplifile:create_directory_all(Solutions_folder), + _pipe@26 = priv@errors:map_error( + _pipe@25, + <<<<"Could not create folder \""/utf8, Solutions_folder/binary>>/binary, + "\""/utf8>> + ), + _pipe@27 = priv@errors:print_error(_pipe@26), + priv@errors:assert_ok(_pipe@27), + _pipe@28 = priv@template:render( + <<" +import adglent.{First, Second} +import gleam/io + +pub fn part1(input: String) { + todo as \"Implement solution to part 1\" +} + +pub fn part2(input: String) { + todo as \"Implement solution to part 2\" +} + +pub fn main() { + let assert Ok(part) = adglent.get_part() + let assert Ok(input) = adglent.get_input(\"{{ day }}\") + case part { + First -> + part1(input) + |> adglent.inspect + |> io.println + Second -> + part2(input) + |> adglent.inspect + |> io.println + } +} +"/utf8>>, + [{<<"day"/utf8>>, Day@1}] + ), + _pipe@29 = create_file_if_not_present(_pipe@28, Solution_file), + _pipe@30 = priv@errors:print_result(_pipe@29), + priv@errors:assert_ok(_pipe@30), + _pipe@31 = create_file_if_not_present( + <<"input.txt"/utf8>>, + <<Solutions_folder/binary, "/.gitignore"/utf8>> + ), + _pipe@32 = priv@errors:print_result(_pipe@31), + priv@errors:assert_ok(_pipe@32), + Input = begin + _pipe@33 = priv@aoc_client:get_input(Year, Day@1, Session), + _pipe@34 = priv@errors:map_error( + _pipe@33, + <<"Error when fetching input"/utf8>> + ), + _pipe@35 = priv@errors:print_error(_pipe@34), + priv@errors:assert_ok(_pipe@35) + end, + _pipe@36 = Input, + _pipe@37 = gleam@string:trim(_pipe@36), + _pipe@38 = create_file_if_not_present( + _pipe@37, + <<Solutions_folder/binary, "/input.txt"/utf8>> + ), + _pipe@39 = priv@errors:print_result(_pipe@38), + priv@errors:assert_ok(_pipe@39). diff --git a/aoc2023/build/packages/adglent/src/adglent@init.erl b/aoc2023/build/packages/adglent/src/adglent@init.erl new file mode 100644 index 0000000..fb28101 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/adglent@init.erl @@ -0,0 +1,142 @@ +-module(adglent@init). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([main/0]). + +-spec main() -> {ok, binary()} | {error, binary()}. +main() -> + Year = priv@prompt:value(<<"Year"/utf8>>, <<"2023"/utf8>>, false), + Session = priv@prompt:value(<<"Session Cookie"/utf8>>, <<""/utf8>>, false), + Use_showtime = priv@prompt:confirm(<<"Use showtime"/utf8>>, false), + Aoc_toml_file = <<"aoc.toml"/utf8>>, + Overwrite = case simplifile:create_file(Aoc_toml_file) of + {ok, _} -> + true; + + {error, eexist} -> + priv@prompt:confirm(<<"aoc.toml exits - overwrite"/utf8>>, false); + + _ -> + erlang:error(#{gleam_error => panic, + message => <<"Could not create aoc.toml"/utf8>>, + module => <<"adglent/init"/utf8>>, + function => <<"main"/utf8>>, + line => 29}) + end, + _pipe@3 = case Overwrite of + true -> + _pipe@1 = priv@template:render( + <<" +version = {{ version }} +year = \"{{ year }}\" +session = \"{{ session }}\" +showtime = {{ showtime }} +"/utf8>>, + [{<<"version"/utf8>>, <<"2"/utf8>>}, + {<<"year"/utf8>>, Year}, + {<<"session"/utf8>>, Session}, + {<<"showtime"/utf8>>, + begin + _pipe = gleam@bool:to_string(Use_showtime), + gleam@string:lowercase(_pipe) + end}] + ), + _pipe@2 = simplifile:write(Aoc_toml_file, _pipe@1), + priv@errors:map_messages( + _pipe@2, + <<"aoc.toml - written"/utf8>>, + <<"Error when writing aoc.toml"/utf8>> + ); + + false -> + {ok, <<"aoc.toml - skipped"/utf8>>} + end, + priv@errors:print_result(_pipe@3), + Gleam_toml = begin + _pipe@4 = simplifile:read(<<"gleam.toml"/utf8>>), + _pipe@5 = priv@errors:map_error( + _pipe@4, + <<"Could not read gleam.toml"/utf8>> + ), + _pipe@6 = priv@errors:print_error(_pipe@5), + priv@errors:assert_ok(_pipe@6) + end, + Name = begin + _pipe@7 = priv@toml:get_string(Gleam_toml, [<<"name"/utf8>>]), + _pipe@8 = priv@errors:map_error( + _pipe@7, + <<"Could not read \"name\" from gleam.toml"/utf8>> + ), + _pipe@9 = priv@errors:print_error(_pipe@8), + priv@errors:assert_ok(_pipe@9) + end, + Test_main_file = <<<<"test/"/utf8, Name/binary>>/binary, + "_test.gleam"/utf8>>, + _pipe@12 = case Use_showtime of + true -> + _pipe@10 = priv@template:render( + <<" +import showtime + +pub fn main() { + showtime.main() +} +"/utf8>>, + [] + ), + _pipe@11 = simplifile:write(Test_main_file, _pipe@10), + priv@errors:map_messages( + _pipe@11, + <<"Wrote "/utf8, Test_main_file/binary>>, + <<"Could not write to "/utf8, Test_main_file/binary>> + ); + + false -> + {ok, <<"Using existing (gleeunit) "/utf8, Test_main_file/binary>>} + end, + _pipe@13 = priv@errors:print_result(_pipe@12), + priv@errors:assert_ok(_pipe@13), + _pipe@17 = case simplifile:is_file(<<".gitignore"/utf8>>) of + true -> + gleam@result:'try'( + begin + _pipe@14 = simplifile:read(<<".gitignore"/utf8>>), + gleam@result:map_error( + _pipe@14, + fun(Err) -> + <<"Could not read .gitignore: "/utf8, + (gleam@string:inspect(Err))/binary>> + end + ) + end, + fun(Gitignore) -> + Aoc_toml_ignored = begin + _pipe@15 = gleam@string:split(Gitignore, <<"\n"/utf8>>), + gleam@list:find( + _pipe@15, + fun(Line) -> Line =:= <<"aoc.toml"/utf8>> end + ) + end, + case Aoc_toml_ignored of + {error, _} -> + _pipe@16 = simplifile:append( + <<".gitignore"/utf8>>, + <<"\naoc.toml"/utf8>> + ), + priv@errors:map_messages( + _pipe@16, + <<".gitignore written"/utf8>>, + <<"Error when writing .gitignore"/utf8>> + ); + + {ok, _} -> + {ok, + <<".gitignore - skipped (already configured)"/utf8>>} + end + end + ); + + false -> + {error, <<"Could not find .gitignore"/utf8>>} + end, + priv@errors:print_result(_pipe@17). diff --git a/aoc2023/build/packages/adglent/src/adglent_ffi.erl b/aoc2023/build/packages/adglent/src/adglent_ffi.erl new file mode 100644 index 0000000..a6a92e6 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/adglent_ffi.erl @@ -0,0 +1,12 @@ +-module(adglent_ffi). + +-export([get_line/1]). + +-spec get_line(io:prompt()) -> {ok, unicode:unicode_binary()} | {error, eof | no_data}. +get_line(Prompt) -> + case io:get_line(Prompt) of + eof -> {error, eof}; + {error, _} -> {error, no_data}; + Data when is_binary(Data) -> {ok, Data}; + Data when is_list(Data) -> {ok, unicode:characters_to_binary(Data)} + end. diff --git a/aoc2023/build/packages/adglent/src/priv/aoc_client.gleam b/aoc2023/build/packages/adglent/src/priv/aoc_client.gleam new file mode 100644 index 0000000..e18bafa --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv/aoc_client.gleam @@ -0,0 +1,37 @@ +import gleam/result.{try} +import gleam/httpc +import gleam/http/request +import gleam/int +import gleam/string + +pub fn get_input( + year: String, + day: String, + session: String, +) -> Result(String, String) { + let url = "https://adventofcode.com/" <> year <> "/day/" <> day <> "/input" + use request <- try( + request.to(url) + |> result.map_error(fn(error) { + "Could not create request for \"" <> url <> "\": " <> string.inspect( + error, + ) + }), + ) + + // Send the HTTP request to the server + use response <- try( + request + |> request.prepend_header("Accept", "application/json") + |> request.prepend_header("Cookie", "session=" <> session <> ";") + |> httpc.send + |> result.map_error(fn(error) { + "Error when requesting \"" <> url <> "\": " <> string.inspect(error) + }), + ) + + case response.status { + status if status >= 200 && status < 300 -> Ok(response.body) + status -> Error(int.to_string(status) <> " - " <> response.body) + } +} diff --git a/aoc2023/build/packages/adglent/src/priv/errors.gleam b/aoc2023/build/packages/adglent/src/priv/errors.gleam new file mode 100644 index 0000000..14c35ca --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv/errors.gleam @@ -0,0 +1,54 @@ +import gleam/result +import gleam/string +import gleam/io + +pub fn map_messages( + result: Result(a, b), + success_message: String, + error_message: String, +) -> Result(String, String) { + result + |> result.map_error(fn(error) { + "Error - " <> error_message <> ": " <> string.inspect(error) + }) + |> result.replace(success_message) +} + +pub fn map_error( + result: Result(a, b), + error_message: String, +) -> Result(a, String) { + result + |> result.map_error(fn(error) { + error_message <> ": " <> string.inspect(error) + }) +} + +pub fn print_result(result: Result(String, String)) { + result + |> result.unwrap_both + |> io.println + result +} + +pub fn print_error(result: Result(a, String)) { + result + |> result.map_error(fn(err) { + io.println(err) + err + }) +} + +pub fn assert_ok(result: Result(a, String)) { + let assert Ok(value) = + result + |> result.map_error(fn(err) { + halt(1) + err + }) + value +} + +@target(erlang) +@external(erlang, "erlang", "halt") +fn halt(a: Int) -> Nil diff --git a/aoc2023/build/packages/adglent/src/priv/prompt.gleam b/aoc2023/build/packages/adglent/src/priv/prompt.gleam new file mode 100644 index 0000000..6cee35a --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv/prompt.gleam @@ -0,0 +1,38 @@ +import gleam/result +import gleam/string + +pub fn confirm(message: String, auto_accept: Bool) -> Bool { + auto_accept || case + get_line(message <> "? (Y/N): ") + |> result.unwrap("n") + |> string.trim() + { + "Y" | "y" -> True + _ -> False + } +} + +pub fn value(message: String, default: String, auto_accept: Bool) -> String { + case get_value_of_default(message, default, auto_accept) { + "" -> default + value -> value + } +} + +fn get_value_of_default(message: String, default: String, auto_accept: Bool) { + case auto_accept { + True -> default + False -> + get_line(message <> "? (" <> default <> "): ") + |> result.unwrap("") + |> string.trim() + } +} + +pub type GetLineError { + Eof + NoData +} + +@external(erlang, "adglent_ffi", "get_line") +pub fn get_line(prompt prompt: String) -> Result(String, GetLineError) diff --git a/aoc2023/build/packages/adglent/src/priv/template.gleam b/aoc2023/build/packages/adglent/src/priv/template.gleam new file mode 100644 index 0000000..e946888 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv/template.gleam @@ -0,0 +1,18 @@ +import gleam/list +import gleam/string + +pub fn render( + template: String, + substitutions: List(#(String, String)), +) -> String { + substitutions + |> list.fold( + template, + fn(template, substitution) { + let #(name, value) = substitution + template + |> string.replace("{{ " <> name <> " }}", value) + }, + ) + |> string.trim <> "\n" +} diff --git a/aoc2023/build/packages/adglent/src/priv/templates/solution.gleam b/aoc2023/build/packages/adglent/src/priv/templates/solution.gleam new file mode 100644 index 0000000..96085c3 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv/templates/solution.gleam @@ -0,0 +1,27 @@ +pub const template = " +import adglent.{First, Second} +import gleam/io + +pub fn part1(input: String) { + todo as \"Implement solution to part 1\" +} + +pub fn part2(input: String) { + todo as \"Implement solution to part 2\" +} + +pub fn main() { + let assert Ok(part) = adglent.get_part() + let assert Ok(input) = adglent.get_input(\"{{ day }}\") + case part { + First -> + part1(input) + |> adglent.inspect + |> io.println + Second -> + part2(input) + |> adglent.inspect + |> io.println + } +} +" diff --git a/aoc2023/build/packages/adglent/src/priv/templates/test_main.gleam b/aoc2023/build/packages/adglent/src/priv/templates/test_main.gleam new file mode 100644 index 0000000..27548d3 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv/templates/test_main.gleam @@ -0,0 +1,7 @@ +pub const template = " +import showtime + +pub fn main() { + showtime.main() +} +" diff --git a/aoc2023/build/packages/adglent/src/priv/templates/testfile_gleeunit.gleam b/aoc2023/build/packages/adglent/src/priv/templates/testfile_gleeunit.gleam new file mode 100644 index 0000000..a1d56f6 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv/templates/testfile_gleeunit.gleam @@ -0,0 +1,41 @@ +pub const template = " +import gleam/list +import gleeunit/should +import adglent.{type Example, Example} +import day{{ day }}/solve + +type Problem1AnswerType = + String + +type Problem2AnswerType = + String + +/// Add examples for part 1 here: +/// ```gleam +///const part1_examples: List(Example(Problem1AnswerType)) = [Example(\"some input\", \"\")] +/// ``` +const part1_examples: List(Example(Problem1AnswerType)) = [] + +/// Add examples for part 2 here: +/// ```gleam +///const part2_examples: List(Example(Problem2AnswerType)) = [Example(\"some input\", \"\")] +/// ``` +const part2_examples: List(Example(Problem2AnswerType)) = [] + +pub fn part1_test() { + part1_examples + |> should.not_equal([]) + use example <- list.map(part1_examples) + solve.part1(example.input) + |> should.equal(example.answer) +} + +pub fn part2_test() { + part2_examples + |> should.not_equal([]) + use example <- list.map(part2_examples) + solve.part2(example.input) + |> should.equal(example.answer) +} + +" diff --git a/aoc2023/build/packages/adglent/src/priv/templates/testfile_showtime.gleam b/aoc2023/build/packages/adglent/src/priv/templates/testfile_showtime.gleam new file mode 100644 index 0000000..699feb2 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv/templates/testfile_showtime.gleam @@ -0,0 +1,41 @@ +pub const template = " +import gleam/list +import showtime/tests/should +import adglent.{type Example, Example} +import day{{ day }}/solve + +type Problem1AnswerType = + String + +type Problem2AnswerType = + String + +/// Add examples for part 1 here: +/// ```gleam +///const part1_examples: List(Example(Problem1AnswerType)) = [Example(\"some input\", \"\")] +/// ``` +const part1_examples: List(Example(Problem1AnswerType)) = [] + +/// Add examples for part 2 here: +/// ```gleam +///const part2_examples: List(Example(Problem2AnswerType)) = [Example(\"some input\", \"\")] +/// ``` +const part2_examples: List(Example(Problem2AnswerType)) = [] + +pub fn part1_test() { + part1_examples + |> should.not_equal([]) + use example <- list.map(part1_examples) + solve.part1(example.input) + |> should.equal(example.answer) +} + +pub fn part2_test() { + part2_examples + |> should.not_equal([]) + use example <- list.map(part2_examples) + solve.part2(example.input) + |> should.equal(example.answer) +} + +" diff --git a/aoc2023/build/packages/adglent/src/priv/toml.gleam b/aoc2023/build/packages/adglent/src/priv/toml.gleam new file mode 100644 index 0000000..7042833 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv/toml.gleam @@ -0,0 +1,52 @@ +import tom +import gleam/result + +pub type TomError { + TomParseError(error: tom.ParseError) + TomGetError(error: tom.GetError) +} + +pub fn get_string( + toml_content: String, + key_path: List(String), +) -> Result(String, TomError) { + use toml <- result.try( + tom.parse(toml_content <> "\n") + |> result.map_error(TomParseError), + ) + use value <- result.try( + tom.get_string(toml, key_path) + |> result.map_error(TomGetError), + ) + Ok(value) +} + +pub fn get_bool( + toml_content: String, + key_path: List(String), +) -> Result(Bool, TomError) { + use toml <- result.try( + tom.parse(toml_content <> "\n") + |> result.map_error(TomParseError), + ) + use value <- result.try( + tom.get_bool(toml, key_path) + |> result.map_error(TomGetError), + ) + Ok(value) +} + +pub fn get_int( + toml_content: String, + key_path: List(String), +) -> Result(Int, TomError) { + use toml <- result.try( + tom.parse(toml_content <> "\n") + |> result.map_error(TomParseError), + ) + use value <- result.try( + tom.get_int(toml, key_path) + |> result.map_error(TomGetError), + ) + Ok(value) +} diff --git a/aoc2023/build/packages/adglent/src/priv@aoc_client.erl b/aoc2023/build/packages/adglent/src/priv@aoc_client.erl new file mode 100644 index 0000000..1acb9b5 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv@aoc_client.erl @@ -0,0 +1,61 @@ +-module(priv@aoc_client). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([get_input/3]). + +-spec get_input(binary(), binary(), binary()) -> {ok, binary()} | + {error, binary()}. +get_input(Year, Day, Session) -> + Url = <<<<<<<<"https://adventofcode.com/"/utf8, Year/binary>>/binary, + "/day/"/utf8>>/binary, + Day/binary>>/binary, + "/input"/utf8>>, + gleam@result:'try'( + begin + _pipe = gleam@http@request:to(Url), + gleam@result:map_error( + _pipe, + fun(Error) -> + <<<<<<"Could not create request for \""/utf8, Url/binary>>/binary, + "\": "/utf8>>/binary, + (gleam@string:inspect(Error))/binary>> + end + ) + end, + fun(Request) -> + gleam@result:'try'( + begin + _pipe@1 = Request, + _pipe@2 = gleam@http@request:prepend_header( + _pipe@1, + <<"Accept"/utf8>>, + <<"application/json"/utf8>> + ), + _pipe@3 = gleam@http@request:prepend_header( + _pipe@2, + <<"Cookie"/utf8>>, + <<<<"session="/utf8, Session/binary>>/binary, ";"/utf8>> + ), + _pipe@4 = gleam@httpc:send(_pipe@3), + gleam@result:map_error( + _pipe@4, + fun(Error@1) -> + <<<<<<"Error when requesting \""/utf8, Url/binary>>/binary, + "\": "/utf8>>/binary, + (gleam@string:inspect(Error@1))/binary>> + end + ) + end, + fun(Response) -> case erlang:element(2, Response) of + Status when (Status >= 200) andalso (Status < 300) -> + {ok, erlang:element(4, Response)}; + + Status@1 -> + {error, + <<<<(gleam@int:to_string(Status@1))/binary, + " - "/utf8>>/binary, + (erlang:element(4, Response))/binary>>} + end end + ) + end + ). diff --git a/aoc2023/build/packages/adglent/src/priv@errors.erl b/aoc2023/build/packages/adglent/src/priv@errors.erl new file mode 100644 index 0000000..978c675 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv@errors.erl @@ -0,0 +1,74 @@ +-module(priv@errors). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([map_messages/3, map_error/2, print_result/1, print_error/1, assert_ok/1]). + +-spec map_messages({ok, any()} | {error, any()}, binary(), binary()) -> {ok, + binary()} | + {error, binary()}. +map_messages(Result, Success_message, Error_message) -> + _pipe = Result, + _pipe@1 = gleam@result:map_error( + _pipe, + fun(Error) -> + <<<<<<"Error - "/utf8, Error_message/binary>>/binary, ": "/utf8>>/binary, + (gleam@string:inspect(Error))/binary>> + end + ), + gleam@result:replace(_pipe@1, Success_message). + +-spec map_error({ok, NIB} | {error, any()}, binary()) -> {ok, NIB} | + {error, binary()}. +map_error(Result, Error_message) -> + _pipe = Result, + gleam@result:map_error( + _pipe, + fun(Error) -> + <<<<Error_message/binary, ": "/utf8>>/binary, + (gleam@string:inspect(Error))/binary>> + end + ). + +-spec print_result({ok, binary()} | {error, binary()}) -> {ok, binary()} | + {error, binary()}. +print_result(Result) -> + _pipe = Result, + _pipe@1 = gleam@result:unwrap_both(_pipe), + gleam@io:println(_pipe@1), + Result. + +-spec print_error({ok, NIK} | {error, binary()}) -> {ok, NIK} | + {error, binary()}. +print_error(Result) -> + _pipe = Result, + gleam@result:map_error( + _pipe, + fun(Err) -> + gleam@io:println(Err), + Err + end + ). + +-spec assert_ok({ok, NIO} | {error, binary()}) -> NIO. +assert_ok(Result) -> + _assert_subject = begin + _pipe = Result, + gleam@result:map_error( + _pipe, + fun(Err) -> + erlang:halt(1), + Err + end + ) + end, + {ok, Value} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"priv/errors"/utf8>>, + function => <<"assert_ok"/utf8>>, + line => 43}) + end, + Value. diff --git a/aoc2023/build/packages/adglent/src/priv@prompt.erl b/aoc2023/build/packages/adglent/src/priv@prompt.erl new file mode 100644 index 0000000..0277f14 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv@prompt.erl @@ -0,0 +1,53 @@ +-module(priv@prompt). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([get_line/1, confirm/2, value/3]). +-export_type([get_line_error/0]). + +-type get_line_error() :: eof | no_data. + +-spec get_line(binary()) -> {ok, binary()} | {error, get_line_error()}. +get_line(Prompt) -> + adglent_ffi:get_line(Prompt). + +-spec confirm(binary(), boolean()) -> boolean(). +confirm(Message, Auto_accept) -> + Auto_accept orelse case begin + _pipe = adglent_ffi:get_line(<<Message/binary, "? (Y/N): "/utf8>>), + _pipe@1 = gleam@result:unwrap(_pipe, <<"n"/utf8>>), + gleam@string:trim(_pipe@1) + end of + <<"Y"/utf8>> -> + true; + + <<"y"/utf8>> -> + true; + + _ -> + false + end. + +-spec get_value_of_default(binary(), binary(), boolean()) -> binary(). +get_value_of_default(Message, Default, Auto_accept) -> + case Auto_accept of + true -> + Default; + + false -> + _pipe = adglent_ffi:get_line( + <<<<<<Message/binary, "? ("/utf8>>/binary, Default/binary>>/binary, + "): "/utf8>> + ), + _pipe@1 = gleam@result:unwrap(_pipe, <<""/utf8>>), + gleam@string:trim(_pipe@1) + end. + +-spec value(binary(), binary(), boolean()) -> binary(). +value(Message, Default, Auto_accept) -> + case get_value_of_default(Message, Default, Auto_accept) of + <<""/utf8>> -> + Default; + + Value -> + Value + end. diff --git a/aoc2023/build/packages/adglent/src/priv@template.erl b/aoc2023/build/packages/adglent/src/priv@template.erl new file mode 100644 index 0000000..6a5d0bf --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv@template.erl @@ -0,0 +1,25 @@ +-module(priv@template). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([render/2]). + +-spec render(binary(), list({binary(), binary()})) -> binary(). +render(Template, Substitutions) -> + <<(begin + _pipe = Substitutions, + _pipe@2 = gleam@list:fold( + _pipe, + Template, + fun(Template@1, Substitution) -> + {Name, Value} = Substitution, + _pipe@1 = Template@1, + gleam@string:replace( + _pipe@1, + <<<<"{{ "/utf8, Name/binary>>/binary, " }}"/utf8>>, + Value + ) + end + ), + gleam@string:trim(_pipe@2) + end)/binary, + "\n"/utf8>>. diff --git a/aoc2023/build/packages/adglent/src/priv@templates@solution.erl b/aoc2023/build/packages/adglent/src/priv@templates@solution.erl new file mode 100644 index 0000000..7e36387 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv@templates@solution.erl @@ -0,0 +1 @@ +-module(priv@templates@solution). diff --git a/aoc2023/build/packages/adglent/src/priv@templates@test_main.erl b/aoc2023/build/packages/adglent/src/priv@templates@test_main.erl new file mode 100644 index 0000000..ca6b127 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv@templates@test_main.erl @@ -0,0 +1 @@ +-module(priv@templates@test_main). diff --git a/aoc2023/build/packages/adglent/src/priv@templates@testfile_gleeunit.erl b/aoc2023/build/packages/adglent/src/priv@templates@testfile_gleeunit.erl new file mode 100644 index 0000000..2f5a41e --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv@templates@testfile_gleeunit.erl @@ -0,0 +1 @@ +-module(priv@templates@testfile_gleeunit). diff --git a/aoc2023/build/packages/adglent/src/priv@templates@testfile_showtime.erl b/aoc2023/build/packages/adglent/src/priv@templates@testfile_showtime.erl new file mode 100644 index 0000000..bbbc8b2 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv@templates@testfile_showtime.erl @@ -0,0 +1 @@ +-module(priv@templates@testfile_showtime). diff --git a/aoc2023/build/packages/adglent/src/priv@toml.erl b/aoc2023/build/packages/adglent/src/priv@toml.erl new file mode 100644 index 0000000..6c41fbf --- /dev/null +++ b/aoc2023/build/packages/adglent/src/priv@toml.erl @@ -0,0 +1,83 @@ +-module(priv@toml). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([get_string/2, get_bool/2, get_int/2]). +-export_type([tom_error/0]). + +-type tom_error() :: {tom_parse_error, tom:parse_error()} | + {tom_get_error, tom:get_error()}. + +-spec get_string(binary(), list(binary())) -> {ok, binary()} | + {error, tom_error()}. +get_string(Toml_content, Key_path) -> + gleam@result:'try'( + begin + _pipe = tom:parse(<<Toml_content/binary, "\n"/utf8>>), + gleam@result:map_error( + _pipe, + fun(Field@0) -> {tom_parse_error, Field@0} end + ) + end, + fun(Toml) -> + gleam@result:'try'( + begin + _pipe@1 = tom:get_string(Toml, Key_path), + gleam@result:map_error( + _pipe@1, + fun(Field@0) -> {tom_get_error, Field@0} end + ) + end, + fun(Value) -> {ok, Value} end + ) + end + ). + +-spec get_bool(binary(), list(binary())) -> {ok, boolean()} | + {error, tom_error()}. +get_bool(Toml_content, Key_path) -> + gleam@result:'try'( + begin + _pipe = tom:parse(<<Toml_content/binary, "\n"/utf8>>), + gleam@result:map_error( + _pipe, + fun(Field@0) -> {tom_parse_error, Field@0} end + ) + end, + fun(Toml) -> + gleam@result:'try'( + begin + _pipe@1 = tom:get_bool(Toml, Key_path), + gleam@result:map_error( + _pipe@1, + fun(Field@0) -> {tom_get_error, Field@0} end + ) + end, + fun(Value) -> {ok, Value} end + ) + end + ). + +-spec get_int(binary(), list(binary())) -> {ok, integer()} | + {error, tom_error()}. +get_int(Toml_content, Key_path) -> + gleam@result:'try'( + begin + _pipe = tom:parse(<<Toml_content/binary, "\n"/utf8>>), + gleam@result:map_error( + _pipe, + fun(Field@0) -> {tom_parse_error, Field@0} end + ) + end, + fun(Toml) -> + gleam@result:'try'( + begin + _pipe@1 = tom:get_int(Toml, Key_path), + gleam@result:map_error( + _pipe@1, + fun(Field@0) -> {tom_get_error, Field@0} end + ) + end, + fun(Value) -> {ok, Value} end + ) + end + ). diff --git a/aoc2023/build/packages/adglent/src/showtime.erl b/aoc2023/build/packages/adglent/src/showtime.erl new file mode 100644 index 0000000..721bad4 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime.erl @@ -0,0 +1,155 @@ +-module(showtime). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([main/0]). + +-spec mk_runner( + fun((gleam@option:option(list(binary())), list(binary()), showtime@internal@common@cli:capture()) -> OBY), + glint:command_input() +) -> OBY. +mk_runner(Func, Command) -> + _assert_subject = begin + _pipe = erlang:element(3, Command), + _pipe@1 = glint@flag:get_strings(_pipe, <<"modules"/utf8>>), + gleam@result:map(_pipe@1, fun(Modules) -> case Modules of + [] -> + none; + + Modules@1 -> + {some, Modules@1} + end end) + end, + {ok, Module_list} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime"/utf8>>, + function => <<"mk_runner"/utf8>>, + line => 91}) + end, + _assert_subject@1 = begin + _pipe@2 = erlang:element(3, Command), + glint@flag:get_strings(_pipe@2, <<"ignore"/utf8>>) + end, + {ok, Ignore_tags} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"showtime"/utf8>>, + function => <<"mk_runner"/utf8>>, + line => 100}) + end, + _assert_subject@2 = begin + _pipe@3 = erlang:element(3, Command), + _pipe@4 = glint@flag:get_string(_pipe@3, <<"capture"/utf8>>), + _pipe@5 = gleam@result:map( + _pipe@4, + fun(Arg) -> gleam@string:lowercase(Arg) end + ), + gleam@result:map(_pipe@5, fun(Arg@1) -> case Arg@1 of + <<"no"/utf8>> -> + no; + + <<"yes"/utf8>> -> + yes; + + <<"mixed"/utf8>> -> + mixed + end end) + end, + {ok, Capture_output} = case _assert_subject@2 of + {ok, _} -> _assert_subject@2; + _assert_fail@2 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@2, + module => <<"showtime"/utf8>>, + function => <<"mk_runner"/utf8>>, + line => 104}) + end, + Func(Module_list, Ignore_tags, Capture_output). + +-spec start_with_args( + list(binary()), + fun((gleam@option:option(list(binary())), list(binary()), showtime@internal@common@cli:capture()) -> any()) +) -> nil. +start_with_args(Args, Func) -> + Modules_flag = begin + _pipe = glint@flag:string_list(), + _pipe@1 = glint@flag:default(_pipe, []), + glint@flag:description( + _pipe@1, + <<"Run only tests in the modules in this list"/utf8>> + ) + end, + Ignore_flag = begin + _pipe@2 = glint@flag:string_list(), + _pipe@3 = glint@flag:default(_pipe@2, []), + glint@flag:description( + _pipe@3, + <<"Ignore tests that are have tags matching a tag in this list"/utf8>> + ) + end, + Capture_flag = begin + _pipe@4 = glint@flag:string(), + _pipe@5 = glint@flag:default(_pipe@4, <<"no"/utf8>>), + _pipe@6 = glint@flag:constraint( + _pipe@5, + glint@flag@constraint:one_of( + [<<"yes"/utf8>>, <<"no"/utf8>>, <<"mixed"/utf8>>] + ) + ), + glint@flag:description( + _pipe@6, + <<"Capture output: no (default) - output when tests are run, yes - output is captured and shown in report, mixed - output when run and in report"/utf8>> + ) + end, + _pipe@7 = glint:new(), + _pipe@12 = glint:add( + _pipe@7, + [], + begin + _pipe@8 = glint:command( + fun(_capture) -> mk_runner(Func, _capture) end + ), + _pipe@9 = glint:flag(_pipe@8, <<"modules"/utf8>>, Modules_flag), + _pipe@10 = glint:flag(_pipe@9, <<"ignore"/utf8>>, Ignore_flag), + _pipe@11 = glint:flag(_pipe@10, <<"capture"/utf8>>, Capture_flag), + glint:description(_pipe@11, <<"Runs test"/utf8>>) + end + ), + _pipe@13 = glint:with_pretty_help(_pipe@12, glint:default_pretty_help()), + glint:run(_pipe@13, Args). + +-spec main() -> nil. +main() -> + start_with_args( + gleam@erlang:start_arguments(), + fun(Module_list, Ignore_tags, Capture) -> + Test_event_handler = showtime@internal@erlang@event_handler:start(), + Test_module_handler = showtime@internal@erlang@module_handler:start( + Test_event_handler, + fun showtime@internal@erlang@discover:collect_test_functions/1, + fun showtime@internal@erlang@runner:run_test_suite/4, + Ignore_tags, + Capture + ), + Test_event_handler(start_test_run), + Modules = showtime@internal@erlang@discover:collect_modules( + Test_module_handler, + Module_list + ), + Test_event_handler( + {end_test_run, + begin + _pipe = Modules, + gleam@list:length(_pipe) + end} + ), + nil + end + ). diff --git a/aoc2023/build/packages/adglent/src/showtime.gleam b/aoc2023/build/packages/adglent/src/showtime.gleam new file mode 100644 index 0000000..f0401c9 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime.gleam @@ -0,0 +1,116 @@ +import glint.{type CommandInput, flag} +import glint/flag +import glint/flag/constraint.{one_of} +import gleam/result +import gleam/string +import showtime/internal/common/cli.{Mixed, No, Yes} +@target(erlang) +import gleam/list +@target(erlang) +import gleam/option.{None, Some} +@target(erlang) +import gleam/erlang.{start_arguments} +@target(erlang) +import showtime/internal/common/test_suite.{EndTestRun, StartTestRun} +@target(erlang) +import showtime/internal/erlang/event_handler +@target(erlang) +import showtime/internal/erlang/module_handler +@target(erlang) +import showtime/internal/erlang/runner +@target(erlang) +import showtime/internal/erlang/discover.{ + collect_modules, collect_test_functions, +} + +// @target(javascript) +// import gleam/io + +@target(erlang) +pub fn main() { + use module_list, ignore_tags, capture <- start_with_args(start_arguments()) + // Start event handler which will collect test-results and eventually + // print test report + let test_event_handler = event_handler.start() + // Start module handler which receives msg about modules to test and + // runs the test-suite for the module + let test_module_handler = + module_handler.start( + test_event_handler, + collect_test_functions, + runner.run_test_suite, + ignore_tags, + capture, + ) + + test_event_handler(StartTestRun) + // Collect modules and notify the module handler to start the test-suites + let modules = collect_modules(test_module_handler, module_list) + test_event_handler(EndTestRun( + modules + |> list.length(), + )) + Nil +} + +fn start_with_args(args, func) { + let modules_flag = + flag.string_list() + |> flag.default([]) + |> flag.description("Run only tests in the modules in this list") + + let ignore_flag = + flag.string_list() + |> flag.default([]) + |> flag.description( + "Ignore tests that are have tags matching a tag in this list", + ) + + let capture_flag = + flag.string() + |> flag.default("no") + |> flag.constraint(one_of(["yes", "no", "mixed"])) + |> flag.description( + "Capture output: no (default) - output when tests are run, yes - output is captured and shown in report, mixed - output when run and in report", + ) + + glint.new() + |> glint.add( + at: [], + do: glint.command(mk_runner(func, _)) + |> glint.flag("modules", modules_flag) + |> glint.flag("ignore", ignore_flag) + |> glint.flag("capture", capture_flag) + |> glint.description("Runs test"), + ) + |> glint.with_pretty_help(glint.default_pretty_help()) + |> glint.run(args) +} + +fn mk_runner(func, command: CommandInput) { + let assert Ok(module_list) = + command.flags + |> flag.get_strings("modules") + |> result.map(fn(modules) { + case modules { + [] -> None + modules -> Some(modules) + } + }) + let assert Ok(ignore_tags) = + command.flags + |> flag.get_strings("ignore") + + let assert Ok(capture_output) = + command.flags + |> flag.get_string("capture") + |> result.map(fn(arg) { string.lowercase(arg) }) + |> result.map(fn(arg) { + case arg { + "no" -> No + "yes" -> Yes + "mixed" -> Mixed + } + }) + func(module_list, ignore_tags, capture_output) +} diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/common/cli.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/common/cli.gleam new file mode 100644 index 0000000..1c03211 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime/internal/common/cli.gleam @@ -0,0 +1,5 @@ +pub type Capture { + Yes + No + Mixed +} diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/common/common_event_handler.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/common/common_event_handler.gleam new file mode 100644 index 0000000..b90af14 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime/internal/common/common_event_handler.gleam @@ -0,0 +1,101 @@ +import gleam/map.{type Map} +import showtime/internal/common/test_suite.{ + type TestEvent, type TestRun, CompletedTestRun, EndTest, EndTestRun, + EndTestSuite, OngoingTestRun, StartTest, StartTestRun, StartTestSuite, +} + +pub type TestState { + NotStarted + Running + Finished(num_modules: Int) +} + +pub type HandlerState { + HandlerState( + test_state: TestState, + num_done: Int, + events: Map(String, Map(String, TestRun)), + ) +} + +// This is the common event-handler (shared between erlang/JS targets) +// The main strategy is to collect the test-results in a map of maps: +// module_name -> +// test_name -> test_result +// It will also keep track of if it is running (i.e. did it receive the EndTestRun) +// so that the caller can determine when to print test-results +pub fn handle_event( + msg: TestEvent, + system_time: fn() -> Int, + state: HandlerState, +) { + let test_state = state.test_state + let num_done = state.num_done + let events = state.events + let #(updated_test_state, updated_num_done, updated_events) = case msg { + StartTestRun -> #(Running, num_done, events) + StartTestSuite(module) -> { + let maybe_module_events = map.get(events, module.name) + let new_events = case maybe_module_events { + Ok(_) -> events + Error(_) -> + events + |> map.insert(module.name, map.new()) + } + #(test_state, num_done, new_events) + } + StartTest(module, test) -> { + let current_time = system_time() + let maybe_module_events = map.get(events, module.name) + let new_events = case maybe_module_events { + Ok(module_events) -> { + let maybe_test_event = map.get(module_events, test.name) + case maybe_test_event { + Error(_) -> + events + |> map.insert( + module.name, + module_events + |> map.insert(test.name, OngoingTestRun(test, current_time)), + ) + Ok(_) -> events + } + } + Error(_) -> events + } + #(test_state, num_done, new_events) + } + EndTest(module, test, result) -> { + let current_time = system_time() + let maybe_module_events = map.get(events, module.name) + let new_events = case maybe_module_events { + Ok(module_events) -> { + let maybe_test_run = + module_events + |> map.get(test.name) + let updated_module_events = case maybe_test_run { + Ok(OngoingTestRun(test_function, started_at)) -> + module_events + |> map.insert( + test.name, + CompletedTestRun( + test_function, + current_time - started_at, + result, + ), + ) + Error(_) -> module_events + } + events + |> map.insert(module.name, updated_module_events) + } + Error(_) -> events + } + #(test_state, num_done, new_events) + } + EndTestSuite(_) -> #(test_state, num_done + 1, events) + EndTestRun(num_modules) -> #(Finished(num_modules), num_done, events) + _ -> #(Running, num_done, events) + } + HandlerState(updated_test_state, updated_num_done, updated_events) +} diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/common/test_result.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/common/test_result.gleam new file mode 100644 index 0000000..a1d6bd9 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime/internal/common/test_result.gleam @@ -0,0 +1,119 @@ +import gleam/dynamic.{type Dynamic} +import gleam/map.{type Map} + +// These are all the types used for test-results +// NOTE: These are heavily used in the erlang/js ffi:s +// so any changes here are likely to break the ffi:s unless +// the corresponding change is introduced there +// +// Futhermore this has some erlang related names that should +// probably be cleaned up, but it is used by both the ffi:s + +// Currently only one reason, but could be possible to support +// more reasons in the future +pub type IgnoreReason { + Ignore +} + +// This is the return value from running the test-function +// or ignored if the test was ignored +pub type TestReturn { + TestFunctionReturn(value: Dynamic, output_buffer: List(String)) + Ignored(reason: IgnoreReason) +} + +// All data about an exception in the test function is captured +// in this type. +// This is also where the data about the assertions will end up (in reason) +pub type Exception { + ErlangException( + class: Class, + reason: Reason, + stacktrace: TraceList, + output_buffer: List(String), + ) +} + +// Alias for the test-result which is either a TestResult (passed test, ignored or a test-definition) +// or an Exception (failed test) +pub type TestResult = + Result(TestReturn, Exception) + +// Reason is either an assert equal (which is if the error was produced by gleeunit should) +// TODO: Add other asserts +// or it is a gleam error meaning that is was produced by showtime should +// TODO: Rename GleamError to ShowtimeError +pub type Reason { + AssertEqual(details: List(ReasonDetail)) + AssertNotEqual(details: List(ReasonDetail)) + AssertMatch(details: List(ReasonDetail)) + GleamError(details: GleamErrorDetail) + GleamAssert(value: Dynamic, line_no: Int) + GenericException(value: Dynamic) +} + +// ReasonDetail is the union-type used in erlang-exceptions where the reason +// is a list of such details +pub type ReasonDetail { + Module(name: String) + ReasonLine(line_no: Int) + Expression(expression: String) + Expected(value: Dynamic) + Value(value: Dynamic) + Pattern(pattern: String) +} + +// Gleam error detail is produced by showtime should and will hold all the information +// about the assertion (both expected and got) +pub type GleamErrorDetail { + LetAssert( + module: String, + function: String, + line_no: Int, + message: String, + value: Dynamic, + ) +} + +// Class is a part of standard erlang exceptions, but also used on js-side +// TODO: Extend to include a JS specific constructor +pub type Class { + ErlangError + Exit + Throw +} + +// The trace list is part of the standard erlang exception, but is also +// emulated on js-side. +// TODO: Maybe we need a js-version that contain some js-specific trace-elements +pub type TraceList { + TraceList(traces: List(Trace)) +} + +// Trace are the elements in the trace list in an erlang exception +// TODO: Maybe add a js-specific trace (since arity is not really a js attribute) +pub type Trace { + Trace(function: String, arity: Arity, extra_info: List(ExtraInfo)) + TraceModule( + module: String, + function: String, + arity: Arity, + extra_info: List(ExtraInfo), + ) +} + +// Extra info holds information about the file and line +// as well as some dynamic data in a map +// This is currently not used in the reporter +pub type ExtraInfo { + ErrorInfo(error_info: Map(Dynamic, Dynamic)) + File(filename: String) + Line(line_no: Int) +} + +// Arity is the erlang type for arity +// Can be either a number, or a list of arguments +pub type Arity { + Num(arity: Int) + ArgList(arg_list: List(Dynamic)) +} diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/common/test_suite.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/common/test_suite.gleam new file mode 100644 index 0000000..eb58d64 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime/internal/common/test_suite.gleam @@ -0,0 +1,63 @@ +import gleam/option.{type Option} +import showtime/internal/common/test_result.{type TestResult} +import showtime/internal/common/cli.{type Capture} + +// The state (and result) of a test function +pub type TestRun { + OngoingTestRun(test_function: TestFunction, started_at: Int) + CompletedTestRun( + test_function: TestFunction, + total_time: Int, + result: TestResult, + ) +} + +// A test module (found by discovery) +pub type TestModule { + TestModule(name: String, path: Option(String)) +} + +// A test function +pub type TestFunction { + TestFunction(name: String) +} + +// A test suite is a test module together with the test functions +// that were collected from that module +pub type TestSuite { + TestSuite(module: TestModule, tests: List(TestFunction)) +} + +// Test event for the event handler +pub type TestEvent { + StartTestRun + StartTestSuite(test_module: TestModule) + StartTest(test_module: TestModule, test_function: TestFunction) + EndTest( + test_module: TestModule, + test_function: TestFunction, + result: TestResult, + ) + EndTestSuite(test_module: TestModule) + EndTestRun(num_modules: Int) +} + +// Interface for the module handler +pub type TestModuleHandler = + fn(TestModule) -> Nil + +// Interface for the event handler +pub type TestEventHandler = + fn(TestEvent) -> Nil + +// Interface for the module collector +pub type ModuleCollector = + fn(TestModuleHandler) -> List(TestModule) + +// Interface for the function collector +pub type TestFunctionCollector = + fn(TestModule) -> TestSuite + +// Interface for the test runner +pub type TestRunner = + fn(TestSuite, TestEventHandler, List(String), Capture) -> Nil diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/erlang/discover.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/erlang/discover.gleam new file mode 100644 index 0000000..ecb752d --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime/internal/erlang/discover.gleam @@ -0,0 +1,167 @@ +@target(erlang) +import gleam/io +@target(erlang) +import gleam/dynamic.{type Dynamic} +@target(erlang) +import gleam/list +@target(erlang) +import gleam/string +@target(erlang) +import gleam/int +@target(erlang) +import gleam/option.{type Option, None, Some} +@target(erlang) +import gleam/erlang/atom.{type Atom} +@target(erlang) +import showtime/internal/common/test_suite.{ + type TestModule, type TestModuleHandler, type TestSuite, TestFunction, + TestModule, TestSuite, +} +import simplifile + +// Module collector for erlang +// Will search the test folder for files ending with _test and notify +// the module handler about each module it finds +@target(erlang) +pub fn collect_modules( + test_module_handler: TestModuleHandler, + only_modules: Option(List(String)), +) -> List(TestModule) { + collect_modules_in_folder("./test", test_module_handler, only_modules) +} + +@target(erlang) +fn collect_modules_in_folder( + path: String, + test_module_handler: TestModuleHandler, + only_modules: Option(List(String)), +) { + let module_prefix = get_module_prefix(path) + let assert Ok(files) = simplifile.read_directory(path) + let test_modules_in_folder = + files + |> list.filter(string.ends_with(_, "_test.gleam")) + |> list.filter_map(fn(test_module_file) { + let module_name = + module_prefix <> { + test_module_file + |> string.replace(".gleam", "") + } + case only_modules { + Some(only_modules_list) -> { + let module_in_list = + only_modules_list + |> list.any(fn(only_module_name) { + only_module_name == module_name + |> string.replace("@", "/") + }) + case module_in_list { + True -> { + let test_module = TestModule(module_name, Some(test_module_file)) + test_module_handler(test_module) + Ok(test_module) + } + + False -> Error(Nil) + } + } + None -> { + let test_module = TestModule(module_name, Some(test_module_file)) + test_module_handler(test_module) + Ok(test_module) + } + } + }) + let test_modules_in_subfolders = + files + |> list.map(fn(filename) { path <> "/" <> filename }) + |> list.filter(fn(file) { simplifile.is_directory(file) }) + |> list.fold( + [], + fn(modules, subfolder) { + modules + |> list.append(collect_modules_in_folder( + subfolder, + test_module_handler, + only_modules, + )) + }, + ) + test_modules_in_folder + |> list.append(test_modules_in_subfolders) +} + +@target(erlang) +fn get_module_prefix(path) { + let path_without_test = + path + |> string.replace("./test", "") + + let path_without_leading_slash = case + string.starts_with(path_without_test, "/") + { + True -> string.drop_left(path_without_test, 1) + False -> path_without_test + } + let module_prefix = + path_without_leading_slash + |> string.replace("/", "@") + case string.length(module_prefix) { + 0 -> module_prefix + _ -> module_prefix <> "@" + } +} + +// Test function collector for erlang +// Uses erlang `apply` to run `module_info` for the test module +// and collects all the exports ending with _test into a `TestSuite` +@target(erlang) +pub fn collect_test_functions(module: TestModule) -> TestSuite { + let test_functions: List(#(Atom, Int)) = + apply( + atom.create_from_string(module.name), + atom.create_from_string("module_info"), + [dynamic.from(atom.create_from_string("exports"))], + ) + |> dynamic.unsafe_coerce() + + let test_functions_filtered = + test_functions + |> list.map(fn(entry) { + let assert #(name, arity) = entry + #( + name + |> atom.to_string(), + arity, + ) + }) + |> list.filter_map(fn(entry) { + let assert #(name, arity) = entry + case string.ends_with(name, "_test") { + True -> + case arity { + 0 -> Ok(name) + _ -> { + io.println( + "WARNING: function \"" <> name <> "\" has arity: " <> int.to_string( + arity, + ) <> " - cannot be used as test (needs to be 0)", + ) + Error("Wrong arity") + } + } + False -> Error("Non matching name") + } + }) + |> list.filter(string.ends_with(_, "_test")) + |> list.map(fn(function_name) { TestFunction(function_name) }) + TestSuite(module, test_functions_filtered) +} + +@target(erlang) +@external(erlang, "erlang", "apply") +fn apply( + module module: Atom, + function function: Atom, + args args: List(Dynamic), +) -> Dynamic diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/erlang/event_handler.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/erlang/event_handler.gleam new file mode 100644 index 0000000..62a9caf --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime/internal/erlang/event_handler.gleam @@ -0,0 +1,91 @@ +@target(erlang) +import gleam/io +@target(erlang) +import gleam/otp/actor.{Continue, Stop} +@target(erlang) +import gleam/erlang/process.{type Subject, Normal} +@target(erlang) +import gleam/map +@target(erlang) +import showtime/internal/common/test_suite.{type TestEvent, EndTestRun} +@target(erlang) +import showtime/internal/common/common_event_handler.{ + Finished, HandlerState, NotStarted, handle_event, +} +@target(erlang) +import showtime/internal/reports/formatter.{create_test_report} +@target(erlang) +import gleam/erlang.{Millisecond} +@target(erlang) +import gleam/option.{None} + +@target(erlang) +type EventHandlerMessage { + EventHandlerMessage(test_event: TestEvent, reply_to: Subject(Int)) +} + +// Starts an actor that receives test events and forwards the to the event handler +// When handler updates the state to `Finished` the actor will wait until handler +// reports that all modules are done and the stop +@target(erlang) +pub fn start() { + let assert Ok(subject) = + actor.start( + #(NotStarted, 0, map.new()), + fn(msg: EventHandlerMessage, state) { + let EventHandlerMessage(test_event, reply_to) = msg + let #(test_state, num_done, events) = state + let updated_state = + handle_event( + test_event, + system_time, + HandlerState(test_state, num_done, events), + ) + case updated_state { + HandlerState(Finished(num_modules), num_done, events) if num_done == num_modules -> { + let #(test_report, num_failed) = create_test_report(events) + io.println(test_report) + process.send(reply_to, num_failed) + Stop(Normal) + } + HandlerState(test_state, num_done, events) -> + Continue(#(test_state, num_done, events), None) + } + }, + ) + let parent_subject = process.new_subject() + + let selector = + process.new_selector() + |> process.selecting(parent_subject, fn(x) { x }) + + // Returns a callback that can receive test events + fn(test_event: TestEvent) { + case test_event { + EndTestRun(..) -> { + // When EndTestRun has been received the callback will wait until the + // actor has stopped + // TODO: Use a timeout? + process.send(subject, EventHandlerMessage(test_event, parent_subject)) + let num_failed = process.select_forever(selector) + case num_failed > 0 { + True -> halt(1) + False -> halt(0) + } + } + + // Normally just send the test event to the actor + _ -> + process.send(subject, EventHandlerMessage(test_event, parent_subject)) + } + } +} + +@target(erlang) +@external(erlang, "erlang", "halt") +fn halt(a: Int) -> Nil + +@target(erlang) +fn system_time() { + erlang.system_time(Millisecond) +} diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/erlang/module_handler.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/erlang/module_handler.gleam new file mode 100644 index 0000000..88cc251 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime/internal/erlang/module_handler.gleam @@ -0,0 +1,43 @@ +@target(erlang) +import gleam/otp/actor.{Continue} +@target(erlang) +import gleam/erlang/process +@target(erlang) +import showtime/internal/common/test_suite.{ + type TestEventHandler, type TestFunctionCollector, type TestModule, + type TestRunner, EndTestSuite, StartTestSuite, +} +@target(erlang) +import showtime/internal/common/cli.{type Capture} +@target(erlang) +import gleam/option.{None} + +@target(erlang) +pub fn start( + test_event_handler: TestEventHandler, + test_function_collector: TestFunctionCollector, + run_test_suite: TestRunner, + ignore_tags: List(String), + capture: Capture, +) { + let assert Ok(subject) = + actor.start( + Nil, + fn(module: TestModule, state) { + process.start( + fn() { + let test_suite = test_function_collector(module) + test_event_handler(StartTestSuite(module)) + run_test_suite(test_suite, test_event_handler, ignore_tags, capture) + test_event_handler(EndTestSuite(module)) + }, + False, + ) + Continue(state, None) + }, + ) + fn(test_module: TestModule) { + process.send(subject, test_module) + Nil + } +} diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/erlang/runner.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/erlang/runner.gleam new file mode 100644 index 0000000..ebbf426 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime/internal/erlang/runner.gleam @@ -0,0 +1,59 @@ +@target(erlang) +import gleam/list +@target(erlang) +import gleam/erlang/atom.{type Atom} +@target(erlang) +import showtime/internal/common/test_suite.{ + type TestEventHandler, type TestSuite, EndTest, StartTest, +} +@target(erlang) +import showtime/internal/common/test_result.{type TestResult} +@target(erlang) +import showtime/internal/common/cli.{type Capture} + +// Runs all tests in a test suite +@target(erlang) +pub fn run_test_suite( + test_suite: TestSuite, + test_event_handler: TestEventHandler, + ignore_tags: List(String), + capture: Capture, +) { + test_suite.tests + |> list.each(fn(test) { + test_event_handler(StartTest(test_suite.module, test)) + let result = + run_test(test_suite.module.name, test.name, ignore_tags, capture) + test_event_handler(EndTest(test_suite.module, test, result)) + }) +} + +// Wrapper around the ffi function that converts names to atoms +@target(erlang) +pub fn run_test( + module_name: String, + test_name: String, + ignore_tags: List(String), + capture: Capture, +) -> TestResult { + let result = + run_test_ffi( + atom.create_from_string(module_name), + atom.create_from_string(test_name), + ignore_tags, + capture, + ) + result +} + +// Calls ffi for running a test function +// The ffi will take care of mapping the result and exception to the data-types +// used in gleam +@target(erlang) +@external(erlang, "showtime_ffi", "run_test") +fn run_test_ffi( + module module: Atom, + function function: Atom, + ignore_tags ignore_tags: List(String), + capture capture: Capture, +) -> TestResult diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/reports/compare.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/reports/compare.gleam new file mode 100644 index 0000000..5ccddee --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime/internal/reports/compare.gleam @@ -0,0 +1,42 @@ +import gleam/dynamic.{type Dynamic} +import gleam/string +import showtime/internal/reports/styles.{expected_highlight, got_highlight} +import gap.{compare_lists, compare_strings} +import gap/styling.{from_comparison, highlight, to_styled_comparison} + +pub fn compare(expected: Dynamic, got: Dynamic) -> #(String, String) { + let expected_as_list = + expected + |> dynamic.list(dynamic.dynamic) + let got_as_list = + got + |> dynamic.list(dynamic.dynamic) + let expected_as_string = + expected + |> dynamic.string() + let got_as_string = + got + |> dynamic.string() + case expected_as_list, got_as_list, expected_as_string, got_as_string { + Ok(expected_list), Ok(got_list), _, _ -> { + let comparison = + compare_lists(expected_list, got_list) + |> from_comparison() + |> highlight(expected_highlight, got_highlight, fn(item) { item }) + |> to_styled_comparison() + #(comparison.first, comparison.second) + } + _, _, Ok(expected_string), Ok(got_string) -> { + let comparison = + compare_strings(expected_string, got_string) + |> from_comparison() + |> highlight(expected_highlight, got_highlight, fn(item) { item }) + |> to_styled_comparison() + #(comparison.first, comparison.second) + } + _, _, _, _ -> #( + expected_highlight(string.inspect(expected)), + got_highlight(string.inspect(got)), + ) + } +} diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/reports/formatter.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/reports/formatter.gleam new file mode 100644 index 0000000..8c1a6ac --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime/internal/reports/formatter.gleam @@ -0,0 +1,480 @@ +import gleam/io +import gleam/int +import gleam/list +import gleam/string +import gleam/option.{type Option, None, Some} +import gleam/map.{type Map} +import gleam/dynamic.{type Dynamic} +import showtime/internal/common/test_result.{ + type GleamErrorDetail, type ReasonDetail, type Trace, AssertEqual, AssertMatch, + AssertNotEqual, Expected, Expression, GenericException, GleamAssert, + GleamError, Ignored, LetAssert, Pattern, Trace, TraceModule, Value, +} +import showtime/internal/common/test_suite.{type TestRun, CompletedTestRun} +import showtime/tests/should.{type Assertion, Eq, Fail, IsError, IsOk, NotEq} +import showtime/internal/reports/styles.{ + error_style, expected_highlight, failed_style, function_style, got_highlight, + heading_style, ignored_style, not_style, passed_style, stacktrace_style, +} +import showtime/internal/reports/compare.{compare} +import showtime/internal/reports/table.{ + AlignLeft, AlignLeftOverflow, AlignRight, Content, Separator, StyledContent, + Table, align_table, to_string, +} +import showtime/tests/meta.{type Meta} + +type GleeUnitAssertionType { + GleeUnitAssertEqual(message: String) + GleeUnitAssertNotEqual(message: String) + GleeUnitAssertMatch(message: String) +} + +type ModuleAndTest { + ModuleAndTestRun(module_name: String, test_run: TestRun) +} + +type UnifiedError { + UnifiedError( + meta: Option(Meta), + reason: String, + message: String, + expected: String, + got: String, + line: Option(Int), + stacktrace: List(Trace), + ) +} + +pub fn create_test_report(test_results: Map(String, Map(String, TestRun))) { + let all_test_runs = + test_results + |> map.values() + |> list.flat_map(map.values) + let failed_test_runs = + test_results + |> map.to_list() + |> list.flat_map(fn(entry) { + let #(module_name, test_module_results) = entry + test_module_results + |> map.values() + |> list.filter_map(fn(test_run) { + case test_run { + CompletedTestRun(_test_function, _, result) -> + case result { + Error(_) -> Ok(ModuleAndTestRun(module_name, test_run)) + Ok(Ignored(_)) -> Error(Nil) + Ok(_) -> Error(Nil) + } + _ -> { + test_run + |> io.debug() + Error(Nil) + } + } + }) + }) + + let ignored_test_runs = + test_results + |> map.to_list() + |> list.flat_map(fn(entry) { + let #(module_name, test_module_results) = entry + test_module_results + |> map.values() + |> list.filter_map(fn(test_run) { + case test_run { + CompletedTestRun(test_function, _, result) -> + case result { + Ok(Ignored(reason)) -> + Ok(#(module_name <> "." <> test_function.name, reason)) + _ -> Error(Nil) + } + _ -> Error(Nil) + } + }) + }) + + let failed_tests_report = + failed_test_runs + |> list.filter_map(fn(module_and_test_run) { + case module_and_test_run.test_run { + CompletedTestRun(test_function, _total_time, result) -> + case result { + Error(exception) -> + case exception.reason { + AssertEqual(reason_details) -> + Ok(format_reason( + erlang_error_to_unified( + reason_details, + GleeUnitAssertEqual("Assert equal"), + exception.stacktrace.traces, + ), + module_and_test_run.module_name, + test_function.name, + exception.output_buffer, + )) + AssertNotEqual(reason_details) -> + Ok(format_reason( + erlang_error_to_unified( + reason_details, + GleeUnitAssertNotEqual("Assert not equal"), + exception.stacktrace.traces, + ), + module_and_test_run.module_name, + test_function.name, + exception.output_buffer, + )) + AssertMatch(reason_details) -> + Ok(format_reason( + erlang_error_to_unified( + reason_details, + GleeUnitAssertMatch("Assert match"), + exception.stacktrace.traces, + ), + module_and_test_run.module_name, + test_function.name, + exception.output_buffer, + )) + GleamError(reason) -> + Ok(format_reason( + gleam_error_to_unified(reason, exception.stacktrace.traces), + module_and_test_run.module_name, + test_function.name, + exception.output_buffer, + )) + // GleamAssert(value) -> Error(Nil) + GleamAssert(value, line_no) -> + Ok(format_reason( + UnifiedError( + None, + "gleam assert", + "Assert failed", + "Patterns should match", + error_style(string.inspect(value)), + Some(line_no), + exception.stacktrace.traces, + ), + module_and_test_run.module_name, + test_function.name, + exception.output_buffer, + )) + GenericException(value) -> + Ok(format_reason( + UnifiedError( + None, + "generic exception", + "Test function threw an exception", + "Exception in test function", + error_style(string.inspect(value)), + None, + exception.stacktrace.traces, + ), + module_and_test_run.module_name, + test_function.name, + exception.output_buffer, + )) + other -> { + io.println("Other: " <> string.inspect(other)) + panic + Error(Nil) + } + } + _ -> Error(Nil) + } + _ -> Error(Nil) + } + }) + |> list.fold([], fn(rows, test_rows) { list.append(rows, test_rows) }) + + let all_test_execution_time_reports = + all_test_runs + |> list.filter_map(fn(test_run) { + case test_run { + CompletedTestRun(test_function, total_time, _) -> + Ok(test_function.name <> ": " <> int.to_string(total_time) <> " ms") + _ -> Error(Nil) + } + }) + let _execution_times_report = + all_test_execution_time_reports + |> string.join("\n") + + let all_tests_count = + all_test_runs + |> list.length() + let ignored_tests_count = + ignored_test_runs + |> list.length() + let failed_tests_count = + failed_test_runs + |> list.length() + + let passed = + passed_style( + int.to_string(all_tests_count - failed_tests_count - ignored_tests_count) <> " passed", + ) + let failed = failed_style(int.to_string(failed_tests_count) <> " failed") + let ignored = case ignored_tests_count { + 0 -> "" + _ -> ", " <> ignored_style(int.to_string(ignored_tests_count) <> " ignored") + } + + let failed_tests_table = + Table(None, failed_tests_report) + |> align_table() + |> to_string() + + let test_report = + "\n" <> failed_tests_table <> "\n" <> passed <> ", " <> failed <> ignored + #(test_report, failed_tests_count) +} + +fn erlang_error_to_unified( + error_details: List(ReasonDetail), + assertion_type: GleeUnitAssertionType, + stacktrace: List(Trace), +) { + error_details + |> list.fold( + UnifiedError( + None, + "not_set", + assertion_type.message, + "", + "", + None, + stacktrace, + ), + fn(unified, reason) { + case reason { + Expression(expression) -> UnifiedError(..unified, reason: expression) + Expected(value) -> + case assertion_type { + GleeUnitAssertEqual(_messaged) -> + UnifiedError( + ..unified, + expected: expected_highlight(string.inspect(value)), + ) + _ -> unified + } + Value(value) -> + case assertion_type { + GleeUnitAssertNotEqual(_message) -> + UnifiedError( + ..unified, + expected: not_style("not ") <> string.inspect(value), + got: got_highlight(string.inspect(value)), + ) + _ -> + UnifiedError(..unified, got: got_highlight(string.inspect(value))) + } + Pattern(pattern) -> + case pattern { + "{ ok , _ }" -> + UnifiedError(..unified, expected: expected_highlight("Ok(_)")) + "{ error , _ }" -> + UnifiedError(..unified, expected: expected_highlight("Error(_)")) + _ -> unified + } + _ -> unified + } + }, + ) +} + +fn gleam_error_to_unified( + gleam_error: GleamErrorDetail, + stacktrace: List(Trace), +) -> UnifiedError { + case gleam_error { + LetAssert(_module, _function, _line_no, _message, value) -> { + let result: Result(Dynamic, Assertion(Dynamic, Dynamic)) = + dynamic.unsafe_coerce(value) + let assert Error(assertion) = result + case assertion { + Eq(got, expected, meta) -> { + let #(expected, got) = compare(expected, got) + UnifiedError( + meta, + "assert", + "Assert equal", + expected, + got, + None, + stacktrace, + ) + } + NotEq(got, expected, meta) -> + UnifiedError( + meta, + "assert", + "Assert not equal", + not_style("not ") <> string.inspect(expected), + string.inspect(got), + None, + stacktrace, + ) + IsOk(got, meta) -> + UnifiedError( + meta, + "assert", + "Assert is Ok", + expected_highlight("Ok(_)"), + got_highlight(string.inspect(got)), + None, + stacktrace, + ) + IsError(got, meta) -> + UnifiedError( + meta, + "assert", + "Assert is Ok", + expected_highlight("Error(_)"), + got_highlight(string.inspect(got)), + None, + stacktrace, + ) + Fail(meta) -> + UnifiedError( + meta, + "assert", + "Assert is Ok", + got_highlight("should.fail()"), + got_highlight("N/A - test always expected to fail"), + None, + stacktrace, + ) + } + } + } +} + +fn format_reason( + error: UnifiedError, + module: String, + function: String, + output_buffer: List(String), +) { + let meta = case error.meta { + Some(meta) -> + Some([ + AlignRight(StyledContent(heading_style("Description")), 2), + Separator(": "), + AlignLeft(Content(meta.description), 0), + ]) + + None -> None + } + + let stacktrace = + error.stacktrace + |> list.map(fn(trace) { + case trace { + Trace(function, _, _) if function == "" -> "(anonymous)" + TraceModule(module, function, _, _) if function == "" -> + module <> "." <> "(anonymous)" + Trace(function, _, _) -> function + TraceModule(module, function, _, _) -> module <> "." <> function + } + }) + let stacktrace_rows = case stacktrace { + [] -> [] + [first, ..rest] -> { + let first_row = + Some([ + AlignRight(StyledContent(heading_style("Stacktrace")), 2), + Separator(": "), + AlignLeft(StyledContent(stacktrace_style(first)), 0), + ]) + let rest_rows = + rest + |> list.map(fn(row) { + Some([ + AlignRight(Content(""), 2), + Separator(" "), + AlignLeft(StyledContent(stacktrace_style(row)), 0), + ]) + }) + [first_row, ..rest_rows] + } + } + + let output_rows = case + output_buffer + |> list.reverse() + |> list.map(fn(row) { string.trim_right(row) }) + { + [] -> [] + [first, ..rest] -> { + let first_row = + Some([ + AlignRight(StyledContent(heading_style("Output")), 2), + Separator(": "), + AlignLeftOverflow(StyledContent(stacktrace_style(first)), 0), + ]) + let rest_rows = + rest + |> list.map(fn(row) { + Some([ + AlignRight(Content(""), 2), + Separator(" "), + AlignLeftOverflow(StyledContent(stacktrace_style(row)), 0), + ]) + }) + [first_row, ..rest_rows] + } + } + + let line = + error.line + |> option.map(fn(line) { ":" <> int.to_string(line) }) + |> option.unwrap("") + + let arrow = + string.join( + list.repeat( + "-", + string.length(module) + 1 + { + string.length(function) + string.length(line) + } / 2, + ), + "", + ) <> "⌄" + let standard_table_rows = [ + Some([ + AlignRight(StyledContent(error_style("Failed")), 2), + Separator(": "), + AlignLeft(Content(arrow), 0), + ]), + Some([ + AlignRight(StyledContent(heading_style("Test")), 2), + Separator(": "), + AlignLeft( + StyledContent(module <> "." <> function_style(function <> line)), + 0, + ), + ]), + meta, + Some([ + AlignRight(StyledContent(heading_style("Expected")), 2), + Separator(": "), + AlignLeftOverflow(StyledContent(error.expected), 0), + ]), + Some([ + AlignRight(StyledContent(heading_style("Got")), 2), + Separator(": "), + AlignLeftOverflow(StyledContent(error.got), 0), + ]), + ] + standard_table_rows + |> list.append(stacktrace_rows) + |> list.append(output_rows) + |> list.append([ + Some([ + AlignRight(Content(""), 0), + AlignRight(Content(""), 0), + AlignRight(Content(""), 0), + ]), + ]) + |> list.filter_map(fn(row) { option.to_result(row, Nil) }) +} diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/reports/styles.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/reports/styles.gleam new file mode 100644 index 0000000..b051dd3 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime/internal/reports/styles.gleam @@ -0,0 +1,84 @@ +import gleam_community/ansi +import gleam/list +import gleam/string +import gleam/bit_array + +pub fn passed_style(text) { + bold_green(text) +} + +pub fn failed_style(text) { + bold_red(text) +} + +pub fn ignored_style(text) { + bold_yellow(text) +} + +pub fn error_style(text) { + bold_red(text) +} + +pub fn expected_highlight(text) { + bold_green(text) +} + +pub fn got_highlight(text) { + bold_red(text) +} + +pub fn not_style(text) { + ansi.bold(text) +} + +pub fn module_style(text: String) { + ansi.cyan(text) +} + +pub fn heading_style(text: String) { + ansi.cyan(text) +} + +pub fn function_style(text: String) { + bold_cyan(text) +} + +pub fn stacktrace_style(text: String) { + text +} + +fn bold_red(text: String) { + ansi.bold(ansi.red(text)) +} + +fn bold_green(text) { + ansi.bold(ansi.green(text)) +} + +fn bold_yellow(text) { + ansi.bold(ansi.yellow(text)) +} + +fn bold_cyan(text) { + ansi.bold(ansi.cyan(text)) +} + +pub fn strip_style(text) { + let #(new_text, _) = + text + |> string.to_graphemes() + |> list.fold( + #("", False), + fn(acc, char) { + let #(str, removing) = acc + let bit_char = bit_array.from_string(char) + case bit_char, removing { + <<0x1b>>, _ -> #(str, True) + <<0x6d>>, True -> #(str, False) + _, True -> #(str, True) + _, False -> #(str <> char, False) + } + }, + ) + new_text +} diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/reports/table.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/reports/table.gleam new file mode 100644 index 0000000..f8bc00c --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime/internal/reports/table.gleam @@ -0,0 +1,148 @@ +import gleam/list +import gleam/string +import gleam/int +import gleam/option.{type Option} +import showtime/internal/reports/styles.{strip_style} + +pub type Content { + Content(unstyled_text: String) + StyledContent(styled_text: String) +} + +pub type Col { + AlignRight(content: Content, margin: Int) + AlignLeft(content: Content, margin: Int) + AlignRightOverflow(content: Content, margin: Int) + AlignLeftOverflow(content: Content, margin: Int) + Separator(char: String) + Aligned(content: String) +} + +pub type Table { + Table(header: Option(String), rows: List(List(Col))) +} + +pub fn to_string(table: Table) -> String { + let rows = + table.rows + |> list.map(fn(row) { + row + |> list.filter_map(fn(col) { + case col { + Separator(char) -> Ok(char) + Aligned(content) -> Ok(content) + _ -> Error(Nil) + } + }) + |> string.join("") + }) + |> string.join("\n") + let header = + table.header + |> option.map(fn(header) { header <> "\n" }) + |> option.unwrap("") + header <> rows +} + +pub fn align_table(table: Table) -> Table { + let cols = + table.rows + |> list.transpose() + let col_width = + cols + |> list.map(fn(col) { + col + |> list.map(fn(content) { + case content { + AlignRight(Content(unstyled), _) -> unstyled + AlignRight(StyledContent(styled), _) -> strip_style(styled) + AlignLeft(Content(unstyled), _) -> unstyled + AlignLeft(StyledContent(styled), _) -> strip_style(styled) + AlignLeftOverflow(_, _) -> "" + AlignRightOverflow(_, _) -> "" + Separator(char) -> char + Aligned(content) -> content + } + }) + |> list.fold(0, fn(max, str) { int.max(max, string.length(str)) }) + }) + let aligned_col = + cols + |> list.zip(col_width) + |> list.map(fn(col_and_width) { + let #(col, width) = col_and_width + col + |> list.map(fn(content) { + case content { + AlignRight(Content(unstyled), margin) -> + Aligned(pad_left( + unstyled, + width + margin - string.length(unstyled), + " ", + )) + AlignRight(StyledContent(styled), margin) -> + Aligned(pad_left( + styled, + width + margin - string.length(strip_style(styled)), + " ", + )) + AlignRightOverflow(Content(unstyled), margin) -> + Aligned(pad_left( + unstyled, + width + margin - string.length(unstyled), + " ", + )) + AlignRightOverflow(StyledContent(styled), margin) -> + Aligned(pad_left( + styled, + width + margin - string.length(strip_style(styled)), + " ", + )) + AlignLeft(Content(unstyled), margin) -> + Aligned(pad_right( + unstyled, + width + margin - string.length(unstyled), + " ", + )) + AlignLeft(StyledContent(styled), margin) -> + Aligned(pad_right( + styled, + width + margin - string.length(strip_style(styled)), + " ", + )) + AlignLeftOverflow(Content(unstyled), margin) -> + Aligned(pad_right( + unstyled, + width + margin - string.length(unstyled), + " ", + )) + AlignLeftOverflow(StyledContent(styled), margin) -> + Aligned(pad_right( + styled, + width + margin - string.length(strip_style(styled)), + " ", + )) + Separator(char) -> Separator(char) + Aligned(content) -> Aligned(content) + } + }) + }) + let aligned_rows = + aligned_col + |> list.transpose() + Table(..table, rows: aligned_rows) +} + +fn pad_left(str: String, num: Int, char: String) { + let padding = + list.repeat(char, num) + |> string.join("") + padding <> str +} + +fn pad_right(str: String, num: Int, char: String) { + let padding = + list.repeat(char, num) + |> string.join("") + str <> padding +} diff --git a/aoc2023/build/packages/adglent/src/showtime/tests/meta.gleam b/aoc2023/build/packages/adglent/src/showtime/tests/meta.gleam new file mode 100644 index 0000000..cbba414 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime/tests/meta.gleam @@ -0,0 +1,3 @@ +pub type Meta { + Meta(description: String, tags: List(String)) +} diff --git a/aoc2023/build/packages/adglent/src/showtime/tests/should.gleam b/aoc2023/build/packages/adglent/src/showtime/tests/should.gleam new file mode 100644 index 0000000..71578c7 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime/tests/should.gleam @@ -0,0 +1,113 @@ +import gleam/option.{type Option, None, Some} +import showtime/tests/meta.{type Meta} + +pub type Assertion(t, e) { + Eq(a: t, b: t, meta: Option(Meta)) + NotEq(a: t, b: t, meta: Option(Meta)) + IsOk(a: Result(t, e), meta: Option(Meta)) + IsError(a: Result(t, e), meta: Option(Meta)) + Fail(meta: Option(Meta)) +} + +pub fn equal(a: t, b: t) { + evaluate(Eq(a, b, None)) +} + +pub fn equal_meta(a: t, b: t, meta: Meta) { + evaluate(Eq(a, b, Some(meta))) +} + +pub fn not_equal(a: t, b: t) { + evaluate(NotEq(a, b, None)) +} + +pub fn not_equal_meta(a: t, b: t, meta: Meta) { + evaluate(NotEq(a, b, Some(meta))) +} + +pub fn be_ok(a: Result(o, e)) { + evaluate(IsOk(a, None)) + let assert Ok(value) = a + value +} + +pub fn be_ok_meta(a: Result(o, e), meta: Meta) { + evaluate(IsOk(a, Some(meta))) +} + +pub fn be_error(a: Result(o, e)) { + evaluate(IsError(a, None)) + let assert Error(value) = a + value +} + +pub fn be_error_meta(a: Result(o, e), meta: Meta) { + evaluate(IsError(a, Some(meta))) +} + +pub fn fail() { + evaluate(Fail(None)) +} + +pub fn fail_meta(meta: Meta) { + evaluate(Fail(Some(meta))) +} + +pub fn be_true(a: Bool) { + a + |> equal(True) +} + +pub fn be_true_meta(a: Bool, meta: Meta) { + a + |> equal_meta(True, meta) +} + +pub fn be_false(a: Bool) { + a + |> equal(False) +} + +pub fn be_false_meta(a: Bool, meta: Meta) { + a + |> equal_meta(False, meta) +} + +@external(erlang, "showtime_ffi", "gleam_error") +fn gleam_error(value: Result(Nil, Assertion(a, b))) -> Nil + +pub fn evaluate(assertion) -> Nil { + case assertion { + Eq(a, b, _meta) -> + case a == b { + True -> Nil + False -> { + gleam_error(Error(assertion)) + } + } + NotEq(a, b, _meta) -> + case a != b { + True -> Nil + False -> { + gleam_error(Error(assertion)) + } + } + IsOk(a, _meta) -> + case a { + Ok(_) -> Nil + Error(_) -> { + gleam_error(Error(assertion)) + } + } + IsError(a, _meta) -> + case a { + Error(_) -> Nil + Ok(_) -> { + gleam_error(Error(assertion)) + } + } + Fail(_meta) -> { + gleam_error(Error(assertion)) + } + } +} diff --git a/aoc2023/build/packages/adglent/src/showtime/tests/test.gleam b/aoc2023/build/packages/adglent/src/showtime/tests/test.gleam new file mode 100644 index 0000000..730f943 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime/tests/test.gleam @@ -0,0 +1,57 @@ +import showtime/tests/should +import showtime/tests/meta.{type Meta} +import gleam/io + +pub type Test { + Test(meta: Meta, test_function: fn() -> Nil) +} + +pub type MetaShould(t) { + MetaShould(equal: fn(t, t) -> Nil, not_equal: fn(t, t) -> Nil) +} + +pub fn test(meta: Meta, test_function: fn(Meta) -> Nil) { + Test(meta, fn() { test_function(meta) }) +} + +pub fn with_meta(meta: Meta, test_function: fn(MetaShould(a)) -> Nil) { + Test( + meta, + fn() { + test_function(MetaShould( + fn(a, b) { equal(a, b, meta) }, + fn(a, b) { not_equal(a, b, meta) }, + )) + }, + ) +} + +pub fn equal(a: t, b: t, meta: Meta) { + io.debug(a) + io.debug(b) + should.equal_meta(a, b, meta) +} + +pub fn not_equal(a: t, b: t, meta: Meta) { + should.equal_meta(a, b, meta) +} + +pub fn be_ok(a: Result(o, e), meta: Meta) { + should.be_ok_meta(a, meta) +} + +pub fn be_error(a: Result(o, e), meta: Meta) { + should.be_error_meta(a, meta) +} + +pub fn fail(meta: Meta) { + should.fail_meta(meta) +} + +pub fn be_true(a: Bool, meta: Meta) { + should.be_true_meta(a, meta) +} + +pub fn be_false(a: Bool, meta: Meta) { + should.be_false_meta(a, meta) +} diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@common@cli.erl b/aoc2023/build/packages/adglent/src/showtime@internal@common@cli.erl new file mode 100644 index 0000000..f2d2396 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime@internal@common@cli.erl @@ -0,0 +1,8 @@ +-module(showtime@internal@common@cli). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export_type([capture/0]). + +-type capture() :: yes | no | mixed. + + diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@common@common_event_handler.erl b/aoc2023/build/packages/adglent/src/showtime@internal@common@common_event_handler.erl new file mode 100644 index 0000000..b0a6d7a --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime@internal@common@common_event_handler.erl @@ -0,0 +1,131 @@ +-module(showtime@internal@common@common_event_handler). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([handle_event/3]). +-export_type([test_state/0, handler_state/0]). + +-type test_state() :: not_started | running | {finished, integer()}. + +-type handler_state() :: {handler_state, + test_state(), + integer(), + gleam@map:map_(binary(), gleam@map:map_(binary(), showtime@internal@common@test_suite:test_run()))}. + +-spec handle_event( + showtime@internal@common@test_suite:test_event(), + fun(() -> integer()), + handler_state() +) -> handler_state(). +handle_event(Msg, System_time, State) -> + Test_state = erlang:element(2, State), + Num_done = erlang:element(3, State), + Events = erlang:element(4, State), + {Updated_test_state, Updated_num_done, Updated_events} = case Msg of + start_test_run -> + {running, Num_done, Events}; + + {start_test_suite, Module} -> + Maybe_module_events = gleam@map:get( + Events, + erlang:element(2, Module) + ), + New_events = case Maybe_module_events of + {ok, _} -> + Events; + + {error, _} -> + _pipe = Events, + gleam@map:insert( + _pipe, + erlang:element(2, Module), + gleam@map:new() + ) + end, + {Test_state, Num_done, New_events}; + + {start_test, Module@1, Test} -> + Current_time = System_time(), + Maybe_module_events@1 = gleam@map:get( + Events, + erlang:element(2, Module@1) + ), + New_events@1 = case Maybe_module_events@1 of + {ok, Module_events} -> + Maybe_test_event = gleam@map:get( + Module_events, + erlang:element(2, Test) + ), + case Maybe_test_event of + {error, _} -> + _pipe@1 = Events, + gleam@map:insert( + _pipe@1, + erlang:element(2, Module@1), + begin + _pipe@2 = Module_events, + gleam@map:insert( + _pipe@2, + erlang:element(2, Test), + {ongoing_test_run, Test, Current_time} + ) + end + ); + + {ok, _} -> + Events + end; + + {error, _} -> + Events + end, + {Test_state, Num_done, New_events@1}; + + {end_test, Module@2, Test@1, Result} -> + Current_time@1 = System_time(), + Maybe_module_events@2 = gleam@map:get( + Events, + erlang:element(2, Module@2) + ), + New_events@2 = case Maybe_module_events@2 of + {ok, Module_events@1} -> + Maybe_test_run = begin + _pipe@3 = Module_events@1, + gleam@map:get(_pipe@3, erlang:element(2, Test@1)) + end, + Updated_module_events = case Maybe_test_run of + {ok, {ongoing_test_run, Test_function, Started_at}} -> + _pipe@4 = Module_events@1, + gleam@map:insert( + _pipe@4, + erlang:element(2, Test@1), + {completed_test_run, + Test_function, + Current_time@1 - Started_at, + Result} + ); + + {error, _} -> + Module_events@1 + end, + _pipe@5 = Events, + gleam@map:insert( + _pipe@5, + erlang:element(2, Module@2), + Updated_module_events + ); + + {error, _} -> + Events + end, + {Test_state, Num_done, New_events@2}; + + {end_test_suite, _} -> + {Test_state, Num_done + 1, Events}; + + {end_test_run, Num_modules} -> + {{finished, Num_modules}, Num_done, Events}; + + _ -> + {running, Num_done, Events} + end, + {handler_state, Updated_test_state, Updated_num_done, Updated_events}. diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@common@test_result.erl b/aoc2023/build/packages/adglent/src/showtime@internal@common@test_result.erl new file mode 100644 index 0000000..b7b73be --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime@internal@common@test_result.erl @@ -0,0 +1,54 @@ +-module(showtime@internal@common@test_result). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export_type([ignore_reason/0, test_return/0, exception/0, reason/0, reason_detail/0, gleam_error_detail/0, class/0, trace_list/0, trace/0, extra_info/0, arity_/0]). + +-type ignore_reason() :: ignore. + +-type test_return() :: {test_function_return, + gleam@dynamic:dynamic_(), + list(binary())} | + {ignored, ignore_reason()}. + +-type exception() :: {erlang_exception, + class(), + reason(), + trace_list(), + list(binary())}. + +-type reason() :: {assert_equal, list(reason_detail())} | + {assert_not_equal, list(reason_detail())} | + {assert_match, list(reason_detail())} | + {gleam_error, gleam_error_detail()} | + {gleam_assert, gleam@dynamic:dynamic_(), integer()} | + {generic_exception, gleam@dynamic:dynamic_()}. + +-type reason_detail() :: {module, binary()} | + {reason_line, integer()} | + {expression, binary()} | + {expected, gleam@dynamic:dynamic_()} | + {value, gleam@dynamic:dynamic_()} | + {pattern, binary()}. + +-type gleam_error_detail() :: {let_assert, + binary(), + binary(), + integer(), + binary(), + gleam@dynamic:dynamic_()}. + +-type class() :: erlang_error | exit | throw. + +-type trace_list() :: {trace_list, list(trace())}. + +-type trace() :: {trace, binary(), arity_(), list(extra_info())} | + {trace_module, binary(), binary(), arity_(), list(extra_info())}. + +-type extra_info() :: {error_info, + gleam@map:map_(gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_())} | + {file, binary()} | + {line, integer()}. + +-type arity_() :: {num, integer()} | {arg_list, list(gleam@dynamic:dynamic_())}. + + diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@common@test_suite.erl b/aoc2023/build/packages/adglent/src/showtime@internal@common@test_suite.erl new file mode 100644 index 0000000..6a56de8 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime@internal@common@test_suite.erl @@ -0,0 +1,30 @@ +-module(showtime@internal@common@test_suite). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export_type([test_run/0, test_module/0, test_function/0, test_suite/0, test_event/0]). + +-type test_run() :: {ongoing_test_run, test_function(), integer()} | + {completed_test_run, + test_function(), + integer(), + {ok, showtime@internal@common@test_result:test_return()} | + {error, showtime@internal@common@test_result:exception()}}. + +-type test_module() :: {test_module, binary(), gleam@option:option(binary())}. + +-type test_function() :: {test_function, binary()}. + +-type test_suite() :: {test_suite, test_module(), list(test_function())}. + +-type test_event() :: start_test_run | + {start_test_suite, test_module()} | + {start_test, test_module(), test_function()} | + {end_test, + test_module(), + test_function(), + {ok, showtime@internal@common@test_result:test_return()} | + {error, showtime@internal@common@test_result:exception()}} | + {end_test_suite, test_module()} | + {end_test_run, integer()}. + + diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@erlang@discover.erl b/aoc2023/build/packages/adglent/src/showtime@internal@erlang@discover.erl new file mode 100644 index 0000000..f0548aa --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime@internal@erlang@discover.erl @@ -0,0 +1,230 @@ +-module(showtime@internal@erlang@discover). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([collect_modules/2, collect_test_functions/1]). + +-spec get_module_prefix(binary()) -> binary(). +get_module_prefix(Path) -> + Path_without_test = begin + _pipe = Path, + gleam@string:replace(_pipe, <<"./test"/utf8>>, <<""/utf8>>) + end, + Path_without_leading_slash = case gleam@string:starts_with( + Path_without_test, + <<"/"/utf8>> + ) of + true -> + gleam@string:drop_left(Path_without_test, 1); + + false -> + Path_without_test + end, + Module_prefix = begin + _pipe@1 = Path_without_leading_slash, + gleam@string:replace(_pipe@1, <<"/"/utf8>>, <<"@"/utf8>>) + end, + case gleam@string:length(Module_prefix) of + 0 -> + Module_prefix; + + _ -> + <<Module_prefix/binary, "@"/utf8>> + end. + +-spec collect_modules_in_folder( + binary(), + fun((showtime@internal@common@test_suite:test_module()) -> nil), + gleam@option:option(list(binary())) +) -> list(showtime@internal@common@test_suite:test_module()). +collect_modules_in_folder(Path, Test_module_handler, Only_modules) -> + Module_prefix = get_module_prefix(Path), + _assert_subject = simplifile:read_directory(Path), + {ok, Files} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime/internal/erlang/discover"/utf8>>, + function => <<"collect_modules_in_folder"/utf8>>, + line => 40}) + end, + Test_modules_in_folder = begin + _pipe = Files, + _pipe@1 = gleam@list:filter( + _pipe, + fun(_capture) -> + gleam@string:ends_with(_capture, <<"_test.gleam"/utf8>>) + end + ), + gleam@list:filter_map( + _pipe@1, + fun(Test_module_file) -> + Module_name = <<Module_prefix/binary, + (begin + _pipe@2 = Test_module_file, + gleam@string:replace( + _pipe@2, + <<".gleam"/utf8>>, + <<""/utf8>> + ) + end)/binary>>, + case Only_modules of + {some, Only_modules_list} -> + Module_in_list = begin + _pipe@3 = Only_modules_list, + gleam@list:any( + _pipe@3, + fun(Only_module_name) -> + Only_module_name =:= begin + _pipe@4 = Module_name, + gleam@string:replace( + _pipe@4, + <<"@"/utf8>>, + <<"/"/utf8>> + ) + end + end + ) + end, + case Module_in_list of + true -> + Test_module = {test_module, + Module_name, + {some, Test_module_file}}, + Test_module_handler(Test_module), + {ok, Test_module}; + + false -> + {error, nil} + end; + + none -> + Test_module@1 = {test_module, + Module_name, + {some, Test_module_file}}, + Test_module_handler(Test_module@1), + {ok, Test_module@1} + end + end + ) + end, + Test_modules_in_subfolders = begin + _pipe@5 = Files, + _pipe@6 = gleam@list:map( + _pipe@5, + fun(Filename) -> + <<<<Path/binary, "/"/utf8>>/binary, Filename/binary>> + end + ), + _pipe@7 = gleam@list:filter( + _pipe@6, + fun(File) -> simplifile:is_directory(File) end + ), + gleam@list:fold( + _pipe@7, + [], + fun(Modules, Subfolder) -> _pipe@8 = Modules, + gleam@list:append( + _pipe@8, + collect_modules_in_folder( + Subfolder, + Test_module_handler, + Only_modules + ) + ) end + ) + end, + _pipe@9 = Test_modules_in_folder, + gleam@list:append(_pipe@9, Test_modules_in_subfolders). + +-spec collect_modules( + fun((showtime@internal@common@test_suite:test_module()) -> nil), + gleam@option:option(list(binary())) +) -> list(showtime@internal@common@test_suite:test_module()). +collect_modules(Test_module_handler, Only_modules) -> + collect_modules_in_folder( + <<"./test"/utf8>>, + Test_module_handler, + Only_modules + ). + +-spec collect_test_functions(showtime@internal@common@test_suite:test_module()) -> showtime@internal@common@test_suite:test_suite(). +collect_test_functions(Module) -> + Test_functions = begin + _pipe = erlang:apply( + erlang:binary_to_atom(erlang:element(2, Module)), + erlang:binary_to_atom(<<"module_info"/utf8>>), + [gleam@dynamic:from(erlang:binary_to_atom(<<"exports"/utf8>>))] + ), + gleam@dynamic:unsafe_coerce(_pipe) + end, + Test_functions_filtered = begin + _pipe@1 = Test_functions, + _pipe@3 = gleam@list:map( + _pipe@1, + fun(Entry) -> + {Name, Arity} = case Entry of + {_, _} -> Entry; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime/internal/erlang/discover"/utf8>>, + function => <<"collect_test_functions"/utf8>>, + line => 131}) + end, + {begin + _pipe@2 = Name, + erlang:atom_to_binary(_pipe@2) + end, + Arity} + end + ), + _pipe@4 = gleam@list:filter_map( + _pipe@3, + fun(Entry@1) -> + {Name@1, Arity@1} = case Entry@1 of + {_, _} -> Entry@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"showtime/internal/erlang/discover"/utf8>>, + function => <<"collect_test_functions"/utf8>>, + line => 139}) + end, + case gleam@string:ends_with(Name@1, <<"_test"/utf8>>) of + true -> + case Arity@1 of + 0 -> + {ok, Name@1}; + + _ -> + gleam@io:println( + <<<<<<<<"WARNING: function \""/utf8, + Name@1/binary>>/binary, + "\" has arity: "/utf8>>/binary, + (gleam@int:to_string(Arity@1))/binary>>/binary, + " - cannot be used as test (needs to be 0)"/utf8>> + ), + {error, <<"Wrong arity"/utf8>>} + end; + + false -> + {error, <<"Non matching name"/utf8>>} + end + end + ), + _pipe@5 = gleam@list:filter( + _pipe@4, + fun(_capture) -> + gleam@string:ends_with(_capture, <<"_test"/utf8>>) + end + ), + gleam@list:map( + _pipe@5, + fun(Function_name) -> {test_function, Function_name} end + ) + end, + {test_suite, Module, Test_functions_filtered}. diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@erlang@event_handler.erl b/aoc2023/build/packages/adglent/src/showtime@internal@erlang@event_handler.erl new file mode 100644 index 0000000..d72ce2c --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime@internal@erlang@event_handler.erl @@ -0,0 +1,76 @@ +-module(showtime@internal@erlang@event_handler). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([start/0]). +-export_type([event_handler_message/0]). + +-type event_handler_message() :: {event_handler_message, + showtime@internal@common@test_suite:test_event(), + gleam@erlang@process:subject(integer())}. + +-spec system_time() -> integer(). +system_time() -> + os:system_time(millisecond). + +-spec start() -> fun((showtime@internal@common@test_suite:test_event()) -> nil). +start() -> + _assert_subject = gleam@otp@actor:start( + {not_started, 0, gleam@map:new()}, + fun(Msg, State) -> + {event_handler_message, Test_event, Reply_to} = Msg, + {Test_state, Num_done, Events} = State, + Updated_state = showtime@internal@common@common_event_handler:handle_event( + Test_event, + fun system_time/0, + {handler_state, Test_state, Num_done, Events} + ), + case Updated_state of + {handler_state, {finished, Num_modules}, Num_done@1, Events@1} when Num_done@1 =:= Num_modules -> + {Test_report, Num_failed} = showtime@internal@reports@formatter:create_test_report( + Events@1 + ), + gleam@io:println(Test_report), + gleam@erlang@process:send(Reply_to, Num_failed), + {stop, normal}; + + {handler_state, Test_state@1, Num_done@2, Events@2} -> + {continue, {Test_state@1, Num_done@2, Events@2}, none} + end + end + ), + {ok, Subject} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime/internal/erlang/event_handler"/utf8>>, + function => <<"start"/utf8>>, + line => 32}) + end, + Parent_subject = gleam@erlang@process:new_subject(), + Selector = begin + _pipe = gleam_erlang_ffi:new_selector(), + gleam@erlang@process:selecting(_pipe, Parent_subject, fun(X) -> X end) + end, + fun(Test_event@1) -> case Test_event@1 of + {end_test_run, _} -> + gleam@erlang@process:send( + Subject, + {event_handler_message, Test_event@1, Parent_subject} + ), + Num_failed@1 = gleam_erlang_ffi:select(Selector), + case Num_failed@1 > 0 of + true -> + erlang:halt(1); + + false -> + erlang:halt(0) + end; + + _ -> + gleam@erlang@process:send( + Subject, + {event_handler_message, Test_event@1, Parent_subject} + ) + end end. diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@erlang@module_handler.erl b/aoc2023/build/packages/adglent/src/showtime@internal@erlang@module_handler.erl new file mode 100644 index 0000000..a6959f5 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime@internal@erlang@module_handler.erl @@ -0,0 +1,53 @@ +-module(showtime@internal@erlang@module_handler). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([start/5]). + +-spec start( + fun((showtime@internal@common@test_suite:test_event()) -> nil), + fun((showtime@internal@common@test_suite:test_module()) -> showtime@internal@common@test_suite:test_suite()), + fun((showtime@internal@common@test_suite:test_suite(), fun((showtime@internal@common@test_suite:test_event()) -> nil), list(binary()), showtime@internal@common@cli:capture()) -> nil), + list(binary()), + showtime@internal@common@cli:capture() +) -> fun((showtime@internal@common@test_suite:test_module()) -> nil). +start( + Test_event_handler, + Test_function_collector, + Run_test_suite, + Ignore_tags, + Capture +) -> + _assert_subject = gleam@otp@actor:start( + nil, + fun(Module, State) -> + gleam@erlang@process:start( + fun() -> + Test_suite = Test_function_collector(Module), + Test_event_handler({start_test_suite, Module}), + Run_test_suite( + Test_suite, + Test_event_handler, + Ignore_tags, + Capture + ), + Test_event_handler({end_test_suite, Module}) + end, + false + ), + {continue, State, none} + end + ), + {ok, Subject} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime/internal/erlang/module_handler"/utf8>>, + function => <<"start"/utf8>>, + line => 23}) + end, + fun(Test_module) -> + gleam@erlang@process:send(Subject, Test_module), + nil + end. diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@erlang@runner.erl b/aoc2023/build/packages/adglent/src/showtime@internal@erlang@runner.erl new file mode 100644 index 0000000..702fb75 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime@internal@erlang@runner.erl @@ -0,0 +1,46 @@ +-module(showtime@internal@erlang@runner). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([run_test/4, run_test_suite/4]). + +-spec run_test( + binary(), + binary(), + list(binary()), + showtime@internal@common@cli:capture() +) -> {ok, showtime@internal@common@test_result:test_return()} | + {error, showtime@internal@common@test_result:exception()}. +run_test(Module_name, Test_name, Ignore_tags, Capture) -> + Result = showtime_ffi:run_test( + erlang:binary_to_atom(Module_name), + erlang:binary_to_atom(Test_name), + Ignore_tags, + Capture + ), + Result. + +-spec run_test_suite( + showtime@internal@common@test_suite:test_suite(), + fun((showtime@internal@common@test_suite:test_event()) -> nil), + list(binary()), + showtime@internal@common@cli:capture() +) -> nil. +run_test_suite(Test_suite, Test_event_handler, Ignore_tags, Capture) -> + _pipe = erlang:element(3, Test_suite), + gleam@list:each( + _pipe, + fun(Test) -> + Test_event_handler( + {start_test, erlang:element(2, Test_suite), Test} + ), + Result = run_test( + erlang:element(2, erlang:element(2, Test_suite)), + erlang:element(2, Test), + Ignore_tags, + Capture + ), + Test_event_handler( + {end_test, erlang:element(2, Test_suite), Test, Result} + ) + end + ). diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@reports@compare.erl b/aoc2023/build/packages/adglent/src/showtime@internal@reports@compare.erl new file mode 100644 index 0000000..d2969b2 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime@internal@reports@compare.erl @@ -0,0 +1,61 @@ +-module(showtime@internal@reports@compare). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([compare/2]). + +-spec compare(gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> {binary(), + binary()}. +compare(Expected, Got) -> + Expected_as_list = begin + _pipe = Expected, + (gleam@dynamic:list(fun gleam@dynamic:dynamic/1))(_pipe) + end, + Got_as_list = begin + _pipe@1 = Got, + (gleam@dynamic:list(fun gleam@dynamic:dynamic/1))(_pipe@1) + end, + Expected_as_string = begin + _pipe@2 = Expected, + gleam@dynamic:string(_pipe@2) + end, + Got_as_string = begin + _pipe@3 = Got, + gleam@dynamic:string(_pipe@3) + end, + case {Expected_as_list, Got_as_list, Expected_as_string, Got_as_string} of + {{ok, Expected_list}, {ok, Got_list}, _, _} -> + Comparison = begin + _pipe@4 = gap:compare_lists(Expected_list, Got_list), + _pipe@5 = gap@styling:from_comparison(_pipe@4), + _pipe@6 = gap@styling:highlight( + _pipe@5, + fun showtime@internal@reports@styles:expected_highlight/1, + fun showtime@internal@reports@styles:got_highlight/1, + fun(Item) -> Item end + ), + gap@styling:to_styled_comparison(_pipe@6) + end, + {erlang:element(2, Comparison), erlang:element(3, Comparison)}; + + {_, _, {ok, Expected_string}, {ok, Got_string}} -> + Comparison@1 = begin + _pipe@7 = gap:compare_strings(Expected_string, Got_string), + _pipe@8 = gap@styling:from_comparison(_pipe@7), + _pipe@9 = gap@styling:highlight( + _pipe@8, + fun showtime@internal@reports@styles:expected_highlight/1, + fun showtime@internal@reports@styles:got_highlight/1, + fun(Item@1) -> Item@1 end + ), + gap@styling:to_styled_comparison(_pipe@9) + end, + {erlang:element(2, Comparison@1), erlang:element(3, Comparison@1)}; + + {_, _, _, _} -> + {showtime@internal@reports@styles:expected_highlight( + gleam@string:inspect(Expected) + ), + showtime@internal@reports@styles:got_highlight( + gleam@string:inspect(Got) + )} + end. diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@reports@formatter.erl b/aoc2023/build/packages/adglent/src/showtime@internal@reports@formatter.erl new file mode 100644 index 0000000..faea091 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime@internal@reports@formatter.erl @@ -0,0 +1,749 @@ +-module(showtime@internal@reports@formatter). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([create_test_report/1]). +-export_type([glee_unit_assertion_type/0, module_and_test/0, unified_error/0]). + +-type glee_unit_assertion_type() :: {glee_unit_assert_equal, binary()} | + {glee_unit_assert_not_equal, binary()} | + {glee_unit_assert_match, binary()}. + +-type module_and_test() :: {module_and_test_run, + binary(), + showtime@internal@common@test_suite:test_run()}. + +-type unified_error() :: {unified_error, + gleam@option:option(showtime@tests@meta:meta()), + binary(), + binary(), + binary(), + binary(), + gleam@option:option(integer()), + list(showtime@internal@common@test_result:trace())}. + +-spec erlang_error_to_unified( + list(showtime@internal@common@test_result:reason_detail()), + glee_unit_assertion_type(), + list(showtime@internal@common@test_result:trace()) +) -> unified_error(). +erlang_error_to_unified(Error_details, Assertion_type, Stacktrace) -> + _pipe = Error_details, + gleam@list:fold( + _pipe, + {unified_error, + none, + <<"not_set"/utf8>>, + erlang:element(2, Assertion_type), + <<""/utf8>>, + <<""/utf8>>, + none, + Stacktrace}, + fun(Unified, Reason) -> case Reason of + {expression, Expression} -> + erlang:setelement(3, Unified, Expression); + + {expected, Value} -> + case Assertion_type of + {glee_unit_assert_equal, _} -> + erlang:setelement( + 5, + Unified, + showtime@internal@reports@styles:expected_highlight( + gleam@string:inspect(Value) + ) + ); + + _ -> + Unified + end; + + {value, Value@1} -> + case Assertion_type of + {glee_unit_assert_not_equal, _} -> + erlang:setelement( + 6, + erlang:setelement( + 5, + Unified, + <<(showtime@internal@reports@styles:not_style( + <<"not "/utf8>> + ))/binary, + (gleam@string:inspect(Value@1))/binary>> + ), + showtime@internal@reports@styles:got_highlight( + gleam@string:inspect(Value@1) + ) + ); + + _ -> + erlang:setelement( + 6, + Unified, + showtime@internal@reports@styles:got_highlight( + gleam@string:inspect(Value@1) + ) + ) + end; + + {pattern, Pattern} -> + case Pattern of + <<"{ ok , _ }"/utf8>> -> + erlang:setelement( + 5, + Unified, + showtime@internal@reports@styles:expected_highlight( + <<"Ok(_)"/utf8>> + ) + ); + + <<"{ error , _ }"/utf8>> -> + erlang:setelement( + 5, + Unified, + showtime@internal@reports@styles:expected_highlight( + <<"Error(_)"/utf8>> + ) + ); + + _ -> + Unified + end; + + _ -> + Unified + end end + ). + +-spec gleam_error_to_unified( + showtime@internal@common@test_result:gleam_error_detail(), + list(showtime@internal@common@test_result:trace()) +) -> unified_error(). +gleam_error_to_unified(Gleam_error, Stacktrace) -> + case Gleam_error of + {let_assert, _, _, _, _, Value} -> + Result = gleam@dynamic:unsafe_coerce(Value), + {error, Assertion} = case Result of + {error, _} -> Result; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime/internal/reports/formatter"/utf8>>, + function => <<"gleam_error_to_unified"/utf8>>, + line => 293}) + end, + case Assertion of + {eq, Got, Expected, Meta} -> + {Expected@1, Got@1} = showtime@internal@reports@compare:compare( + Expected, + Got + ), + {unified_error, + Meta, + <<"assert"/utf8>>, + <<"Assert equal"/utf8>>, + Expected@1, + Got@1, + none, + Stacktrace}; + + {not_eq, Got@2, Expected@2, Meta@1} -> + {unified_error, + Meta@1, + <<"assert"/utf8>>, + <<"Assert not equal"/utf8>>, + <<(showtime@internal@reports@styles:not_style( + <<"not "/utf8>> + ))/binary, + (gleam@string:inspect(Expected@2))/binary>>, + gleam@string:inspect(Got@2), + none, + Stacktrace}; + + {is_ok, Got@3, Meta@2} -> + {unified_error, + Meta@2, + <<"assert"/utf8>>, + <<"Assert is Ok"/utf8>>, + showtime@internal@reports@styles:expected_highlight( + <<"Ok(_)"/utf8>> + ), + showtime@internal@reports@styles:got_highlight( + gleam@string:inspect(Got@3) + ), + none, + Stacktrace}; + + {is_error, Got@4, Meta@3} -> + {unified_error, + Meta@3, + <<"assert"/utf8>>, + <<"Assert is Ok"/utf8>>, + showtime@internal@reports@styles:expected_highlight( + <<"Error(_)"/utf8>> + ), + showtime@internal@reports@styles:got_highlight( + gleam@string:inspect(Got@4) + ), + none, + Stacktrace}; + + {fail, Meta@4} -> + {unified_error, + Meta@4, + <<"assert"/utf8>>, + <<"Assert is Ok"/utf8>>, + showtime@internal@reports@styles:got_highlight( + <<"should.fail()"/utf8>> + ), + showtime@internal@reports@styles:got_highlight( + <<"N/A - test always expected to fail"/utf8>> + ), + none, + Stacktrace} + end + end. + +-spec format_reason(unified_error(), binary(), binary(), list(binary())) -> list(list(showtime@internal@reports@table:col())). +format_reason(Error, Module, Function, Output_buffer) -> + Meta@1 = case erlang:element(2, Error) of + {some, Meta} -> + {some, + [{align_right, + {styled_content, + showtime@internal@reports@styles:heading_style( + <<"Description"/utf8>> + )}, + 2}, + {separator, <<": "/utf8>>}, + {align_left, {content, erlang:element(2, Meta)}, 0}]}; + + none -> + none + end, + Stacktrace = begin + _pipe = erlang:element(8, Error), + gleam@list:map(_pipe, fun(Trace) -> case Trace of + {trace, Function@1, _, _} when Function@1 =:= <<""/utf8>> -> + <<"(anonymous)"/utf8>>; + + {trace_module, Module@1, Function@2, _, _} when Function@2 =:= <<""/utf8>> -> + <<<<Module@1/binary, "."/utf8>>/binary, + "(anonymous)"/utf8>>; + + {trace, Function@3, _, _} -> + Function@3; + + {trace_module, Module@2, Function@4, _, _} -> + <<<<Module@2/binary, "."/utf8>>/binary, + Function@4/binary>> + end end) + end, + Stacktrace_rows = case Stacktrace of + [] -> + []; + + [First | Rest] -> + First_row = {some, + [{align_right, + {styled_content, + showtime@internal@reports@styles:heading_style( + <<"Stacktrace"/utf8>> + )}, + 2}, + {separator, <<": "/utf8>>}, + {align_left, + {styled_content, + showtime@internal@reports@styles:stacktrace_style( + First + )}, + 0}]}, + Rest_rows = begin + _pipe@1 = Rest, + gleam@list:map( + _pipe@1, + fun(Row) -> + {some, + [{align_right, {content, <<""/utf8>>}, 2}, + {separator, <<" "/utf8>>}, + {align_left, + {styled_content, + showtime@internal@reports@styles:stacktrace_style( + Row + )}, + 0}]} + end + ) + end, + [First_row | Rest_rows] + end, + Output_rows = case begin + _pipe@2 = Output_buffer, + _pipe@3 = gleam@list:reverse(_pipe@2), + gleam@list:map( + _pipe@3, + fun(Row@1) -> gleam@string:trim_right(Row@1) end + ) + end of + [] -> + []; + + [First@1 | Rest@1] -> + First_row@1 = {some, + [{align_right, + {styled_content, + showtime@internal@reports@styles:heading_style( + <<"Output"/utf8>> + )}, + 2}, + {separator, <<": "/utf8>>}, + {align_left_overflow, + {styled_content, + showtime@internal@reports@styles:stacktrace_style( + First@1 + )}, + 0}]}, + Rest_rows@1 = begin + _pipe@4 = Rest@1, + gleam@list:map( + _pipe@4, + fun(Row@2) -> + {some, + [{align_right, {content, <<""/utf8>>}, 2}, + {separator, <<" "/utf8>>}, + {align_left_overflow, + {styled_content, + showtime@internal@reports@styles:stacktrace_style( + Row@2 + )}, + 0}]} + end + ) + end, + [First_row@1 | Rest_rows@1] + end, + Line@1 = begin + _pipe@5 = erlang:element(7, Error), + _pipe@6 = gleam@option:map( + _pipe@5, + fun(Line) -> <<":"/utf8, (gleam@int:to_string(Line))/binary>> end + ), + gleam@option:unwrap(_pipe@6, <<""/utf8>>) + end, + Arrow = <<(gleam@string:join( + gleam@list:repeat( + <<"-"/utf8>>, + (gleam@string:length(Module) + 1) + ((gleam@string:length( + Function + ) + + gleam@string:length(Line@1)) + div 2) + ), + <<""/utf8>> + ))/binary, + "⌄"/utf8>>, + Standard_table_rows = [{some, + [{align_right, + {styled_content, + showtime@internal@reports@styles:error_style( + <<"Failed"/utf8>> + )}, + 2}, + {separator, <<": "/utf8>>}, + {align_left, {content, Arrow}, 0}]}, + {some, + [{align_right, + {styled_content, + showtime@internal@reports@styles:heading_style( + <<"Test"/utf8>> + )}, + 2}, + {separator, <<": "/utf8>>}, + {align_left, + {styled_content, + <<<<Module/binary, "."/utf8>>/binary, + (showtime@internal@reports@styles:function_style( + <<Function/binary, Line@1/binary>> + ))/binary>>}, + 0}]}, + Meta@1, + {some, + [{align_right, + {styled_content, + showtime@internal@reports@styles:heading_style( + <<"Expected"/utf8>> + )}, + 2}, + {separator, <<": "/utf8>>}, + {align_left_overflow, + {styled_content, erlang:element(5, Error)}, + 0}]}, + {some, + [{align_right, + {styled_content, + showtime@internal@reports@styles:heading_style( + <<"Got"/utf8>> + )}, + 2}, + {separator, <<": "/utf8>>}, + {align_left_overflow, + {styled_content, erlang:element(6, Error)}, + 0}]}], + _pipe@7 = Standard_table_rows, + _pipe@8 = gleam@list:append(_pipe@7, Stacktrace_rows), + _pipe@9 = gleam@list:append(_pipe@8, Output_rows), + _pipe@10 = gleam@list:append( + _pipe@9, + [{some, + [{align_right, {content, <<""/utf8>>}, 0}, + {align_right, {content, <<""/utf8>>}, 0}, + {align_right, {content, <<""/utf8>>}, 0}]}] + ), + gleam@list:filter_map( + _pipe@10, + fun(Row@3) -> gleam@option:to_result(Row@3, nil) end + ). + +-spec create_test_report( + gleam@map:map_(binary(), gleam@map:map_(binary(), showtime@internal@common@test_suite:test_run())) +) -> {binary(), integer()}. +create_test_report(Test_results) -> + All_test_runs = begin + _pipe = Test_results, + _pipe@1 = gleam@map:values(_pipe), + gleam@list:flat_map(_pipe@1, fun gleam@map:values/1) + end, + Failed_test_runs = begin + _pipe@2 = Test_results, + _pipe@3 = gleam@map:to_list(_pipe@2), + gleam@list:flat_map( + _pipe@3, + fun(Entry) -> + {Module_name, Test_module_results} = Entry, + _pipe@4 = Test_module_results, + _pipe@5 = gleam@map:values(_pipe@4), + gleam@list:filter_map(_pipe@5, fun(Test_run) -> case Test_run of + {completed_test_run, _, _, Result} -> + case Result of + {error, _} -> + {ok, + {module_and_test_run, + Module_name, + Test_run}}; + + {ok, {ignored, _}} -> + {error, nil}; + + {ok, _} -> + {error, nil} + end; + + _ -> + _pipe@6 = Test_run, + gleam@io:debug(_pipe@6), + {error, nil} + end end) + end + ) + end, + Ignored_test_runs = begin + _pipe@7 = Test_results, + _pipe@8 = gleam@map:to_list(_pipe@7), + gleam@list:flat_map( + _pipe@8, + fun(Entry@1) -> + {Module_name@1, Test_module_results@1} = Entry@1, + _pipe@9 = Test_module_results@1, + _pipe@10 = gleam@map:values(_pipe@9), + gleam@list:filter_map( + _pipe@10, + fun(Test_run@1) -> case Test_run@1 of + {completed_test_run, Test_function, _, Result@1} -> + case Result@1 of + {ok, {ignored, Reason}} -> + {ok, + {<<<<Module_name@1/binary, + "."/utf8>>/binary, + (erlang:element( + 2, + Test_function + ))/binary>>, + Reason}}; + + _ -> + {error, nil} + end; + + _ -> + {error, nil} + end end + ) + end + ) + end, + Failed_tests_report = begin + _pipe@11 = Failed_test_runs, + _pipe@12 = gleam@list:filter_map( + _pipe@11, + fun(Module_and_test_run) -> + case erlang:element(3, Module_and_test_run) of + {completed_test_run, Test_function@1, _, Result@2} -> + case Result@2 of + {error, Exception} -> + case erlang:element(3, Exception) of + {assert_equal, Reason_details} -> + {ok, + format_reason( + erlang_error_to_unified( + Reason_details, + {glee_unit_assert_equal, + <<"Assert equal"/utf8>>}, + erlang:element( + 2, + erlang:element( + 4, + Exception + ) + ) + ), + erlang:element( + 2, + Module_and_test_run + ), + erlang:element( + 2, + Test_function@1 + ), + erlang:element(5, Exception) + )}; + + {assert_not_equal, Reason_details@1} -> + {ok, + format_reason( + erlang_error_to_unified( + Reason_details@1, + {glee_unit_assert_not_equal, + <<"Assert not equal"/utf8>>}, + erlang:element( + 2, + erlang:element( + 4, + Exception + ) + ) + ), + erlang:element( + 2, + Module_and_test_run + ), + erlang:element( + 2, + Test_function@1 + ), + erlang:element(5, Exception) + )}; + + {assert_match, Reason_details@2} -> + {ok, + format_reason( + erlang_error_to_unified( + Reason_details@2, + {glee_unit_assert_match, + <<"Assert match"/utf8>>}, + erlang:element( + 2, + erlang:element( + 4, + Exception + ) + ) + ), + erlang:element( + 2, + Module_and_test_run + ), + erlang:element( + 2, + Test_function@1 + ), + erlang:element(5, Exception) + )}; + + {gleam_error, Reason@1} -> + {ok, + format_reason( + gleam_error_to_unified( + Reason@1, + erlang:element( + 2, + erlang:element( + 4, + Exception + ) + ) + ), + erlang:element( + 2, + Module_and_test_run + ), + erlang:element( + 2, + Test_function@1 + ), + erlang:element(5, Exception) + )}; + + {gleam_assert, Value, Line_no} -> + {ok, + format_reason( + {unified_error, + none, + <<"gleam assert"/utf8>>, + <<"Assert failed"/utf8>>, + <<"Patterns should match"/utf8>>, + showtime@internal@reports@styles:error_style( + gleam@string:inspect( + Value + ) + ), + {some, Line_no}, + erlang:element( + 2, + erlang:element( + 4, + Exception + ) + )}, + erlang:element( + 2, + Module_and_test_run + ), + erlang:element( + 2, + Test_function@1 + ), + erlang:element(5, Exception) + )}; + + {generic_exception, Value@1} -> + {ok, + format_reason( + {unified_error, + none, + <<"generic exception"/utf8>>, + <<"Test function threw an exception"/utf8>>, + <<"Exception in test function"/utf8>>, + showtime@internal@reports@styles:error_style( + gleam@string:inspect( + Value@1 + ) + ), + none, + erlang:element( + 2, + erlang:element( + 4, + Exception + ) + )}, + erlang:element( + 2, + Module_and_test_run + ), + erlang:element( + 2, + Test_function@1 + ), + erlang:element(5, Exception) + )}; + + Other -> + gleam@io:println( + <<"Other: "/utf8, + (gleam@string:inspect(Other))/binary>> + ), + erlang:error(#{gleam_error => panic, + message => <<"panic expression evaluated"/utf8>>, + module => <<"showtime/internal/reports/formatter"/utf8>>, + function => <<"create_test_report"/utf8>>, + line => 178}), + {error, nil} + end; + + _ -> + {error, nil} + end; + + _ -> + {error, nil} + end + end + ), + gleam@list:fold( + _pipe@12, + [], + fun(Rows, Test_rows) -> gleam@list:append(Rows, Test_rows) end + ) + end, + All_test_execution_time_reports = begin + _pipe@13 = All_test_runs, + gleam@list:filter_map(_pipe@13, fun(Test_run@2) -> case Test_run@2 of + {completed_test_run, Test_function@2, Total_time, _} -> + {ok, + <<<<<<(erlang:element(2, Test_function@2))/binary, + ": "/utf8>>/binary, + (gleam@int:to_string(Total_time))/binary>>/binary, + " ms"/utf8>>}; + + _ -> + {error, nil} + end end) + end, + _ = begin + _pipe@14 = All_test_execution_time_reports, + gleam@string:join(_pipe@14, <<"\n"/utf8>>) + end, + All_tests_count = begin + _pipe@15 = All_test_runs, + gleam@list:length(_pipe@15) + end, + Ignored_tests_count = begin + _pipe@16 = Ignored_test_runs, + gleam@list:length(_pipe@16) + end, + Failed_tests_count = begin + _pipe@17 = Failed_test_runs, + gleam@list:length(_pipe@17) + end, + Passed = showtime@internal@reports@styles:passed_style( + <<(gleam@int:to_string( + (All_tests_count - Failed_tests_count) - Ignored_tests_count + ))/binary, + " passed"/utf8>> + ), + Failed = showtime@internal@reports@styles:failed_style( + <<(gleam@int:to_string(Failed_tests_count))/binary, " failed"/utf8>> + ), + Ignored = case Ignored_tests_count of + 0 -> + <<""/utf8>>; + + _ -> + <<", "/utf8, + (showtime@internal@reports@styles:ignored_style( + <<(gleam@int:to_string(Ignored_tests_count))/binary, + " ignored"/utf8>> + ))/binary>> + end, + Failed_tests_table = begin + _pipe@18 = {table, none, Failed_tests_report}, + _pipe@19 = showtime@internal@reports@table:align_table(_pipe@18), + showtime@internal@reports@table:to_string(_pipe@19) + end, + Test_report = <<<<<<<<<<<<"\n"/utf8, Failed_tests_table/binary>>/binary, + "\n"/utf8>>/binary, + Passed/binary>>/binary, + ", "/utf8>>/binary, + Failed/binary>>/binary, + Ignored/binary>>, + {Test_report, Failed_tests_count}. diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@reports@styles.erl b/aoc2023/build/packages/adglent/src/showtime@internal@reports@styles.erl new file mode 100644 index 0000000..ec6230c --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime@internal@reports@styles.erl @@ -0,0 +1,93 @@ +-module(showtime@internal@reports@styles). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([not_style/1, module_style/1, heading_style/1, stacktrace_style/1, failed_style/1, error_style/1, got_highlight/1, passed_style/1, expected_highlight/1, ignored_style/1, function_style/1, strip_style/1]). + +-spec not_style(binary()) -> binary(). +not_style(Text) -> + gleam_community@ansi:bold(Text). + +-spec module_style(binary()) -> binary(). +module_style(Text) -> + gleam_community@ansi:cyan(Text). + +-spec heading_style(binary()) -> binary(). +heading_style(Text) -> + gleam_community@ansi:cyan(Text). + +-spec stacktrace_style(binary()) -> binary(). +stacktrace_style(Text) -> + Text. + +-spec bold_red(binary()) -> binary(). +bold_red(Text) -> + gleam_community@ansi:bold(gleam_community@ansi:red(Text)). + +-spec failed_style(binary()) -> binary(). +failed_style(Text) -> + bold_red(Text). + +-spec error_style(binary()) -> binary(). +error_style(Text) -> + bold_red(Text). + +-spec got_highlight(binary()) -> binary(). +got_highlight(Text) -> + bold_red(Text). + +-spec bold_green(binary()) -> binary(). +bold_green(Text) -> + gleam_community@ansi:bold(gleam_community@ansi:green(Text)). + +-spec passed_style(binary()) -> binary(). +passed_style(Text) -> + bold_green(Text). + +-spec expected_highlight(binary()) -> binary(). +expected_highlight(Text) -> + bold_green(Text). + +-spec bold_yellow(binary()) -> binary(). +bold_yellow(Text) -> + gleam_community@ansi:bold(gleam_community@ansi:yellow(Text)). + +-spec ignored_style(binary()) -> binary(). +ignored_style(Text) -> + bold_yellow(Text). + +-spec bold_cyan(binary()) -> binary(). +bold_cyan(Text) -> + gleam_community@ansi:bold(gleam_community@ansi:cyan(Text)). + +-spec function_style(binary()) -> binary(). +function_style(Text) -> + bold_cyan(Text). + +-spec strip_style(binary()) -> binary(). +strip_style(Text) -> + {New_text, _} = begin + _pipe = Text, + _pipe@1 = gleam@string:to_graphemes(_pipe), + gleam@list:fold( + _pipe@1, + {<<""/utf8>>, false}, + fun(Acc, Char) -> + {Str, Removing} = Acc, + Bit_char = gleam_stdlib:identity(Char), + case {Bit_char, Removing} of + {<<16#1b>>, _} -> + {Str, true}; + + {<<16#6d>>, true} -> + {Str, false}; + + {_, true} -> + {Str, true}; + + {_, false} -> + {<<Str/binary, Char/binary>>, false} + end + end + ) + end, + New_text. diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@reports@table.erl b/aoc2023/build/packages/adglent/src/showtime@internal@reports@table.erl new file mode 100644 index 0000000..35dbba3 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime@internal@reports@table.erl @@ -0,0 +1,229 @@ +-module(showtime@internal@reports@table). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([to_string/1, align_table/1]). +-export_type([content/0, col/0, table/0]). + +-type content() :: {content, binary()} | {styled_content, binary()}. + +-type col() :: {align_right, content(), integer()} | + {align_left, content(), integer()} | + {align_right_overflow, content(), integer()} | + {align_left_overflow, content(), integer()} | + {separator, binary()} | + {aligned, binary()}. + +-type table() :: {table, gleam@option:option(binary()), list(list(col()))}. + +-spec to_string(table()) -> binary(). +to_string(Table) -> + Rows = begin + _pipe = erlang:element(3, Table), + _pipe@3 = gleam@list:map(_pipe, fun(Row) -> _pipe@1 = Row, + _pipe@2 = gleam@list:filter_map(_pipe@1, fun(Col) -> case Col of + {separator, Char} -> + {ok, Char}; + + {aligned, Content} -> + {ok, Content}; + + _ -> + {error, nil} + end end), + gleam@string:join(_pipe@2, <<""/utf8>>) end), + gleam@string:join(_pipe@3, <<"\n"/utf8>>) + end, + Header@1 = begin + _pipe@4 = erlang:element(2, Table), + _pipe@5 = gleam@option:map( + _pipe@4, + fun(Header) -> <<Header/binary, "\n"/utf8>> end + ), + gleam@option:unwrap(_pipe@5, <<""/utf8>>) + end, + <<Header@1/binary, Rows/binary>>. + +-spec pad_left(binary(), integer(), binary()) -> binary(). +pad_left(Str, Num, Char) -> + Padding = begin + _pipe = gleam@list:repeat(Char, Num), + gleam@string:join(_pipe, <<""/utf8>>) + end, + <<Padding/binary, Str/binary>>. + +-spec pad_right(binary(), integer(), binary()) -> binary(). +pad_right(Str, Num, Char) -> + Padding = begin + _pipe = gleam@list:repeat(Char, Num), + gleam@string:join(_pipe, <<""/utf8>>) + end, + <<Str/binary, Padding/binary>>. + +-spec align_table(table()) -> table(). +align_table(Table) -> + Cols = begin + _pipe = erlang:element(3, Table), + gleam@list:transpose(_pipe) + end, + Col_width = begin + _pipe@1 = Cols, + gleam@list:map(_pipe@1, fun(Col) -> _pipe@2 = Col, + _pipe@3 = gleam@list:map( + _pipe@2, + fun(Content) -> case Content of + {align_right, {content, Unstyled}, _} -> + Unstyled; + + {align_right, {styled_content, Styled}, _} -> + showtime@internal@reports@styles:strip_style( + Styled + ); + + {align_left, {content, Unstyled@1}, _} -> + Unstyled@1; + + {align_left, {styled_content, Styled@1}, _} -> + showtime@internal@reports@styles:strip_style( + Styled@1 + ); + + {align_left_overflow, _, _} -> + <<""/utf8>>; + + {align_right_overflow, _, _} -> + <<""/utf8>>; + + {separator, Char} -> + Char; + + {aligned, Content@1} -> + Content@1 + end end + ), + gleam@list:fold( + _pipe@3, + 0, + fun(Max, Str) -> + gleam@int:max(Max, gleam@string:length(Str)) + end + ) end) + end, + Aligned_col = begin + _pipe@4 = Cols, + _pipe@5 = gleam@list:zip(_pipe@4, Col_width), + gleam@list:map( + _pipe@5, + fun(Col_and_width) -> + {Col@1, Width} = Col_and_width, + _pipe@6 = Col@1, + gleam@list:map(_pipe@6, fun(Content@2) -> case Content@2 of + {align_right, {content, Unstyled@2}, Margin} -> + {aligned, + pad_left( + Unstyled@2, + (Width + Margin) - gleam@string:length( + Unstyled@2 + ), + <<" "/utf8>> + )}; + + {align_right, {styled_content, Styled@2}, Margin@1} -> + {aligned, + pad_left( + Styled@2, + (Width + Margin@1) - gleam@string:length( + showtime@internal@reports@styles:strip_style( + Styled@2 + ) + ), + <<" "/utf8>> + )}; + + {align_right_overflow, + {content, Unstyled@3}, + Margin@2} -> + {aligned, + pad_left( + Unstyled@3, + (Width + Margin@2) - gleam@string:length( + Unstyled@3 + ), + <<" "/utf8>> + )}; + + {align_right_overflow, + {styled_content, Styled@3}, + Margin@3} -> + {aligned, + pad_left( + Styled@3, + (Width + Margin@3) - gleam@string:length( + showtime@internal@reports@styles:strip_style( + Styled@3 + ) + ), + <<" "/utf8>> + )}; + + {align_left, {content, Unstyled@4}, Margin@4} -> + {aligned, + pad_right( + Unstyled@4, + (Width + Margin@4) - gleam@string:length( + Unstyled@4 + ), + <<" "/utf8>> + )}; + + {align_left, {styled_content, Styled@4}, Margin@5} -> + {aligned, + pad_right( + Styled@4, + (Width + Margin@5) - gleam@string:length( + showtime@internal@reports@styles:strip_style( + Styled@4 + ) + ), + <<" "/utf8>> + )}; + + {align_left_overflow, + {content, Unstyled@5}, + Margin@6} -> + {aligned, + pad_right( + Unstyled@5, + (Width + Margin@6) - gleam@string:length( + Unstyled@5 + ), + <<" "/utf8>> + )}; + + {align_left_overflow, + {styled_content, Styled@5}, + Margin@7} -> + {aligned, + pad_right( + Styled@5, + (Width + Margin@7) - gleam@string:length( + showtime@internal@reports@styles:strip_style( + Styled@5 + ) + ), + <<" "/utf8>> + )}; + + {separator, Char@1} -> + {separator, Char@1}; + + {aligned, Content@3} -> + {aligned, Content@3} + end end) + end + ) + end, + Aligned_rows = begin + _pipe@7 = Aligned_col, + gleam@list:transpose(_pipe@7) + end, + erlang:setelement(3, Table, Aligned_rows). diff --git a/aoc2023/build/packages/adglent/src/showtime@tests@meta.erl b/aoc2023/build/packages/adglent/src/showtime@tests@meta.erl new file mode 100644 index 0000000..c975467 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime@tests@meta.erl @@ -0,0 +1,8 @@ +-module(showtime@tests@meta). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export_type([meta/0]). + +-type meta() :: {meta, binary(), list(binary())}. + + diff --git a/aoc2023/build/packages/adglent/src/showtime@tests@should.erl b/aoc2023/build/packages/adglent/src/showtime@tests@should.erl new file mode 100644 index 0000000..29906b4 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime@tests@should.erl @@ -0,0 +1,143 @@ +-module(showtime@tests@should). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([evaluate/1, equal/2, equal_meta/3, not_equal/2, not_equal_meta/3, be_ok/1, be_ok_meta/2, be_error/1, be_error_meta/2, fail/0, fail_meta/1, be_true/1, be_true_meta/2, be_false/1, be_false_meta/2]). +-export_type([assertion/2]). + +-type assertion(MXP, MXQ) :: {eq, + MXP, + MXP, + gleam@option:option(showtime@tests@meta:meta())} | + {not_eq, MXP, MXP, gleam@option:option(showtime@tests@meta:meta())} | + {is_ok, + {ok, MXP} | {error, MXQ}, + gleam@option:option(showtime@tests@meta:meta())} | + {is_error, + {ok, MXP} | {error, MXQ}, + gleam@option:option(showtime@tests@meta:meta())} | + {fail, gleam@option:option(showtime@tests@meta:meta())}. + +-spec evaluate(assertion(any(), any())) -> nil. +evaluate(Assertion) -> + case Assertion of + {eq, A, B, _} -> + case A =:= B of + true -> + nil; + + false -> + showtime_ffi:gleam_error({error, Assertion}) + end; + + {not_eq, A@1, B@1, _} -> + case A@1 /= B@1 of + true -> + nil; + + false -> + showtime_ffi:gleam_error({error, Assertion}) + end; + + {is_ok, A@2, _} -> + case A@2 of + {ok, _} -> + nil; + + {error, _} -> + showtime_ffi:gleam_error({error, Assertion}) + end; + + {is_error, A@3, _} -> + case A@3 of + {error, _} -> + nil; + + {ok, _} -> + showtime_ffi:gleam_error({error, Assertion}) + end; + + {fail, _} -> + showtime_ffi:gleam_error({error, Assertion}) + end. + +-spec equal(MXR, MXR) -> nil. +equal(A, B) -> + evaluate({eq, A, B, none}). + +-spec equal_meta(MXT, MXT, showtime@tests@meta:meta()) -> nil. +equal_meta(A, B, Meta) -> + evaluate({eq, A, B, {some, Meta}}). + +-spec not_equal(MXV, MXV) -> nil. +not_equal(A, B) -> + evaluate({not_eq, A, B, none}). + +-spec not_equal_meta(MXX, MXX, showtime@tests@meta:meta()) -> nil. +not_equal_meta(A, B, Meta) -> + evaluate({not_eq, A, B, {some, Meta}}). + +-spec be_ok({ok, MXZ} | {error, any()}) -> MXZ. +be_ok(A) -> + evaluate({is_ok, A, none}), + {ok, Value} = case A of + {ok, _} -> A; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime/tests/should"/utf8>>, + function => <<"be_ok"/utf8>>, + line => 30}) + end, + Value. + +-spec be_ok_meta({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil. +be_ok_meta(A, Meta) -> + evaluate({is_ok, A, {some, Meta}}). + +-spec be_error({ok, any()} | {error, MYK}) -> MYK. +be_error(A) -> + evaluate({is_error, A, none}), + {error, Value} = case A of + {error, _} -> A; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime/tests/should"/utf8>>, + function => <<"be_error"/utf8>>, + line => 40}) + end, + Value. + +-spec be_error_meta({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil. +be_error_meta(A, Meta) -> + evaluate({is_error, A, {some, Meta}}). + +-spec fail() -> nil. +fail() -> + evaluate({fail, none}). + +-spec fail_meta(showtime@tests@meta:meta()) -> nil. +fail_meta(Meta) -> + evaluate({fail, {some, Meta}}). + +-spec be_true(boolean()) -> nil. +be_true(A) -> + _pipe = A, + equal(_pipe, true). + +-spec be_true_meta(boolean(), showtime@tests@meta:meta()) -> nil. +be_true_meta(A, Meta) -> + _pipe = A, + equal_meta(_pipe, true, Meta). + +-spec be_false(boolean()) -> nil. +be_false(A) -> + _pipe = A, + equal(_pipe, false). + +-spec be_false_meta(boolean(), showtime@tests@meta:meta()) -> nil. +be_false_meta(A, Meta) -> + _pipe = A, + equal_meta(_pipe, false, Meta). diff --git a/aoc2023/build/packages/adglent/src/showtime@tests@test.erl b/aoc2023/build/packages/adglent/src/showtime@tests@test.erl new file mode 100644 index 0000000..2f23b9f --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime@tests@test.erl @@ -0,0 +1,57 @@ +-module(showtime@tests@test). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([test/2, equal/3, not_equal/3, with_meta/2, be_ok/2, be_error/2, fail/1, be_true/2, be_false/2]). +-export_type([test/0, meta_should/1]). + +-type test() :: {test, showtime@tests@meta:meta(), fun(() -> nil)}. + +-type meta_should(NDO) :: {meta_should, + fun((NDO, NDO) -> nil), + fun((NDO, NDO) -> nil)}. + +-spec test(showtime@tests@meta:meta(), fun((showtime@tests@meta:meta()) -> nil)) -> test(). +test(Meta, Test_function) -> + {test, Meta, fun() -> Test_function(Meta) end}. + +-spec equal(NDT, NDT, showtime@tests@meta:meta()) -> nil. +equal(A, B, Meta) -> + gleam@io:debug(A), + gleam@io:debug(B), + showtime@tests@should:equal_meta(A, B, Meta). + +-spec not_equal(NDV, NDV, showtime@tests@meta:meta()) -> nil. +not_equal(A, B, Meta) -> + showtime@tests@should:equal_meta(A, B, Meta). + +-spec with_meta(showtime@tests@meta:meta(), fun((meta_should(any())) -> nil)) -> test(). +with_meta(Meta, Test_function) -> + {test, + Meta, + fun() -> + Test_function( + {meta_should, + fun(A, B) -> equal(A, B, Meta) end, + fun(A@1, B@1) -> not_equal(A@1, B@1, Meta) end} + ) + end}. + +-spec be_ok({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil. +be_ok(A, Meta) -> + showtime@tests@should:be_ok_meta(A, Meta). + +-spec be_error({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil. +be_error(A, Meta) -> + showtime@tests@should:be_error_meta(A, Meta). + +-spec fail(showtime@tests@meta:meta()) -> nil. +fail(Meta) -> + showtime@tests@should:fail_meta(Meta). + +-spec be_true(boolean(), showtime@tests@meta:meta()) -> nil. +be_true(A, Meta) -> + showtime@tests@should:be_true_meta(A, Meta). + +-spec be_false(boolean(), showtime@tests@meta:meta()) -> nil. +be_false(A, Meta) -> + showtime@tests@should:be_false_meta(A, Meta). diff --git a/aoc2023/build/packages/adglent/src/showtime_ffi.erl b/aoc2023/build/packages/adglent/src/showtime_ffi.erl new file mode 100644 index 0000000..3259623 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime_ffi.erl @@ -0,0 +1,187 @@ +-module(showtime_ffi). + +-export([run_test/4, functions/0, capture_output/1, gleam_error/1]). + +gleam_error(Value) -> + erlang:error(#{ + gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => Value, + module => <<"this/is/not/used"/utf8>>, + function => <<"gleam_error"/utf8>>, + % Not used + line => 0 + }). + +start_output_capture(Capture) -> + OldGroupLeader = group_leader(), + CapturePid = spawn(showtime_ffi, capture_output, [{[], {OldGroupLeader, Capture}}]), + group_leader(CapturePid, self()), + {CapturePid, OldGroupLeader}. + +stop_output_capture({CapturePid, OldGroupLeader}) -> + group_leader(OldGroupLeader, self()), + CapturePid ! {capture_done, self()}, + receive + Buffer -> + Buffer + end. + +capture_output({Buffer, {OldGroupLeader, Capture}}) -> + receive + {io_request, From, ReplyAs, {put_chars, unicode, BitString}} -> + case Capture of + yes -> + From ! {io_reply, ReplyAs, ok}, + capture_output({[BitString | Buffer], {OldGroupLeader, Capture}}); + mixed -> + OldGroupLeader ! {io_request, From, ReplyAs, {put_chars, unicode, BitString}}, + capture_output({[BitString | Buffer], {OldGroupLeader, Capture}}); + no -> + OldGroupLeader ! {io_request, From, ReplyAs, {put_chars, unicode, BitString}}, + capture_output({Buffer, {OldGroupLeader, Capture}}) + end; + {capture_done, SenderPid} -> + SenderPid ! Buffer; + OtherMessage -> + OldGroupLeader ! OtherMessage, + capture_output({Buffer, {OldGroupLeader, Capture}}) + end. + +run_test(Module, Function, IgnoreTags, Capture) -> + OutputCapture = start_output_capture(Capture), + try + Result = apply(Module, Function, []), + {ResultType, FinalResult} = + case Result of + {test, {meta, _Description, Tags}, TestFun} -> + case + lists:any( + fun(Tag) -> + lists:any(fun(IgnoreTag) -> IgnoreTag == Tag end, IgnoreTags) + end, + Tags + ) + of + true -> + {ignored, ignore}; + false -> + {test_function_return, TestFun()} + end; + DirectResult -> + {test_function_return, DirectResult} + end, + OutputCaptureBuffer = stop_output_capture(OutputCapture), + case ResultType of + ignored -> {ok, {ResultType, FinalResult}}; + _ -> {ok, {ResultType, FinalResult, OutputCaptureBuffer}} + end + catch + Class:Reason:Stacktrace -> + GleamReason = + case Reason of + {Assertion, ReasonList} -> + ErlangReasonList = + lists:map( + fun(ReasonDetail) -> + case ReasonDetail of + {line, LineNo} -> + {reason_line, LineNo}; + {expression, List} -> + {expression, list_to_binary(List)}; + {module, ModuleAtom} -> + {module, atom_to_binary(ModuleAtom)}; + {pattern, Pattern} -> + {pattern, list_to_binary(Pattern)}; + Other -> + Other + end + end, + ReasonList + ), + GleamAssertionType = + case Assertion of + assertEqual -> + assert_equal; + assertNotEqual -> + assert_not_equal; + assertMatch -> + assert_match; + OtherAssertionType -> + OtherAssertionType + end, + {GleamAssertionType, ErlangReasonList}; + #{ + function := GleamFunction, + gleam_error := GleamError, + line := Line, + message := Message, + module := GleamModule, + value := Value + } -> + case Value of + {error, {OkValue, _, _, _}} when OkValue == not_eq; OkValue == eq -> + {gleam_error, + {GleamError, GleamModule, GleamFunction, Line, Message, Value}}; + {error, {OkValue, _, _}} when OkValue == is_ok; OkValue == is_error -> + {gleam_error, + {GleamError, GleamModule, GleamFunction, Line, Message, Value}}; + {error, {OkValue, _}} when OkValue == fail -> + {gleam_error, + {GleamError, GleamModule, GleamFunction, Line, Message, Value}}; + _ -> + {gleam_assert, Value, Line} + end; + OtherReason -> + {generic_exception, OtherReason} + end, + GleamClass = + case Class of + error -> + erlang_error; + Other -> + Other + end, + GleamTraceList = + lists:map( + fun(Trace) -> + case Trace of + {ModuleName, FunctionName, Arity, ExtraInfoList} -> + {trace_module, atom_to_binary(ModuleName), + atom_to_binary(FunctionName), map_arity(Arity), + map_extra_info_list(ExtraInfoList)}; + {FunctionName, Arity, ExtraInfoList} -> + {trace, atom_to_binary(FunctionName), map_arity(Arity), + map_extra_info_list(ExtraInfoList)} + end + end, + Stacktrace + ), + OutputCaptureBufferCatch = stop_output_capture(OutputCapture), + {error, + {erlang_exception, GleamClass, GleamReason, {trace_list, GleamTraceList}, + OutputCaptureBufferCatch}} + end. + +map_extra_info_list(ExtraInfoList) -> + lists:map( + fun(ExtraInfo) -> + case ExtraInfo of + {file, FileNameList} -> {file, list_to_binary(FileNameList)}; + Other -> Other + end + end, + ExtraInfoList + ). + +map_arity(Arity) -> + if + is_list(Arity) -> + {arg_list, Arity}; + is_integer(Arity) -> + {num, Arity} + end. + +functions() -> + Funs = module_info(exports), + Funs. diff --git a/aoc2023/build/packages/gap/LICENSE b/aoc2023/build/packages/gap/LICENSE new file mode 100644 index 0000000..d1cec9b --- /dev/null +++ b/aoc2023/build/packages/gap/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2023 John Björk + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.
\ No newline at end of file diff --git a/aoc2023/build/packages/gap/README.md b/aoc2023/build/packages/gap/README.md new file mode 100644 index 0000000..3e02686 --- /dev/null +++ b/aoc2023/build/packages/gap/README.md @@ -0,0 +1,202 @@ +# gap + +[](https://hex.pm/packages/gap) +[](https://hexdocs.pm/gap/) + +A Gleam library for comparing strings/lists and producing a textual (styled) representation of the differences. + +A typical styled output from the comparison can look like this: + +<img src="https://github.com/JohnBjrk/gap/blob/main/static/example_diff_lucy.png?raw=true" alt="Image of two strings with highlighted differences" width="400vw"> + +## Installation + +If available on Hex this package can be added to your Gleam project: + +```sh +gleam add gap +``` + +Documentation can be found at <https://hexdocs.pm/gap>. + +## Usage + +# Introduction + +Gap implements string/list comparison by finding the longest common subsequence. The result of the comparison are two sequences +(one for each of the compared strings/lists) consisting of subsequences that are annotated as matching or non-matching. + +For example comparing the strings in the example above will look as follows: + +```gleam +let comparison = +compare_strings( + "lucy in the sky with diamonds", + "lucy is the shy with diagrams", +) +|> io.debug() +// StringComparison( +// [ +// Match(["l", "u", "c", "y", " ", "i"]), +// NoMatch(["n"]), +// Match([" ", "t", "h", "e", " ", "s"]), +// NoMatch(["k"]), +// Match(["y", " ", "w", "i", "t", "h", " ", "d", "i", "a", "m"]), +// NoMatch(["o", "n", "d"]), +// Match(["s"]), +// ], +// [ +// Match(["l", "u", "c", "y", " ", "i"]), +// NoMatch(["s", " "]), +// Match([" ", "t", "h", "e", " ", "s"]), +// NoMatch(["h"]), +// Match(["y", " ", "w", "i", "t", "h", " ", "d", "i"]), +// NoMatch(["a", "g", "r"]), +// Match(["a", "m", "s"]), +// ], +// ) +``` + +## Styling + +This is useful information but a bit overwhelming to look at (specially for longer string) so the library +has some built in functions to display the differences using colors instead. + +Using the same example again we can style the result and print it to the console + +```gleam +let comparison = +compare_strings( + "lucy in the sky with diamonds", + "lucy is the shy with diagrams", +) +|> to_styled() +io.println(comparison.first) +io.println(comparison.second) +``` + +This will give us something similar to the output above. + +## Comparing list + +It is also possible to compare lists with elements of arbitrary types. + +```gleam +pub type Warning { + Please + Mind + The(what: String) +} + +compare_lists([Mind, The("Gap")], [Please, Mind, The("What")]) +|> io.debug() +// ListComparison( +// [Match([Mind]), NoMatch([The("Gap")])], +// [NoMatch([Please]), Match([Mind]), NoMatch([The("What")])], +// ) +``` + +## Customize styling + +The visual representation of the comparison can be customized. To do this use a `Styling` created from +the comparison that should be styled. This example uses [gleam_community/ansi](https://hexdocs.pm/gleam_community_ansi/index.html) +to highlight the non-matches in different colors. + +```gleam +let comparison = +compare_strings( + "Strings are made of smaller things", + "Things are maybe smaller string", +) +|> from_comparison() +|> highlight( + fn(first) { ansi.cyan(first) }, + fn(second) { ansi.magenta(second) }, + fn(matching) { matching }, +) +|> to_styled_comparison() +io.println(comparison.first) +io.println(comparison.second) +``` + +This will output something similar to this + +<img src="https://github.com/JohnBjrk/gap/blob/main/static/example_diff_things.png?raw=true" alt="Image of two strings with highlighted differences" width="400vw"> + +### Serialization + +Furthermore it is also possible to customize the styling by changing the way that the comparison is serialized. An easy way to do +this is to use the utility function `mk_generic_serializer` which creates a serializer which some specific separator and a hook +for surrounding the result with some content. Here is a somewhat contrived example + +```gleam +let comparison = +compare_lists(["one", "two", "three"], ["two", "two", "tree"]) +|> from_comparison() +|> highlight( + fn(first) { first <> " was not found in other" }, + fn(second) { second <> " was not found in other" }, +) +|> serialize(mk_generic_serializer( + ", and ", + fn(result) { "Comparing the lists gave the following result: " <> result }, +)) +|> to_styled_comparison() +io.println(comparison.first) +io.println(comparison.second) +// Comparing the lists gave the following result: "one" was not found in other, and "two" was found in other, and "three" was not found in other +// Comparing the lists gave the following result: "two" was not found in other, and "two" was found in other, and "tree" was not found in other +``` + +### Custom serialization + +Serializers can of course have a custom implementation. The following example utilizes this together with custom highlighters, +creating a patch-like output (this is not exactly the same as patch-format since that shows the changes in relation to the original - to do +that both lists of matching/non-matching lines would need to be processed together) + +```gleam +let comparison = +compare_lists( + [ + "pub type Gap = List(EmptyString)", "", "pub type Traveler {", + " OnTrain", " OverGap(gap: Gap)", " OnPlatform", "}", + ], + [ + "pub type Traveler {", " OnTrain", " OverGap(gap: String)", + " OnPlatform", "}", + ], +) +|> from_comparison() +|> highlight( + fn(first) { "+" <> first }, + fn(second) { "-" <> second }, + fn(matching) { " " <> matching }, +) +|> serialize(fn(part) { + case part { + Part(acc, lines, highlight) -> + acc <> { + lines + |> list.map(fn(line) { highlight(line) }) + |> string.join("\n") + } <> "\n" + All(result) -> result + } +}) +|> to_styled_comparison() +io.println(comparison.first) +io.println(comparison.second) +// +pub type Gap = List(EmptyString) +// + +// pub type Traveler { +// OnTrain +// + OverGap(gap: Gap) +// OnPlatform +// } +// +// pub type Traveler { +// OnTrain +// - OverGap(gap: String) +// OnPlatform +// } +``` diff --git a/aoc2023/build/packages/gap/gleam.toml b/aoc2023/build/packages/gap/gleam.toml new file mode 100644 index 0000000..ec35329 --- /dev/null +++ b/aoc2023/build/packages/gap/gleam.toml @@ -0,0 +1,18 @@ +name = "gap" +gleam = ">= 0.32.2" +version = "1.0.1" +description = "A Gleam library for comparing strings/lists and producing a textual (styled) representation of the differences." + +# Fill out these fields if you intend to generate HTML documentation or publish +# your project to the Hex package manager. +# +licences = ["Apache-2.0"] +repository = { type = "github", user = "JohnBjrk", repo = "gap" } +# links = [{ title = "Website", href = "https://gleam.run" }] + +[dependencies] +gleam_stdlib = "~> 0.32" +gleam_community_ansi = "~> 1.2" + +[dev-dependencies] +gleeunit = "~> 1.0" diff --git a/aoc2023/build/packages/gap/include/gap@comparison_ListComparison.hrl b/aoc2023/build/packages/gap/include/gap@comparison_ListComparison.hrl new file mode 100644 index 0000000..5e4b20d --- /dev/null +++ b/aoc2023/build/packages/gap/include/gap@comparison_ListComparison.hrl @@ -0,0 +1,4 @@ +-record(list_comparison, { + first :: list(gap@comparison:match(list(any()))), + second :: list(gap@comparison:match(list(any()))) +}). diff --git a/aoc2023/build/packages/gap/include/gap@comparison_Match.hrl b/aoc2023/build/packages/gap/include/gap@comparison_Match.hrl new file mode 100644 index 0000000..f1225dd --- /dev/null +++ b/aoc2023/build/packages/gap/include/gap@comparison_Match.hrl @@ -0,0 +1 @@ +-record(match, {item :: any()}). diff --git a/aoc2023/build/packages/gap/include/gap@comparison_NoMatch.hrl b/aoc2023/build/packages/gap/include/gap@comparison_NoMatch.hrl new file mode 100644 index 0000000..742783b --- /dev/null +++ b/aoc2023/build/packages/gap/include/gap@comparison_NoMatch.hrl @@ -0,0 +1 @@ +-record(no_match, {item :: any()}). diff --git a/aoc2023/build/packages/gap/include/gap@comparison_StringComparison.hrl b/aoc2023/build/packages/gap/include/gap@comparison_StringComparison.hrl new file mode 100644 index 0000000..c0b1a75 --- /dev/null +++ b/aoc2023/build/packages/gap/include/gap@comparison_StringComparison.hrl @@ -0,0 +1,4 @@ +-record(string_comparison, { + first :: list(gap@comparison:match(list(binary()))), + second :: list(gap@comparison:match(list(binary()))) +}). diff --git a/aoc2023/build/packages/gap/include/gap@styled_comparison_StyledComparison.hrl b/aoc2023/build/packages/gap/include/gap@styled_comparison_StyledComparison.hrl new file mode 100644 index 0000000..0e7c64a --- /dev/null +++ b/aoc2023/build/packages/gap/include/gap@styled_comparison_StyledComparison.hrl @@ -0,0 +1 @@ +-record(styled_comparison, {first :: binary(), second :: binary()}). diff --git a/aoc2023/build/packages/gap/include/gap@styling_All.hrl b/aoc2023/build/packages/gap/include/gap@styling_All.hrl new file mode 100644 index 0000000..c11a9a6 --- /dev/null +++ b/aoc2023/build/packages/gap/include/gap@styling_All.hrl @@ -0,0 +1 @@ +-record(all, {all :: binary()}). diff --git a/aoc2023/build/packages/gap/include/gap@styling_Highlighters.hrl b/aoc2023/build/packages/gap/include/gap@styling_Highlighters.hrl new file mode 100644 index 0000000..6e073b3 --- /dev/null +++ b/aoc2023/build/packages/gap/include/gap@styling_Highlighters.hrl @@ -0,0 +1,5 @@ +-record(highlighters, { + first :: fun((binary()) -> binary()), + second :: fun((binary()) -> binary()), + matching :: fun((binary()) -> binary()) +}). diff --git a/aoc2023/build/packages/gap/include/gap@styling_Part.hrl b/aoc2023/build/packages/gap/include/gap@styling_Part.hrl new file mode 100644 index 0000000..db45796 --- /dev/null +++ b/aoc2023/build/packages/gap/include/gap@styling_Part.hrl @@ -0,0 +1,5 @@ +-record(part, { + acc :: binary(), + part :: list(any()), + highlight :: fun((binary()) -> binary()) +}). diff --git a/aoc2023/build/packages/gap/include/gap@styling_Styling.hrl b/aoc2023/build/packages/gap/include/gap@styling_Styling.hrl new file mode 100644 index 0000000..a7341c6 --- /dev/null +++ b/aoc2023/build/packages/gap/include/gap@styling_Styling.hrl @@ -0,0 +1,5 @@ +-record(styling, { + comparison :: gap@comparison:comparison(any()), + serializer :: gleam@option:option(fun((gap@styling:part(any())) -> binary())), + highlight :: gleam@option:option(gap@styling:highlighters()) +}). diff --git a/aoc2023/build/packages/gap/src/gap.app.src b/aoc2023/build/packages/gap/src/gap.app.src new file mode 100644 index 0000000..1abc7df --- /dev/null +++ b/aoc2023/build/packages/gap/src/gap.app.src @@ -0,0 +1,13 @@ +{application, gap, [ + {vsn, "1.0.1"}, + {applications, [gleam_community_ansi, + gleam_stdlib, + gleeunit]}, + {description, "A Gleam library for comparing strings/lists and producing a textual (styled) representation of the differences."}, + {modules, [gap, + gap@comparison, + gap@myers, + gap@styled_comparison, + gap@styling]}, + {registered, []} +]}. diff --git a/aoc2023/build/packages/gap/src/gap.erl b/aoc2023/build/packages/gap/src/gap.erl new file mode 100644 index 0000000..827e5ce --- /dev/null +++ b/aoc2023/build/packages/gap/src/gap.erl @@ -0,0 +1,538 @@ +-module(gap). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([to_styled/1, compare_strings_with_algorithm/3, compare_lists_with_algorithm/3, myers/2, compare_lists/2, compare_strings/2, lcs/2]). +-export_type([score/1]). + +-type score(GAM) :: {score, integer(), gleam@option:option(GAM)}. + +-spec to_styled(gap@comparison:comparison(any())) -> gap@styled_comparison:styled_comparison(). +to_styled(Comparison) -> + _pipe = Comparison, + _pipe@1 = gap@styling:from_comparison(_pipe), + _pipe@2 = gap@styling:highlight( + _pipe@1, + fun gap@styling:first_highlight_default/1, + fun gap@styling:second_highlight_default/1, + fun gap@styling:no_highlight/1 + ), + gap@styling:to_styled_comparison(_pipe@2). + +-spec compare_strings_with_algorithm( + binary(), + binary(), + fun((list(binary()), list(binary())) -> gap@comparison:comparison(binary())) +) -> gap@comparison:comparison(binary()). +compare_strings_with_algorithm(First, Second, Algorithm) -> + Comparison = Algorithm( + gleam@string:to_graphemes(First), + gleam@string:to_graphemes(Second) + ), + case Comparison of + {list_comparison, First@1, Second@1} -> + {string_comparison, First@1, Second@1}; + + {string_comparison, First@2, Second@2} -> + {string_comparison, First@2, Second@2} + end. + +-spec compare_lists_with_algorithm( + list(GBB), + list(GBB), + fun((list(GBB), list(GBB)) -> gap@comparison:comparison(GBB)) +) -> gap@comparison:comparison(GBB). +compare_lists_with_algorithm(First_sequence, Second_sequence, Algorithm) -> + Algorithm(First_sequence, Second_sequence). + +-spec myers(list(GBG), list(GBG)) -> gap@comparison:comparison(GBG). +myers(First_sequence, Second_sequence) -> + Edits = gap@myers:difference(First_sequence, Second_sequence), + _pipe = Edits, + _pipe@1 = gleam@list:reverse(_pipe), + gleam@list:fold( + _pipe@1, + {list_comparison, [], []}, + fun(Comparison, Edit) -> case Comparison of + {list_comparison, First, Second} -> + case Edit of + {eq, Segment} -> + {list_comparison, + [{match, Segment} | First], + [{match, Segment} | Second]}; + + {ins, Segment@1} -> + {list_comparison, + First, + [{no_match, Segment@1} | Second]}; + + {del, Segment@2} -> + {list_comparison, + [{no_match, Segment@2} | First], + Second} + end; + + {string_comparison, _, _} -> + Comparison + end end + ). + +-spec compare_lists(list(GAX), list(GAX)) -> gap@comparison:comparison(GAX). +compare_lists(First_sequence, Second_sequence) -> + myers(First_sequence, Second_sequence). + +-spec compare_strings(binary(), binary()) -> gap@comparison:comparison(binary()). +compare_strings(First, Second) -> + Comparison = compare_lists( + gleam@string:to_graphemes(First), + gleam@string:to_graphemes(Second) + ), + case Comparison of + {list_comparison, First@1, Second@1} -> + {string_comparison, First@1, Second@1}; + + {string_comparison, First@2, Second@2} -> + {string_comparison, First@2, Second@2} + end. + +-spec prepend_and_merge( + list(gap@comparison:match(list(GBO))), + gap@comparison:match(list(GBO)) +) -> list(gap@comparison:match(list(GBO))). +prepend_and_merge(Matches, Match) -> + case {Matches, Match} of + {[], _} -> + [Match]; + + {[{match, First_match} | Rest], {match, _}} -> + [{match, + begin + _pipe = erlang:element(2, Match), + gleam@list:append(_pipe, First_match) + end} | + Rest]; + + {[{no_match, First_match@1} | Rest@1], {no_match, _}} -> + [{no_match, + begin + _pipe@1 = erlang:element(2, Match), + gleam@list:append(_pipe@1, First_match@1) + end} | + Rest@1]; + + {Matches@1, Match@1} -> + [Match@1 | Matches@1] + end. + +-spec append_and_merge( + list(gap@comparison:match(list(GBX))), + gap@comparison:match(list(GBX)) +) -> list(gap@comparison:match(list(GBX))). +append_and_merge(Matches, Match) -> + _pipe@3 = case {begin + _pipe = Matches, + gleam@list:reverse(_pipe) + end, + Match} of + {[], _} -> + [Match]; + + {[{match, First_match} | Rest], {match, _}} -> + [{match, + begin + _pipe@1 = First_match, + gleam@list:append(_pipe@1, erlang:element(2, Match)) + end} | + Rest]; + + {[{no_match, First_match@1} | Rest@1], {no_match, _}} -> + [{no_match, + begin + _pipe@2 = First_match@1, + gleam@list:append(_pipe@2, erlang:element(2, Match)) + end} | + Rest@1]; + + {Matches@1, Match@1} -> + [Match@1 | Matches@1] + end, + gleam@list:reverse(_pipe@3). + +-spec collect_matches( + gleam@map:map_(GFY, any()), + list(GCH), + fun((GFY) -> integer()) +) -> list(gap@comparison:match(list(GCH))). +collect_matches(Tracking, Str, Extract_fun) -> + Matching_indexes = begin + _pipe = gleam@map:keys(Tracking), + _pipe@1 = gleam@list:map(_pipe, Extract_fun), + gleam@set:from_list(_pipe@1) + end, + Matches = begin + _pipe@2 = Str, + gleam@list:index_map( + _pipe@2, + fun(Index, Item) -> + case gleam@set:contains(Matching_indexes, Index) of + true -> + {match, Item}; + + false -> + {no_match, Item} + end + end + ) + end, + _pipe@3 = Matches, + _pipe@4 = gleam@list:chunk(_pipe@3, fun(Match) -> case Match of + {match, _} -> + true; + + {no_match, _} -> + false + end end), + gleam@list:map(_pipe@4, fun(Match_list) -> case Match_list of + [{match, _} | _] -> + {match, + gleam@list:filter_map( + Match_list, + fun(Match@1) -> case Match@1 of + {match, Item@1} -> + {ok, Item@1}; + + {no_match, _} -> + {error, nil} + end end + )}; + + [{no_match, _} | _] -> + {no_match, + gleam@list:filter_map( + Match_list, + fun(Match@2) -> case Match@2 of + {no_match, Item@2} -> + {ok, Item@2}; + + {match, _} -> + {error, nil} + end end + )} + end end). + +-spec back_track( + gleam@map:map_({integer(), integer()}, score(GCL)), + integer(), + integer(), + list({{integer(), integer()}, GCL}) +) -> list({{integer(), integer()}, GCL}). +back_track(Diff_map, First_index, Second_index, Stack) -> + case (First_index =:= 0) orelse (Second_index =:= 0) of + true -> + This_score = begin + _pipe = gleam@map:get(Diff_map, {First_index, Second_index}), + gleam@result:unwrap(_pipe, {score, 0, none}) + end, + case This_score of + {score, _, {some, Item}} -> + [{{First_index, Second_index}, Item} | Stack]; + + _ -> + case {First_index, Second_index} of + {0, A} when A > 0 -> + back_track( + Diff_map, + First_index, + Second_index - 1, + Stack + ); + + {A@1, 0} when A@1 > 0 -> + back_track( + Diff_map, + First_index - 1, + Second_index, + Stack + ); + + {0, 0} -> + Stack; + + {_, _} -> + back_track( + Diff_map, + First_index - 1, + Second_index, + Stack + ) + end + end; + + false -> + This_score@1 = begin + _pipe@1 = gleam@map:get(Diff_map, {First_index, Second_index}), + gleam@result:unwrap(_pipe@1, {score, 0, none}) + end, + case This_score@1 of + {score, _, {some, Item@1}} -> + back_track( + Diff_map, + First_index - 1, + Second_index - 1, + [{{First_index, Second_index}, Item@1} | Stack] + ); + + {score, _, none} -> + Up = begin + _pipe@2 = gleam@map:get( + Diff_map, + {First_index, Second_index - 1} + ), + gleam@result:unwrap(_pipe@2, {score, 0, none}) + end, + Back = begin + _pipe@3 = gleam@map:get( + Diff_map, + {First_index - 1, Second_index} + ), + gleam@result:unwrap(_pipe@3, {score, 0, none}) + end, + case gleam@int:compare( + erlang:element(2, Up), + erlang:element(2, Back) + ) of + gt -> + back_track( + Diff_map, + First_index, + Second_index - 1, + Stack + ); + + lt -> + back_track( + Diff_map, + First_index - 1, + Second_index, + Stack + ); + + eq -> + case {First_index, Second_index} of + {0, A@2} when A@2 > 0 -> + back_track( + Diff_map, + First_index, + Second_index - 1, + Stack + ); + + {A@3, 0} when A@3 > 0 -> + back_track( + Diff_map, + First_index - 1, + Second_index, + Stack + ); + + {0, 0} -> + Stack; + + {_, _} -> + back_track( + Diff_map, + First_index - 1, + Second_index, + Stack + ) + end + end + end + end. + +-spec build_diff_map( + GCR, + integer(), + GCR, + integer(), + gleam@map:map_({integer(), integer()}, score(GCR)) +) -> gleam@map:map_({integer(), integer()}, score(GCR)). +build_diff_map(First_item, First_index, Second_item, Second_index, Diff_map) -> + Prev_score = begin + _pipe = gleam@map:get(Diff_map, {First_index - 1, Second_index - 1}), + gleam@result:unwrap(_pipe, {score, 0, none}) + end, + Derived_score_up = begin + _pipe@1 = Diff_map, + _pipe@2 = gleam@map:get(_pipe@1, {First_index, Second_index - 1}), + gleam@result:unwrap(_pipe@2, {score, 0, none}) + end, + Derived_score_back = begin + _pipe@3 = Diff_map, + _pipe@4 = gleam@map:get(_pipe@3, {First_index - 1, Second_index}), + gleam@result:unwrap(_pipe@4, {score, 0, none}) + end, + Derived_score = gleam@int:max( + erlang:element(2, Derived_score_up), + erlang:element(2, Derived_score_back) + ), + This_score = case First_item =:= Second_item of + true -> + {score, erlang:element(2, Prev_score) + 1, {some, First_item}}; + + false -> + {score, Derived_score, none} + end, + _pipe@5 = Diff_map, + gleam@map:insert(_pipe@5, {First_index, Second_index}, This_score). + +-spec lcs(list(GBK), list(GBK)) -> gap@comparison:comparison(GBK). +lcs(First_sequence, Second_sequence) -> + Leading_matches = begin + _pipe = gleam@list:zip(First_sequence, Second_sequence), + _pipe@1 = gleam@list:take_while( + _pipe, + fun(Pair) -> erlang:element(1, Pair) =:= erlang:element(2, Pair) end + ), + gleam@list:map(_pipe@1, fun gleam@pair:first/1) + end, + Num_leading_matches = gleam@list:length(Leading_matches), + Trailing_matches = begin + _pipe@2 = gleam@list:zip( + gleam@list:reverse(First_sequence), + gleam@list:reverse(Second_sequence) + ), + _pipe@3 = gleam@list:take_while( + _pipe@2, + fun(Pair@1) -> + erlang:element(1, Pair@1) =:= erlang:element(2, Pair@1) + end + ), + _pipe@4 = gleam@list:map(_pipe@3, fun gleam@pair:first/1), + gleam@list:reverse(_pipe@4) + end, + Num_trailing_matches = gleam@list:length(Trailing_matches), + First_sequence_to_diff = begin + _pipe@5 = First_sequence, + _pipe@6 = gleam@list:drop(_pipe@5, Num_leading_matches), + gleam@list:take( + _pipe@6, + (gleam@list:length(First_sequence) - Num_leading_matches) - Num_trailing_matches + ) + end, + Second_sequence_to_diff = begin + _pipe@7 = Second_sequence, + _pipe@8 = gleam@list:drop(_pipe@7, Num_leading_matches), + gleam@list:take( + _pipe@8, + (gleam@list:length(Second_sequence) - Num_leading_matches) - Num_trailing_matches + ) + end, + Diff_map@2 = begin + _pipe@9 = Second_sequence_to_diff, + gleam@list:index_fold( + _pipe@9, + gleam@map:new(), + fun(Diff_map, Item_second, Index_second) -> + _pipe@10 = First_sequence_to_diff, + gleam@list:index_fold( + _pipe@10, + Diff_map, + fun(Diff_map@1, Item_first, Index_first) -> + build_diff_map( + Item_first, + Index_first, + Item_second, + Index_second, + Diff_map@1 + ) + end + ) + end + ) + end, + {First_segments@1, Second_segments@1} = case {First_sequence_to_diff, + Second_sequence_to_diff} of + {[], []} -> + {[], []}; + + {First_matching, []} -> + {[{no_match, First_matching}], []}; + + {[], Second_matching} -> + {[], [{no_match, Second_matching}]}; + + {First_sequence_to_diff@1, Second_sequence_to_diff@1} -> + Tracking = begin + _pipe@11 = back_track( + Diff_map@2, + gleam@list:length(First_sequence_to_diff@1) - 1, + gleam@list:length(Second_sequence_to_diff@1) - 1, + [] + ), + gleam@map:from_list(_pipe@11) + end, + First_segments = collect_matches( + Tracking, + First_sequence_to_diff@1, + fun(Key) -> + {First, _} = Key, + First + end + ), + Second_segments = collect_matches( + Tracking, + Second_sequence_to_diff@1, + fun(Key@1) -> + {_, Second} = Key@1, + Second + end + ), + {First_segments, Second_segments} + end, + {First_segments_with_leading_trailing, + Second_segments_with_leading_trailing} = case {Leading_matches, + Trailing_matches} of + {[], []} -> + {First_segments@1, Second_segments@1}; + + {[], Trailing_matches@1} -> + {begin + _pipe@12 = First_segments@1, + append_and_merge(_pipe@12, {match, Trailing_matches@1}) + end, + begin + _pipe@13 = Second_segments@1, + append_and_merge(_pipe@13, {match, Trailing_matches@1}) + end}; + + {Leading_matches@1, []} -> + {begin + _pipe@14 = First_segments@1, + prepend_and_merge(_pipe@14, {match, Leading_matches@1}) + end, + begin + _pipe@15 = Second_segments@1, + prepend_and_merge(_pipe@15, {match, Leading_matches@1}) + end}; + + {Leading_matches@2, Trailing_matches@2} -> + {begin + _pipe@16 = First_segments@1, + _pipe@17 = prepend_and_merge( + _pipe@16, + {match, Leading_matches@2} + ), + append_and_merge(_pipe@17, {match, Trailing_matches@2}) + end, + begin + _pipe@18 = Second_segments@1, + _pipe@19 = prepend_and_merge( + _pipe@18, + {match, Leading_matches@2} + ), + append_and_merge(_pipe@19, {match, Trailing_matches@2}) + end} + end, + {list_comparison, + First_segments_with_leading_trailing, + Second_segments_with_leading_trailing}. diff --git a/aoc2023/build/packages/gap/src/gap.gleam b/aoc2023/build/packages/gap/src/gap.gleam new file mode 100644 index 0000000..7eb0e7f --- /dev/null +++ b/aoc2023/build/packages/gap/src/gap.gleam @@ -0,0 +1,438 @@ +import gleam/string +import gleam/list +import gleam/pair +import gleam/map.{type Map} +import gleam/result +import gleam/option.{type Option, None, Some} +import gleam/int +import gleam/order.{Eq, Gt, Lt} +import gleam/set +import gap/comparison.{ + type Comparison, type Match, type Segments, ListComparison, Match, NoMatch, + StringComparison, +} +import gap/styled_comparison.{type StyledComparison} +import gap/styling.{ + first_highlight_default, from_comparison, highlight, no_highlight, + second_highlight_default, to_styled_comparison, +} +import gap/myers.{type Edit, Del, Eq as MyerEq, Ins} + +type MatchedItem(a) = + #(#(Int, Int), a) + +type Score(a) { + Score(value: Int, item: Option(a)) +} + +type DiffMap(a) = + Map(#(Int, Int), Score(a)) + +/// Creates a `StyledComparison` from `Comparison` using default values for +/// highting and serialization. +/// +/// ## Example +/// +/// ```gleam +/// > compare_strings("abc", "abe") |> to_styled() +/// ``` +/// This will return a `StyledComparison(first, second)` where "c" in `first` is green +/// and "e" in `second` is red. +pub fn to_styled(comparison: Comparison(a)) -> StyledComparison { + comparison + |> from_comparison() + |> highlight(first_highlight_default, second_highlight_default, no_highlight) + |> to_styled_comparison() +} + +/// Compare two string and return a `StringComparison` which will be styled as string +/// when passed to `to_styled` +/// +/// Will use the default `myers` algorithm +pub fn compare_strings(first: String, second: String) -> Comparison(String) { + let comparison = + compare_lists(string.to_graphemes(first), string.to_graphemes(second)) + case comparison { + ListComparison(first, second) -> StringComparison(first, second) + StringComparison(first, second) -> StringComparison(first, second) + } +} + +/// Compare two string and return a `StringComparison` which will be styled as string +/// when passed to `to_styled` +/// +/// Algorithm can be used to select either `myers` or the legacy `lcs` algorithm +pub fn compare_strings_with_algorithm( + first: String, + second: String, + algorithm, +) -> Comparison(String) { + let comparison = + algorithm(string.to_graphemes(first), string.to_graphemes(second)) + case comparison { + ListComparison(first, second) -> StringComparison(first, second) + StringComparison(first, second) -> StringComparison(first, second) + } +} + +/// Compare two lists and return a `ListComparison` which will be styled as list +/// when passed to `to_styled` +/// +/// Will use the default `myers` algorithm +pub fn compare_lists( + first_sequence: List(a), + second_sequence: List(a), +) -> Comparison(a) { + myers(first_sequence, second_sequence) +} + +/// Compare two lists and return a `ListComparison` which will be styled as list +/// when passed to `to_styled` +/// +/// Algorithm can be used to select either `myers` or the legacy `lcs` algorithm +pub fn compare_lists_with_algorithm( + first_sequence: List(a), + second_sequence: List(a), + algorithm, +) -> Comparison(a) { + algorithm(first_sequence, second_sequence) +} + +/// An adapter for the the `myers` algorithm. +/// Intended to be use as an argument to `compare_strings_with_algorithm` or +/// `compare_lists_with_algorithm` +pub fn myers(first_sequence: List(a), second_sequence: List(a)) -> Comparison(a) { + let edits = myers.difference(first_sequence, second_sequence) + edits + |> list.reverse() + |> list.fold( + ListComparison([], []), + fn(comparison: Comparison(a), edit: Edit(a)) { + case comparison { + ListComparison(first, second) -> { + case edit { + MyerEq(segment) -> + ListComparison( + [Match(segment), ..first], + [Match(segment), ..second], + ) + Ins(segment) -> ListComparison(first, [NoMatch(segment), ..second]) + Del(segment) -> ListComparison([NoMatch(segment), ..first], second) + } + } + StringComparison(..) -> comparison + } + }, + ) +} + +/// An adapter for the the `lcs` (longest common subsequence) algorithm. +/// Intended to be use as an argument to `compare_strings_with_algorithm` or +/// `compare_lists_with_algorithm` +pub fn lcs(first_sequence: List(a), second_sequence: List(a)) -> Comparison(a) { + let leading_matches = + list.zip(first_sequence, second_sequence) + |> list.take_while(fn(pair) { pair.0 == pair.1 }) + |> list.map(pair.first) + let num_leading_matches = list.length(leading_matches) + let trailing_matches = + list.zip(list.reverse(first_sequence), list.reverse(second_sequence)) + |> list.take_while(fn(pair) { pair.0 == pair.1 }) + |> list.map(pair.first) + |> list.reverse() + let num_trailing_matches = list.length(trailing_matches) + let first_sequence_to_diff = + first_sequence + |> list.drop(num_leading_matches) + |> list.take( + list.length(first_sequence) - num_leading_matches - num_trailing_matches, + ) + let second_sequence_to_diff = + second_sequence + |> list.drop(num_leading_matches) + |> list.take( + list.length(second_sequence) - num_leading_matches - num_trailing_matches, + ) + + let diff_map = + second_sequence_to_diff + |> list.index_fold( + map.new(), + fn(diff_map, item_second, index_second) { + first_sequence_to_diff + |> list.index_fold( + diff_map, + fn(diff_map, item_first, index_first) { + build_diff_map( + item_first, + index_first, + item_second, + index_second, + diff_map, + ) + }, + ) + }, + ) + let #(first_segments, second_segments) = case + first_sequence_to_diff, + second_sequence_to_diff + { + [], [] -> #([], []) + first_matching, [] -> #([NoMatch(first_matching)], []) + [], second_matching -> #([], [NoMatch(second_matching)]) + first_sequence_to_diff, second_sequence_to_diff -> { + let tracking = + back_track( + diff_map, + list.length(first_sequence_to_diff) - 1, + list.length(second_sequence_to_diff) - 1, + [], + ) + |> map.from_list() + + let first_segments = + collect_matches( + tracking, + first_sequence_to_diff, + fn(key) { + let #(first, _) = key + first + }, + ) + let second_segments = + collect_matches( + tracking, + second_sequence_to_diff, + fn(key) { + let #(_, second) = key + second + }, + ) + #(first_segments, second_segments) + } + } + + let #( + first_segments_with_leading_trailing, + second_segments_with_leading_trailing, + ) = case leading_matches, trailing_matches { + [], [] -> #(first_segments, second_segments) + [], trailing_matches -> #( + first_segments + |> append_and_merge(Match(trailing_matches)), + second_segments + |> append_and_merge(Match(trailing_matches)), + ) + leading_matches, [] -> #( + first_segments + |> prepend_and_merge(Match(leading_matches)), + second_segments + |> prepend_and_merge(Match(leading_matches)), + ) + leading_matches, trailing_matches -> #( + first_segments + |> prepend_and_merge(Match(leading_matches)) + |> append_and_merge(Match(trailing_matches)), + second_segments + |> prepend_and_merge(Match(leading_matches)) + |> append_and_merge(Match(trailing_matches)), + ) + } + + ListComparison( + first_segments_with_leading_trailing, + second_segments_with_leading_trailing, + ) +} + +fn prepend_and_merge( + matches: List(Match(List(a))), + match: Match(List(a)), +) -> List(Match(List(a))) { + case matches, match { + [], _ -> [match] + [Match(first_match), ..rest], Match(_) -> [ + Match( + match.item + |> list.append(first_match), + ), + ..rest + ] + [NoMatch(first_match), ..rest], NoMatch(_) -> [ + NoMatch( + match.item + |> list.append(first_match), + ), + ..rest + ] + matches, match -> [match, ..matches] + } +} + +fn append_and_merge( + matches: List(Match(List(a))), + match: Match(List(a)), +) -> List(Match(List(a))) { + case + matches + |> list.reverse(), + match + { + [], _ -> [match] + [Match(first_match), ..rest], Match(_) -> [ + Match( + first_match + |> list.append(match.item), + ), + ..rest + ] + [NoMatch(first_match), ..rest], NoMatch(_) -> [ + NoMatch( + first_match + |> list.append(match.item), + ), + ..rest + ] + matches, match -> [match, ..matches] + } + |> list.reverse() +} + +fn collect_matches(tracking, str: List(a), extract_fun) -> Segments(a) { + let matching_indexes = + map.keys(tracking) + |> list.map(extract_fun) + |> set.from_list() + + let matches = + str + |> list.index_map(fn(index, item) { + case set.contains(matching_indexes, index) { + True -> Match(item) + False -> NoMatch(item) + } + }) + + matches + |> list.chunk(fn(match) { + case match { + Match(_) -> True + NoMatch(_) -> False + } + }) + |> list.map(fn(match_list) { + case match_list { + [Match(_), ..] -> + Match(list.filter_map( + match_list, + fn(match) { + case match { + Match(item) -> Ok(item) + NoMatch(_) -> Error(Nil) + } + }, + )) + [NoMatch(_), ..] -> + NoMatch(list.filter_map( + match_list, + fn(match) { + case match { + NoMatch(item) -> Ok(item) + Match(_) -> Error(Nil) + } + }, + )) + } + }) +} + +fn back_track( + diff_map: DiffMap(a), + first_index: Int, + second_index: Int, + stack: List(MatchedItem(a)), +) -> List(MatchedItem(a)) { + case first_index == 0 || second_index == 0 { + True -> { + let this_score = + map.get(diff_map, #(first_index, second_index)) + |> result.unwrap(Score(0, None)) + case this_score { + Score(_, Some(item)) -> [#(#(first_index, second_index), item), ..stack] + _ -> + case first_index, second_index { + 0, a if a > 0 -> + back_track(diff_map, first_index, second_index - 1, stack) + a, 0 if a > 0 -> + back_track(diff_map, first_index - 1, second_index, stack) + 0, 0 -> stack + _, _ -> back_track(diff_map, first_index - 1, second_index, stack) + } + } + } + False -> { + let this_score = + map.get(diff_map, #(first_index, second_index)) + |> result.unwrap(Score(0, None)) + case this_score { + Score(_, Some(item)) -> + back_track( + diff_map, + first_index - 1, + second_index - 1, + [#(#(first_index, second_index), item), ..stack], + ) + Score(_, None) -> { + let up = + map.get(diff_map, #(first_index, second_index - 1)) + |> result.unwrap(Score(0, None)) + let back = + map.get(diff_map, #(first_index - 1, second_index)) + |> result.unwrap(Score(0, None)) + case int.compare(up.value, back.value) { + Gt -> back_track(diff_map, first_index, second_index - 1, stack) + Lt -> back_track(diff_map, first_index - 1, second_index, stack) + Eq -> + case first_index, second_index { + 0, a if a > 0 -> + back_track(diff_map, first_index, second_index - 1, stack) + a, 0 if a > 0 -> + back_track(diff_map, first_index - 1, second_index, stack) + 0, 0 -> stack + _, _ -> + back_track(diff_map, first_index - 1, second_index, stack) + } + } + } + } + } + } +} + +fn build_diff_map( + first_item: a, + first_index: Int, + second_item: a, + second_index: Int, + diff_map: DiffMap(a), +) -> DiffMap(a) { + let prev_score = + map.get(diff_map, #(first_index - 1, second_index - 1)) + |> result.unwrap(Score(0, None)) + let derived_score_up = + diff_map + |> map.get(#(first_index, second_index - 1)) + |> result.unwrap(Score(0, None)) + let derived_score_back = + diff_map + |> map.get(#(first_index - 1, second_index)) + |> result.unwrap(Score(0, None)) + let derived_score = int.max(derived_score_up.value, derived_score_back.value) + let this_score = case first_item == second_item { + True -> Score(prev_score.value + 1, Some(first_item)) + False -> Score(derived_score, None) + } + diff_map + |> map.insert(#(first_index, second_index), this_score) +} diff --git a/aoc2023/build/packages/gap/src/gap/comparison.gleam b/aoc2023/build/packages/gap/src/gap/comparison.gleam new file mode 100644 index 0000000..da30c29 --- /dev/null +++ b/aoc2023/build/packages/gap/src/gap/comparison.gleam @@ -0,0 +1,22 @@ +/// Comparison of two strings or lists +/// +/// The comparison consists of two lists of matched segments. The segments represent +/// a sequence of succeeding matches or non-matches (up until the next match/non-match) +/// +/// For lists the elements in the segment will be same as the elements in the list, and +/// for strings the elements will be the graphemes of the string +pub type Comparison(a) { + ListComparison(first: Segments(a), second: Segments(a)) + StringComparison(first: Segments(String), second: Segments(String)) +} + +/// Indicating that the item has a matching (`Match`) or no matching (`NoMatch`) item in the +/// other string/list +pub type Match(a) { + Match(item: a) + NoMatch(item: a) +} + +/// List of segments of succeeding matches / non-matches +pub type Segments(a) = + List(Match(List(a))) diff --git a/aoc2023/build/packages/gap/src/gap/myers.gleam b/aoc2023/build/packages/gap/src/gap/myers.gleam new file mode 100644 index 0000000..f0b8ddc --- /dev/null +++ b/aoc2023/build/packages/gap/src/gap/myers.gleam @@ -0,0 +1,122 @@ +import gleam/list + +pub type Edit(a) { + Eq(List(a)) + Del(List(a)) + Ins(List(a)) +} + +type Path(a) { + Path(x: Int, y: Int, list1: List(a), list2: List(a), edits: List(Edit(a))) +} + +type Status(a) { + Done(edits: List(Edit(a))) + Next(paths: List(Path(a))) + Cont(path: Path(a)) +} + +/// The algorithm is outlined in the +/// "An O(ND) Difference Algorithm and Its Variations" paper by E. Myers. +/// +/// Adapted from the implementation of "myers_difference" in Elixirs List module +pub fn difference(list1: List(a), list2: List(a)) -> List(Edit(a)) { + let path = Path(0, 0, list1, list2, []) + find_script(0, list.length(list1) + list.length(list2), [path]) +} + +fn find_script(envelope: Int, max: Int, paths: List(Path(a))) { + case envelope > max { + True -> [] + False -> { + case each_diagonal(-envelope, envelope, paths, []) { + Done(edits) -> compact_reverse(edits, []) + Next(paths) -> find_script(envelope + 1, max, paths) + _ -> panic as "Didn't expect a Cont here" + } + } + } +} + +fn compact_reverse(edits: List(Edit(a)), acc: List(Edit(a))) -> List(Edit(a)) { + case edits, acc { + [], acc -> acc + [Eq(elem), ..rest], [Eq(result), ..acc_rest] -> + compact_reverse(rest, [Eq(list.flatten([elem, result])), ..acc_rest]) + [Del(elem), ..rest], [Del(result), ..acc_rest] -> + compact_reverse(rest, [Del(list.flatten([elem, result])), ..acc_rest]) + [Ins(elem), ..rest], [Ins(result), ..acc_rest] -> + compact_reverse(rest, [Ins(list.flatten([elem, result])), ..acc_rest]) + [Eq(elem), ..rest], acc -> compact_reverse(rest, [Eq(elem), ..acc]) + [Del(elem), ..rest], acc -> compact_reverse(rest, [Del(elem), ..acc]) + [Ins(elem), ..rest], acc -> compact_reverse(rest, [Ins(elem), ..acc]) + } +} + +fn each_diagonal( + diag: Int, + limit: Int, + paths: List(Path(a)), + next_paths: List(Path(a)), +) -> Status(a) { + case diag > limit { + True -> Next(list.reverse(next_paths)) + False -> { + let #(path, rest) = proceed_path(diag, limit, paths) + case follow_snake(path) { + Cont(path) -> each_diagonal(diag + 2, limit, rest, [path, ..next_paths]) + other -> other + } + } + } +} + +fn proceed_path( + diag: Int, + limit: Int, + paths: List(Path(a)), +) -> #(Path(a), List(Path(a))) { + let neg_limit = -limit + case diag, limit, paths { + 0, 0, [path] -> #(path, []) + diag, _limit, [path, ..] as paths if diag == neg_limit -> #( + move_down(path), + paths, + ) + diag, limit, [path, ..] as paths if diag == limit -> #( + move_right(path), + paths, + ) + _diag, _limit, [path1, path2, ..rest] -> { + case path1.y > path2.y { + True -> #(move_right(path1), [path2, ..rest]) + False -> #(move_down(path2), [path2, ..rest]) + } + } + } +} + +fn move_right(path: Path(a)) -> Path(a) { + case path { + Path(x, y, list1, [elem, ..rest], edits) -> + Path(x + 1, y, list1, rest, [Ins([elem]), ..edits]) + Path(x, y, list1, [], edits) -> Path(x + 1, y, list1, [], edits) + } +} + +fn move_down(path: Path(a)) -> Path(a) { + case path { + Path(x, y, [elem, ..rest], list2, edits) -> + Path(x, y + 1, rest, list2, [Del([elem]), ..edits]) + Path(x, y, [], list2, edits) -> Path(x, y + 1, [], list2, edits) + } +} + +fn follow_snake(path: Path(a)) -> Status(a) { + case path { + Path(x, y, [elem1, ..rest1], [elem2, ..rest2], edits) if elem1 == elem2 -> + follow_snake(Path(x + 1, y + 1, rest1, rest2, [Eq([elem1]), ..edits])) + Path(_x, _y, [], [], edits) -> Done(edits) + _ -> Cont(path) + } +} diff --git a/aoc2023/build/packages/gap/src/gap/styled_comparison.gleam b/aoc2023/build/packages/gap/src/gap/styled_comparison.gleam new file mode 100644 index 0000000..7103c2e --- /dev/null +++ b/aoc2023/build/packages/gap/src/gap/styled_comparison.gleam @@ -0,0 +1,4 @@ +/// A comparison where the parts have been styled (serialized and highlighted) +pub type StyledComparison { + StyledComparison(first: String, second: String) +} diff --git a/aoc2023/build/packages/gap/src/gap/styling.gleam b/aoc2023/build/packages/gap/src/gap/styling.gleam new file mode 100644 index 0000000..623ae8a --- /dev/null +++ b/aoc2023/build/packages/gap/src/gap/styling.gleam @@ -0,0 +1,233 @@ +import gleam/option.{type Option, None, Some} +import gleam/list +import gleam/string +import gleam_community/ansi +import gap/comparison.{ + type Comparison, type Segments, ListComparison, Match, NoMatch, + StringComparison, +} +import gap/styled_comparison.{type StyledComparison, StyledComparison} + +/// The `Highlighter`takes a string representation of the item that was not matching +/// and should return a string representation that can be used to visually indicate that +/// it is a non-matching item. +/// +/// The default implementation of the highlighters uses the +/// [gleam_community/ansi](https://hexdocs.pm/gleam_community_ansi/index.html) library +/// to set a different color for the item, but any type if indication can be used as long +/// as it returns a valid string +pub type Highlighter = + fn(String) -> String + +/// `Part` is used to indicate to a custom serializer if it should produce a serialization +/// based on a segment with items or the final string that contains already serialized segments +pub type Part(a) { + /// `acc` the already serialized part of the result, `part` is the current segment that should be serialized and appended and `highlighter` is the `Highlighter` that can be used to indicate non-matching items + Part(acc: String, part: List(a), highlight: Highlighter) + /// `all` is a string representing all serialized segments. This can be useful if some string should be prepended/appended to the final result + All(all: String) +} + +/// A `Serializer`can be used to create string representation of the comparison results +/// +/// See [serialize](#serialize) for adding custom serializers and [mk_generic_serializer](#mk_generic_serializer) +pub type Serializer(a) = + fn(Part(a)) -> String + +/// Highlighters to use for indicating matches / non-matches +/// +/// `first` is used to highlight non-matches in the first string/list +/// `second` is used to highlight non-matches in the second string/list +/// `matching` is used to highlight matches in the both strings/lists +pub type Highlighters { + Highlighters(first: Highlighter, second: Highlighter, matching: Highlighter) +} + +/// Styling of a `Comparison` +/// +/// See [from_comparison](#from_comparison) +pub opaque type Styling(a) { + Styling( + comparison: Comparison(a), + serializer: Option(Serializer(a)), + highlight: Option(Highlighters), + ) +} + +/// Create a new `Styling` from a `Comparison` +/// +/// The `Styling` can be customized by adding highlighters and a serializer +/// See [highlight](#highlight) and [serialize](#serialize) +pub fn from_comparison(comparison: Comparison(a)) -> Styling(a) { + Styling(comparison, None, None) +} + +/// Add highlighters to the `Styling` +/// +/// The highlighters are used to mark the matching/non-matching items in the +/// first/second list/string +pub fn highlight( + styling: Styling(a), + first: Highlighter, + second: Highlighter, + matching: Highlighter, +) -> Styling(a) { + Styling(..styling, highlight: Some(Highlighters(first, second, matching))) +} + +/// Add a serializer to the `Styling` +/// +/// The serializer is used to create string representation of the items in the segments of the `Comparison` +/// See [Part](#part) for details +/// +/// > **NOTE:** `StringComparison` will always use the default string serializer (concatenating the graphemes). +/// > If there is a need for custom serialization of `StringComparison` convert the string to a list of +/// > graphemes and treat it as a `ListComparison` +pub fn serialize(styling: Styling(a), serializer: Serializer(a)) -> Styling(a) { + Styling(..styling, serializer: Some(serializer)) +} + +/// Creates a styled comparison using either custom highlighters/serializer if they where added or default +/// highlighters and/or serializer +pub fn to_styled_comparison(styling: Styling(a)) -> StyledComparison { + let highlight = + styling.highlight + |> option.unwrap(Highlighters( + first_highlight_default, + second_highlight_default, + no_highlight, + )) + case styling.comparison { + StringComparison(first, second) -> + to_strings( + first, + second, + // NOTE: Using string serializer here because otherwise we need to have a specific string serializer on the styling + string_serializer, + highlight.first, + highlight.second, + highlight.matching, + ) + ListComparison(first, second) -> + to_strings( + first, + second, + option.unwrap(styling.serializer, generic_serializer), + highlight.first, + highlight.second, + highlight.matching, + ) + } +} + +/// Default highlighter for the first string/list in the comparison +pub fn first_highlight_default(string: String) -> String { + case string { + " " -> + string + |> ansi.underline() + |> ansi.bold() + |> ansi.green() + + _ -> + string + |> ansi.green() + |> ansi.bold() + } +} + +/// Default highlighter for the second string/list in the comparison +pub fn second_highlight_default(string: String) -> String { + case string { + " " -> + string + |> ansi.underline() + |> ansi.bold() + |> ansi.red() + + _ -> + string + |> ansi.red() + |> ansi.bold() + } +} + +/// Default highlighter used for matching items +pub fn no_highlight(string: String) -> String { + string +} + +fn string_serializer(part: Part(String)) -> String { + case part { + Part(acc, sequence, highlight) -> + acc <> { + sequence + |> list.map(highlight) + |> string.join("") + } + All(string) -> string + } +} + +fn generic_serializer(part: Part(a)) -> String { + mk_generic_serializer(", ", fn(all) { "[" <> all <> "]" })(part) +} + +/// Creates a generic serializer that uses `separator` between all items and calls +/// `around` for possibility to prepend/append strings to the final result +pub fn mk_generic_serializer(separator: String, around: fn(String) -> String) { + fn(part) { + case part { + Part(acc, sequence, highlight) -> { + let segment_separator = case acc { + "" -> "" + _ -> separator + } + acc <> segment_separator <> { + sequence + |> list.map(string.inspect) + |> list.map(highlight) + |> string.join(separator) + } + } + All(string) -> around(string) + } + } +} + +fn to_strings( + first: Segments(a), + second: Segments(a), + serializer: Serializer(a), + first_highlight: Highlighter, + second_highlight: Highlighter, + no_highlight: Highlighter, +) -> StyledComparison { + let first_styled = + first + |> list.fold( + "", + fn(str, match) { + case match { + Match(item) -> serializer(Part(str, item, no_highlight)) + NoMatch(item) -> serializer(Part(str, item, first_highlight)) + } + }, + ) + let second_styled = + second + |> list.fold( + "", + fn(str, match) { + case match { + Match(item) -> serializer(Part(str, item, no_highlight)) + NoMatch(item) -> serializer(Part(str, item, second_highlight)) + } + }, + ) + + StyledComparison( + serializer(All(first_styled)), + serializer(All(second_styled)), + ) +} diff --git a/aoc2023/build/packages/gap/src/gap@comparison.erl b/aoc2023/build/packages/gap/src/gap@comparison.erl new file mode 100644 index 0000000..36bd1c3 --- /dev/null +++ b/aoc2023/build/packages/gap/src/gap@comparison.erl @@ -0,0 +1,15 @@ +-module(gap@comparison). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export_type([comparison/1, match/1]). + +-type comparison(FQT) :: {list_comparison, + list(match(list(FQT))), + list(match(list(FQT)))} | + {string_comparison, + list(match(list(binary()))), + list(match(list(binary())))}. + +-type match(FQU) :: {match, FQU} | {no_match, FQU}. + + diff --git a/aoc2023/build/packages/gap/src/gap@myers.erl b/aoc2023/build/packages/gap/src/gap@myers.erl new file mode 100644 index 0000000..6a8ad35 --- /dev/null +++ b/aoc2023/build/packages/gap/src/gap@myers.erl @@ -0,0 +1,156 @@ +-module(gap@myers). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([difference/2]). +-export_type([edit/1, path/1, status/1]). + +-type edit(FUV) :: {eq, list(FUV)} | {del, list(FUV)} | {ins, list(FUV)}. + +-type path(FUW) :: {path, + integer(), + integer(), + list(FUW), + list(FUW), + list(edit(FUW))}. + +-type status(FUX) :: {done, list(edit(FUX))} | + {next, list(path(FUX))} | + {cont, path(FUX)}. + +-spec compact_reverse(list(edit(FVH)), list(edit(FVH))) -> list(edit(FVH)). +compact_reverse(Edits, Acc) -> + case {Edits, Acc} of + {[], Acc@1} -> + Acc@1; + + {[{eq, Elem} | Rest], [{eq, Result} | Acc_rest]} -> + compact_reverse( + Rest, + [{eq, gleam@list:flatten([Elem, Result])} | Acc_rest] + ); + + {[{del, Elem@1} | Rest@1], [{del, Result@1} | Acc_rest@1]} -> + compact_reverse( + Rest@1, + [{del, gleam@list:flatten([Elem@1, Result@1])} | Acc_rest@1] + ); + + {[{ins, Elem@2} | Rest@2], [{ins, Result@2} | Acc_rest@2]} -> + compact_reverse( + Rest@2, + [{ins, gleam@list:flatten([Elem@2, Result@2])} | Acc_rest@2] + ); + + {[{eq, Elem@3} | Rest@3], Acc@2} -> + compact_reverse(Rest@3, [{eq, Elem@3} | Acc@2]); + + {[{del, Elem@4} | Rest@4], Acc@3} -> + compact_reverse(Rest@4, [{del, Elem@4} | Acc@3]); + + {[{ins, Elem@5} | Rest@5], Acc@4} -> + compact_reverse(Rest@5, [{ins, Elem@5} | Acc@4]) + end. + +-spec move_right(path(FWA)) -> path(FWA). +move_right(Path) -> + case Path of + {path, X, Y, List1, [Elem | Rest], Edits} -> + {path, X + 1, Y, List1, Rest, [{ins, [Elem]} | Edits]}; + + {path, X@1, Y@1, List1@1, [], Edits@1} -> + {path, X@1 + 1, Y@1, List1@1, [], Edits@1} + end. + +-spec move_down(path(FWD)) -> path(FWD). +move_down(Path) -> + case Path of + {path, X, Y, [Elem | Rest], List2, Edits} -> + {path, X, Y + 1, Rest, List2, [{del, [Elem]} | Edits]}; + + {path, X@1, Y@1, [], List2@1, Edits@1} -> + {path, X@1, Y@1 + 1, [], List2@1, Edits@1} + end. + +-spec proceed_path(integer(), integer(), list(path(FVU))) -> {path(FVU), + list(path(FVU))}. +proceed_path(Diag, Limit, Paths) -> + Neg_limit = - Limit, + case {Diag, Limit, Paths} of + {0, 0, [Path]} -> + {Path, []}; + + {Diag@1, _, [Path@1 | _] = Paths@1} when Diag@1 =:= Neg_limit -> + {move_down(Path@1), Paths@1}; + + {Diag@2, Limit@1, [Path@2 | _] = Paths@2} when Diag@2 =:= Limit@1 -> + {move_right(Path@2), Paths@2}; + + {_, _, [Path1, Path2 | Rest]} -> + case erlang:element(3, Path1) > erlang:element(3, Path2) of + true -> + {move_right(Path1), [Path2 | Rest]}; + + false -> + {move_down(Path2), [Path2 | Rest]} + end + end. + +-spec follow_snake(path(FWG)) -> status(FWG). +follow_snake(Path) -> + case Path of + {path, X, Y, [Elem1 | Rest1], [Elem2 | Rest2], Edits} when Elem1 =:= Elem2 -> + follow_snake( + {path, X + 1, Y + 1, Rest1, Rest2, [{eq, [Elem1]} | Edits]} + ); + + {path, _, _, [], [], Edits@1} -> + {done, Edits@1}; + + _ -> + {cont, Path} + end. + +-spec each_diagonal(integer(), integer(), list(path(FVO)), list(path(FVO))) -> status(FVO). +each_diagonal(Diag, Limit, Paths, Next_paths) -> + case Diag > Limit of + true -> + {next, gleam@list:reverse(Next_paths)}; + + false -> + {Path, Rest} = proceed_path(Diag, Limit, Paths), + case follow_snake(Path) of + {cont, Path@1} -> + each_diagonal(Diag + 2, Limit, Rest, [Path@1 | Next_paths]); + + Other -> + Other + end + end. + +-spec find_script(integer(), integer(), list(path(FVD))) -> list(edit(FVD)). +find_script(Envelope, Max, Paths) -> + case Envelope > Max of + true -> + []; + + false -> + case each_diagonal(- Envelope, Envelope, Paths, []) of + {done, Edits} -> + compact_reverse(Edits, []); + + {next, Paths@1} -> + find_script(Envelope + 1, Max, Paths@1); + + _ -> + erlang:error(#{gleam_error => panic, + message => <<"Didn't expect a Cont here"/utf8>>, + module => <<"gap/myers"/utf8>>, + function => <<"find_script"/utf8>>, + line => 35}) + end + end. + +-spec difference(list(FUY), list(FUY)) -> list(edit(FUY)). +difference(List1, List2) -> + Path = {path, 0, 0, List1, List2, []}, + find_script(0, gleam@list:length(List1) + gleam@list:length(List2), [Path]). diff --git a/aoc2023/build/packages/gap/src/gap@styled_comparison.erl b/aoc2023/build/packages/gap/src/gap@styled_comparison.erl new file mode 100644 index 0000000..14cc390 --- /dev/null +++ b/aoc2023/build/packages/gap/src/gap@styled_comparison.erl @@ -0,0 +1,8 @@ +-module(gap@styled_comparison). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export_type([styled_comparison/0]). + +-type styled_comparison() :: {styled_comparison, binary(), binary()}. + + diff --git a/aoc2023/build/packages/gap/src/gap@styling.erl b/aoc2023/build/packages/gap/src/gap@styling.erl new file mode 100644 index 0000000..ba226c3 --- /dev/null +++ b/aoc2023/build/packages/gap/src/gap@styling.erl @@ -0,0 +1,202 @@ +-module(gap@styling). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([from_comparison/1, highlight/4, serialize/2, first_highlight_default/1, second_highlight_default/1, no_highlight/1, mk_generic_serializer/2, to_styled_comparison/1]). +-export_type([part/1, highlighters/0, styling/1]). + +-type part(FRE) :: {part, binary(), list(FRE), fun((binary()) -> binary())} | + {all, binary()}. + +-type highlighters() :: {highlighters, + fun((binary()) -> binary()), + fun((binary()) -> binary()), + fun((binary()) -> binary())}. + +-opaque styling(FRF) :: {styling, + gap@comparison:comparison(FRF), + gleam@option:option(fun((part(FRF)) -> binary())), + gleam@option:option(highlighters())}. + +-spec from_comparison(gap@comparison:comparison(FRI)) -> styling(FRI). +from_comparison(Comparison) -> + {styling, Comparison, none, none}. + +-spec highlight( + styling(FRL), + fun((binary()) -> binary()), + fun((binary()) -> binary()), + fun((binary()) -> binary()) +) -> styling(FRL). +highlight(Styling, First, Second, Matching) -> + erlang:setelement( + 4, + Styling, + {some, {highlighters, First, Second, Matching}} + ). + +-spec serialize(styling(FRO), fun((part(FRO)) -> binary())) -> styling(FRO). +serialize(Styling, Serializer) -> + erlang:setelement(3, Styling, {some, Serializer}). + +-spec first_highlight_default(binary()) -> binary(). +first_highlight_default(String) -> + case String of + <<" "/utf8>> -> + _pipe = String, + _pipe@1 = gleam_community@ansi:underline(_pipe), + _pipe@2 = gleam_community@ansi:bold(_pipe@1), + gleam_community@ansi:green(_pipe@2); + + _ -> + _pipe@3 = String, + _pipe@4 = gleam_community@ansi:green(_pipe@3), + gleam_community@ansi:bold(_pipe@4) + end. + +-spec second_highlight_default(binary()) -> binary(). +second_highlight_default(String) -> + case String of + <<" "/utf8>> -> + _pipe = String, + _pipe@1 = gleam_community@ansi:underline(_pipe), + _pipe@2 = gleam_community@ansi:bold(_pipe@1), + gleam_community@ansi:red(_pipe@2); + + _ -> + _pipe@3 = String, + _pipe@4 = gleam_community@ansi:red(_pipe@3), + gleam_community@ansi:bold(_pipe@4) + end. + +-spec no_highlight(binary()) -> binary(). +no_highlight(String) -> + String. + +-spec string_serializer(part(binary())) -> binary(). +string_serializer(Part) -> + case Part of + {part, Acc, Sequence, Highlight} -> + <<Acc/binary, + (begin + _pipe = Sequence, + _pipe@1 = gleam@list:map(_pipe, Highlight), + gleam@string:join(_pipe@1, <<""/utf8>>) + end)/binary>>; + + {all, String} -> + String + end. + +-spec mk_generic_serializer(binary(), fun((binary()) -> binary())) -> fun((part(any())) -> binary()). +mk_generic_serializer(Separator, Around) -> + fun(Part) -> case Part of + {part, Acc, Sequence, Highlight} -> + Segment_separator = case Acc of + <<""/utf8>> -> + <<""/utf8>>; + + _ -> + Separator + end, + <<<<Acc/binary, Segment_separator/binary>>/binary, + (begin + _pipe = Sequence, + _pipe@1 = gleam@list:map( + _pipe, + fun gleam@string:inspect/1 + ), + _pipe@2 = gleam@list:map(_pipe@1, Highlight), + gleam@string:join(_pipe@2, Separator) + end)/binary>>; + + {all, String} -> + Around(String) + end end. + +-spec generic_serializer(part(any())) -> binary(). +generic_serializer(Part) -> + (mk_generic_serializer( + <<", "/utf8>>, + fun(All) -> <<<<"["/utf8, All/binary>>/binary, "]"/utf8>> end + ))(Part). + +-spec to_strings( + list(gap@comparison:match(list(FRY))), + list(gap@comparison:match(list(FRY))), + fun((part(FRY)) -> binary()), + fun((binary()) -> binary()), + fun((binary()) -> binary()), + fun((binary()) -> binary()) +) -> gap@styled_comparison:styled_comparison(). +to_strings( + First, + Second, + Serializer, + First_highlight, + Second_highlight, + No_highlight +) -> + First_styled = begin + _pipe = First, + gleam@list:fold(_pipe, <<""/utf8>>, fun(Str, Match) -> case Match of + {match, Item} -> + Serializer({part, Str, Item, No_highlight}); + + {no_match, Item@1} -> + Serializer({part, Str, Item@1, First_highlight}) + end end) + end, + Second_styled = begin + _pipe@1 = Second, + gleam@list:fold( + _pipe@1, + <<""/utf8>>, + fun(Str@1, Match@1) -> case Match@1 of + {match, Item@2} -> + Serializer({part, Str@1, Item@2, No_highlight}); + + {no_match, Item@3} -> + Serializer({part, Str@1, Item@3, Second_highlight}) + end end + ) + end, + {styled_comparison, + Serializer({all, First_styled}), + Serializer({all, Second_styled})}. + +-spec to_styled_comparison(styling(any())) -> gap@styled_comparison:styled_comparison(). +to_styled_comparison(Styling) -> + Highlight = begin + _pipe = erlang:element(4, Styling), + gleam@option:unwrap( + _pipe, + {highlighters, + fun first_highlight_default/1, + fun second_highlight_default/1, + fun no_highlight/1} + ) + end, + case erlang:element(2, Styling) of + {string_comparison, First, Second} -> + to_strings( + First, + Second, + fun string_serializer/1, + erlang:element(2, Highlight), + erlang:element(3, Highlight), + erlang:element(4, Highlight) + ); + + {list_comparison, First@1, Second@1} -> + to_strings( + First@1, + Second@1, + gleam@option:unwrap( + erlang:element(3, Styling), + fun generic_serializer/1 + ), + erlang:element(2, Highlight), + erlang:element(3, Highlight), + erlang:element(4, Highlight) + ) + end. diff --git a/aoc2023/build/packages/gap/src/gap_ffi.mjs b/aoc2023/build/packages/gap/src/gap_ffi.mjs new file mode 100644 index 0000000..235c80b --- /dev/null +++ b/aoc2023/build/packages/gap/src/gap_ffi.mjs @@ -0,0 +1,431 @@ +import { + Error, + List, + Ok, + inspect, + toList, + makeError, + isEqual, +} from "./gleam.mjs"; +import * as $option from "../gleam_stdlib/gleam/option.mjs"; + +const HASHCODE_CACHE = new WeakMap(); +const Nil = undefined; + +class MutableMap { + static #hashcode_cache = new WeakMap(); + + static hash(value) { + let existing = this.#hashcode_cache.get(value); + if (existing) { + return existing; + } else if (value instanceof Object) { + let hashcode = inspect(value); + HASHCODE_CACHE.set(value, hashcode); + return hashcode; + } else { + return value.toString(); + } + } + + constructor() { + this.entries = new globalThis.Map(); + } + + get size() { + return this.entries.size; + } + + inspect() { + let entries = [...this.entries.values()] + .map((pair) => inspect(pair)) + .join(", "); + return `map.from_list([${entries}])`; + } + + toList() { + return List.fromArray([...this.entries.values()]); + } + + insert(k, v) { + this.entries.set(MutableMap.hash(k), [k, v]); + return this; + } + + delete(k) { + this.entries.delete(MutableMap.hash(k)); + return this; + } + + get(key) { + let code = MutableMap.hash(key); + if (this.entries.has(code)) { + return new Ok(this.entries.get(code)[1]); + } else { + return new Error(Nil); + } + } +} + +export function new_mutable_map() { + return new MutableMap(); +} + +export function mutable_map_size(map) { + return map.size; +} + +export function mutable_map_to_list(map) { + return map.toList(); +} + +export function mutable_map_remove(k, map) { + return map.delete(k); +} + +export function mutable_map_get(map, key) { + return map.get(key); +} + +export function mutable_map_insert(key, value, map) { + return map.insert(key, value); +} + +// From map.mjs + +export function size(map) { + return mutable_map_size(map); +} + +export function to_list(map) { + return mutable_map_to_list(map); +} + +export function new$() { + return new_mutable_map(); +} + +export function get(from, get) { + return mutable_map_get(from, get); +} + +function do_has_key(key, map) { + return !isEqual(get(map, key), new Error(undefined)); +} + +export function has_key(map, key) { + return do_has_key(key, map); +} + +export function insert(map, key, value) { + return mutable_map_insert(key, value, map); +} + +function insert_pair(map, pair) { + return insert(map, pair[0], pair[1]); +} + +export function update(map, key, fun) { + let _pipe = map; + let _pipe$1 = get(_pipe, key); + let _pipe$2 = $option.from_result(_pipe$1); + let _pipe$3 = fun(_pipe$2); + return ((_capture) => { + return insert(map, key, _capture); + })(_pipe$3); +} + +export function delete$(map, key) { + return mutable_map_remove(key, map); +} + +function fold_list_of_pair(loop$list, loop$initial) { + while (true) { + let list = loop$list; + let initial = loop$initial; + if (list.hasLength(0)) { + return initial; + } else if (list.atLeastLength(1)) { + let x = list.head; + let rest = list.tail; + loop$list = rest; + loop$initial = insert(initial, x[0], x[1]); + } else { + throw makeError( + "case_no_match", + "gleam/map", + 98, + "fold_list_of_pair", + "No case clause matched", + { values: [list] } + ); + } + } +} + +function do_from_list(list) { + return fold_list_of_pair(list, new$()); +} + +export function from_list(list) { + return do_from_list(list); +} + +function do_fold(loop$list, loop$initial, loop$fun) { + while (true) { + let list = loop$list; + let initial = loop$initial; + let fun = loop$fun; + if (list.hasLength(0)) { + return initial; + } else if (list.atLeastLength(1)) { + let k = list.head[0]; + let v = list.head[1]; + let tail = list.tail; + loop$list = tail; + loop$initial = fun(initial, k, v); + loop$fun = fun; + } else { + throw makeError( + "case_no_match", + "gleam/map", + 558, + "do_fold", + "No case clause matched", + { values: [list] } + ); + } + } +} + +export function fold(map, initial, fun) { + let _pipe = map; + let _pipe$1 = to_list(_pipe); + return do_fold(_pipe$1, initial, fun); +} + +function do_map_values(f, map) { + let f$1 = (map, k, v) => { + return insert(map, k, f(k, v)); + }; + let _pipe = map; + return fold(_pipe, new$(), f$1); +} + +export function map_values(map, fun) { + return do_map_values(fun, map); +} + +function do_filter(f, map) { + let insert$1 = (map, k, v) => { + let $ = f(k, v); + if ($) { + return insert(map, k, v); + } else { + return map; + } + }; + let _pipe = map; + return fold(_pipe, new$(), insert$1); +} + +export function filter(map, property) { + return do_filter(property, map); +} + +function do_keys_acc(loop$list, loop$acc) { + while (true) { + let list = loop$list; + let acc = loop$acc; + if (list.hasLength(0)) { + return reverse_and_concat(acc, toList([])); + } else if (list.atLeastLength(1)) { + let x = list.head; + let xs = list.tail; + loop$list = xs; + loop$acc = toList([x[0]], acc); + } else { + throw makeError( + "case_no_match", + "gleam/map", + 276, + "do_keys_acc", + "No case clause matched", + { values: [list] } + ); + } + } +} + +function do_keys(map) { + let list_of_pairs = (() => { + let _pipe = map; + return to_list(_pipe); + })(); + return do_keys_acc(list_of_pairs, toList([])); +} + +export function keys(map) { + return do_keys(map); +} + +function reverse_and_concat(loop$remaining, loop$accumulator) { + while (true) { + let remaining = loop$remaining; + let accumulator = loop$accumulator; + if (remaining.hasLength(0)) { + return accumulator; + } else if (remaining.atLeastLength(1)) { + let item = remaining.head; + let rest = remaining.tail; + loop$remaining = rest; + loop$accumulator = toList([item], accumulator); + } else { + throw makeError( + "case_no_match", + "gleam/map", + 269, + "reverse_and_concat", + "No case clause matched", + { values: [remaining] } + ); + } + } +} + +function do_values_acc(loop$list, loop$acc) { + while (true) { + let list = loop$list; + let acc = loop$acc; + if (list.hasLength(0)) { + return reverse_and_concat(acc, toList([])); + } else if (list.atLeastLength(1)) { + let x = list.head; + let xs = list.tail; + loop$list = xs; + loop$acc = toList([x[1]], acc); + } else { + throw makeError( + "case_no_match", + "gleam/map", + 314, + "do_values_acc", + "No case clause matched", + { values: [list] } + ); + } + } +} + +function do_values(map) { + let list_of_pairs = (() => { + let _pipe = map; + return to_list(_pipe); + })(); + return do_values_acc(list_of_pairs, toList([])); +} + +export function values(map) { + return do_values(map); +} + +function insert_taken(loop$map, loop$desired_keys, loop$acc) { + while (true) { + let map = loop$map; + let desired_keys = loop$desired_keys; + let acc = loop$acc; + let insert$1 = (taken, key) => { + let $ = get(map, key); + if ($.isOk()) { + let value = $[0]; + return insert(taken, key, value); + } else { + return taken; + } + }; + if (desired_keys.hasLength(0)) { + return acc; + } else if (desired_keys.atLeastLength(1)) { + let x = desired_keys.head; + let xs = desired_keys.tail; + loop$map = map; + loop$desired_keys = xs; + loop$acc = insert$1(acc, x); + } else { + throw makeError( + "case_no_match", + "gleam/map", + 411, + "insert_taken", + "No case clause matched", + { values: [desired_keys] } + ); + } + } +} + +function do_take(desired_keys, map) { + return insert_taken(map, desired_keys, new$()); +} + +export function take(map, desired_keys) { + return do_take(desired_keys, map); +} + +function fold_inserts(loop$new_entries, loop$map) { + while (true) { + let new_entries = loop$new_entries; + let map = loop$map; + if (new_entries.hasLength(0)) { + return map; + } else if (new_entries.atLeastLength(1)) { + let x = new_entries.head; + let xs = new_entries.tail; + loop$new_entries = xs; + loop$map = insert_pair(map, x); + } else { + throw makeError( + "case_no_match", + "gleam/map", + 451, + "fold_inserts", + "No case clause matched", + { values: [new_entries] } + ); + } + } +} + +function do_merge(map, new_entries) { + let _pipe = new_entries; + let _pipe$1 = to_list(_pipe); + return fold_inserts(_pipe$1, map); +} + +export function merge(map, new_entries) { + return do_merge(map, new_entries); +} + +export function drop(loop$map, loop$disallowed_keys) { + while (true) { + let map = loop$map; + let disallowed_keys = loop$disallowed_keys; + if (disallowed_keys.hasLength(0)) { + return map; + } else if (disallowed_keys.atLeastLength(1)) { + let x = disallowed_keys.head; + let xs = disallowed_keys.tail; + loop$map = delete$(map, x); + loop$disallowed_keys = xs; + } else { + throw makeError( + "case_no_match", + "gleam/map", + 514, + "drop", + "No case clause matched", + { values: [disallowed_keys] } + ); + } + } +} diff --git a/aoc2023/build/packages/gleam.lock b/aoc2023/build/packages/gleam.lock new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/aoc2023/build/packages/gleam.lock diff --git a/aoc2023/build/packages/gleam_community_ansi/LICENCE b/aoc2023/build/packages/gleam_community_ansi/LICENCE new file mode 100644 index 0000000..a84f0ec --- /dev/null +++ b/aoc2023/build/packages/gleam_community_ansi/LICENCE @@ -0,0 +1,190 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2023 Gleam Community Contributors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.
\ No newline at end of file diff --git a/aoc2023/build/packages/gleam_community_ansi/README.md b/aoc2023/build/packages/gleam_community_ansi/README.md new file mode 100644 index 0000000..90ab0d5 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_ansi/README.md @@ -0,0 +1,72 @@ +# gleam-community/ansi + +Format text with ANSI escape sequences. + +[](https://hex.pm/packages/gleam_community_ansi) +[](https://hexdocs.pm/gleam_community_ansi/) + +✨ This project is written in _pure Gleam_ so you can use it anywhere Gleam runs: +Erlang, Elixir, Node, Deno, even [some browsers](https://bit.ly/devtools-console-ansi-support)! + +--- + +## Quickstart + +```gleam +import gleam/io +import gleam_community/ansi + +pub fn main() { + let greeting = "Hello, " <> ansi.pink("world") <> "!" + + greeting + |> ansi.bg_white + |> io.println +} + +``` + +## Installation + +`gleam_community` packages are published to [hex.pm](https://hex.pm/packages/gleam_community_ansi) +with the prefix `gleam_community_`. You can add them to your Gleam projects directly: + +```sh +gleam add gleam_community_ansi +``` + +The docs can be found over at [hexdocs.pm](https://hexdocs.pm/gleam_community_ansi). + +## ANSI-what? + +ANSI escape sequences date back to the 70s as a standard way to format text on +various video text terminals. Since then they have been adopted by many software +terminal emulators and platforms, including some Web browsers, and are a simple +way to format text without platform-specific APIs. + +The point of this package is to abstract the specific codes away and give you an +easy-to-understand API for formatting and colouring terminal text. Still, here is +a quick couple of examples of what's happening under the hood. + +You can copy these examples straight into your terminal to see them in action! + +- Colour text yellow: + + ```shell + $ echo "\e[33mhello" + ``` + +- Colour the background pink: + + ```shell + $ echo "\e[45mhello" + ``` + +- Render text italic: + + ```shell + $ echo "\e[3mhello\e[23m" + ``` + +As you can see, the escape sequences are a bit obscure. Sure, you could hard code +them, or you could use this package! diff --git a/aoc2023/build/packages/gleam_community_ansi/gleam.toml b/aoc2023/build/packages/gleam_community_ansi/gleam.toml new file mode 100644 index 0000000..5da1f7e --- /dev/null +++ b/aoc2023/build/packages/gleam_community_ansi/gleam.toml @@ -0,0 +1,13 @@ +name = "gleam_community_ansi" +version = "1.2.0" +licences = ["Apache-2.0"] +description = "ANSI colours, formatting, and control codes" +repository = { type = "github", user = "gleam-community", repo = "ansi" } +gleam = ">= 0.32.0" + +[dependencies] +gleam_stdlib = "~> 0.32" +gleam_community_colour = "~> 1.2" + +[dev-dependencies] +gleeunit = "~> 0.11" diff --git a/aoc2023/build/packages/gleam_community_ansi/src/gleam_community/ansi.gleam b/aoc2023/build/packages/gleam_community_ansi/src/gleam_community/ansi.gleam new file mode 100644 index 0000000..a542dda --- /dev/null +++ b/aoc2023/build/packages/gleam_community_ansi/src/gleam_community/ansi.gleam @@ -0,0 +1,2317 @@ +//// +//// - **Text style** +//// - [`bold`](#bold) +//// - [`italic`](#italic) +//// - [`underline`](#underline) +//// - [`strikethrough`](#strikethrough) +//// - [`inverse`](#inverse) +//// - [`dim`](#dim) +//// - [`hidden`](#hidden) +//// - [`reset`](#reset) +//// - **Text colour** +//// - [`black`](#black) +//// - [`red`](#red) +//// - [`green`](#green) +//// - [`yellow`](#yellow) +//// - [`blue`](#blue) +//// - [`magenta`](#magenta) +//// - [`cyan`](#cyan) +//// - [`white`](#white) +//// - [`pink`](#pink) +//// - [`grey`](#grey) +//// - [`gray`](#gray) +//// - [`bright_black`](#bright_black) +//// - [`bright_red`](#bright_red) +//// - [`bright_green`](#bright_green) +//// - [`bright_yellow`](#bright_yellow) +//// - [`bright_blue`](#bright_blue) +//// - [`bright_magenta`](#bright_magenta) +//// - [`bright_cyan`](#bright_cyan) +//// - [`bright_white`](#bright_white) +//// - [`hex`](#hex) +//// - [`colour`](#colour) +//// - [`color`](#color) +//// - **Background colour** +//// - [`bg_black`](#bg_black) +//// - [`bg_red`](#bg_red) +//// - [`bg_green`](#bg_green) +//// - [`bg_yellow`](#bg_yellow) +//// - [`bg_blue`](#bg_blue) +//// - [`bg_magenta`](#bg_magenta) +//// - [`bg_cyan`](#bg_cyan) +//// - [`bg_white`](#bg_white) +//// - [`bg_pink`](#bg_pink) +//// - [`bg_bright_black`](#bg_bright_black) +//// - [`bg_bright_red`](#bg_bright_red) +//// - [`bg_bright_green`](#bg_bright_green) +//// - [`bg_bright_yellow`](#bg_bright_yellow) +//// - [`bg_bright_blue`](#bg_bright_blue) +//// - [`bg_bright_magenta`](#bg_bright_magenta) +//// - [`bg_bright_cyan`](#bg_bright_cyan) +//// - [`bg_bright_white`](#bg_bright_white) +//// - [`bg_hex`](#bg_hex) +//// - [`bg_colour`](#bg_colour) +//// - [`bg_color`](#bg_color) +//// +//// --- +//// +//// This package was heavily inspired by the `colours` module in the Deno standard +//// library. The original source code can be found +//// <a href="https://deno.land/std@0.167.0/fmt/colours.ts">here</a>. +//// +//// <details> +//// <summary>The license of that package is produced below:</summary> +//// +//// +//// > MIT License +//// +//// > Copyright 2018-2022 the Deno authors. +//// +//// > Permission is hereby granted, free of charge, to any person obtaining a copy +//// of this software and associated documentation files (the "Software"), to deal +//// in the Software without restriction, including without limitation the rights +//// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +//// copies of the Software, and to permit persons to whom the Software is +//// furnished to do so, subject to the following conditions: +//// +//// > The above copyright notice and this permission notice shall be included in all +//// copies or substantial portions of the Software. +//// </details> +//// + +// Just in case we decide in the future to no longer include the above reference +// and license, this package was initially a port of the Deno `colours` module: +// +// https://deno.land/std@0.167.0/fmt/colours.ts +// + +// This seems like a really handy reference if/when we want to expand this beyond +// formatting escape sequences: +// +// https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797 +// + +// IMPORTS -------------------------------------------------------------------- + +import gleam/int +import gleam/list +import gleam/string +import gleam_community/colour.{type Colour} as gc_colour + +// CONSTS --------------------------------------------------------------------- + +const asci_escape_character = "" + +// TYPES ---------------------------------------------------------------------- + +type Code { + Code(open: String, close: String, regexp: String) +} + +// UTILITY -------------------------------------------------------------------- + +/// Builds colour code +fn code(open: List(Int), close: Int) -> Code { + let close_str = int.to_string(close) + let open_strs = list.map(open, int.to_string) + + Code( + open: asci_escape_character <> "[" <> string.join(open_strs, ";") <> "m", + close: asci_escape_character <> "[" <> close_str <> "m", + regexp: asci_escape_character <> "[" <> close_str <> "m", + ) +} + +/// Applies colour and background based on colour code and its associated text +fn run(text: String, code: Code) -> String { + code.open <> string.replace(text, code.regexp, code.open) <> code.close +} + +// STYLES --------------------------------------------------------------------- + +/// Reset the text modified +pub fn reset(text: String) -> String { + run(text, code([0], 0)) +} + +/// Style the given text bold. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bold("lucy") +/// // => "\x1B[1mlucy\x1B[22m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[22m"` added to the string. This is the escape code +/// for the "default" bold/dim style of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// style, it will use both the outter style and the inner style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.dim("Isn't " <> ansi.bold("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be dim but the text "fun?" will be +/// both underlined, *and* bold! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bold(text: String) -> String { + run(text, code([1], 22)) +} + +/// Style the given text's colour to be dimmer. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.dim("lucy") +/// // => "\x1B[2mlucy\x1B[22m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[22m"` added to the string. This is the escape code +/// for the "default" bold/dim style of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// style, it will use both the outter style and the inner style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.dim("Isn't " <> ansi.bold("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be dim but the text "fun?" will be +/// both underlined, *and* bold! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn dim(text: String) -> String { + run(text, code([2], 22)) +} + +/// Style the given text italic. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.italic("lucy") +/// // => "\x1B[3mlucy\x1B[23m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[23m"` added to the string. This is the escape code +/// for the "default" italic style of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// style, it will use both the outter style and the inner style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.underline("Isn't " <> ansi.bold("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be underlined but the text "fun?" will be +/// both underlined, *and* bold! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn italic(text: String) -> String { + run(text, code([3], 23)) +} + +/// Style the given text's colour to be dimmer. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.underline("lucy") +/// // => "\x1B[4mlucy\x1B[24m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[24m"` added to the string. This is the escape code +/// for the "default" underline style of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// style, it will use both the outter style and the inner style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.dim("Isn't " <> ansi.bold("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be dim but the text "fun?" will be +/// both underlined, *and* bold! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn underline(text: String) -> String { + run(text, code([4], 24)) +} + +/// Inverse the given text's colour, and background colour. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.inverse("lucy") +/// // => "\x1B[7mlucy\x1B[27m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[27m"` added to the string. This is the escape code +/// for the "default" inverse style of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// style, it will use both the outter style and the inner style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.dim("Isn't " <> ansi.bold("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be dim but the text "fun?" will be +/// both underlined, *and* bold! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn inverse(text: String) -> String { + run(text, code([7], 27)) +} + +/// Style the given text to be hidden. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.hidden("lucy") +/// // => "\x1B[8mlucy\x1B[28m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[28m"` added to the string. This is the escape code +/// for the "default" hidden style of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// style, it will use both the outter style and the inner style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.dim("Isn't " <> ansi.bold("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be dim but the text "fun?" will be +/// both underlined, *and* bold! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn hidden(text: String) -> String { + run(text, code([8], 28)) +} + +/// Style the given text to be striked through. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.strikethrough("lucy") +/// // => "\x1B[9mlucy\x1B[29m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[29m"` added to the string. This is the escape code +/// for the "default" strikethrough style of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// style, it will use both the outter style and the inner style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.dim("Isn't " <> ansi.bold("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be dim but the text "fun?" will be +/// both underlined, *and* bold! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn strikethrough(text: String) -> String { + run(text, code([9], 29)) +} + +// FOREGROUND ----------------------------------------------------------------- + +/// Colour the given text black. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.black("lucy") +/// // => "\x1B[30mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn black(text: String) -> String { + run(text, code([30], 39)) +} + +/// Colour the given text red. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.red("lucy") +/// // => "\x1B[31mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn red(text: String) -> String { + run(text, code([31], 39)) +} + +/// Colour the given text green. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.green("lucy") +/// // => "\x1B[32mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn green(text: String) -> String { + run(text, code([32], 39)) +} + +/// Colour the given text yellow. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("lucy") +/// // => "\x1B[33mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn yellow(text: String) -> String { + run(text, code([33], 39)) +} + +/// Colour the given text blue. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.blue("lucy") +/// // => "\x1B[34mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn blue(text: String) -> String { + run(text, code([34], 39)) +} + +/// Colour the given text magenta. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.magenta("lucy") +/// // => "\x1B[35mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn magenta(text: String) -> String { + run(text, code([35], 39)) +} + +/// Colour the given text cyan. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.cyan("lucy") +/// // => "\x1B[36mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn cyan(text: String) -> String { + run(text, code([36], 39)) +} + +/// Colour the given text white. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.white("lucy") +/// // => "\x1B[37mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn white(text: String) -> String { + run(text, code([37], 39)) +} + +/// Colour the given text gray. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.gray("lucy") +/// // => "\x1B[90mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn grey(text: String) -> String { + bright_black(text) +} + +/// This is an alias for [`grey`](#grey) for those who prefer the American English +/// spelling. +/// +pub fn gray(text: String) -> String { + bright_black(text) +} + +/// Colour the given text bright black. This should increase the luminosity of +/// the base colour, but some terminals will interpret this as bold instead. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bright_black("lucy") +/// // => "\x1B[90mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bright_black(text: String) -> String { + run(text, code([90], 39)) +} + +/// Colour the given text bright red. This should increase the luminosity of +/// the base colour, but some terminals will interpret this as bold instead. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bright_red("lucy") +/// // => "\x1B[91mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bright_red(text: String) -> String { + run(text, code([91], 39)) +} + +/// Colour the given text bright green. This should increase the luminosity of +/// the base colour, but some terminals will interpret this as bold instead. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// ansi.bright_green("lucy") +/// // => "\x1B[92mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href=""> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bright_green(text: String) -> String { + run(text, code([92], 39)) +} + +/// Colour the given text bright yellow. This should increase the luminosity of +/// the base colour, but some terminals will interpret this as bold instead. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// ansi.bright_yellow("lucy") +/// // => "\x1B[93mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href=""> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bright_yellow(text: String) -> String { + run(text, code([93], 39)) +} + +/// Colour the given text bright blue. This should increase the luminosity of +/// the base colour, but some terminals will interpret this as bold instead. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// ansi.bright_blue("lucy") +/// // => "\x1B[94mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href=""> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bright_blue(text: String) -> String { + run(text, code([94], 39)) +} + +/// Colour the given text bright gremagentaen. This should increase the luminosity +/// of the base colour, but some terminals will interpret this as bold instead. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// ansi.bright_magenta("lucy") +/// // => "\x1B[95mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href=""> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bright_magenta(text: String) -> String { + run(text, code([95], 39)) +} + +/// Colour the given text bright cyan. This should increase the luminosity of +/// the base colour, but some terminals will interpret this as bold instead. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// ansi.bright_cyan("lucy") +/// // => "\x1B[96mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href=""> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bright_cyan(text: String) -> String { + run(text, code([96], 39)) +} + +/// Colour the given text bright white. This should increase the luminosity of +/// the base colour, but some terminals will interpret this as bold instead. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// ansi.bright_white("lucy") +/// // => "\x1B[97mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href=""> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bright_white(text: String) -> String { + run(text, code([97], 39)) +} + +/// Colour the given text pink. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.pink("lucy") +/// // => "\x1B[38;2;255;175;243mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn pink(text: String) -> String { + hex(text, 0xffaff3) +} + +/// Colour the given text the given colour represented by a hex `Int`. +/// +/// The given hex Int can be any valid [shorthand hexadecimal form](https://en.wikipedia.org/wiki/Web_colors#Shorthand_hexadecimal_form). +/// +/// ❗️ Note that if supplied hex Int is less than 0 or larger than 0xfffff the +/// colour will be set to black and white respectively. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.hex("lucy", 0xffaff3) +/// // => "\x1B[38;2;255;175;243mlucy\x1B[39m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn hex(text: String, colour: Int) -> String { + let colour = int.clamp(colour, max: 0xffffff, min: 0x0) + run( + text, + code( + [ + 38, + 2, + int.bitwise_shift_right(colour, 16) + |> int.bitwise_and(0xff), + int.bitwise_shift_right(colour, 8) + |> int.bitwise_and(0xff), + int.bitwise_and(colour, 0xff), + ], + 39, + ), + ) +} + +/// Colour the given text the given colour represented by a `Colour`. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// import gleam_community/colour.{Colour} +/// +/// fn example() { +/// let pink = colour.from_hsl(0.8583, 1.0, 0,84) +/// ansi.colour("lucy", pink) +/// // => "\x1B[48;2;255;175;243mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn colour(text: String, colour: Colour) -> String { + let hex_colour = gc_colour.to_rgb_hex(colour) + hex(text, hex_colour) +} + +/// This is an alias for [`colour`](#colour) for those who prefer the American English +/// spelling. +/// +pub fn color(text: String, color: Colour) -> String { + colour(text, color) +} + +// BACKGROUND ----------------------------------------------------------------- + +/// Colour the given text's background black. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bg_black("lucy") +/// // => "\x1B[40mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_black(text: String) -> String { + run(text, code([40], 49)) +} + +/// Colour the given text's background red. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bg_red("lucy") +/// // => "\x1B[41mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_red(text: String) -> String { + run(text, code([41], 49)) +} + +/// Colour the given text's background green. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bg_green("lucy") +/// // => "\x1B[42mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_green(text: String) -> String { + run(text, code([42], 49)) +} + +/// Colour the given text's background yellow. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bg_yellow("lucy") +/// // => "\x1B[43mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_yellow(text: String) -> String { + run(text, code([43], 49)) +} + +/// Colour the given text's background blue. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bg_blue("lucy") +/// // => "\x1B[44mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_blue(text: String) -> String { + run(text, code([44], 49)) +} + +/// Colour the given text's background magenta. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bg_magenta("lucy") +/// // => "\x1B[45mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_magenta(text: String) -> String { + run(text, code([45], 49)) +} + +/// Colour the given text's background cyan. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bg_cyan("lucy") +/// // => "\x1B[46mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_cyan(text: String) -> String { + run(text, code([46], 49)) +} + +/// Colour the given text's background white. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bg_white("lucy") +/// // => "\x1B[47mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_white(text: String) -> String { + run(text, code([47], 49)) +} + +/// Colour the given text's background bright black. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bg_bright_black("lucy") +/// // => "\x1B[100mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_bright_black(text: String) -> String { + run(text, code([100], 49)) +} + +/// Colour the given text's background bright red. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bg_bright_red("lucy") +/// // => "\x1B[101mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_bright_red(text: String) -> String { + run(text, code([101], 49)) +} + +/// Colour the given text's background bright green. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bg_bright_green("lucy") +/// // => "\x1B[102mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_bright_green(text: String) -> String { + run(text, code([102], 49)) +} + +/// Colour the given text's background bright yellow. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bg_bright_yellow("lucy") +/// // => "\x1B[103mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_bright_yellow(text: String) -> String { + run(text, code([103], 49)) +} + +/// Colour the given text's background bright blue. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bg_bright_blue("lucy") +/// // => "\x1B[104mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_bright_blue(text: String) -> String { + run(text, code([104], 49)) +} + +/// Colour the given text's background bright magenta. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bg_bright_magenta("lucy") +/// // => "\x1B[105mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_bright_magenta(text: String) -> String { + run(text, code([105], 49)) +} + +/// Colour the given text's background bright cyan. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bg_bright_cyan("lucy") +/// // => "\x1B[106mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_bright_cyan(text: String) -> String { + run(text, code([106], 49)) +} + +/// Colour the given text's background bright white. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bg_bright_white("lucy") +/// // => "\x1B[107mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_bright_white(text: String) -> String { + run(text, code([107], 49)) +} + +/// Colour the given text's background pink. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.bg_pink("lucy") +/// // => "\x1B[48;2;255;175;243mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_pink(text: String) -> String { + bg_hex(text, 0xffaff3) +} + +/// Colour the given text's background the given colour represented by a hex `Int`. +/// +/// The given hex Int can be any valid [shorthand hexadecimal form](https://en.wikipedia.org/wiki/Web_colors#Shorthand_hexadecimal_form). +/// +/// ❗️ Note that if supplied hex Int is less than 0 or larger than 0xfffff the +/// colour will be set to black and white respectively. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.hex("lucy", 0xffaff3) +/// // => "\x1B[48;2;255;175;243mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_hex(text: String, colour: Int) -> String { + run( + text, + code( + [ + 48, + 2, + int.bitwise_shift_right(colour, 16) + |> int.bitwise_and(0xff), + int.bitwise_shift_right(colour, 8) + |> int.bitwise_and(0xff), + int.bitwise_and(colour, 0xff), + ], + 49, + ), + ) +} + +/// Colour the given text's background with the given colour represented by a `Colour`. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// import gleam_community/ansi +/// import gleam_community/colour.{Colour} +/// +/// fn example() { +/// let pink = colour.from_hsl(0.8583, 1.0, 0,84) +/// ansi.bg_colour("lucy", pink) +/// // => "\x1B[48;2;255;175;243mlucy\x1B[49m" +/// } +/// ``` +/// +/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code +/// for the "default" colour of the terminal. This means text you write after +/// this will revert back to default. +/// +/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default +/// colour, it will use the colour of the outter style. +/// +/// ```gleam +/// import gleam_community/ansi +/// +/// fn example() { +/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?") +/// } +/// ``` +/// +/// In this example, the text "Gleam" will be pink but the text "fun?" will be +/// yellow, *not* the default colour! +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn bg_colour(text: String, colour: Colour) -> String { + let hex_colour = gc_colour.to_rgb_hex(colour) + bg_hex(text, hex_colour) +} + +/// This is an alias for [`bg_colour`](#bg_colour) for those who prefer the American English +/// spelling. +/// +pub fn bg_color(text: String, colour: Colour) -> String { + bg_colour(text, colour) +} diff --git a/aoc2023/build/packages/gleam_community_ansi/src/gleam_community@ansi.erl b/aoc2023/build/packages/gleam_community_ansi/src/gleam_community@ansi.erl new file mode 100644 index 0000000..8b7a4c9 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_ansi/src/gleam_community@ansi.erl @@ -0,0 +1,263 @@ +-module(gleam_community@ansi). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([reset/1, bold/1, dim/1, italic/1, underline/1, inverse/1, hidden/1, strikethrough/1, black/1, red/1, green/1, yellow/1, blue/1, magenta/1, cyan/1, white/1, bright_black/1, grey/1, gray/1, bright_red/1, bright_green/1, bright_yellow/1, bright_blue/1, bright_magenta/1, bright_cyan/1, bright_white/1, hex/2, pink/1, colour/2, color/2, bg_black/1, bg_red/1, bg_green/1, bg_yellow/1, bg_blue/1, bg_magenta/1, bg_cyan/1, bg_white/1, bg_bright_black/1, bg_bright_red/1, bg_bright_green/1, bg_bright_yellow/1, bg_bright_blue/1, bg_bright_magenta/1, bg_bright_cyan/1, bg_bright_white/1, bg_hex/2, bg_pink/1, bg_colour/2, bg_color/2]). +-export_type([code/0]). + +-type code() :: {code, binary(), binary(), binary()}. + +-spec code(list(integer()), integer()) -> code(). +code(Open, Close) -> + Close_str = gleam@int:to_string(Close), + Open_strs = gleam@list:map(Open, fun gleam@int:to_string/1), + {code, + <<<<<<""/utf8, "["/utf8>>/binary, + (gleam@string:join(Open_strs, <<";"/utf8>>))/binary>>/binary, + "m"/utf8>>, + <<<<<<""/utf8, "["/utf8>>/binary, Close_str/binary>>/binary, "m"/utf8>>, + <<<<<<""/utf8, "["/utf8>>/binary, Close_str/binary>>/binary, "m"/utf8>>}. + +-spec run(binary(), code()) -> binary(). +run(Text, Code) -> + <<<<(erlang:element(2, Code))/binary, + (gleam@string:replace( + Text, + erlang:element(4, Code), + erlang:element(2, Code) + ))/binary>>/binary, + (erlang:element(3, Code))/binary>>. + +-spec reset(binary()) -> binary(). +reset(Text) -> + run(Text, code([0], 0)). + +-spec bold(binary()) -> binary(). +bold(Text) -> + run(Text, code([1], 22)). + +-spec dim(binary()) -> binary(). +dim(Text) -> + run(Text, code([2], 22)). + +-spec italic(binary()) -> binary(). +italic(Text) -> + run(Text, code([3], 23)). + +-spec underline(binary()) -> binary(). +underline(Text) -> + run(Text, code([4], 24)). + +-spec inverse(binary()) -> binary(). +inverse(Text) -> + run(Text, code([7], 27)). + +-spec hidden(binary()) -> binary(). +hidden(Text) -> + run(Text, code([8], 28)). + +-spec strikethrough(binary()) -> binary(). +strikethrough(Text) -> + run(Text, code([9], 29)). + +-spec black(binary()) -> binary(). +black(Text) -> + run(Text, code([30], 39)). + +-spec red(binary()) -> binary(). +red(Text) -> + run(Text, code([31], 39)). + +-spec green(binary()) -> binary(). +green(Text) -> + run(Text, code([32], 39)). + +-spec yellow(binary()) -> binary(). +yellow(Text) -> + run(Text, code([33], 39)). + +-spec blue(binary()) -> binary(). +blue(Text) -> + run(Text, code([34], 39)). + +-spec magenta(binary()) -> binary(). +magenta(Text) -> + run(Text, code([35], 39)). + +-spec cyan(binary()) -> binary(). +cyan(Text) -> + run(Text, code([36], 39)). + +-spec white(binary()) -> binary(). +white(Text) -> + run(Text, code([37], 39)). + +-spec bright_black(binary()) -> binary(). +bright_black(Text) -> + run(Text, code([90], 39)). + +-spec grey(binary()) -> binary(). +grey(Text) -> + bright_black(Text). + +-spec gray(binary()) -> binary(). +gray(Text) -> + bright_black(Text). + +-spec bright_red(binary()) -> binary(). +bright_red(Text) -> + run(Text, code([91], 39)). + +-spec bright_green(binary()) -> binary(). +bright_green(Text) -> + run(Text, code([92], 39)). + +-spec bright_yellow(binary()) -> binary(). +bright_yellow(Text) -> + run(Text, code([93], 39)). + +-spec bright_blue(binary()) -> binary(). +bright_blue(Text) -> + run(Text, code([94], 39)). + +-spec bright_magenta(binary()) -> binary(). +bright_magenta(Text) -> + run(Text, code([95], 39)). + +-spec bright_cyan(binary()) -> binary(). +bright_cyan(Text) -> + run(Text, code([96], 39)). + +-spec bright_white(binary()) -> binary(). +bright_white(Text) -> + run(Text, code([97], 39)). + +-spec hex(binary(), integer()) -> binary(). +hex(Text, Colour) -> + Colour@1 = gleam@int:clamp(Colour, 16#0, 16#ffffff), + run( + Text, + code( + [38, + 2, + begin + _pipe = erlang:'bsr'(Colour@1, 16), + erlang:'band'(_pipe, 16#ff) + end, + begin + _pipe@1 = erlang:'bsr'(Colour@1, 8), + erlang:'band'(_pipe@1, 16#ff) + end, + erlang:'band'(Colour@1, 16#ff)], + 39 + ) + ). + +-spec pink(binary()) -> binary(). +pink(Text) -> + hex(Text, 16#ffaff3). + +-spec colour(binary(), gleam_community@colour:colour()) -> binary(). +colour(Text, Colour) -> + Hex_colour = gleam_community@colour:to_rgb_hex(Colour), + hex(Text, Hex_colour). + +-spec color(binary(), gleam_community@colour:colour()) -> binary(). +color(Text, Color) -> + colour(Text, Color). + +-spec bg_black(binary()) -> binary(). +bg_black(Text) -> + run(Text, code([40], 49)). + +-spec bg_red(binary()) -> binary(). +bg_red(Text) -> + run(Text, code([41], 49)). + +-spec bg_green(binary()) -> binary(). +bg_green(Text) -> + run(Text, code([42], 49)). + +-spec bg_yellow(binary()) -> binary(). +bg_yellow(Text) -> + run(Text, code([43], 49)). + +-spec bg_blue(binary()) -> binary(). +bg_blue(Text) -> + run(Text, code([44], 49)). + +-spec bg_magenta(binary()) -> binary(). +bg_magenta(Text) -> + run(Text, code([45], 49)). + +-spec bg_cyan(binary()) -> binary(). +bg_cyan(Text) -> + run(Text, code([46], 49)). + +-spec bg_white(binary()) -> binary(). +bg_white(Text) -> + run(Text, code([47], 49)). + +-spec bg_bright_black(binary()) -> binary(). +bg_bright_black(Text) -> + run(Text, code([100], 49)). + +-spec bg_bright_red(binary()) -> binary(). +bg_bright_red(Text) -> + run(Text, code([101], 49)). + +-spec bg_bright_green(binary()) -> binary(). +bg_bright_green(Text) -> + run(Text, code([102], 49)). + +-spec bg_bright_yellow(binary()) -> binary(). +bg_bright_yellow(Text) -> + run(Text, code([103], 49)). + +-spec bg_bright_blue(binary()) -> binary(). +bg_bright_blue(Text) -> + run(Text, code([104], 49)). + +-spec bg_bright_magenta(binary()) -> binary(). +bg_bright_magenta(Text) -> + run(Text, code([105], 49)). + +-spec bg_bright_cyan(binary()) -> binary(). +bg_bright_cyan(Text) -> + run(Text, code([106], 49)). + +-spec bg_bright_white(binary()) -> binary(). +bg_bright_white(Text) -> + run(Text, code([107], 49)). + +-spec bg_hex(binary(), integer()) -> binary(). +bg_hex(Text, Colour) -> + run( + Text, + code( + [48, + 2, + begin + _pipe = erlang:'bsr'(Colour, 16), + erlang:'band'(_pipe, 16#ff) + end, + begin + _pipe@1 = erlang:'bsr'(Colour, 8), + erlang:'band'(_pipe@1, 16#ff) + end, + erlang:'band'(Colour, 16#ff)], + 49 + ) + ). + +-spec bg_pink(binary()) -> binary(). +bg_pink(Text) -> + bg_hex(Text, 16#ffaff3). + +-spec bg_colour(binary(), gleam_community@colour:colour()) -> binary(). +bg_colour(Text, Colour) -> + Hex_colour = gleam_community@colour:to_rgb_hex(Colour), + bg_hex(Text, Hex_colour). + +-spec bg_color(binary(), gleam_community@colour:colour()) -> binary(). +bg_color(Text, Colour) -> + bg_colour(Text, Colour). diff --git a/aoc2023/build/packages/gleam_community_ansi/src/gleam_community_ansi.app.src b/aoc2023/build/packages/gleam_community_ansi/src/gleam_community_ansi.app.src new file mode 100644 index 0000000..dfcfdc3 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_ansi/src/gleam_community_ansi.app.src @@ -0,0 +1,9 @@ +{application, gleam_community_ansi, [ + {vsn, "1.2.0"}, + {applications, [gleam_community_colour, + gleam_stdlib, + gleeunit]}, + {description, "ANSI colours, formatting, and control codes"}, + {modules, [gleam_community@ansi]}, + {registered, []} +]}. diff --git a/aoc2023/build/packages/gleam_community_colour/LICENCE b/aoc2023/build/packages/gleam_community_colour/LICENCE new file mode 100644 index 0000000..a84f0ec --- /dev/null +++ b/aoc2023/build/packages/gleam_community_colour/LICENCE @@ -0,0 +1,190 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2023 Gleam Community Contributors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.
\ No newline at end of file diff --git a/aoc2023/build/packages/gleam_community_colour/README.md b/aoc2023/build/packages/gleam_community_colour/README.md new file mode 100644 index 0000000..0eccdd7 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_colour/README.md @@ -0,0 +1,36 @@ +# gleam-community/colour + +A package for a standard Colour type, conversions, and other utilities. + +[](https://hex.pm/packages/gleam_community_colour) +[](https://hexdocs.pm/gleam_community_colour/) + +✨ This project is written in pure Gleam so you can use it anywhere Gleam runs: Erlang, Elixir, Node, Deno, and the browser! + +--- + +## Quickstart + +```gleam +import gleam_community/colour +import gleam_community/colour/accessibility + +pub fn main() { + let foreground = colour.from_hsl(h: 0.858, s: 1.0, l: 0.843) + + let background_options = [colour.light_grey, colour.dark_grey] + + let background = accessibility.maximum_contrast(foreground, background_options) +} +``` + +## Installation + +`gleam_community` packages are published to [hex.pm](https://hex.pm/packages/gleam_community_colour) +with the prefix `gleam_community_`. You can add them to your Gleam projects directly: + +```sh +gleam add gleam_community_colour +``` + +The docs can be found over at [hexdocs.pm](https://hexdocs.pm/gleam_community_colour). diff --git a/aoc2023/build/packages/gleam_community_colour/gleam.toml b/aoc2023/build/packages/gleam_community_colour/gleam.toml new file mode 100644 index 0000000..07a81bf --- /dev/null +++ b/aoc2023/build/packages/gleam_community_colour/gleam.toml @@ -0,0 +1,11 @@ +name = "gleam_community_colour" +version = "1.2.0" +licences = ["Apache-2.0"] +description = "Colour types, conversions, and other utilities" +repository = { type = "github", user = "gleam-community", repo = "colour" } + +[dependencies] +gleam_stdlib = "~> 0.32" + +[dev-dependencies] +gleeunit = "~> 0.11" diff --git a/aoc2023/build/packages/gleam_community_colour/include/gleam_community@colour_Hsla.hrl b/aoc2023/build/packages/gleam_community_colour/include/gleam_community@colour_Hsla.hrl new file mode 100644 index 0000000..06116df --- /dev/null +++ b/aoc2023/build/packages/gleam_community_colour/include/gleam_community@colour_Hsla.hrl @@ -0,0 +1 @@ +-record(hsla, {h :: float(), s :: float(), l :: float(), a :: float()}). diff --git a/aoc2023/build/packages/gleam_community_colour/include/gleam_community@colour_Rgba.hrl b/aoc2023/build/packages/gleam_community_colour/include/gleam_community@colour_Rgba.hrl new file mode 100644 index 0000000..fff139e --- /dev/null +++ b/aoc2023/build/packages/gleam_community_colour/include/gleam_community@colour_Rgba.hrl @@ -0,0 +1 @@ +-record(rgba, {r :: float(), g :: float(), b :: float(), a :: float()}). diff --git a/aoc2023/build/packages/gleam_community_colour/src/gleam_community/colour.gleam b/aoc2023/build/packages/gleam_community_colour/src/gleam_community/colour.gleam new file mode 100644 index 0000000..1f5872f --- /dev/null +++ b/aoc2023/build/packages/gleam_community_colour/src/gleam_community/colour.gleam @@ -0,0 +1,1126 @@ +//// +//// - **Types** +//// - [`Colour`](#Colour) +//// - [`Color`](#Color) +//// - **Constructors** +//// - [`from_rgb255`](#from_rgb255) +//// - [`from_rgb`](#from_rgb) +//// - [`from_rgba`](#from_rgba) +//// - [`from_hsl`](#from_hsl) +//// - [`from_hsla`](#from_hsla) +//// - [`from_rgb_hex`](#from_rgb_hex) +//// - [`from_rgba_hex`](#from_rgba_hex) +//// - [`from_rgb_hex_string`](#from_rgb_hex_string) +//// - [`from_rgba_hex_string`](#from_rgba_hex_string) +//// - **Conversions** +//// - [`to_rgba`](#to_rgba) +//// - [`to_hsla`](#hsla) +//// - [`to_css_rgba_string`](#to_css_rgba_string) +//// - [`to_rgba_hex_string`](#to_rgba_hex_string) +//// - [`to_rgb_hex_string`](#to_rgb_hex_string) +//// - [`to_rgba_hex`](#to_rgba_hex) +//// - [`to_rgb_hex`](#to_rgb_hex) +//// - **Colours** +//// - [`light_red`](#light_red) +//// - [`red`](#red) +//// - [`dark_red`](#dark_red) +//// - [`light_orange`](#light_orange) +//// - [`orange`](#orange) +//// - [`dark_orange`](#dark_orange) +//// - [`light_yellow`](#light_yellow) +//// - [`yellow`](#yellow) +//// - [`dark_yellow`](#dark_yellow) +//// - [`light_green`](#light_green) +//// - [`green`](#green) +//// - [`dark_green`](#dark_green) +//// - [`light_blue`](#light_blue) +//// - [`blue`](#blue) +//// - [`dark_blue`](#dark_blue) +//// - [`light_purple`](#light_purple) +//// - [`purple`](#purple) +//// - [`dark_purple`](#dark_purple) +//// - [`light_brown`](#light_brown) +//// - [`brown`](#brown) +//// - [`dark_brown`](#dark_brown) +//// - [`black`](#black) +//// - [`white`](#white) +//// - [`light_grey`](#light_grey) +//// - [`grey`](#grey) +//// - [`dark_grey`](#dark_grey) +//// - [`light_gray`](#light_gray) +//// - [`gray`](#gray) +//// - [`dark_gray`](#dark_gray) +//// - [`light_charcoal`](#light_charcoal) +//// - [`charcoal`](#charcoal) +//// - [`dark_charcoal`](#dark_charcoal) +//// - [`pink`](#pink) +//// +//// --- +//// +//// This package was heavily inspired by the `elm-color` module. +//// The original source code can be found +//// <a href="https://github.com/avh4/elm-color/">here</a>. +//// +//// <details> +//// <summary>The license of that package is produced below:</summary> +//// +//// +//// > MIT License +//// +//// > Copyright 2018 Aaron VonderHaar +//// +//// > Redistribution and use in source and binary forms, with or without modification, +//// are permitted provided that the following conditions are met: +//// +//// 1. Redistributions of source code must retain the above copyright notice, +//// this list of conditions and the following disclaimer. +//// +//// 2. Redistributions in binary form must reproduce the above copyright notice, +//// this list of conditions and the following disclaimer in the documentation +//// and/or other materials provided with the distribution. +//// +//// 3. Neither the name of the copyright holder nor the names of its contributors +//// may be used to endorse or promote products derived from this software without +//// specific prior written permission. +//// +//// > THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +//// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +//// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +//// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +//// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +//// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +//// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +//// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +//// +//// > The above copyright notice and this permission notice shall be included in all +//// copies or substantial portions of the Software. +//// </details> +//// + +// Just in case we decide in the future to no longer include the above reference +// and license, this package was initially a port of the `elm-color` module: +// +// https://github.com/avh4/elm-color/ +// + +// IMPORTS -------------------------------------------------------------------- + +import gleam/int +import gleam/float +import gleam/result +import gleam/string +import gleam/list + +// TYPES ---------------------------------------------------------------------- + +/// A representation of a colour that can be converted to RGBA or HSLA format. +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// </br> +/// +pub opaque type Colour { + Rgba(r: Float, g: Float, b: Float, a: Float) + Hsla(h: Float, s: Float, l: Float, a: Float) +} + +/// Type alias for `Colour` +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// </br> +/// +pub type Color = + Colour + +// UTILITY -------------------------------------------------------------------- + +fn valid_colour_value(c: Float) -> Result(Float, Nil) { + case c >. 1.0 || c <. 0.0 { + True -> Error(Nil) + False -> Ok(c) + } +} + +fn hue_to_rgb(hue: Float, m1: Float, m2: Float) -> Float { + let h = case hue { + _ if hue <. 0.0 -> hue +. 1.0 + _ if hue >. 1.0 -> hue -. 1.0 + _ -> hue + } + + let h_t_6 = h *. 6.0 + let h_t_2 = h *. 2.0 + let h_t_3 = h *. 3.0 + + case h { + _ if h_t_6 <. 1.0 -> m1 +. { m2 -. m1 } *. h *. 6.0 + _ if h_t_2 <. 1.0 -> m2 + _ if h_t_3 <. 2.0 -> m1 +. { m2 -. m1 } *. { 2.0 /. 3.0 -. h } *. 6.0 + _ -> m1 + } +} + +fn hex_string_to_int(hex_string: String) -> Result(Int, Nil) { + let hex = case hex_string { + "#" <> hex_number -> hex_number + "0x" <> hex_number -> hex_number + _ -> hex_string + } + + hex + |> string.lowercase() + |> string.to_graphemes() + |> list.reverse() + |> list.index_fold( + Ok(0), + fn(total, char, index) { + case total { + Error(Nil) -> Error(Nil) + Ok(v) -> { + use num <- result.then(case char { + "a" -> Ok(10) + "b" -> Ok(11) + "c" -> Ok(12) + "d" -> Ok(13) + "e" -> Ok(14) + "f" -> Ok(15) + _ -> int.parse(char) + }) + use base <- result.then(int.power(16, int.to_float(index))) + Ok(v + float.round(int.to_float(num) *. base)) + } + } + }, + ) +} + +fn hsla_to_rgba( + h: Float, + s: Float, + l: Float, + a: Float, +) -> #(Float, Float, Float, Float) { + let m2 = case l <=. 0.5 { + True -> l *. { s +. 1.0 } + False -> l +. s -. l *. s + } + + let m1 = l *. 2.0 -. m2 + + let r = hue_to_rgb(h +. 1.0 /. 3.0, m1, m2) + let g = hue_to_rgb(h, m1, m2) + let b = hue_to_rgb(h -. 1.0 /. 3.0, m1, m2) + + #(r, g, b, a) +} + +fn rgba_to_hsla( + r: Float, + g: Float, + b: Float, + a: Float, +) -> #(Float, Float, Float, Float) { + let min_colour = float.min(r, float.min(g, b)) + + let max_colour = float.max(r, float.max(g, b)) + + let h1 = case True { + _ if max_colour == r -> float.divide(g -. b, max_colour -. min_colour) + _ if max_colour == g -> + float.divide(b -. r, max_colour -. min_colour) + |> result.then(fn(d) { Ok(2.0 +. d) }) + _ -> + float.divide(r -. g, max_colour -. min_colour) + |> result.then(fn(d) { Ok(4.0 +. d) }) + } + + let h2 = case h1 { + Ok(v) -> Ok(v *. { 1.0 /. 6.0 }) + _ -> h1 + } + + let h3 = case h2 { + Ok(v) if v <. 0.0 -> v +. 1.0 + Ok(v) -> v + _ -> 0.0 + } + + let l = { min_colour +. max_colour } /. 2.0 + + let s = case True { + _ if min_colour == max_colour -> 0.0 + _ if l <. 0.5 -> + { max_colour -. min_colour } /. { max_colour +. min_colour } + _ -> { max_colour -. min_colour } /. { 2.0 -. max_colour -. min_colour } + } + + #(h3, s, l, a) +} + +// CONSTRUCTORS --------------------------------------------------------------- + +/// Returns a `Result(Colour)` created from the given 8 bit RGB values. +/// +/// Returns `Error(Nil)` if the supplied RGB values are greater than 255 or less than 0. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// assert Ok(red) = from_rgb255(255, 0, 0) +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn from_rgb255(r red: Int, g green: Int, b blue: Int) -> Result(Colour, Nil) { + use r <- result.then( + red + |> int.to_float() + |> float.divide(255.0) + |> result.then(valid_colour_value), + ) + + use g <- result.then( + green + |> int.to_float() + |> float.divide(255.0) + |> result.then(valid_colour_value), + ) + + use b <- result.then( + blue + |> int.to_float() + |> float.divide(255.0) + |> result.then(valid_colour_value), + ) + + Ok(Rgba(r: r, g: g, b: b, a: 1.0)) +} + +/// Returns `Result(Colour)` created from the given RGB values. +/// +/// If the supplied RGB values are greater than 1.0 or less than 0.0 returns `Error(Nil)` +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// assert Ok(red) = from_rgb(1.0, 0.0, 0.0) +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn from_rgb( + r red: Float, + g green: Float, + b blue: Float, +) -> Result(Colour, Nil) { + use r <- result.then(valid_colour_value(red)) + use g <- result.then(valid_colour_value(green)) + use b <- result.then(valid_colour_value(blue)) + + Ok(Rgba(r: r, g: g, b: b, a: 1.0)) +} + +/// Returns `Result(Colour)` created from the given RGBA values. +/// +/// Returns `Error(Nil)` if the supplied RGBA values are greater than 1.0 or less than 0.0. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// assert Ok(red_half_opacity) = from_rbga(1.0, 0.0, 0.0, 0.5) +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn from_rgba( + r red: Float, + g green: Float, + b blue: Float, + a alpha: Float, +) -> Result(Colour, Nil) { + use r <- result.then(valid_colour_value(red)) + use g <- result.then(valid_colour_value(green)) + use b <- result.then(valid_colour_value(blue)) + use a <- result.then(valid_colour_value(alpha)) + + Ok(Rgba(r: r, g: g, b: b, a: a)) +} + +/// Returns `Result(Colour)` created from the given HSLA values. +/// +/// Returns `Error(Nil)`f the supplied HSLA values are greater than 1.0 or less than 0.0. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// assert Ok(red_half_opacity) = from_hsla(0.0, 1.0, 0.5, 0.5) +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn from_hsla( + h hue: Float, + s saturation: Float, + l lightness: Float, + a alpha: Float, +) -> Result(Colour, Nil) { + use h <- result.then(valid_colour_value(hue)) + use s <- result.then(valid_colour_value(saturation)) + use l <- result.then(valid_colour_value(lightness)) + use a <- result.then(valid_colour_value(alpha)) + + Ok(Hsla(h: h, s: s, l: l, a: a)) +} + +/// Returns `Result(Colour)` created from the given HSL values. +/// +/// Returns `Error(Nil)` if the supplied HSL values are greater than 1.0 or less than 0.0. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// assert Ok(red) = from_hsla(0.0, 1.0, 0.5) +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn from_hsl( + h hue: Float, + s saturation: Float, + l lightness: Float, +) -> Result(Colour, Nil) { + from_hsla(hue, saturation, lightness, 1.0) +} + +/// Returns a `Result(Colour)` created from the given hex `Int`. +/// +/// Returns `Error(Nil)` if the supplied hex `Int is greater than 0xffffff or less than 0x0. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// assert Ok(red) = from_rgb_hex(0xff0000) +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn from_rgb_hex(hex: Int) -> Result(Colour, Nil) { + case hex > 0xffffff || hex < 0 { + True -> Error(Nil) + False -> { + let r = + int.bitwise_shift_right(hex, 16) + |> int.bitwise_and(0xff) + let g = + int.bitwise_shift_right(hex, 8) + |> int.bitwise_and(0xff) + let b = int.bitwise_and(hex, 0xff) + from_rgb255(r, g, b) + } + } +} + +/// Returns a `Result(Colour)` created from the given RGB hex `String`. +/// +/// Returns `Error(Nil)` if the supplied hex `String` is invalid, or greater than `"#ffffff" or less than `"#0"` +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// assert Ok(red) = from_rgb_hex_string("#ff0000") +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn from_rgb_hex_string(hex_string: String) -> Result(Colour, Nil) { + use hex_int <- result.then(hex_string_to_int(hex_string)) + + from_rgb_hex(hex_int) +} + +/// Returns a `Result(Colour)` created from the given RGBA hex `String`. +/// +/// Returns `Error(Nil)` if the supplied hex `String` is invalid, or greater than `"#ffffffff" or less than `"#0"` +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// assert Ok(red_half_opacity) = from_rgba_hex_string("#ff00007f") +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn from_rgba_hex_string(hex_string: String) -> Result(Colour, Nil) { + use hex_int <- result.then(hex_string_to_int(hex_string)) + + from_rgba_hex(hex_int) +} + +/// Returns a `Result(Colour)` created from the given hex `Int`. +/// +/// Returns `Error(Nil)` if the supplied hex `Int is greater than 0xffffffff or less than 0x0. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// assert Ok(red_half_opacity) = from_rgba_hex(0xff00007f) +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn from_rgba_hex(hex: Int) -> Result(Colour, Nil) { + case hex > 0xffffffff || hex < 0 { + True -> Error(Nil) + False -> { + // This won't fail because we are always dividing by 255.0 + let assert Ok(r) = + int.bitwise_shift_right(hex, 24) + |> int.bitwise_and(0xff) + |> int.to_float() + |> float.divide(255.0) + // This won't fail because we are always dividing by 255.0 + let assert Ok(g) = + int.bitwise_shift_right(hex, 16) + |> int.bitwise_and(0xff) + |> int.to_float() + |> float.divide(255.0) + // This won't fail because we are always dividing by 255.0 + let assert Ok(b) = + int.bitwise_shift_right(hex, 8) + |> int.bitwise_and(0xff) + |> int.to_float() + |> float.divide(255.0) + // This won't fail because we are always dividing by 255.0 + let assert Ok(a) = + int.bitwise_and(hex, 0xff) + |> int.to_float() + |> float.divide(255.0) + from_rgba(r, g, b, a) + } + } +} + +// CONVERSIONS ---------------------------------------------------------------- + +/// Returns `#(Float, Float, Float, Float)` representing the given `Colour`'s +/// R, G, B, and A values respectively. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// assert Ok(red) = from_rgb255(255, 0, 0) +/// let #(r, g, b, a) = to_rgba(red) +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn to_rgba(colour: Colour) -> #(Float, Float, Float, Float) { + case colour { + Rgba(r, g, b, a) -> #(r, g, b, a) + Hsla(h, s, l, a) -> hsla_to_rgba(h, s, l, a) + } +} + +/// Returns `#(Float, Float, Float, Float)` representing the given `Colour`'s +/// H, S, L, and A values respectively. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// assert Ok(red) = from_rgb255(255, 0, 0) +/// let #(h, s, l, a) = to_hsla(red) +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn to_hsla(colour: Colour) -> #(Float, Float, Float, Float) { + case colour { + Hsla(h, s, l, a) -> #(h, s, l, a) + Rgba(r, g, b, a) -> rgba_to_hsla(r, g, b, a) + } +} + +/// Returns an rgba formatted CSS `String` created from the given `Colour`. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// assert Ok(red) = from_rgb255(255, 0, 0) +/// let css_red = to_css_rgba_string(red) +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn to_css_rgba_string(colour: Colour) -> String { + let #(r, g, b, a) = to_rgba(colour) + + let percent = fn(x: Float) -> Float { + // This won't fail because we are always dividing by 100.0 + let assert Ok(p) = + x + |> float.multiply(10_000.0) + |> float.round() + |> int.to_float() + |> float.divide(100.0) + + p + } + + let round_to = fn(x: Float) -> Float { + // This won't fail because we are always dividing by 1000.0 + let assert Ok(r) = + x + |> float.multiply(1000.0) + |> float.round() + |> int.to_float() + |> float.divide(1000.0) + + r + } + + string.join( + [ + "rgba(", + float.to_string(percent(r)) <> "%,", + float.to_string(percent(g)) <> "%,", + float.to_string(percent(b)) <> "%,", + float.to_string(round_to(a)), + ")", + ], + "", + ) +} + +/// Returns an rgba hex formatted `String` created from the given `Colour`. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// assert Ok(red) = from_rgba(1.0, 0.0, 0.0, 1.0) +/// let red_hex = to_rgba_hex_string(red) +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn to_rgba_hex_string(colour: Colour) -> String { + to_rgba_hex(colour) + |> int.to_base16() +} + +/// Returns an rgb hex formatted `String` created from the given `Colour`. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// assert Ok(red) = from_rgba(255, 0, 0) +/// let red_hex = to_rgb_hex_string(red) +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn to_rgb_hex_string(colour: Colour) -> String { + to_rgb_hex(colour) + |> int.to_base16() +} + +/// Returns an hex `Int` created from the given `Colour`. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// assert Ok(red) = from_rgba(1.0, 0.0, 0.0, 1.0) +/// let red_hex_int = to_rgba_hex(red) +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn to_rgba_hex(colour: Colour) -> Int { + let #(r, g, b, a) = to_rgba(colour) + + let red = + r *. 255.0 + |> float.round() + |> int.bitwise_shift_left(24) + + let green = + g *. 255.0 + |> float.round() + |> int.bitwise_shift_left(16) + + let blue = + b *. 255.0 + |> float.round() + |> int.bitwise_shift_left(8) + + let alpha = + a *. 255.0 + |> float.round() + + red + green + blue + alpha +} + +/// Returns a rgb hex `Int` created from the given `Colour`. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// assert Ok(red) = from_rgba(255, 0, 0) +/// let red_hex_int = to_rgb_hex(red) +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn to_rgb_hex(colour: Colour) -> Int { + let #(r, g, b, _) = to_rgba(colour) + + let red = + r *. 255.0 + |> float.round() + |> int.bitwise_shift_left(16) + + let green = + g *. 255.0 + |> float.round() + |> int.bitwise_shift_left(8) + + let blue = + b *. 255.0 + |> float.round() + + red + green + blue +} + +// COLOURS -------------------------------------------------------------------- + +/// A `Colour` reprsenting the colour RGBA(239, 41, 41, 1.0) +pub const light_red = Rgba( + r: 0.9372549019607843, + g: 0.1607843137254902, + b: 0.1607843137254902, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(204, 0, 0, 1.0) +pub const red = Rgba(r: 0.8, g: 0.0, b: 0.0, a: 1.0) + +/// A `Colour` reprsenting the colour RGBA(164, 0, 0, 1.0) +pub const dark_red = Rgba(r: 0.6431372549019608, g: 0.0, b: 0.0, a: 1.0) + +/// A `Colour` reprsenting the colour RGBA(252, 175, 62, 1.0) +pub const light_orange = Rgba( + r: 0.9882352941176471, + g: 0.6862745098039216, + b: 0.24313725490196078, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(245, 121, 0, 1.0) +pub const orange = Rgba( + r: 0.9607843137254902, + g: 0.4745098039215686, + b: 0.0, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(206, 92, 0, 1.0) +pub const dark_orange = Rgba( + r: 0.807843137254902, + g: 0.3607843137254902, + b: 0.0, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(255, 233, 79, 1.0) +pub const light_yellow = Rgba( + r: 1.0, + g: 0.9137254901960784, + b: 0.30980392156862746, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(237, 212, 0, 1.0) +pub const yellow = Rgba( + r: 0.9294117647058824, + g: 0.8313725490196079, + b: 0.0, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(196, 160, 0, 1.0) +pub const dark_yellow = Rgba( + r: 0.7686274509803922, + g: 0.6274509803921569, + b: 0.0, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(138, 226, 52, 1.0) +pub const light_green = Rgba( + r: 0.5411764705882353, + g: 0.8862745098039215, + b: 0.20392156862745098, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(115, 210, 22, 1.0) +pub const green = Rgba( + r: 0.45098039215686275, + g: 0.8235294117647058, + b: 0.08627450980392157, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(78, 154, 6, 1.0) +pub const dark_green = Rgba( + r: 0.3058823529411765, + g: 0.6039215686274509, + b: 0.023529411764705882, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(114, 159, 207, 1.0) +pub const light_blue = Rgba( + r: 0.4470588235294118, + g: 0.6235294117647059, + b: 0.8117647058823529, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(52, 101, 164, 1.0) +pub const blue = Rgba( + r: 0.20392156862745098, + g: 0.396078431372549, + b: 0.6431372549019608, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(32, 74, 135, 1.0) +pub const dark_blue = Rgba( + r: 0.12549019607843137, + g: 0.2901960784313726, + b: 0.5294117647058824, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(173, 127, 168, 1.0) +pub const light_purple = Rgba( + r: 0.6784313725490196, + g: 0.4980392156862745, + b: 0.6588235294117647, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(117, 80, 123, 1.0) +pub const purple = Rgba( + r: 0.4588235294117647, + g: 0.3137254901960784, + b: 0.4823529411764706, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(92, 53, 102, 1.0) +pub const dark_purple = Rgba( + r: 0.3607843137254902, + g: 0.20784313725490197, + b: 0.4, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(233, 185, 110, 1.0) +pub const light_brown = Rgba( + r: 0.9137254901960784, + g: 0.7254901960784313, + b: 0.43137254901960786, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(193, 125, 17, 1.0) +pub const brown = Rgba( + r: 0.7568627450980392, + g: 0.49019607843137253, + b: 0.06666666666666667, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(143, 89, 2, 1.0) +pub const dark_brown = Rgba( + r: 0.5607843137254902, + g: 0.34901960784313724, + b: 0.00784313725490196, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(0, 0, 0, 1.0) +pub const black = Rgba(r: 0.0, g: 0.0, b: 0.0, a: 1.0) + +/// A `Colour` reprsenting the colour RGBA(255, 255, 255, 1.0) +pub const white = Rgba(r: 1.0, g: 1.0, b: 1.0, a: 1.0) + +/// A `Colour` reprsenting the colour RGBA(238, 238, 236, 1.0) +pub const light_grey = Rgba( + r: 0.9333333333333333, + g: 0.9333333333333333, + b: 0.9254901960784314, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(211, 215, 207, 1.0) +pub const grey = Rgba( + r: 0.8274509803921568, + g: 0.8431372549019608, + b: 0.8117647058823529, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(186, 189, 182, 1.0) +pub const dark_grey = Rgba( + r: 0.7294117647058823, + g: 0.7411764705882353, + b: 0.7137254901960784, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(238, 238, 236, 1.0) +pub const light_gray = Rgba( + r: 0.9333333333333333, + g: 0.9333333333333333, + b: 0.9254901960784314, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(211, 215, 207, 1.0) +pub const gray = Rgba( + r: 0.8274509803921568, + g: 0.8431372549019608, + b: 0.8117647058823529, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(186, 189, 182, 1.0) +pub const dark_gray = Rgba( + r: 0.7294117647058823, + g: 0.7411764705882353, + b: 0.7137254901960784, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(136, 138, 133, 1.0) +pub const light_charcoal = Rgba( + r: 0.5333333333333333, + g: 0.5411764705882353, + b: 0.5215686274509804, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(85, 87, 83, 1.0) +pub const charcoal = Rgba( + r: 0.3333333333333333, + g: 0.3411764705882353, + b: 0.3254901960784314, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(46, 52, 54, 1.0) +pub const dark_charcoal = Rgba( + r: 0.1803921568627451, + g: 0.20392156862745098, + b: 0.21176470588235294, + a: 1.0, +) + +/// A `Colour` reprsenting the colour RGBA(255, 175, 243, 1.0) +pub const pink = Rgba( + r: 1.0, + g: 0.6862745098039216, + b: 0.9529411764705882, + a: 1.0, +) diff --git a/aoc2023/build/packages/gleam_community_colour/src/gleam_community/colour/accessibility.gleam b/aoc2023/build/packages/gleam_community_colour/src/gleam_community/colour/accessibility.gleam new file mode 100644 index 0000000..54f75e4 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_colour/src/gleam_community/colour/accessibility.gleam @@ -0,0 +1,173 @@ +//// +//// - **Accessibility** +//// - [`luminance`](#luminance) +//// - [`contrast_ratio`](#contrast_ratio) +//// - [`maximum_contrast`](#maximum_contrast) +//// +//// --- +//// +//// This package was heavily inspired by the `elm-color-extra` module. +//// The original source code can be found +//// <a href="https://github.com/noahzgordon/elm-color-extra">here</a>. +//// +//// <details> +//// <summary>The license of that package is produced below:</summary> +//// +//// +//// > MIT License +//// +//// > Copyright (c) 2016 Andreas Köberle +//// +//// > Permission is hereby granted, free of charge, to any person obtaining a copy +//// of this software and associated documentation files (the "Software"), to deal +//// in the Software without restriction, including without limitation the rights +//// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +//// copies of the Software, and to permit persons to whom the Software is +//// furnished to do so, subject to the following conditions: +//// +//// > The above copyright notice and this permission notice shall be included in all +//// copies or substantial portions of the Software. +//// +//// > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +//// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +//// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +//// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +//// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +//// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +//// SOFTWARE. +//// +//// </details> +//// + +// Just in case we decide in the future to no longer include the above reference +// and license, this package was initially a port of the `elm-color-extra` module: +// +// https://github.com/noahzgordon/elm-color-extra +// + +// IMPORTS -------------------------------------------------------------------- + +import gleam/float +import gleam/list +import gleam_community/colour.{type Colour} + +// UTILITIES ------------------------------------------------------------------ + +fn intensity(colour_value: Float) -> Float { + // Calculation taken from https://www.w3.org/TR/WCAG20/#relativeluminancedef + case True { + _ if colour_value <=. 0.03928 -> colour_value /. 12.92 + _ -> { + // Is this guaranteed to be `OK`? + let assert Ok(i) = float.power({ colour_value +. 0.055 } /. 1.055, 2.4) + i + } + } +} + +// ACCESSIBILITY -------------------------------------------------------------- + +/// Returns the relative brightness of the given `Colour` as a `Float` between +/// 0.0, and 1.0 with 0.0 being the darkest possible colour and 1.0 being the lightest. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// luminance(colour.white) // 1.0 +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn luminance(colour: Colour) -> Float { + // Calculation taken from https://www.w3.org/TR/WCAG20/#relativeluminancedef + let #(r, g, b, _) = colour.to_rgba(colour) + + let r_intensity = intensity(r) + let g_intensity = intensity(g) + let b_intensity = intensity(b) + + 0.2126 *. r_intensity +. 0.7152 *. g_intensity +. 0.0722 *. b_intensity +} + +/// Returns the contrast between two `Colour` values as a `Float` between 1.0, +/// and 21.0 with 1.0 being no contrast and, 21.0 being the highest possible contrast. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// contrast_ratio(between: colour.white, and: colour.black) // 21.0 +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn contrast_ratio(between colour_a: Colour, and colour_b: Colour) -> Float { + // Calculation taken from https://www.w3.org/TR/WCAG20/#contrast-ratiodef + let luminance_a = luminance(colour_a) +. 0.05 + let luminance_b = luminance(colour_b) +. 0.05 + + case luminance_a >. luminance_b { + True -> luminance_a /. luminance_b + False -> luminance_b /. luminance_a + } +} + +/// Returns the `Colour` with the highest contrast between the base `Colour`, +/// and and the other provided `Colour` values. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// ```gleam +/// fn example() { +/// maximum_contrast( +/// colour.yellow, +/// [colour.white, colour.dark_blue, colour.green], +/// ) +/// } +/// ``` +/// </details> +/// +/// <div style="position: relative;"> +/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// <a style="position: absolute; right: 0;" href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn maximum_contrast( + base: Colour, + colours: List(Colour), +) -> Result(Colour, Nil) { + colours + |> list.sort(fn(colour_a, colour_b) { + let contrast_a = contrast_ratio(base, colour_a) + let contrast_b = contrast_ratio(base, colour_b) + + float.compare(contrast_b, contrast_a) + }) + |> list.first() +} diff --git a/aoc2023/build/packages/gleam_community_colour/src/gleam_community@colour.erl b/aoc2023/build/packages/gleam_community_colour/src/gleam_community@colour.erl new file mode 100644 index 0000000..21e4c81 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_colour/src/gleam_community@colour.erl @@ -0,0 +1,511 @@ +-module(gleam_community@colour). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([from_rgb255/3, from_rgb/3, from_rgba/4, from_hsla/4, from_hsl/3, from_rgb_hex/1, from_rgb_hex_string/1, from_rgba_hex/1, from_rgba_hex_string/1, to_rgba/1, to_hsla/1, to_css_rgba_string/1, to_rgba_hex/1, to_rgba_hex_string/1, to_rgb_hex/1, to_rgb_hex_string/1]). +-export_type([colour/0]). + +-opaque colour() :: {rgba, float(), float(), float(), float()} | + {hsla, float(), float(), float(), float()}. + +-spec valid_colour_value(float()) -> {ok, float()} | {error, nil}. +valid_colour_value(C) -> + case (C > 1.0) orelse (C < +0.0) of + true -> + {error, nil}; + + false -> + {ok, C} + end. + +-spec hue_to_rgb(float(), float(), float()) -> float(). +hue_to_rgb(Hue, M1, M2) -> + H = case Hue of + _ when Hue < +0.0 -> + Hue + 1.0; + + _ when Hue > 1.0 -> + Hue - 1.0; + + _ -> + Hue + end, + H_t_6 = H * 6.0, + H_t_2 = H * 2.0, + H_t_3 = H * 3.0, + case H of + _ when H_t_6 < 1.0 -> + M1 + (((M2 - M1) * H) * 6.0); + + _ when H_t_2 < 1.0 -> + M2; + + _ when H_t_3 < 2.0 -> + M1 + (((M2 - M1) * ((2.0 / 3.0) - H)) * 6.0); + + _ -> + M1 + end. + +-spec hex_string_to_int(binary()) -> {ok, integer()} | {error, nil}. +hex_string_to_int(Hex_string) -> + Hex = case Hex_string of + <<"#"/utf8, Hex_number/binary>> -> + Hex_number; + + <<"0x"/utf8, Hex_number@1/binary>> -> + Hex_number@1; + + _ -> + Hex_string + end, + _pipe = Hex, + _pipe@1 = gleam@string:lowercase(_pipe), + _pipe@2 = gleam@string:to_graphemes(_pipe@1), + _pipe@3 = gleam@list:reverse(_pipe@2), + gleam@list:index_fold( + _pipe@3, + {ok, 0}, + fun(Total, Char, Index) -> case Total of + {error, nil} -> + {error, nil}; + + {ok, V} -> + gleam@result:then(case Char of + <<"a"/utf8>> -> + {ok, 10}; + + <<"b"/utf8>> -> + {ok, 11}; + + <<"c"/utf8>> -> + {ok, 12}; + + <<"d"/utf8>> -> + {ok, 13}; + + <<"e"/utf8>> -> + {ok, 14}; + + <<"f"/utf8>> -> + {ok, 15}; + + _ -> + gleam@int:parse(Char) + end, fun(Num) -> + gleam@result:then( + gleam@int:power(16, gleam@int:to_float(Index)), + fun(Base) -> + {ok, + V + gleam@float:round( + gleam@int:to_float(Num) * Base + )} + end + ) + end) + end end + ). + +-spec hsla_to_rgba(float(), float(), float(), float()) -> {float(), + float(), + float(), + float()}. +hsla_to_rgba(H, S, L, A) -> + M2 = case L =< 0.5 of + true -> + L * (S + 1.0); + + false -> + (L + S) - (L * S) + end, + M1 = (L * 2.0) - M2, + R = hue_to_rgb(H + (1.0 / 3.0), M1, M2), + G = hue_to_rgb(H, M1, M2), + B = hue_to_rgb(H - (1.0 / 3.0), M1, M2), + {R, G, B, A}. + +-spec rgba_to_hsla(float(), float(), float(), float()) -> {float(), + float(), + float(), + float()}. +rgba_to_hsla(R, G, B, A) -> + Min_colour = gleam@float:min(R, gleam@float:min(G, B)), + Max_colour = gleam@float:max(R, gleam@float:max(G, B)), + H1 = case true of + _ when Max_colour =:= R -> + gleam@float:divide(G - B, Max_colour - Min_colour); + + _ when Max_colour =:= G -> + _pipe = gleam@float:divide(B - R, Max_colour - Min_colour), + gleam@result:then(_pipe, fun(D) -> {ok, 2.0 + D} end); + + _ -> + _pipe@1 = gleam@float:divide(R - G, Max_colour - Min_colour), + gleam@result:then(_pipe@1, fun(D@1) -> {ok, 4.0 + D@1} end) + end, + H2 = case H1 of + {ok, V} -> + {ok, V * (1.0 / 6.0)}; + + _ -> + H1 + end, + H3 = case H2 of + {ok, V@1} when V@1 < +0.0 -> + V@1 + 1.0; + + {ok, V@2} -> + V@2; + + _ -> + +0.0 + end, + L = (Min_colour + Max_colour) / 2.0, + S = case true of + _ when Min_colour =:= Max_colour -> + +0.0; + + _ when L < 0.5 -> + case (Max_colour + Min_colour) of + 0.0 -> 0.0; + Gleam@denominator -> (Max_colour - Min_colour) / Gleam@denominator + end; + + _ -> + case ((2.0 - Max_colour) - Min_colour) of + 0.0 -> 0.0; + Gleam@denominator@1 -> (Max_colour - Min_colour) / Gleam@denominator@1 + end + end, + {H3, S, L, A}. + +-spec from_rgb255(integer(), integer(), integer()) -> {ok, colour()} | + {error, nil}. +from_rgb255(Red, Green, Blue) -> + gleam@result:then( + begin + _pipe = Red, + _pipe@1 = gleam@int:to_float(_pipe), + _pipe@2 = gleam@float:divide(_pipe@1, 255.0), + gleam@result:then(_pipe@2, fun valid_colour_value/1) + end, + fun(R) -> + gleam@result:then( + begin + _pipe@3 = Green, + _pipe@4 = gleam@int:to_float(_pipe@3), + _pipe@5 = gleam@float:divide(_pipe@4, 255.0), + gleam@result:then(_pipe@5, fun valid_colour_value/1) + end, + fun(G) -> + gleam@result:then( + begin + _pipe@6 = Blue, + _pipe@7 = gleam@int:to_float(_pipe@6), + _pipe@8 = gleam@float:divide(_pipe@7, 255.0), + gleam@result:then(_pipe@8, fun valid_colour_value/1) + end, + fun(B) -> {ok, {rgba, R, G, B, 1.0}} end + ) + end + ) + end + ). + +-spec from_rgb(float(), float(), float()) -> {ok, colour()} | {error, nil}. +from_rgb(Red, Green, Blue) -> + gleam@result:then( + valid_colour_value(Red), + fun(R) -> + gleam@result:then( + valid_colour_value(Green), + fun(G) -> + gleam@result:then( + valid_colour_value(Blue), + fun(B) -> {ok, {rgba, R, G, B, 1.0}} end + ) + end + ) + end + ). + +-spec from_rgba(float(), float(), float(), float()) -> {ok, colour()} | + {error, nil}. +from_rgba(Red, Green, Blue, Alpha) -> + gleam@result:then( + valid_colour_value(Red), + fun(R) -> + gleam@result:then( + valid_colour_value(Green), + fun(G) -> + gleam@result:then( + valid_colour_value(Blue), + fun(B) -> + gleam@result:then( + valid_colour_value(Alpha), + fun(A) -> {ok, {rgba, R, G, B, A}} end + ) + end + ) + end + ) + end + ). + +-spec from_hsla(float(), float(), float(), float()) -> {ok, colour()} | + {error, nil}. +from_hsla(Hue, Saturation, Lightness, Alpha) -> + gleam@result:then( + valid_colour_value(Hue), + fun(H) -> + gleam@result:then( + valid_colour_value(Saturation), + fun(S) -> + gleam@result:then( + valid_colour_value(Lightness), + fun(L) -> + gleam@result:then( + valid_colour_value(Alpha), + fun(A) -> {ok, {hsla, H, S, L, A}} end + ) + end + ) + end + ) + end + ). + +-spec from_hsl(float(), float(), float()) -> {ok, colour()} | {error, nil}. +from_hsl(Hue, Saturation, Lightness) -> + from_hsla(Hue, Saturation, Lightness, 1.0). + +-spec from_rgb_hex(integer()) -> {ok, colour()} | {error, nil}. +from_rgb_hex(Hex) -> + case (Hex > 16#ffffff) orelse (Hex < 0) of + true -> + {error, nil}; + + false -> + R = begin + _pipe = erlang:'bsr'(Hex, 16), + erlang:'band'(_pipe, 16#ff) + end, + G = begin + _pipe@1 = erlang:'bsr'(Hex, 8), + erlang:'band'(_pipe@1, 16#ff) + end, + B = erlang:'band'(Hex, 16#ff), + from_rgb255(R, G, B) + end. + +-spec from_rgb_hex_string(binary()) -> {ok, colour()} | {error, nil}. +from_rgb_hex_string(Hex_string) -> + gleam@result:then( + hex_string_to_int(Hex_string), + fun(Hex_int) -> from_rgb_hex(Hex_int) end + ). + +-spec from_rgba_hex(integer()) -> {ok, colour()} | {error, nil}. +from_rgba_hex(Hex) -> + case (Hex > 16#ffffffff) orelse (Hex < 0) of + true -> + {error, nil}; + + false -> + _assert_subject = begin + _pipe = erlang:'bsr'(Hex, 24), + _pipe@1 = erlang:'band'(_pipe, 16#ff), + _pipe@2 = gleam@int:to_float(_pipe@1), + gleam@float:divide(_pipe@2, 255.0) + end, + {ok, R} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/colour"/utf8>>, + function => <<"from_rgba_hex"/utf8>>, + line => 588}) + end, + _assert_subject@1 = begin + _pipe@3 = erlang:'bsr'(Hex, 16), + _pipe@4 = erlang:'band'(_pipe@3, 16#ff), + _pipe@5 = gleam@int:to_float(_pipe@4), + gleam@float:divide(_pipe@5, 255.0) + end, + {ok, G} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/colour"/utf8>>, + function => <<"from_rgba_hex"/utf8>>, + line => 594}) + end, + _assert_subject@2 = begin + _pipe@6 = erlang:'bsr'(Hex, 8), + _pipe@7 = erlang:'band'(_pipe@6, 16#ff), + _pipe@8 = gleam@int:to_float(_pipe@7), + gleam@float:divide(_pipe@8, 255.0) + end, + {ok, B} = case _assert_subject@2 of + {ok, _} -> _assert_subject@2; + _assert_fail@2 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@2, + module => <<"gleam_community/colour"/utf8>>, + function => <<"from_rgba_hex"/utf8>>, + line => 600}) + end, + _assert_subject@3 = begin + _pipe@9 = erlang:'band'(Hex, 16#ff), + _pipe@10 = gleam@int:to_float(_pipe@9), + gleam@float:divide(_pipe@10, 255.0) + end, + {ok, A} = case _assert_subject@3 of + {ok, _} -> _assert_subject@3; + _assert_fail@3 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@3, + module => <<"gleam_community/colour"/utf8>>, + function => <<"from_rgba_hex"/utf8>>, + line => 606}) + end, + from_rgba(R, G, B, A) + end. + +-spec from_rgba_hex_string(binary()) -> {ok, colour()} | {error, nil}. +from_rgba_hex_string(Hex_string) -> + gleam@result:then( + hex_string_to_int(Hex_string), + fun(Hex_int) -> from_rgba_hex(Hex_int) end + ). + +-spec to_rgba(colour()) -> {float(), float(), float(), float()}. +to_rgba(Colour) -> + case Colour of + {rgba, R, G, B, A} -> + {R, G, B, A}; + + {hsla, H, S, L, A@1} -> + hsla_to_rgba(H, S, L, A@1) + end. + +-spec to_hsla(colour()) -> {float(), float(), float(), float()}. +to_hsla(Colour) -> + case Colour of + {hsla, H, S, L, A} -> + {H, S, L, A}; + + {rgba, R, G, B, A@1} -> + rgba_to_hsla(R, G, B, A@1) + end. + +-spec to_css_rgba_string(colour()) -> binary(). +to_css_rgba_string(Colour) -> + {R, G, B, A} = to_rgba(Colour), + Percent = fun(X) -> + _assert_subject = begin + _pipe = X, + _pipe@1 = gleam@float:multiply(_pipe, 10000.0), + _pipe@2 = gleam@float:round(_pipe@1), + _pipe@3 = gleam@int:to_float(_pipe@2), + gleam@float:divide(_pipe@3, 100.0) + end, + {ok, P} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/colour"/utf8>>, + function => <<"to_css_rgba_string"/utf8>>, + line => 704}) + end, + P + end, + Round_to = fun(X@1) -> + _assert_subject@1 = begin + _pipe@4 = X@1, + _pipe@5 = gleam@float:multiply(_pipe@4, 1000.0), + _pipe@6 = gleam@float:round(_pipe@5), + _pipe@7 = gleam@int:to_float(_pipe@6), + gleam@float:divide(_pipe@7, 1000.0) + end, + {ok, R@1} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/colour"/utf8>>, + function => <<"to_css_rgba_string"/utf8>>, + line => 716}) + end, + R@1 + end, + gleam@string:join( + [<<"rgba("/utf8>>, + <<(gleam@float:to_string(Percent(R)))/binary, "%,"/utf8>>, + <<(gleam@float:to_string(Percent(G)))/binary, "%,"/utf8>>, + <<(gleam@float:to_string(Percent(B)))/binary, "%,"/utf8>>, + gleam@float:to_string(Round_to(A)), + <<")"/utf8>>], + <<""/utf8>> + ). + +-spec to_rgba_hex(colour()) -> integer(). +to_rgba_hex(Colour) -> + {R, G, B, A} = to_rgba(Colour), + Red = begin + _pipe = R * 255.0, + _pipe@1 = gleam@float:round(_pipe), + erlang:'bsl'(_pipe@1, 24) + end, + Green = begin + _pipe@2 = G * 255.0, + _pipe@3 = gleam@float:round(_pipe@2), + erlang:'bsl'(_pipe@3, 16) + end, + Blue = begin + _pipe@4 = B * 255.0, + _pipe@5 = gleam@float:round(_pipe@4), + erlang:'bsl'(_pipe@5, 8) + end, + Alpha = begin + _pipe@6 = A * 255.0, + gleam@float:round(_pipe@6) + end, + ((Red + Green) + Blue) + Alpha. + +-spec to_rgba_hex_string(colour()) -> binary(). +to_rgba_hex_string(Colour) -> + _pipe = to_rgba_hex(Colour), + gleam@int:to_base16(_pipe). + +-spec to_rgb_hex(colour()) -> integer(). +to_rgb_hex(Colour) -> + {R, G, B, _} = to_rgba(Colour), + Red = begin + _pipe = R * 255.0, + _pipe@1 = gleam@float:round(_pipe), + erlang:'bsl'(_pipe@1, 16) + end, + Green = begin + _pipe@2 = G * 255.0, + _pipe@3 = gleam@float:round(_pipe@2), + erlang:'bsl'(_pipe@3, 8) + end, + Blue = begin + _pipe@4 = B * 255.0, + gleam@float:round(_pipe@4) + end, + (Red + Green) + Blue. + +-spec to_rgb_hex_string(colour()) -> binary(). +to_rgb_hex_string(Colour) -> + _pipe = to_rgb_hex(Colour), + gleam@int:to_base16(_pipe). diff --git a/aoc2023/build/packages/gleam_community_colour/src/gleam_community@colour@accessibility.erl b/aoc2023/build/packages/gleam_community_colour/src/gleam_community@colour@accessibility.erl new file mode 100644 index 0000000..64d37bf --- /dev/null +++ b/aoc2023/build/packages/gleam_community_colour/src/gleam_community@colour@accessibility.erl @@ -0,0 +1,73 @@ +-module(gleam_community@colour@accessibility). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([luminance/1, contrast_ratio/2, maximum_contrast/2]). + +-spec intensity(float()) -> float(). +intensity(Colour_value) -> + case true of + _ when Colour_value =< 0.03928 -> + Colour_value / 12.92; + + _ -> + _assert_subject = gleam@float:power( + (Colour_value + 0.055) / 1.055, + 2.4 + ), + {ok, I} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/colour/accessibility"/utf8>>, + function => <<"intensity"/utf8>>, + line => 62}) + end, + I + end. + +-spec luminance(gleam_community@colour:colour()) -> float(). +luminance(Colour) -> + {R, G, B, _} = gleam_community@colour:to_rgba(Colour), + R_intensity = intensity(R), + G_intensity = intensity(G), + B_intensity = intensity(B), + ((0.2126 * R_intensity) + (0.7152 * G_intensity)) + (0.0722 * B_intensity). + +-spec contrast_ratio( + gleam_community@colour:colour(), + gleam_community@colour:colour() +) -> float(). +contrast_ratio(Colour_a, Colour_b) -> + Luminance_a = luminance(Colour_a) + 0.05, + Luminance_b = luminance(Colour_b) + 0.05, + case Luminance_a > Luminance_b of + true -> + case Luminance_b of + 0.0 -> 0.0; + Gleam@denominator -> Luminance_a / Gleam@denominator + end; + + false -> + case Luminance_a of + 0.0 -> 0.0; + Gleam@denominator@1 -> Luminance_b / Gleam@denominator@1 + end + end. + +-spec maximum_contrast( + gleam_community@colour:colour(), + list(gleam_community@colour:colour()) +) -> {ok, gleam_community@colour:colour()} | {error, nil}. +maximum_contrast(Base, Colours) -> + _pipe = Colours, + _pipe@1 = gleam@list:sort( + _pipe, + fun(Colour_a, Colour_b) -> + Contrast_a = contrast_ratio(Base, Colour_a), + Contrast_b = contrast_ratio(Base, Colour_b), + gleam@float:compare(Contrast_b, Contrast_a) + end + ), + gleam@list:first(_pipe@1). diff --git a/aoc2023/build/packages/gleam_community_colour/src/gleam_community_colour.app.src b/aoc2023/build/packages/gleam_community_colour/src/gleam_community_colour.app.src new file mode 100644 index 0000000..a327650 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_colour/src/gleam_community_colour.app.src @@ -0,0 +1,9 @@ +{application, gleam_community_colour, [ + {vsn, "1.2.0"}, + {applications, [gleam_stdlib, + gleeunit]}, + {description, "Colour types, conversions, and other utilities"}, + {modules, [gleam_community@colour, + gleam_community@colour@accessibility]}, + {registered, []} +]}. diff --git a/aoc2023/build/packages/gleam_community_maths/LICENCE b/aoc2023/build/packages/gleam_community_maths/LICENCE new file mode 100644 index 0000000..a84f0ec --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/LICENCE @@ -0,0 +1,190 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2023 Gleam Community Contributors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.
\ No newline at end of file diff --git a/aoc2023/build/packages/gleam_community_maths/README.md b/aoc2023/build/packages/gleam_community_maths/README.md new file mode 100644 index 0000000..c912757 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/README.md @@ -0,0 +1,59 @@ +# gleam-community/maths + +[](https://hex.pm/packages/gleam_community_maths) +[](https://hexdocs.pm/gleam_community_maths/) + +A basic mathematics library that contains some of the most fundamental mathematics functions and utilities. + +The library supports both targets: Erlang and JavaScript. + +## Quickstart + +```gleam +import gleam_community/maths/arithmetics +import gleam_community/maths/combinatorics +import gleam_community/maths/elementary +import gleam_community/maths/piecewise +import gleam_community/maths/predicates +import gleam/float + +pub fn main() { + // Evaluate the sine function + elementary.sin(elementary.pi()) + // Returns Float: 0.0 + + // Find the greatest common divisor + arithmetics.gcd(54, 24) + // Returns Int: 6 + + // Find the minimum and maximum of a list + piecewise.extrema([10.0, 3.0, 50.0, 20.0, 3.0], float.compare) + // Returns Tuple: Ok(#(3.0, 50.0)) + + // Find the list indices of the smallest value + piecewise.arg_minimum([10, 3, 50, 20, 3], float.compare) + // Returns List: Ok([1, 4]) + + // Determine if a number is fractional + predicates.is_fractional(0.3333) + // Returns Bool: True + + // Determine if 28 is a power of 3 + predicates.is_power(28, 3) + // Returns Bool: False + + // Generate all k = 1 combinations of [1, 2] + combinatorics.list_combination([1, 2], 1) + // Returns List: Ok([[1], [2]]) +} + +``` + +## Installation + +`gleam_community` packages are published to [hex.pm](https://hex.pm/packages/gleam_community_maths) +with the prefix `gleam_community_`. You can add them to your Gleam projects directly: + +```sh +gleam add gleam_community_maths +``` diff --git a/aoc2023/build/packages/gleam_community_maths/gleam.toml b/aoc2023/build/packages/gleam_community_maths/gleam.toml new file mode 100644 index 0000000..9dc5fd7 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/gleam.toml @@ -0,0 +1,12 @@ +name = "gleam_community_maths" +version = "1.0.1" + +licences = ["Apache-2.0"] +description = "A basic maths library" +repository = { type = "github", user = "gleam-community", repo = "maths" } + +[dependencies] +gleam_stdlib = "~> 0.33" + +[dev-dependencies] +gleeunit = "~> 1.0" diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/arithmetics.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/arithmetics.gleam new file mode 100644 index 0000000..3e0f63a --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/arithmetics.gleam @@ -0,0 +1,618 @@ +////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous"> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script> +////<script> +//// document.addEventListener("DOMContentLoaded", function() { +//// renderMathInElement(document.body, { +//// // customised options +//// // • auto-render specific keys, e.g.: +//// delimiters: [ +//// {left: '$$', right: '$$', display: false}, +//// // {left: '$', right: '$', display: false}, +//// // {left: '\\(', right: '\\)', display: false}, +//// {left: '\\[', right: '\\]', display: true} +//// ], +//// // • rendering keys, e.g.: +//// throwOnError : false +//// }); +//// }); +////</script> +////<style> +//// .katex { font-size: 1.1em; } +////</style> +//// +//// --- +//// +//// Arithmetics: A module containing a collection of fundamental mathematical functions relating to simple arithmetics (addition, subtraction, multiplication, etc.), but also number theory. +//// +//// * **Division functions** +//// * [`gcd`](#gcd) +//// * [`lcm`](#lcm) +//// * [`divisors`](#divisors) +//// * [`proper_divisors`](#proper_divisors) +//// * **Sums and products** +//// * [`float_sum`](#float_sum) +//// * [`int_sum`](#int_sum) +//// * [`float_product`](#float_product) +//// * [`int_product`](#int_product) +//// * [`float_cumulative_sum`](#float_cumulative_sum) +//// * [`int_cumulative_sum`](#int_cumulative_sum) +//// * [`float_cumulative_product`](#float_cumulative_product) +//// * [`int_cumulative_product`](#int_cumulative_product) +//// + +import gleam/int +import gleam/list +import gleam_community/maths/conversion +import gleam_community/maths/elementary +import gleam_community/maths/piecewise + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The function calculates the greatest common multiple of two integers $$x, y \in \mathbb{Z}$$. +/// The greatest common multiple is the largest positive integer that is divisible by both $$x$$ and $$y$$. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/arithmetics +/// +/// pub fn example() { +/// arithmetics.lcm(1, 1) +/// |> should.equal(1) +/// +/// arithmetics.lcm(100, 10) +/// |> should.equal(10) +/// +/// arithmetics.gcd(-36, -17) +/// |> should.equal(1) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn gcd(x: Int, y: Int) -> Int { + let absx: Int = piecewise.int_absolute_value(x) + let absy: Int = piecewise.int_absolute_value(y) + do_gcd(absx, absy) +} + +fn do_gcd(x: Int, y: Int) -> Int { + case x == 0 { + True -> y + False -> { + let assert Ok(z) = int.modulo(y, x) + do_gcd(z, x) + } + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The function calculates the least common multiple of two integers $$x, y \in \mathbb{Z}$$. +/// The least common multiple is the smallest positive integer that has both $$x$$ and $$y$$ as factors. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/arithmetics +/// +/// pub fn example() { +/// arithmetics.lcm(1, 1) +/// |> should.equal(1) +/// +/// arithmetics.lcm(100, 10) +/// |> should.equal(100) +/// +/// arithmetics.lcm(-36, -17) +/// |> should.equal(612) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn lcm(x: Int, y: Int) -> Int { + let absx: Int = piecewise.int_absolute_value(x) + let absy: Int = piecewise.int_absolute_value(y) + absx * absy / do_gcd(absx, absy) +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The function returns all the positive divisors of an integer, including the number iteself. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/arithmetics +/// +/// pub fn example() { +/// arithmetics.divisors(4) +/// |> should.equal([1, 2, 4]) +/// +/// arithmetics.divisors(6) +/// |> should.equal([1, 2, 3, 6]) +/// +/// arithmetics.proper_divisors(13) +/// |> should.equal([1, 13]) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn divisors(n: Int) -> List(Int) { + find_divisors(n) +} + +fn find_divisors(n: Int) -> List(Int) { + let nabs: Float = piecewise.float_absolute_value(conversion.int_to_float(n)) + let assert Ok(sqrt_result) = elementary.square_root(nabs) + let max: Int = conversion.float_to_int(sqrt_result) + 1 + list.range(2, max) + |> list.fold( + [1, n], + fn(acc: List(Int), i: Int) -> List(Int) { + case n % i == 0 { + True -> [i, n / i, ..acc] + False -> acc + } + }, + ) + |> list.unique() + |> list.sort(int.compare) +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The function returns all the positive divisors of an integer, excluding the number iteself. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/arithmetics +/// +/// pub fn example() { +/// arithmetics.proper_divisors(4) +/// |> should.equal([1, 2]) +/// +/// arithmetics.proper_divisors(6) +/// |> should.equal([1, 2, 3]) +/// +/// arithmetics.proper_divisors(13) +/// |> should.equal([1]) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn proper_divisors(n: Int) -> List(Int) { + let divisors: List(Int) = find_divisors(n) + divisors + |> list.take(list.length(divisors) - 1) +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Calculcate the sum of the elements in a list: +/// +/// \\[ +/// \sum_{i=1}^n x_i +/// \\] +/// +/// In the formula, $$n$$ is the length of the list and $$x_i \in \mathbb{R}$$ is the value in the input list indexed by $$i$$. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/arithmetics +/// +/// pub fn example () { +/// // An empty list returns an error +/// [] +/// |> arithmetics.float_sum() +/// |> should.equal(0.0) +/// +/// // Valid input returns a result +/// [1.0, 2.0, 3.0] +/// |> arithmetics.float_sum() +/// |> should.equal(6.0) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn float_sum(arr: List(Float)) -> Float { + case arr { + [] -> 0.0 + _ -> + arr + |> list.fold(0.0, fn(acc: Float, a: Float) -> Float { a +. acc }) + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Calculcate the sum of the elements in a list: +/// +/// \\[ +/// \sum_{i=1}^n x_i +/// \\] +/// +/// In the formula, $$n$$ is the length of the list and $$x_i \in \mathbb{Z}$$ is the value in the input list indexed by $$i$$. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/arithmetics +/// +/// pub fn example () { +/// // An empty list returns 0 +/// [] +/// |> arithmetics.int_sum() +/// |> should.equal(0) +/// +/// // Valid input returns a result +/// [1, 2, 3] +/// |> arithmetics.int_sum() +/// |> should.equal(6) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn int_sum(arr: List(Int)) -> Int { + case arr { + [] -> 0 + _ -> + arr + |> list.fold(0, fn(acc: Int, a: Int) -> Int { a + acc }) + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Calculcate the product of the elements in a list: +/// +/// \\[ +/// \prod_{i=1}^n x_i +/// \\] +/// +/// In the formula, $$n$$ is the length of the list and $$x_i \in \mathbb{R}$$ is the value in the input list indexed by $$i$$. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/arithmetics +/// +/// pub fn example () { +/// // An empty list returns 0.0 +/// [] +/// |> arithmetics.float_product() +/// |> should.equal(0.0) +/// +/// // Valid input returns a result +/// [1.0, 2.0, 3.0] +/// |> arithmetics.float_product() +/// |> should.equal(6.0) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn float_product(arr: List(Float)) -> Float { + case arr { + [] -> 1.0 + _ -> + arr + |> list.fold(1.0, fn(acc: Float, a: Float) -> Float { a *. acc }) + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Calculcate the product of the elements in a list: +/// +/// \\[ +/// \prod_{i=1}^n x_i +/// \\] +/// +/// In the formula, $$n$$ is the length of the list and $$x_i \in \mathbb{Z}$$ is the value in the input list indexed by $$i$$. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/arithmetics +/// +/// pub fn example () { +/// // An empty list returns 0 +/// [] +/// |> arithmetics.int_product() +/// |> should.equal(0) +/// +/// // Valid input returns a result +/// [1, 2, 3] +/// |> arithmetics.int_product() +/// |> should.equal(6) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn int_product(arr: List(Int)) -> Int { + case arr { + [] -> 1 + _ -> + arr + |> list.fold(1, fn(acc: Int, a: Int) -> Int { a * acc }) + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Calculcate the cumulative sum of the elements in a list: +/// +/// \\[ +/// v_j = \sum_{i=1}^j x_i \\;\\; \forall j = 1,\dots, n +/// \\] +/// +/// In the formula, $$v_j$$ is the $$j$$'th element in the cumulative sum of $$n$$ elements. +/// That is, $$n$$ is the length of the list and $$x_i \in \mathbb{R}$$ is the value in the input list indexed by $$i$$. +/// The value $$v_j$$ is thus the sum of the $$1$$ to $$j$$ first elements in the given list. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/arithmetics +/// +/// pub fn example () { +/// [] +/// |> arithmetics.float_cumulative_sum() +/// |> should.equal([]) +/// +/// // Valid input returns a result +/// [1.0, 2.0, 3.0] +/// |> arithmetics.float_cumulative_sum() +/// |> should.equal([1.0, 3.0, 6.0]) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn float_cumulative_sum(arr: List(Float)) -> List(Float) { + case arr { + [] -> [] + _ -> + arr + |> list.scan(0.0, fn(acc: Float, a: Float) -> Float { a +. acc }) + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Calculcate the cumulative sum of the elements in a list: +/// +/// \\[ +/// v_j = \sum_{i=1}^j x_i \\;\\; \forall j = 1,\dots, n +/// \\] +/// +/// In the formula, $$v_j$$ is the $$j$$'th element in the cumulative sum of $$n$$ elements. +/// That is, $$n$$ is the length of the list and $$x_i \in \mathbb{Z}$$ is the value in the input list indexed by $$i$$. +/// The value $$v_j$$ is thus the sum of the $$1$$ to $$j$$ first elements in the given list. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/arithmetics +/// +/// pub fn example () { +/// [] +/// |> arithmetics.int_cumulative_sum() +/// |> should.equal([]) +/// +/// // Valid input returns a result +/// [1, 2, 3] +/// |> arithmetics.int_cumulative_sum() +/// |> should.equal([1, 3, 6]) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn int_cumulative_sum(arr: List(Int)) -> List(Int) { + case arr { + [] -> [] + _ -> + arr + |> list.scan(0, fn(acc: Int, a: Int) -> Int { a + acc }) + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Calculcate the cumulative product of the elements in a list: +/// +/// \\[ +/// v_j = \prod_{i=1}^j x_i \\;\\; \forall j = 1,\dots, n +/// \\] +/// +/// In the formula, $$v_j$$ is the $$j$$'th element in the cumulative product of $$n$$ elements. +/// That is, $$n$$ is the length of the list and $$x_i \in \mathbb{R}$$ is the value in the input list indexed by $$i$$. +/// The value $$v_j$$ is thus the sum of the $$1$$ to $$j$$ first elements in the given list. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/arithmetics +/// +/// pub fn example () { +/// // An empty list returns an error +/// [] +/// |> arithmetics.float_cumulative_product() +/// |> should.equal([]) +/// +/// // Valid input returns a result +/// [1.0, 2.0, 3.0] +/// |> arithmetics.float_cumulative_product() +/// |> should.equal([1.0, 2.0, 6.0]) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn float_cumumlative_product(arr: List(Float)) -> List(Float) { + case arr { + [] -> [] + _ -> + arr + |> list.scan(1.0, fn(acc: Float, a: Float) -> Float { a *. acc }) + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Calculcate the cumulative product of the elements in a list: +/// +/// \\[ +/// v_j = \prod_{i=1}^j x_i \\;\\; \forall j = 1,\dots, n +/// \\] +/// +/// In the formula, $$v_j$$ is the $$j$$'th element in the cumulative product of $$n$$ elements. +/// That is, $$n$$ is the length of the list and $$x_i \in \mathbb{Z}$$ is the value in the input list indexed by $$i$$. +/// The value $$v_j$$ is thus the product of the $$1$$ to $$j$$ first elements in the given list. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/arithmetics +/// +/// pub fn example () { +/// // An empty list returns an error +/// [] +/// |> arithmetics.int_cumulative_product() +/// |> should.equal([]) +/// +/// // Valid input returns a result +/// [1, 2, 3] +/// |> arithmetics.int_cumulative_product() +/// |> should.equal([1, 2, 6]) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn int_cumulative_product(arr: List(Int)) -> List(Int) { + case arr { + [] -> [] + _ -> + arr + |> list.scan(1, fn(acc: Int, a: Int) -> Int { a * acc }) + } +} diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/combinatorics.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/combinatorics.gleam new file mode 100644 index 0000000..ee771a1 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/combinatorics.gleam @@ -0,0 +1,432 @@ +////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous"> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script> +////<script> +//// document.addEventListener("DOMContentLoaded", function() { +//// renderMathInElement(document.body, { +//// // customised options +//// // • auto-render specific keys, e.g.: +//// delimiters: [ +//// {left: '$$', right: '$$', display: false}, +//// // {left: '$', right: '$', display: false}, +//// // {left: '\\(', right: '\\)', display: false}, +//// {left: '\\[', right: '\\]', display: true} +//// ], +//// // • rendering keys, e.g.: +//// throwOnError : false +//// }); +//// }); +////</script> +////<style> +//// .katex { font-size: 1.1em; } +////</style> +//// +//// --- +//// +//// Combinatorics: A module that offers mathematical functions related to counting, arrangements, and combinations. +//// +//// * **Combinatorial functions** +//// * [`combination`](#combination) +//// * [`factorial`](#factorial) +//// * [`permutation`](#permutation) +//// * [`list_combination`](#list_combination) +//// * [`list_permutation`](#list_permutation) +//// * [`cartesian_product`](#cartesian_product) +//// + +import gleam/list +import gleam/set + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// A combinatorial function for computing the number of a $$k$$-combinations of $$n$$ elements: +/// +/// \\[ +/// C(n, k) = \binom{n}{k} = \frac{n!}{k! (n-k)!} +/// \\] +/// Also known as "$$n$$ choose $$k$$" or the binomial coefficient. +/// +/// The implementation uses the effecient iterative multiplicative formula for the computation. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/combinatorics +/// +/// pub fn example() { +/// // Invalid input gives an error +/// // Error on: n = -1 < 0 +/// combinatorics.combination(-1, 1) +/// |> should.be_error() +/// +/// // Valid input returns a result +/// combinatorics.combination(4, 0) +/// |> should.equal(Ok(1)) +/// +/// combinatorics.combination(4, 4) +/// |> should.equal(Ok(1)) +/// +/// combinatorics.combination(4, 2) +/// |> should.equal(Ok(6)) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn combination(n: Int, k: Int) -> Result(Int, String) { + case n < 0 { + True -> + "Invalid input argument: n < 0. Valid input is n > 0." + |> Error + False -> + case k < 0 || k > n { + True -> + 0 + |> Ok + False -> + case k == 0 || k == n { + True -> + 1 + |> Ok + False -> { + let min = case k < n - k { + True -> k + False -> n - k + } + list.range(1, min) + |> list.fold( + 1, + fn(acc: Int, x: Int) -> Int { acc * { n + 1 - x } / x }, + ) + |> Ok + } + } + } + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// A combinatorial function for computing the total number of combinations of $$n$$ +/// elements, that is $$n!$$. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/combinatorics +/// +/// pub fn example() { +/// // Invalid input gives an error +/// combinatorics.factorial(-1) +/// |> should.be_error() +/// +/// // Valid input returns a result +/// combinatorics.factorial(0) +/// |> should.equal(Ok(1)) +/// +/// combinatorics.factorial(1) +/// |> should.equal(Ok(1)) +/// +/// combinatorics.factorial(2) +/// |> should.equal(Ok(2)) +/// +/// combinatorics.factorial(3) +/// |> should.equal(Ok(6)) +/// +/// combinatorics.factorial(4) +/// |> should.equal(Ok(24)) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn factorial(n) -> Result(Int, String) { + case n < 0 { + True -> + "Invalid input argument: n < 0. Valid input is n > 0." + |> Error + False -> + case n { + 0 -> + 1 + |> Ok + 1 -> + 1 + |> Ok + _ -> + list.range(1, n) + |> list.fold(1, fn(acc: Int, x: Int) { acc * x }) + |> Ok + } + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// A combinatorial function for computing the number of $$k$$-permuations (without repetitions) +/// of $$n$$ elements: +/// +/// \\[ +/// P(n, k) = \frac{n!}{(n - k)!} +/// \\] +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/combinatorics +/// +/// pub fn example() { +/// // Invalid input gives an error +/// // Error on: n = -1 < 0 +/// combinatorics.permutation(-1, 1) +/// |> should.be_error() +/// +/// // Valid input returns a result +/// combinatorics.permutation(4, 0) +/// |> should.equal(Ok(1)) +/// +/// combinatorics.permutation(4, 4) +/// |> should.equal(Ok(1)) +/// +/// combinatorics.permutation(4, 2) +/// |> should.equal(Ok(12)) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn permutation(n: Int, k: Int) -> Result(Int, String) { + case n < 0 { + True -> + "Invalid input argument: n < 0. Valid input is n > 0." + |> Error + False -> + case k < 0 || k > n { + True -> + 0 + |> Ok + False -> + case k == n { + True -> + 1 + |> Ok + False -> { + let assert Ok(v1) = factorial(n) + let assert Ok(v2) = factorial(n - k) + v1 / v2 + |> Ok + } + } + } + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Generate all $$k$$-combinations based on a given list. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam/set +/// import gleam_community/maths/combinatorics +/// +/// pub fn example () { +/// let assert Ok(result) = combinatorics.list_combination([1, 2, 3, 4], 3) +/// result +/// |> set.from_list() +/// |> should.equal(set.from_list([[1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]])) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn list_combination(arr: List(a), k: Int) -> Result(List(List(a)), String) { + case k < 0 { + True -> + "Invalid input argument: k < 0. Valid input is k > 0." + |> Error + False -> { + case k > list.length(arr) { + True -> + "Invalid input argument: k > length(arr). Valid input is 0 < k <= length(arr)." + |> Error + False -> { + do_list_combination(arr, k, []) + |> Ok + } + } + } + } +} + +fn do_list_combination(arr: List(a), k: Int, prefix: List(a)) -> List(List(a)) { + case k { + 0 -> [list.reverse(prefix)] + _ -> + case arr { + [] -> [] + [x, ..xs] -> { + let with_x = do_list_combination(xs, k - 1, [x, ..prefix]) + let without_x = do_list_combination(xs, k, prefix) + list.append(with_x, without_x) + } + } + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Generate all permutations of a given list. +/// +/// Repeated elements are treated as distinct for the +/// purpose of permutations, so two identical elements +/// for example will appear "both ways round". This +/// means lists with repeated elements return the same +/// number of permutations as ones without. +/// +/// N.B. The output of this function is a list of size +/// factorial in the size of the input list. Caution is +/// advised on input lists longer than ~11 elements, which +/// may cause the VM to use unholy amounts of memory for +/// the output. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam/set +/// import gleam_community/maths/combinatorics +/// +/// pub fn example () { +/// [1, 2, 3] +/// |> combinatorics.list_permutation() +/// |> set.from_list() +/// |> should.equal(set.from_list([ +/// [1, 2, 3], +/// [2, 1, 3], +/// [3, 1, 2], +/// [1, 3, 2], +/// [2, 3, 1], +/// [3, 2, 1], +/// ])) +/// +/// [1.0, 1.0] +/// |> combinatorics.list_permutation() +/// |> should.equal([[1.0, 1.0], [1.0, 1.0]]) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn list_permutation(arr: List(a)) -> List(List(a)) { + case arr { + [] -> [[]] + _ -> { + use x <- list.flat_map(arr) + // `x` is drawn from the list `arr` above, + // so Ok(...) can be safely asserted as the result of `list.pop` below + let assert Ok(#(_, remaining)) = list.pop(arr, fn(y) { x == y }) + list.map(list_permutation(remaining), fn(perm) { [x, ..perm] }) + } + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Generate a list containing all combinations of pairs of elements coming from two given lists. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam/list +/// import gleam_community/maths/combinatorics +/// +/// pub fn example () { +/// [] +/// |> combinatorics.cartesian_product([]) +/// |> should.equal([]) +/// +/// [1.0, 10.0] +/// |> combinatorics.cartesian_product([1.0, 2.0]) +/// |> should.equal([#(1.0, 1.0), #(1.0, 2.0), #(10.0, 1.0), #(10.0, 2.0)]) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn cartesian_product(xarr: List(a), yarr: List(a)) -> List(#(a, a)) { + let xset: set.Set(a) = + xarr + |> set.from_list() + let yset: set.Set(a) = + yarr + |> set.from_list() + xset + |> set.fold( + set.new(), + fn(accumulator0: set.Set(#(a, a)), member0: a) -> set.Set(#(a, a)) { + set.fold( + yset, + accumulator0, + fn(accumulator1: set.Set(#(a, a)), member1: a) -> set.Set(#(a, a)) { + set.insert(accumulator1, #(member0, member1)) + }, + ) + }, + ) + |> set.to_list() +} diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/conversion.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/conversion.gleam new file mode 100644 index 0000000..017aabd --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/conversion.gleam @@ -0,0 +1,183 @@ +////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous"> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script> +////<script> +//// document.addEventListener("DOMContentLoaded", function() { +//// renderMathInElement(document.body, { +//// // customised options +//// // • auto-render specific keys, e.g.: +//// delimiters: [ +//// {left: '$$', right: '$$', display: false}, +//// // {left: '$', right: '$', display: false}, +//// // {left: '\\(', right: '\\)', display: false}, +//// {left: '\\[', right: '\\]', display: true} +//// ], +//// // • rendering keys, e.g.: +//// throwOnError : false +//// }); +//// }); +////</script> +////<style> +//// .katex { font-size: 1.1em; } +////</style> +//// +//// --- +//// +//// Conversion: A module containing various functions for converting between types and quantities. +//// +//// * **Misc. functions** +//// * [`float_to_int`](#float_to_int) +//// * [`int_to_float`](#int_to_float) +//// * [`degrees_to_radians`](#degrees_to_radians) +//// * [`radians_to_degrees`](#radians_to_degrees) + +import gleam/int + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// A function that produces a number of type `Float` from an `Int`. +/// +/// Note: The function is equivalent to the `int.to_float` function in the Gleam stdlib. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/conversion +/// +/// pub fn example() { +/// conversion.int_to_float(-1) +/// |> should.equal(-1.0) +/// +/// conversion.int_to_float(1) +/// |> should.equal(1.0) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn int_to_float(x: Int) -> Float { + int.to_float(x) +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The function returns the integral part of a given floating point value. +/// That is, everything after the decimal point of a given floating point value is discarded and only the integer value before the decimal point is returned. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam/option +/// import gleam_community/maths/conversion +/// import gleam_community/maths/piecewise +/// +/// pub fn example() { +/// conversion.float_to_int(12.0654) +/// |> should.equal(12) +/// +/// // Note: Making the following function call is equivalent +/// // but instead of returning a value of type 'Int' a value +/// // of type 'Float' is returned. +/// piecewise.round(12.0654, option.Some(0), option.Some(piecewise.RoundToZero)) +/// |> should.equal(Ok(12.0)) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn float_to_int(x: Float) -> Int { + do_to_int(x) +} + +@external(erlang, "erlang", "trunc") +@external(javascript, "../../maths.mjs", "truncate") +fn do_to_int(a: Float) -> Int + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Convert a value in degrees to a value measured in radians. +/// That is, $$1 \text{ degrees } = \frac{\pi}{180} \text{ radians }$$. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/conversion +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// conversion.degrees_to_radians(360.) +/// |> should.equal(2. *. elementary.pi()) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn degrees_to_radians(x: Float) -> Float { + x *. do_pi() /. 180.0 +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Convert a value in degrees to a value measured in radians. +/// That is, $$1 \text{ radians } = \frac{180}{\pi} \text{ degrees }$$. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/conversion +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// conversion.radians_to_degrees(0.0) +/// |> should.equal(0.0) +/// +/// conversion.radians_to_degrees(2. *. elementary.pi()) +/// |> should.equal(360.) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn radians_to_degrees(x: Float) -> Float { + x *. 180.0 /. do_pi() +} + +@external(erlang, "math", "pi") +@external(javascript, "../../maths.mjs", "pi") +fn do_pi() -> Float diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/elementary.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/elementary.gleam new file mode 100644 index 0000000..1b518a4 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/elementary.gleam @@ -0,0 +1,1256 @@ +////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous"> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script> +////<script> +//// document.addEventListener("DOMContentLoaded", function() { +//// renderMathInElement(document.body, { +//// // customised options +//// // • auto-render specific keys, e.g.: +//// delimiters: [ +//// {left: '$$', right: '$$', display: false}, +//// // {left: '$', right: '$', display: false}, +//// // {left: '\\(', right: '\\)', display: false}, +//// {left: '\\[', right: '\\]', display: true} +//// ], +//// // • rendering keys, e.g.: +//// throwOnError : false +//// }); +//// }); +////</script> +////<style> +//// .katex { font-size: 1.1em; } +////</style> +//// +//// --- +//// +//// Elementary: A module containing a comprehensive set of foundational mathematical functions and constants. +//// +//// * **Trigonometric and hyperbolic functions** +//// * [`acos`](#acos) +//// * [`acosh`](#acosh) +//// * [`asin`](#asin) +//// * [`asinh`](#asinh) +//// * [`atan`](#atan) +//// * [`atan2`](#atan2) +//// * [`atanh`](#atanh) +//// * [`cos`](#cos) +//// * [`cosh`](#cosh) +//// * [`sin`](#sin) +//// * [`sinh`](#sinh) +//// * [`tan`](#tan) +//// * [`tanh`](#tanh) +//// * **Powers, logs and roots** +//// * [`exponential`](#exponential) +//// * [`natural_logarithm`](#natural_logarithm) +//// * [`logarithm`](#logarithm) +//// * [`logarithm_2`](#logarithm_2) +//// * [`logarithm_10`](#logarithm_10) +//// * [`power`](#power) +//// * [`square_root`](#square_root) +//// * [`cube_root`](#cube_root) +//// * [`nth_root`](#nth_root) +//// * **Mathematical constants** +//// * [`pi`](#pi) +//// * [`tau`](#tau) +//// * [`e`](#e) +//// + +import gleam/int +import gleam/option + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The inverse cosine function: +/// +/// \\[ +/// \forall x \in \[-1, 1\], \\; \cos^{-1}{(x)} = y \in \[0, \pi \] +/// \\] +/// +/// The function takes a number $$x$$ in its domain $$\[-1, 1\]$$ as input and returns a +/// numeric value $$y$$ that lies in the range $$\[0, \pi \]$$ (an angle in radians). +/// If the input value is outside the domain of the function an error is returned. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// elementary.acos(1.0) +/// |> should.equal(Ok(0.0)) +/// +/// elementary.acos(1.1) +/// |> should.be_error() +/// +/// elementary.acos(-1.1) +/// |> should.be_error() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn acos(x: Float) -> Result(Float, String) { + case x >=. -1.0 && x <=. 1.0 { + True -> + do_acos(x) + |> Ok + False -> + "Invalid input argument: x >= -1 or x <= 1. Valid input is -1. <= x <= 1." + |> Error + } +} + +@external(erlang, "math", "acos") +@external(javascript, "../../maths.mjs", "acos") +fn do_acos(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The inverse hyperbolic cosine function: +/// +/// \\[ +/// \forall x \in [1, +\infty\), \\; \cosh^{-1}{(x)} = y \in \[0, +\infty\) +/// \\] +/// +/// The function takes a number $$x$$ in its domain $$\[1, +\infty\)$$ as input and returns +/// a numeric value $$y$$ that lies in the range $$\[0, +\infty\)$$ (an angle in radians). +/// If the input value is outside the domain of the function an error is returned. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// elementary.acosh(1.0) +/// |> should.equal(Ok(0.0)) +/// +/// elementary.acosh(0.0) +/// |> should.be_error() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn acosh(x: Float) -> Result(Float, String) { + case x >=. 1.0 { + True -> + do_acosh(x) + |> Ok + False -> + "Invalid input argument: x < 1. Valid input is x >= 1." + |> Error + } +} + +@external(erlang, "math", "acosh") +@external(javascript, "../../maths.mjs", "acosh") +fn do_acosh(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The inverse sine function: +/// +/// \\[ +/// \forall x \in \[-1, 1\], \\; \sin^{-1}{(x)} = y \in \(-\infty, +\infty\) +/// \\] +/// +/// The function takes a number $$x$$ in its domain $$\[-1, 1\]$$ as input and returns a numeric +/// value $$y$$ that lies in the range $$\[-\frac{\pi}{2}, \frac{\pi}{2}\]$$ (an angle in radians). +/// If the input value is outside the domain of the function an error is returned. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// elementary.asin(0.0) +/// |> should.equal(Ok(0.0)) +/// +/// elementary.asin(1.1) +/// |> should.be_error() +/// +/// elementary.asin(-1.1) +/// |> should.be_error() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn asin(x: Float) -> Result(Float, String) { + case x >=. -1.0 && x <=. 1.0 { + True -> + do_asin(x) + |> Ok + False -> + "Invalid input argument: x >= -1 or x <= 1. Valid input is -1. <= x <= 1." + |> Error + } +} + +@external(erlang, "math", "asin") +@external(javascript, "../../maths.mjs", "asin") +fn do_asin(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The inverse hyperbolic sine function: +/// +/// \\[ +/// \forall x \in \(-\infty, \infty\), \\; \sinh^{-1}{(x)} = y \in \(-\infty, +\infty\) +/// \\] +/// +/// The function takes a number $$x$$ in its domain $$\(-\infty, +\infty\)$$ as input and returns +/// a numeric value $$y$$ that lies in the range $$\(-\infty, +\infty\)$$ (an angle in radians). +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// elementary.asinh(0.0) +/// |> should.equal(0.0) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn asinh(x: Float) -> Float { + do_asinh(x) +} + +@external(erlang, "math", "asinh") +@external(javascript, "../../maths.mjs", "asinh") +fn do_asinh(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The inverse tangent function: +/// +/// \\[ +/// \forall x \in \(-\infty, \infty\), \\; \tan^{-1}{(x)} = y \in \[-\frac{\pi}{2}, \frac{\pi}{2}\] +/// \\] +/// +/// The function takes a number $$x$$ in its domain $$\(-\infty, +\infty\)$$ as input and returns +/// a numeric value $$y$$ that lies in the range $$\[-\frac{\pi}{2}, \frac{\pi}{2}\]$$ (an angle in radians). +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// elementary.atan(0.0) +/// |> should.equal(0.0) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn atan(x: Float) -> Float { + do_atan(x) +} + +@external(erlang, "math", "atan") +@external(javascript, "../../maths.mjs", "atan") +fn do_atan(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The inverse 2-argument tangent function: +/// +/// \\[ +/// \text{atan2}(y, x) = +/// \begin{cases} +/// \tan^{-1}(\frac y x) &\text{if } x > 0, \\\\ +/// \tan^{-1}(\frac y x) + \pi &\text{if } x < 0 \text{ and } y \ge 0, \\\\ +/// \tan^{-1}(\frac y x) - \pi &\text{if } x < 0 \text{ and } y < 0, \\\\ +/// +\frac{\pi}{2} &\text{if } x = 0 \text{ and } y > 0, \\\\ +/// -\frac{\pi}{2} &\text{if } x = 0 \text{ and } y < 0, \\\\ +/// \text{undefined} &\text{if } x = 0 \text{ and } y = 0. +/// \end{cases} +/// \\] +/// +/// The function returns the angle in radians from the x-axis to the line containing the +/// origin $$\(0, 0\)$$ and a point given as input with coordinates $$\(x, y\)$$. The numeric value +/// returned by $$\text{atan2}(y, x)$$ is in the range $$\[-\pi, \pi\]$$. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// elementary.atan2(0.0, 0.0) +/// |> should.equal(0.0) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn atan2(y: Float, x: Float) -> Float { + do_atan2(y, x) +} + +@external(erlang, "math", "atan2") +@external(javascript, "../../maths.mjs", "atan2") +fn do_atan2(a: Float, b: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The inverse hyperbolic tangent function: +/// +/// \\[ +/// \forall x \in \(-1, 1\), \\; \tanh^{-1}{(x)} = y \in \(-\infty, +\infty\) +/// \\] +/// +/// The function takes a number $$x$$ in its domain $$\(-1, 1\)$$ as input and returns +/// a numeric value $$y$$ that lies in the range $$\(-\infty, \infty\)$$ (an angle in radians). +/// If the input value is outside the domain of the function an error is returned. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// elementary.atanh(0.0) +/// |> should.equal(Ok(0.0)) +/// +/// elementary.atanh(1.0) +/// |> should.be_error() +/// +/// elementary.atanh(-1.0) +/// |> should.be_error() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn atanh(x: Float) -> Result(Float, String) { + case x >. -1.0 && x <. 1.0 { + True -> + do_atanh(x) + |> Ok + False -> + "Invalid input argument: x > -1 or x < 1. Valid input is -1. < x < 1." + |> Error + } +} + +@external(erlang, "math", "atanh") +@external(javascript, "../../maths.mjs", "atanh") +fn do_atanh(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The cosine function: +/// +/// \\[ +/// \forall x \in \(-\infty, +\infty\), \\; \cos{(x)} = y \in \[-1, 1\] +/// \\] +/// +/// The function takes a number $$x$$ in its domain $$\(-\infty, \infty\)$$ (an angle in radians) +/// as input and returns a numeric value $$y$$ that lies in the range $$\[-1, 1\]$$. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// elementary.cos(0.0) +/// |> should.equal(1.0) +/// +/// elementary.cos(elementary.pi()) +/// |> should.equal(-1.0) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn cos(x: Float) -> Float { + do_cos(x) +} + +@external(erlang, "math", "cos") +@external(javascript, "../../maths.mjs", "cos") +fn do_cos(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The hyperbolic cosine function: +/// +/// \\[ +/// \forall x \in \(-\infty, \infty\), \\; \cosh{(x)} = y \in \(-\infty, +\infty\) +/// \\] +/// +/// The function takes a number $$x$$ in its domain $$\(-\infty, \infty\)$$ as input (an angle in radians) +/// and returns a numeric value $$y$$ that lies in the range $$\(-\infty, \infty\)$$. +/// If the input value is too large an overflow error might occur. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// elementary.cosh(0.0) +/// |> should.equal(0.0) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn cosh(x: Float) -> Float { + do_cosh(x) +} + +@external(erlang, "math", "cosh") +@external(javascript, "../../maths.mjs", "cosh") +fn do_cosh(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The sine function: +/// +/// \\[ +/// \forall x \in \(-\infty, +\infty\), \\; \sin{(x)} = y \in \[-1, 1\] +/// \\] +/// +/// The function takes a number $$x$$ in its domain $$\(-\infty, \infty\)$$ (an angle in radians) +/// as input and returns a numeric value $$y$$ that lies in the range $$\[-1, 1\]$$. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// elementary.sin(0.0) +/// |> should.equal(0.0) +/// +/// elementary.sin(0.5 *. elementary.pi()) +/// |> should.equal(1.0) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn sin(x: Float) -> Float { + do_sin(x) +} + +@external(erlang, "math", "sin") +@external(javascript, "../../maths.mjs", "sin") +fn do_sin(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The hyperbolic sine function: +/// +/// \\[ +/// \forall x \in \(-\infty, +\infty\), \\; \sinh{(x)} = y \in \(-\infty, +\infty\) +/// \\] +/// +/// The function takes a number $$x$$ in its domain $$\(-\infty, +\infty\)$$ as input +/// (an angle in radians) and returns a numeric value $$y$$ that lies in the range +/// $$\(-\infty, +\infty\)$$. If the input value is too large an overflow error might +/// occur. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// elementary.sinh(0.0) +/// |> should.equal(0.0) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn sinh(x: Float) -> Float { + do_sinh(x) +} + +@external(erlang, "math", "sinh") +@external(javascript, "../../maths.mjs", "sinh") +fn do_sinh(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The tangent function: +/// +/// \\[ +/// \forall x \in \(-\infty, +\infty\), \\; \tan{(x)} = y \in \(-\infty, +\infty\) +/// \\] +/// +/// The function takes a number $$x$$ in its domain $$\(-\infty, +\infty\)$$ as input +/// (an angle in radians) and returns a numeric value $$y$$ that lies in the range +/// $$\(-\infty, +\infty\)$$. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// elementary.tan(0.0) +/// |> should.equal(0.0) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn tan(x: Float) -> Float { + do_tan(x) +} + +@external(erlang, "math", "tan") +@external(javascript, "../../maths.mjs", "tan") +fn do_tan(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The hyperbolic tangent function: +/// +/// \\[ +/// \forall x \in \(-\infty, \infty\), \\; \tanh{(x)} = y \in \[-1, 1\] +/// \\] +/// +/// The function takes a number $$x$$ in its domain $$\(-\infty, \infty\)$$ as input (an angle in radians) +/// and returns a numeric value $$y$$ that lies in the range $$\[-1, 1\]$$. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example () { +/// elementary.tanh(0.0) +/// |> should.equal(0.0) +/// +/// elementary.tanh(25.0) +/// |> should.equal(1.0) +/// +/// elementary.tanh(-25.0) +/// |> should.equal(-1.0) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn tanh(x: Float) -> Float { + do_tanh(x) +} + +@external(erlang, "math", "tanh") +@external(javascript, "../../maths.mjs", "tanh") +fn do_tanh(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The exponential function: +/// +/// \\[ +/// \forall x \in \(-\infty, \infty\), \\; e^{(x)} = y \in \(0, +\infty\) +/// \\] +/// +/// $$e \approx 2.71828\dots$$ is Eulers' number. +/// +/// Note: If the input value $$x$$ is too large an overflow error might occur. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// elementary.exponential(0.0) +/// |> should.equal(1.0) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn exponential(x: Float) -> Float { + do_exponential(x) +} + +@external(erlang, "math", "exp") +@external(javascript, "../../maths.mjs", "exponential") +fn do_exponential(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The natural logarithm function: +/// +/// \\[ +/// \forall x \in \(0, \infty\), \\; \log_{e}{(x)} = y \in \(-\infty, +\infty\) +/// \\] +/// +/// The function takes a number $$x$$ in its domain $$\(0, \infty\)$$ as input and returns +/// a numeric value $$y$$ that lies in the range $$\(-\infty, \infty\)$$. +/// If the input value is outside the domain of the function an error is returned. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example () { +/// elementary.natural_logarithm(1.0) +/// |> should.equal(Ok(0.0)) +/// +/// elementary.natural_logarithm(elementary.e()) +/// |> should.equal(Ok(1.0)) +/// +/// elementary.natural_logarithm(-1.0) +/// |> should.be_error() +/// } +/// </details> +/// +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn natural_logarithm(x: Float) -> Result(Float, String) { + case x >. 0.0 { + True -> + do_natural_logarithm(x) + |> Ok + False -> + "Invalid input argument: x <= 0. Valid input is x > 0." + |> Error + } +} + +@external(erlang, "math", "log") +@external(javascript, "../../maths.mjs", "logarithm") +fn do_natural_logarithm(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The base $$b$$ logarithm function (computed through the "change of base" formula): +/// +/// \\[ +/// \forall x \in \(0, \infty\) \textnormal{ and } b > 1, \\; \log_{b}{(x)} = y \in \(-\infty, +\infty\) +/// \\] +/// +/// The function takes a number $$x$$ in its domain $$\(0, \infty\)$$ and a base $$b > 1$$ as input and returns +/// a numeric value $$y$$ that lies in the range $$\(-\infty, \infty\)$$. +/// If the input value is outside the domain of the function an error is returned. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam/option +/// import gleam_community/maths/elementary +/// +/// pub fn example () { +/// elementary.logarithm(1.0, option.Some(10.0)) +/// |> should.equal(Ok(0.0)) +/// +/// elementary.logarithm(elementary.e(), option.Some(elementary.e())) +/// |> should.equal(Ok(1.0)) +/// +/// elementary.logarithm(-1.0, option.Some(2.0)) +/// |> should.be_error() +/// } +/// </details> +/// +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn logarithm(x: Float, base: option.Option(Float)) -> Result(Float, String) { + case x >. 0.0 { + True -> + case base { + option.Some(a) -> + case a >. 0.0 && a != 1.0 { + True -> { + // Apply the "change of base formula" + let assert Ok(numerator) = logarithm_10(x) + let assert Ok(denominator) = logarithm_10(a) + numerator /. denominator + |> Ok + } + False -> + "Invalid input argument: base <= 0 or base == 1. Valid input is base > 0 and base != 1." + |> Error + } + _ -> + "Invalid input argument: base <= 0 or base == 1. Valid input is base > 0 and base != 1." + |> Error + } + _ -> + "Invalid input argument: x <= 0. Valid input is x > 0." + |> Error + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The The base-2 logarithm function: +/// +/// \\[ +/// \forall x \in \(0, \infty), \\; \log_{2}{(x)} = y \in \(-\infty, +\infty\) +/// \\] +/// +/// The function takes a number $$x$$ in its domain $$\(0, \infty\)$$ as input and returns +/// a numeric value $$y$$ that lies in the range $$\(-\infty, \infty\)$$. +/// If the input value is outside the domain of the function an error is returned. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example () { +/// elementary.logarithm_2(1.0) +/// |> should.equal(Ok(0.0)) +/// +/// elementary.logarithm_2(2.0) +/// |> should.equal(Ok(1.0)) +/// +/// elementary.logarithm_2(-1.0) +/// |> should.be_error() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn logarithm_2(x: Float) -> Result(Float, String) { + case x >. 0.0 { + True -> + do_logarithm_2(x) + |> Ok + False -> + "Invalid input argument: x <= 0. Valid input is x > 0." + |> Error + } +} + +@external(erlang, "math", "log2") +@external(javascript, "../../maths.mjs", "logarithm_2") +fn do_logarithm_2(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The base-10 logarithm function: +/// +/// \\[ +/// \forall x \in \(0, \infty), \\; \log_{10}{(x)} = y \in \(-\infty, +\infty\) +/// \\] +/// +/// The function takes a number $$x$$ in its domain $$\(0, \infty\)$$ as input and returns +/// a numeric value $$y$$ that lies in the range $$\(-\infty, \infty\)$$. +/// If the input value is outside the domain of the function an error is returned. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example () { +/// elementary.logarithm_10(1.0) +/// |> should.equal(Ok(0.0)) +/// +/// elementary.logarithm_10(10.0) +/// |> should.equal(Ok(1.0)) +/// +/// elementary.logarithm_10(-1.0) +/// |> should.be_error() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn logarithm_10(x: Float) -> Result(Float, String) { + case x >. 0.0 { + True -> + do_logarithm_10(x) + |> Ok + False -> + "Invalid input argument: x <= 0. Valid input is x > 0." + |> Error + } +} + +@external(erlang, "math", "log10") +@external(javascript, "../../maths.mjs", "logarithm_10") +fn do_logarithm_10(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The exponentiation function: $$y = x^{a}$$. +/// +/// Note that the function is not defined if: +/// 1. The base is negative ($$x < 0$$) and the exponent is fractional +/// ($$a = \frac{n}{m}$$ is an irrreducible fraction). An error will be returned +/// as an imaginary number will otherwise have to be returned. +/// 2. The base is zero ($$x = 0$$) and the exponent is negative ($$a < 0$$) then the +/// expression is equivalent to the exponent $$y$$ divided by $$0$$ and an +/// error will have to be returned as the expression is otherwise undefined. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// elementary.power(2., -1.) +/// |> should.equal(Ok(0.5)) +/// +/// elementary.power(2., 2.) +/// |> should.equal(Ok(4.0)) +/// +/// elementary.power(-1., 0.5) +/// |> should.be_error() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn power(x: Float, y: Float) -> Result(Float, String) { + let fractional: Bool = do_ceiling(y) -. y >. 0.0 + // In the following check: + // 1. If the base (x) is negative and the exponent (y) is fractional + // then return an error as it will otherwise be an imaginary number + // 2. If the base (x) is 0 and the exponent (y) is negative then the + // expression is equivalent to the exponent (y) divided by 0 and an + // error should be returned + case x <. 0.0 && fractional || x == 0.0 && y <. 0.0 { + True -> + "Invalid input argument: x < 0 and y is fractional or x = 0 and y < 0." + |> Error + False -> + do_power(x, y) + |> Ok + } +} + +@external(erlang, "math", "pow") +@external(javascript, "../../maths.mjs", "power") +fn do_power(a: Float, b: Float) -> Float + +@external(erlang, "math", "ceil") +@external(javascript, "../../maths.mjs", "ceiling") +fn do_ceiling(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The square root function: $$y = \sqrt[2]{x} = x^{\frac{1}{2}}$$. +/// +/// Note that the function is not defined if: +/// 1. The input is negative ($$x < 0$$). An error will be returned +/// as an imaginary number will otherwise have to be returned. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// elementary.square_root(1.0) +/// |> should.equal(Ok(1.0)) +/// +/// elementary.square_root(4.0) +/// |> should.equal(Ok(2.0)) +/// +/// elementary.square_root(-1.0) +/// |> should.be_error() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn square_root(x: Float) -> Result(Float, String) { + // In the following check: + // 1. If x is negative then return an error as it will otherwise be an + // imaginary number + case x <. 0.0 { + True -> + "Invalid input argument: x < 0." + |> Error + False -> { + let assert Ok(result) = power(x, 1.0 /. 2.0) + result + |> Ok + } + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The cube root function: $$y = \sqrt[3]{x} = x^{\frac{1}{3}}$$. +/// +/// Note that the function is not defined if: +/// 1. The input is negative ($$x < 0$$). An error will be returned +/// as an imaginary number will otherwise have to be returned. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// elementary.cube_root(1.0) +/// |> should.equal(Ok(1.0)) +/// +/// elementary.cube_root(27.0) +/// |> should.equal(Ok(3.0)) +/// +/// elementary.cube_root(-1.0) +/// |> should.be_error() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn cube_root(x: Float) -> Result(Float, String) { + // In the following check: + // 1. If x is negative then return an error as it will otherwise be an + // imaginary number + case x <. 0.0 { + True -> + "Invalid input argument: x < 0." + |> Error + False -> { + let assert Ok(result) = power(x, 1.0 /. 3.0) + result + |> Ok + } + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The $$n$$'th root function: $$y = \sqrt[n]{x} = x^{\frac{1}{n}}$$. +/// +/// Note that the function is not defined if: +/// 1. The input is negative ($$x < 0$$). An error will be returned +/// as an imaginary number will otherwise have to be returned. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// elementary.nth_root(1.0, 2) +/// |> should.equal(Ok(1.0)) +/// +/// elementary.nth_root(27.0, 3) +/// |> should.equal(Ok(3.0)) +/// +/// elementary.nth_root(256.0, 4) +/// |> should.equal(Ok(4.0)) +/// +/// elementary.nth_root(-1.0, 2) +/// |> should.be_error() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn nth_root(x: Float, n: Int) -> Result(Float, String) { + // In the following check: + // 1. If x is negative then return an error as it will otherwise be an + // imaginary number + case x <. 0.0 { + True -> + "Invalid input argument: x < 0. Valid input is x > 0" + |> Error + False -> + case n >= 1 { + True -> { + let assert Ok(result) = power(x, 1.0 /. int.to_float(n)) + result + |> Ok + } + False -> + "Invalid input argument: n < 1. Valid input is n >= 2." + |> Error + } + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The mathematical constant pi: $$\pi \approx 3.1415\dots$$ +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn pi() -> Float { + do_pi() +} + +@external(erlang, "math", "pi") +@external(javascript, "../../maths.mjs", "pi") +fn do_pi() -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The mathematical constant tau: $$\tau = 2 \cdot \pi \approx 6.283\dots$$ +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn tau() -> Float { + 2.0 *. pi() +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Euler's number $$e \approx 2.71828\dots$$. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// +/// pub fn example() { +/// // Test that the constant is approximately equal to 2.7128... +/// elementary.e() +/// |> elementary.is_close(2.7128, 0.0, 0.000001) +/// |> should.be_true() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn e() -> Float { + exponential(1.0) +} diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/metrics.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/metrics.gleam new file mode 100644 index 0000000..1dab2b4 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/metrics.gleam @@ -0,0 +1,560 @@ +////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous"> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script> +////<script> +//// document.addEventListener("DOMContentLoaded", function() { +//// renderMathInElement(document.body, { +//// // customised options +//// // • auto-render specific keys, e.g.: +//// delimiters: [ +//// {left: '$$', right: '$$', display: false}, +//// // {left: '$', right: '$', display: false}, +//// // {left: '\\(', right: '\\)', display: false}, +//// {left: '\\[', right: '\\]', display: true} +//// ], +//// // • rendering keys, e.g.: +//// throwOnError : false +//// }); +//// }); +////</script> +////<style> +//// .katex { font-size: 1.1em; } +////</style> +//// +//// --- +//// +//// Metrics: A module offering functions for calculating distances and other types of metrics. +//// +//// * **Distances** +//// * [`norm`](#norm) +//// * [`manhatten_distance`](#float_manhatten_distance) +//// * [`minkowski_distance`](#minkowski_distance) +//// * [`euclidean_distance`](#euclidean_distance) +//// * **Basic statistical measures** +//// * [`mean`](#mean) +//// * [`median`](#median) +//// * [`variance`](#variance) +//// * [`standard_deviation`](#standard_deviation) +//// + +import gleam_community/maths/elementary +import gleam_community/maths/piecewise +import gleam_community/maths/arithmetics +import gleam_community/maths/predicates +import gleam_community/maths/conversion +import gleam/list +import gleam/pair +import gleam/float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Calculcate the $$p$$-norm of a list (representing a vector): +/// +/// \\[ +/// \left( \sum_{i=1}^n \left|x_i\right|^{p} \right)^{\frac{1}{p}} +/// \\] +/// +/// In the formula, $$n$$ is the length of the list and $$x_i$$ is the value in the input list indexed by $$i$$. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// import gleam_community/maths/metrics +/// import gleam_community/maths/predicates +/// +/// pub fn example () { +/// let assert Ok(tol) = elementary.power(-10.0, -6.0) +/// +/// [1.0, 1.0, 1.0] +/// |> metrics.norm(1.0) +/// |> predicates.is_close(3.0, 0.0, tol) +/// |> should.be_true() +/// +/// [1.0, 1.0, 1.0] +/// |> metrics.norm(-1.0) +/// |> predicates.is_close(0.3333333333333333, 0.0, tol) +/// |> should.be_true() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn norm(arr: List(Float), p: Float) -> Float { + case arr { + [] -> 0.0 + _ -> { + let agg: Float = + arr + |> list.fold( + 0.0, + fn(acc: Float, a: Float) -> Float { + let assert Ok(result) = + elementary.power(piecewise.float_absolute_value(a), p) + result +. acc + }, + ) + let assert Ok(result) = elementary.power(agg, 1.0 /. p) + result + } + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Calculcate the Manhatten distance between two lists (representing vectors): +/// +/// \\[ +/// \sum_{i=1}^n \left|x_i - y_i \right| +/// \\] +/// +/// In the formula, $$n$$ is the length of the two lists and $$x_i, y_i$$ are the values in the respective input lists indexed by $$i, j$$. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// import gleam_community/maths/metrics +/// import gleam_community/maths/predicates +/// +/// pub fn example () { +/// let assert Ok(tol) = elementary.power(-10.0, -6.0) +/// +/// // Empty lists returns 0.0 +/// metrics.float_manhatten_distance([], []) +/// |> should.equal(Ok(0.0)) +/// +/// // Differing lengths returns error +/// metrics.manhatten_distance([], [1.0]) +/// |> should.be_error() +/// +/// let assert Ok(result) = metrics.manhatten_distance([0.0, 0.0], [1.0, 2.0]) +/// result +/// |> predicates.is_close(3.0, 0.0, tol) +/// |> should.be_true() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn manhatten_distance( + xarr: List(Float), + yarr: List(Float), +) -> Result(Float, String) { + minkowski_distance(xarr, yarr, 1.0) +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Calculcate the Minkowski distance between two lists (representing vectors): +/// +/// \\[ +/// \left( \sum_{i=1}^n \left|x_i - y_i \right|^{p} \right)^{\frac{1}{p}} +/// \\] +/// +/// In the formula, $$p >= 1$$ is the order, $$n$$ is the length of the two lists and $$x_i, y_i$$ are the values in the respective input lists indexed by $$i, j$$. +/// +/// The Minkowski distance is a generalization of both the Euclidean distance ($$p=2$$) and the Manhattan distance ($$p = 1$$). +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// import gleam_community/maths/metrics +/// import gleam_community/maths/predicates +/// +/// pub fn example () { +/// let assert Ok(tol) = elementary.power(-10.0, -6.0) +/// +/// // Empty lists returns 0.0 +/// metrics.minkowski_distance([], [], 1.0) +/// |> should.equal(Ok(0.0)) +/// +/// // Differing lengths returns error +/// metrics.minkowski_distance([], [1.0], 1.0) +/// |> should.be_error() +/// +/// // Test order < 1 +/// metrics.minkowski_distance([0.0, 0.0], [0.0, 0.0], -1.0) +/// |> should.be_error() +/// +/// let assert Ok(result) = metrics.minkowski_distance([0.0, 0.0], [1.0, 2.0], 1.0) +/// result +/// |> predicates.is_close(3.0, 0.0, tol) +/// |> should.be_true() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn minkowski_distance( + xarr: List(Float), + yarr: List(Float), + p: Float, +) -> Result(Float, String) { + let xlen: Int = list.length(xarr) + let ylen: Int = list.length(yarr) + case xlen == ylen { + False -> + "Invalid input argument: length(xarr) != length(yarr). Valid input is when length(xarr) == length(yarr)." + |> Error + True -> + case p <. 1.0 { + True -> + "Invalid input argument: p < 1. Valid input is p >= 1." + |> Error + False -> + list.zip(xarr, yarr) + |> list.map(fn(tuple: #(Float, Float)) -> Float { + pair.first(tuple) -. pair.second(tuple) + }) + |> norm(p) + |> Ok + } + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Calculcate the Euclidean distance between two lists (representing vectors): +/// +/// \\[ +/// \left( \sum_{i=1}^n \left|x_i - y_i \right|^{2} \right)^{\frac{1}{2}} +/// \\] +/// +/// In the formula, $$n$$ is the length of the two lists and $$x_i, y_i$$ are the values in the respective input lists indexed by $$i, j$$. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// import gleam_community/maths/metrics +/// import gleam_community/maths/predicates +/// +/// pub fn example () { +/// let assert Ok(tol) = elementary.power(-10.0, -6.0) +/// +/// // Empty lists returns 0.0 +/// metrics.euclidean_distance([], []) +/// |> should.equal(Ok(0.0)) +/// +/// // Differing lengths returns error +/// metrics.euclidean_distance([], [1.0]) +/// |> should.be_error() +/// +/// let assert Ok(result) = metrics.euclidean_distance([0.0, 0.0], [1.0, 2.0]) +/// result +/// |> predicates.is_close(2.23606797749979, 0.0, tol) +/// |> should.be_true() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn euclidean_distance( + xarr: List(Float), + yarr: List(Float), +) -> Result(Float, String) { + minkowski_distance(xarr, yarr, 2.0) +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/nicklasxyz/gleam_stats/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Calculcate the arithmetic mean of the elements in a list: +/// +/// \\[ +/// \bar{x} = \frac{1}{n}\sum_{i=1}^n x_i +/// \\] +/// +/// In the formula, $$n$$ is the sample size (the length of the list) and +/// $$x_i$$ is the sample point in the input list indexed by $$i$$. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/metrics +/// +/// pub fn example () { +/// // An empty list returns an error +/// [] +/// |> metrics.mean() +/// |> should.be_error() +/// +/// // Valid input returns a result +/// [1., 2., 3.] +/// |> metrics.mean() +/// |> should.equal(Ok(2.)) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn mean(arr: List(Float)) -> Result(Float, String) { + case arr { + [] -> + "Invalid input argument: The list is empty." + |> Error + _ -> + arr + |> arithmetics.float_sum() + |> fn(a: Float) -> Float { + a /. conversion.int_to_float(list.length(arr)) + } + |> Ok + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/nicklasxyz/gleam_stats/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Calculcate the median of the elements in a list. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/metrics +/// +/// pub fn example () { +/// // An empty list returns an error +/// [] +/// |> metrics.median() +/// |> should.be_error() +/// +/// // Valid input returns a result +/// [1., 2., 3.] +/// |> metrics.median() +/// |> should.equal(Ok(2.)) +/// +/// [1., 2., 3., 4.] +/// |> metrics.median() +/// |> should.equal(Ok(2.5)) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn median(arr: List(Float)) -> Result(Float, String) { + case arr { + [] -> + "Invalid input argument: The list is empty." + |> Error + _ -> { + let count: Int = list.length(arr) + let mid: Int = list.length(arr) / 2 + let sorted: List(Float) = list.sort(arr, float.compare) + case predicates.is_odd(count) { + // If there is an odd number of elements in the list, then the median + // is just the middle value + True -> { + let assert Ok(val0) = list.at(sorted, mid) + val0 + |> Ok + } + // If there is an even number of elements in the list, then the median + // is the mean of the two middle values + False -> { + let assert Ok(val0) = list.at(sorted, mid - 1) + let assert Ok(val1) = list.at(sorted, mid) + [val0, val1] + |> mean() + } + } + } + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/nicklasxyz/gleam_stats/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Calculcate the sample variance of the elements in a list: +/// \\[ +/// s^{2} = \frac{1}{n - d} \sum_{i=1}^{n}(x_i - \bar{x}) +/// \\] +/// +/// In the formula, $$n$$ is the sample size (the length of the list) and +/// $$x_i$$ is the sample point in the input list indexed by $$i$$. +/// Furthermore, $$\bar{x}$$ is the sample mean and $$d$$ is the "Delta +/// Degrees of Freedom", and is by default set to $$d = 0$$, which gives a biased +/// estimate of the sample variance. Setting $$d = 1$$ gives an unbiased estimate. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/metrics +/// +/// pub fn example () { +/// // Degrees of freedom +/// let ddof: Int = 1 +/// +/// // An empty list returns an error +/// [] +/// |> metrics.variance(ddof) +/// |> should.be_error() +/// +/// // Valid input returns a result +/// [1., 2., 3.] +/// |> metrics.variance(ddof) +/// |> should.equal(Ok(1.)) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn variance(arr: List(Float), ddof: Int) -> Result(Float, String) { + case arr { + [] -> + "Invalid input argument: The list is empty." + |> Error + _ -> + case ddof < 0 { + True -> + "Invalid input argument: ddof < 0. Valid input is ddof >= 0." + |> Error + False -> { + let assert Ok(mean) = mean(arr) + arr + |> list.map(fn(a: Float) -> Float { + let assert Ok(result) = elementary.power(a -. mean, 2.0) + result + }) + |> arithmetics.float_sum() + |> fn(a: Float) -> Float { + a /. { + conversion.int_to_float(list.length(arr)) -. conversion.int_to_float( + ddof, + ) + } + } + |> Ok + } + } + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/nicklasxyz/gleam_stats/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Calculcate the sample standard deviation of the elements in a list: +/// \\[ +/// s = \left(\frac{1}{n - d} \sum_{i=1}^{n}(x_i - \bar{x})\right)^{\frac{1}{2}} +/// \\] +/// +/// In the formula, $$n$$ is the sample size (the length of the list) and +/// $$x_i$$ is the sample point in the input list indexed by $$i$$. +/// Furthermore, $$\bar{x}$$ is the sample mean and $$d$$ is the "Delta +/// Degrees of Freedom", and is by default set to $$d = 0$$, which gives a biased +/// estimate of the sample standard deviation. Setting $$d = 1$$ gives an unbiased estimate. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/metrics +/// +/// pub fn example () { +/// // Degrees of freedom +/// let ddof: Int = 1 +/// +/// // An empty list returns an error +/// [] +/// |> metrics.standard_deviationddof) +/// |> should.be_error() +/// +/// // Valid input returns a result +/// [1., 2., 3.] +/// |> metrics.standard_deviation(ddof) +/// |> should.equal(Ok(1.)) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn standard_deviation(arr: List(Float), ddof: Int) -> Result(Float, String) { + case arr { + [] -> + "Invalid input argument: The list is empty." + |> Error + _ -> + case ddof < 0 { + True -> + "Invalid input argument: ddof < 0. Valid input is ddof >= 0." + |> Error + False -> { + let assert Ok(variance) = variance(arr, ddof) + // The computed variance will always be positive + // So an error should never be returned + let assert Ok(stdev) = elementary.square_root(variance) + stdev + |> Ok + } + } + } +} diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/piecewise.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/piecewise.gleam new file mode 100644 index 0000000..3b40a18 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/piecewise.gleam @@ -0,0 +1,1228 @@ +////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous"> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script> +////<script> +//// document.addEventListener("DOMContentLoaded", function() { +//// renderMathInElement(document.body, { +//// // customised options +//// // • auto-render specific keys, e.g.: +//// delimiters: [ +//// {left: '$$', right: '$$', display: false}, +//// // {left: '$', right: '$', display: false}, +//// // {left: '\\(', right: '\\)', display: false}, +//// {left: '\\[', right: '\\]', display: true} +//// ], +//// // • rendering keys, e.g.: +//// throwOnError : false +//// }); +//// }); +////</script> +////<style> +//// .katex { font-size: 1.1em; } +////</style> +//// +//// --- +//// +//// Piecewise: A module containing functions that have different definitions depending on conditions or intervals of their domain. +//// +//// * **Rounding functions** +//// * [`ceiling`](#ceiling) +//// * [`floor`](#floor) +//// * [`truncate`](#truncate) +//// * [`round`](#round) +//// * **Sign and absolute value functions** +//// * [`float_absolute_value`](#float_absolute_value) +//// * [`int_absolute_value`](#int_absolute_value) +//// * [`float_absolute_difference`](#float_absolute_difference) +//// * [`int_absolute_difference`](#int_absolute_difference) +//// * [`float_sign`](#float_sign) +//// * [`int_sign`](#int_sign) +//// * [`float_copy_sign`](#float_copy_sign) +//// * [`int_copy_sign`](#float_copy_sign) +//// * [`float_flip_sign`](#float_flip_sign) +//// * [`int_flip_sign`](#int_flip_sign) +//// * **Misc. mathematical functions** +//// * [`minimum`](#minimum) +//// * [`maximum`](#maximum) +//// * [`minmax`](#minmax) +//// * [`list_minimum`](#list_minimum) +//// * [`list_maximum`](#list_maximum) +//// * [`extrema`](#extrema) +//// * [`arg_minimum`](#arg_minimum) +//// * [`arg_maximum`](#arg_maximum) +//// + +import gleam/option +import gleam/list +import gleam/order +import gleam/pair +import gleam/int +import gleam_community/maths/conversion +import gleam_community/maths/elementary + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The ceiling function rounds a given input value $$x \in \mathbb{R}$$ to the nearest integer value (at the specified digit) that is larger than or equal to the input $$x$$. +/// +/// Note: The ceiling function is used as an alias for the rounding function [`round`](#round) with rounding mode `RoundUp`. +/// +/// <details> +/// <summary>Details</summary> +/// +/// For example, $$12.0654$$ is rounded to: +/// - $$13.0$$ for 0 digits after the decimal point (`digits = 0`) +/// - $$12.1$$ for 1 digit after the decimal point (`digits = 1`) +/// - $$12.07$$ for 2 digits after the decimal point (`digits = 2`) +/// - $$12.066$$ for 3 digits after the decimal point (`digits = 3`) +/// +/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point. +/// For example, $$12.0654$$ is rounded to: +/// - $$20.0$$ for 1 digit places before the decimal point (`digit = -1`) +/// - $$100.0$$ for 2 digits before the decimal point (`digits = -2`) +/// - $$1000.0$$ for 3 digits before the decimal point (`digits = -3`) +/// +/// </details> +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam/option +/// import gleam_community/maths/piecewise +/// +/// pub fn example() { +/// piecewise.ceiling(12.0654, option.Some(1)) +/// |> should.equal(Ok(12.1)) +/// +/// piecewise.ceiling(12.0654, option.Some(2)) +/// |> should.equal(Ok(12.07)) +/// +/// piecewise.ceiling(12.0654, option.Some(3)) +/// |> should.equal(Ok(12.066)) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn ceiling(x: Float, digits: option.Option(Int)) -> Result(Float, String) { + round(x, digits, option.Some(RoundUp)) +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The floor function rounds input $$x \in \mathbb{R}$$ to the nearest integer value (at the specified digit) that is less than or equal to the input $$x$$. +/// +/// Note: The floor function is used as an alias for the rounding function [`round`](#round) with rounding mode `RoundDown`. +/// +/// <details> +/// <summary>Details</summary> +/// +/// For example, $$12.0654$$ is rounded to: +/// - $$12.0$$ for 0 digits after the decimal point (`digits = 0`) +/// - $$12.0$$ for 1 digits after the decimal point (`digits = 1`) +/// - $$12.06$$ for 2 digits after the decimal point (`digits = 2`) +/// - $$12.065$$ for 3 digits after the decimal point (`digits = 3`) +/// +/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point. +/// - $$10.0$$ for 1 digit before the decimal point (`digits = -1`) +/// - $$0.0$$ for 2 digits before the decimal point (`digits = -2`) +/// - $$0.0$$ for 3 digits before the decimal point (`digits = -3`) +/// +/// </details> +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam/option +/// import gleam_community/maths/piecewise +/// +/// pub fn example() { +/// piecewise.floor(12.0654, option.Some(1)) +/// |> should.equal(Ok(12.0)) +/// +/// piecewise.floor(12.0654, option.Some(2)) +/// |> should.equal(Ok(12.06)) +/// +/// piecewise.floor(12.0654, option.Some(3)) +/// |> should.equal(Ok(12.065)) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn floor(x: Float, digits: option.Option(Int)) -> Result(Float, String) { + round(x, digits, option.Some(RoundDown)) +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The truncate function rounds a given input $$x \in \mathbb{R}$$ to the nearest integer value (at the specified digit) that is less than or equal to the absolute value of the input $$x$$. +/// +/// Note: The truncate function is used as an alias for the rounding function [`round`](#round) with rounding mode `RoundToZero`. +/// +/// <details> +/// <summary>Details</summary> +/// +/// For example, $$12.0654$$ is rounded to: +/// - $$12.0$$ for 0 digits after the decimal point (`digits = 0`) +/// - $$12.0$$ for 1 digits after the decimal point (`digits = 1`) +/// - $$12.06$$ for 2 digits after the decimal point (`digits = 2`) +/// - $$12.065$$ for 3 digits after the decimal point (`digits = 3`) +/// +/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point. +/// - $$10.0$$ for 1 digit before the decimal point (`digits = -1`) +/// - $$0.0$$ for 2 digits before the decimal point (`digits = -2`) +/// - $$0.0$$ for 3 digits before the decimal point (`digits = -3`) +/// +/// </details> +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam/option +/// import gleam_community/maths/piecewise +/// +/// pub fn example() { +/// piecewise.truncate(12.0654, option.Some(1)) +/// |> should.equal(Ok(12.0)) +/// +/// piecewise.truncate(12.0654, option.Some(2)) +/// |> should.equal(Ok(12.0)) +/// +/// piecewise.truncate(12.0654, option.Some(3)) +/// |> should.equal(Ok(12.0)) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn truncate(x: Float, digits: option.Option(Int)) -> Result(Float, String) { + round(x, digits, option.Some(RoundToZero)) +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The function rounds a float to a specific number of digits (after the decimal place or before if negative) using a specified rounding mode. +/// +/// Valid rounding modes include: +/// - `RoundNearest` (default): The input $$x$$ is rounded to the nearest integer value (at the specified digit) with ties (fractional values of 0.5) being rounded to the nearest even integer. +/// - `RoundTiesAway`: The input $$x$$ is rounded to the nearest integer value (at the specified digit) with ties (fractional values of 0.5) being rounded away from zero (C/C++ rounding behavior). +/// - `RoundTiesUp`: The input $$x$$ is rounded to the nearest integer value (at the specified digit) with ties (fractional values of 0.5) being rounded towards $$+\infty$$ (Java/JavaScript rounding behaviour). +/// - `RoundToZero`: The input $$x$$ is rounded to the nearest integer value (at the specified digit) that is less than or equal to the absolute value of the input $$x$$. An alias for this rounding mode is [`truncate`](#truncate). +/// - `RoundDown`: The input $$x$$ is rounded to the nearest integer value (at the specified digit) that is less than or equal to the input $$x$$. An alias for this rounding mode is [`floor`](#floor). +/// - `RoundUp`: The input $$x$$ is rounded to the nearest integer value (at the specified digit) that is larger than or equal to the input $$x$$. An alias for this rounding mode is [`ceiling`](#ceiling). +/// +/// <details> +/// <summary>Details</summary> +/// +/// The `RoundNearest` rounding mode, rounds $$12.0654$$ to: +/// - $$12.0$$ for 0 digits after the decimal point (`digits = 0`) +/// - $$12.1$$ for 1 digit after the decimal point (`digits = 1`) +/// - $$12.07$$ for 2 digits after the decimal point (`digits = 2`) +/// - $$12.065$$ for 3 digits after the decimal point (`digits = 3`) +/// +/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point. +/// - $$10.0$$ for 1 digit before the decimal point (`digits = -1`) +/// - $$0.0$$ for 2 digits before the decimal point (`digits = -2`) +/// - $$0.0$$ for 3 digits before the decimal point (`digits = -3`) +/// +/// The `RoundTiesAway` rounding mode, rounds $$12.0654$$ to: +/// - $$12.0$$ for 0 digits after the decimal point (`digits = 0`) +/// - $$12.1$$ for 1 digit after the decimal point (`digits = 1`) +/// - $$12.07$$ for 2 digits after the decimal point (`digits = 2`) +/// - $$12.065$$ for 3 digits after the decimal point (`digits = 3`) +/// +/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point. +/// - $$10.0$$ for 1 digit before the decimal point (`digits = -1`) +/// - $$0.0$$ for 2 digits before the decimal point (`digits = -2`) +/// - $$0.0$$ for 3 digits before the decimal point (`digits = -3`) +/// +/// The `RoundTiesUp` rounding mode, rounds $$12.0654$$ to: +/// - $$12.0$$ for 0 digits after the decimal point (`digits = 0`) +/// - $$12.1$$ for 1 digits after the decimal point (`digits = 1`) +/// - $$12.07$$ for 2 digits after the decimal point (`digits = 2`) +/// - $$12.065$$ for 3 digits after the decimal point (`digits = 3`) +/// +/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point. +/// - $$10.0$$ for 1 digit before the decimal point (`digits = -1`) +/// - $$0.0$$ for 2 digits before the decimal point (`digits = -2`) +/// - $$0.0$$ for 3 digits before the decimal point (`digits = -3`) +/// +/// The `RoundToZero` rounding mode, rounds $$12.0654$$ to: +/// - $$12.0$$ for 0 digits after the decimal point (`digits = 0`) +/// - $$12.0$$ for 1 digit after the decimal point (`digits = 1`) +/// - $$12.06$$ for 2 digits after the decimal point (`digits = 2`) +/// - $$12.065$$ for 3 digits after the decimal point (`digits = 3`) +/// +/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point. +/// - $$10.0$$ for 1 digit before the decimal point (`digits = -1`) +/// - $$0.0$$ for 2 digits before the decimal point (`digits = -2`) +/// - $$0.0$$ for 3 digits before the decimal point (`digits = -3`) +/// +/// The `RoundDown` rounding mode, rounds $$12.0654$$ to: +/// - $$12.0$$ for 0 digits after the decimal point (`digits = 0`) +/// - $$12.0$$ for 1 digits after the decimal point (`digits = 1`) +/// - $$12.06$$ for 2 digits after the decimal point (`digits = 2`) +/// - $$12.065$$ for 3 digits after the decimal point (`digits = 3`) +/// +/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point. +/// - $$10.0$$ for 1 digit before the decimal point (`digits = -1`) +/// - $$0.0$$ for 2 digits before the decimal point (`digits = -2`) +/// - $$0.0$$ for 3 digits before the decimal point (`digits = -3`) +/// +/// The `RoundUp` rounding mode, rounds $$12.0654$$ to: +/// - $$13.0$$ for 0 digits after the decimal point (`digits = 0`) +/// - $$12.1$$ for 1 digit after the decimal point (`digits = 1`) +/// - $$12.07$$ for 2 digits after the decimal point (`digits = 2`) +/// - $$12.066$$ for 3 digits after the decimal point (`digits = 3`) +/// +/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point. +/// - $$20.0$$ for 1 digit places before the decimal point (`digit = -1`) +/// - $$100.0$$ for 2 digits before the decimal point (`digits = -2`) +/// - $$1000.0$$ for 3 digits before the decimal point (`digits = -3`) +/// +/// </details> +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam/option +/// import gleam_community/maths/piecewise +/// +/// pub fn example() { +/// // The default number of digits is 0 if None is provided +/// piecewise.round(12.0654, option.None, option.Some(piecewise.RoundNearest)) +/// |> should.equal(Ok(12.0)) +/// +/// // The default rounding mode is "RoundNearest" if None is provided +/// piecewise.round(12.0654, option.None, option.None) +/// |> should.equal(Ok(12.0)) +/// +/// // Try different rounding modes +/// piecewise.round(12.0654, option.Some(2), option.Some(piecewise.RoundNearest)) +/// |> should.equal(Ok(12.07)) +/// +/// piecewise.round(12.0654, option.Some(2), option.Some(piecewise.RoundTiesAway)) +/// |> should.equal(Ok(12.07)) +/// +/// piecewise.round(12.0654, option.Some(2), option.Some(piecewise.RoundTiesUp)) +/// |> should.equal(Ok(12.07)) +/// +/// piecewise.round(12.0654, option.Some(2), option.Some(piecewise.RoundToZero)) +/// |> should.equal(Ok(12.06)) +/// +/// piecewise.round(12.0654, option.Some(2), option.Some(piecewise.RoundDown)) +/// |> should.equal(Ok(12.06)) +/// +/// piecewise.round(12.0654, option.Some(2), option.Some(piecewise.RoundUp)) +/// |> should.equal(Ok(12.07)) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn round( + x: Float, + digits: option.Option(Int), + mode: option.Option(RoundingMode), +) -> Result(Float, String) { + case digits { + option.Some(a) -> { + let assert Ok(p) = elementary.power(10.0, conversion.int_to_float(a)) + // Round the given input x using at the specified digit + do_round(p, x, mode) + } + // Round the given input x using at the default digit + option.None -> do_round(1.0, x, mode) + } +} + +pub type RoundingMode { + RoundNearest + RoundTiesAway + RoundTiesUp + RoundToZero + RoundDown + RoundUp +} + +fn do_round( + p: Float, + x: Float, + mode: option.Option(RoundingMode), +) -> Result(Float, String) { + case mode { + // Determine the rounding mode + option.Some(RoundNearest) -> + round_to_nearest(p, x) + |> Ok + option.Some(RoundTiesAway) -> + round_ties_away(p, x) + |> Ok + option.Some(RoundTiesUp) -> + round_ties_up(p, x) + |> Ok + option.Some(RoundToZero) -> + round_to_zero(p, x) + |> Ok + option.Some(RoundDown) -> + round_down(p, x) + |> Ok + option.Some(RoundUp) -> + round_up(p, x) + |> Ok + // Otherwise, use the default rounding mode + option.None -> + round_to_nearest(p, x) + |> Ok + } +} + +fn round_to_nearest(p: Float, x: Float) -> Float { + let xabs: Float = float_absolute_value(x) *. p + let xabs_truncated: Float = truncate_float(xabs) + let remainder: Float = xabs -. xabs_truncated + case remainder { + _ if remainder >. 0.5 -> float_sign(x) *. truncate_float(xabs +. 1.0) /. p + _ if remainder == 0.5 -> { + let assert Ok(is_even) = int.modulo(conversion.float_to_int(xabs), 2) + case is_even == 0 { + True -> float_sign(x) *. xabs_truncated /. p + False -> float_sign(x) *. truncate_float(xabs +. 1.0) /. p + } + } + _ -> float_sign(x) *. xabs_truncated /. p + } +} + +fn round_ties_away(p: Float, x: Float) -> Float { + let xabs: Float = float_absolute_value(x) *. p + let remainder: Float = xabs -. truncate_float(xabs) + case remainder { + _ if remainder >=. 0.5 -> float_sign(x) *. truncate_float(xabs +. 1.0) /. p + _ -> float_sign(x) *. truncate_float(xabs) /. p + } +} + +fn round_ties_up(p: Float, x: Float) -> Float { + let xabs: Float = float_absolute_value(x) *. p + let xabs_truncated: Float = truncate_float(xabs) + let remainder: Float = xabs -. xabs_truncated + case remainder { + _ if remainder >=. 0.5 && x >=. 0.0 -> + float_sign(x) *. truncate_float(xabs +. 1.0) /. p + _ -> float_sign(x) *. xabs_truncated /. p + } +} + +// Rounding mode: ToZero / Truncate +fn round_to_zero(p: Float, x: Float) -> Float { + truncate_float(x *. p) /. p +} + +fn truncate_float(x: Float) -> Float { + do_truncate_float(x) +} + +@external(erlang, "erlang", "trunc") +@external(javascript, "../../maths.mjs", "truncate") +fn do_truncate_float(a: Float) -> Float + +// Rounding mode: Down / Floor +fn round_down(p: Float, x: Float) -> Float { + do_floor(x *. p) /. p +} + +@external(erlang, "math", "floor") +@external(javascript, "../../maths.mjs", "floor") +fn do_floor(a: Float) -> Float + +// Rounding mode: Up / Ceiling +fn round_up(p: Float, x: Float) -> Float { + do_ceiling(x *. p) /. p +} + +@external(erlang, "math", "ceil") +@external(javascript, "../../maths.mjs", "ceiling") +fn do_ceiling(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The absolute value: +/// +/// \\[ +/// \forall x, y \in \mathbb{R}, \\; |x| \in \mathbb{R}_{+}. +/// \\] +/// +/// The function takes an input $$x$$ and returns a positive float value. +/// +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn float_absolute_value(x: Float) -> Float { + case x >. 0.0 { + True -> x + False -> -1.0 *. x + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The absolute value: +/// +/// \\[ +/// \forall x, y \in \mathbb{Z}, \\; |x| \in \mathbb{Z}_{+}. +/// \\] +/// +/// The function takes an input $$x$$ and returns a positive integer value. +/// +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn int_absolute_value(x: Int) -> Int { + case x > 0 { + True -> x + False -> -1 * x + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The absolute difference: +/// +/// \\[ +/// \forall x, y \in \mathbb{R}, \\; |x - y| \in \mathbb{R}_{+}. +/// \\] +/// +/// The function takes two inputs $$x$$ and $$y$$ and returns a positive float +/// value which is the the absolute difference of the inputs. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/piecewise +/// +/// pub fn example() { +/// piecewise.float_absolute_difference(-10.0, 10.0) +/// |> should.equal(20.0) +/// +/// piecewise.float_absolute_difference(0.0, -2.0) +/// |> should.equal(2.0) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn float_absolute_difference(a: Float, b: Float) -> Float { + a -. b + |> float_absolute_value() +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The absolute difference: +/// +/// \\[ +/// \forall x, y \in \mathbb{Z}, \\; |x - y| \in \mathbb{Z}_{+}. +/// \\] +/// +/// The function takes two inputs $$x$$ and $$y$$ and returns a positive integer value which is the the absolute difference of the inputs. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/piecewise +/// +/// pub fn example() { +/// piecewise.absolute_difference(-10, 10) +/// |> should.equal(20) +/// +/// piecewise.absolute_difference(0, -2) +/// |> should.equal(2) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn int_absolute_difference(a: Int, b: Int) -> Int { + a - b + |> int_absolute_value() +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The function takes an input $$x \in \mathbb{R}$$ and returns the sign of +/// the input, indicating whether it is positive (+1.0), negative (-1.0), or +/// zero (0.0). +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn float_sign(x: Float) -> Float { + do_float_sign(x) +} + +@target(erlang) +fn do_float_sign(x: Float) -> Float { + case x <. 0.0 { + True -> -1.0 + False -> + case x == 0.0 { + True -> 0.0 + False -> 1.0 + } + } +} + +@target(javascript) +@external(javascript, "../../maths.mjs", "sign") +fn do_float_sign(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The function takes an input $$x \in \mathbb{Z}$$ and returns the sign of +/// the input, indicating whether it is positive (+1), negative (-1), or zero +/// (0). +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn int_sign(x: Int) -> Int { + do_int_sign(x) +} + +@target(erlang) +fn do_int_sign(x: Int) -> Int { + case x < 0 { + True -> -1 + False -> + case x == 0 { + True -> 0 + False -> 1 + } + } +} + +@target(javascript) +@external(javascript, "../../maths.mjs", "sign") +fn do_int_sign(a: Int) -> Int + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The function takes two arguments $$x, y \in \mathbb{R}$$ and returns $$x$$ such that it has the same sign as $$y$$. +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn float_copy_sign(x: Float, y: Float) -> Float { + case float_sign(x) == float_sign(y) { + // x and y have the same sign, just return x + True -> x + // x and y have different signs: + // - x is positive and y is negative, then flip sign of x + // - x is negative and y is positive, then flip sign of x + False -> float_flip_sign(x) + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The function takes two arguments $$x, y \in \mathbb{Z}$$ and returns $$x$$ such that it has the same sign as $$y$$. +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn int_copy_sign(x: Int, y: Int) -> Int { + case int_sign(x) == int_sign(y) { + // x and y have the same sign, just return x + True -> x + // x and y have different signs: + // - x is positive and y is negative, then flip sign of x + // - x is negative and y is positive, then flip sign of x + False -> int_flip_sign(x) + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The function flips the sign of a given input value $$x \in \mathbb{R}$$. +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn float_flip_sign(x: Float) -> Float { + -1.0 *. x +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The function flips the sign of a given input value $$x \in \mathbb{Z}$$. +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn int_flip_sign(x: Int) -> Int { + -1 * x +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The minimum function takes two arguments $$x, y$$ along with a function +/// for comparing $$x, y$$. The function returns the smallest of the two given +/// values. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam/float +/// import gleam_community/maths/piecewise +/// +/// pub fn example() { +/// piecewise.minimum(2.0, 1.5, float.compare) +/// |> should.equal(1.5) +/// +/// piecewise.minimum(1.5, 2.0, float.compare) +/// |> should.equal(1.5) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn minimum(x: a, y: a, compare: fn(a, a) -> order.Order) -> a { + case compare(x, y) { + order.Lt -> x + order.Eq -> x + order.Gt -> y + } +} + +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The maximum function takes two arguments $$x, y$$ along with a function +/// for comparing $$x, y$$. The function returns the largest of the two given +/// values. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam/float +/// import gleam_community/maths/piecewise +/// +/// pub fn example() { +/// piecewise.maximum(2.0, 1.5, float.compare) +/// |> should.equal(1.5) +/// +/// piecewise.maximum(1.5, 2.0, float.compare) +/// |> should.equal(1.5) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn maximum(x: a, y: a, compare: fn(a, a) -> order.Order) -> a { + case compare(x, y) { + order.Lt -> y + order.Eq -> y + order.Gt -> x + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The minmax function takes two arguments $$x, y$$ along with a function +/// for comparing $$x, y$$. The function returns a tuple with the smallest +/// value first and largest second. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam/float +/// import gleam_community/maths/piecewise +/// +/// pub fn example() { +/// piecewise.minmax(2.0, 1.5, float.compare) +/// |> should.equal(#(1.5, 2.0)) +/// +/// piecewise.minmax(1.5, 2.0, float.compare) +/// |> should.equal(#(1.5, 2.0)) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn minmax(x: a, y: a, compare: fn(a, a) -> order.Order) -> #(a, a) { + #(minimum(x, y, compare), maximum(x, y, compare)) +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Returns the minimum value of a given list. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam/int +/// import gleam_community/maths/piecewise +/// +/// pub fn example () { +/// // An empty lists returns an error +/// [] +/// |> piecewise.list_minimum(int.compare) +/// |> should.be_error() +/// +/// // Valid input returns a result +/// [4, 4, 3, 2, 1] +/// |> piecewise.list_minimum(int.compare) +/// |> should.equal(Ok(1)) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +pub fn list_minimum( + arr: List(a), + compare: fn(a, a) -> order.Order, +) -> Result(a, String) { + case arr { + [] -> + "Invalid input argument: The list is empty." + |> Error + _ -> { + let assert Ok(val0) = list.at(arr, 0) + arr + |> list.fold( + val0, + fn(acc: a, element: a) { + case compare(element, acc) { + order.Lt -> element + _ -> acc + } + }, + ) + |> Ok + } + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Returns the maximum value of a given list. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam/float +/// import gleam_community/maths/piecewise +/// +/// pub fn example () { +/// // An empty lists returns an error +/// [] +/// |> piecewise.list_maximum(float.compare) +/// |> should.be_error() +/// +/// // Valid input returns a result +/// [4.0, 4.0, 3.0, 2.0, 1.0] +/// |> piecewise.list_maximum(float.compare) +/// |> should.equal(Ok(4.0)) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn list_maximum( + arr: List(a), + compare: fn(a, a) -> order.Order, +) -> Result(a, String) { + case arr { + [] -> + "Invalid input argument: The list is empty." + |> Error + _ -> { + let assert Ok(val0) = list.at(arr, 0) + arr + |> list.fold( + val0, + fn(acc: a, element: a) { + case compare(acc, element) { + order.Lt -> element + _ -> acc + } + }, + ) + |> Ok + } + } +} + +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Returns the indices of the minimum values in a given list. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam/float +/// import gleam_community/maths/piecewise +/// +/// pub fn example () { +/// // An empty lists returns an error +/// [] +/// |> piecewise.arg_minimum(float.compare) +/// |> should.be_error() +/// +/// // Valid input returns a result +/// [4.0, 4.0, 3.0, 2.0, 1.0] +/// |> piecewise.arg_minimum(float.compare) +/// |> should.equal(Ok([4])) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn arg_minimum( + arr: List(a), + compare: fn(a, a) -> order.Order, +) -> Result(List(Int), String) { + case arr { + [] -> + "Invalid input argument: The list is empty." + |> Error + _ -> { + let assert Ok(min) = + arr + |> list_minimum(compare) + arr + |> list.index_map(fn(index: Int, element: a) -> Int { + case compare(element, min) { + order.Eq -> index + _ -> -1 + } + }) + |> list.filter(fn(index: Int) -> Bool { + case index { + -1 -> False + _ -> True + } + }) + |> Ok + } + } +} + +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Returns the indices of the maximum values in a given list. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam/float +/// import gleam_community/maths/piecewise +/// +/// pub fn example () { +/// // An empty lists returns an error +/// [] +/// |> piecewise.arg_maximum(float.compare) +/// |> should.be_error() +/// +/// // Valid input returns a result +/// [4.0, 4.0, 3.0, 2.0, 1.0] +/// |> piecewise.arg_maximum(float.compare) +/// |> should.equal(Ok([0, 1])) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn arg_maximum( + arr: List(a), + compare: fn(a, a) -> order.Order, +) -> Result(List(Int), String) { + case arr { + [] -> + "Invalid input argument: The list is empty." + |> Error + _ -> { + let assert Ok(max) = + arr + |> list_maximum(compare) + arr + |> list.index_map(fn(index: Int, element: a) -> Int { + case compare(element, max) { + order.Eq -> index + _ -> -1 + } + }) + |> list.filter(fn(index: Int) -> Bool { + case index { + -1 -> False + _ -> True + } + }) + |> Ok + } + } +} + +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Returns a tuple consisting of the minimum and maximum values of a given list. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam/float +/// import gleam_community/maths/piecewise +/// +/// pub fn example () { +/// // An empty lists returns an error +/// [] +/// |> piecewise.extrema(float.compare) +/// |> should.be_error() +/// +/// // Valid input returns a result +/// [4.0, 4.0, 3.0, 2.0, 1.0] +/// |> piecewise.extrema(float.compare) +/// |> should.equal(Ok(#(1.0, 4.0))) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn extrema( + arr: List(a), + compare: fn(a, a) -> order.Order, +) -> Result(#(a, a), String) { + case arr { + [] -> + "Invalid input argument: The list is empty." + |> Error + _ -> { + let assert Ok(val_max) = list.at(arr, 0) + let assert Ok(val_min) = list.at(arr, 0) + arr + |> list.fold( + #(val_min, val_max), + fn(acc: #(a, a), element: a) { + let first: a = pair.first(acc) + let second: a = pair.second(acc) + case compare(element, first), compare(second, element) { + order.Lt, order.Lt -> #(element, element) + order.Lt, _ -> #(element, second) + _, order.Lt -> #(first, element) + _, _ -> #(first, second) + } + }, + ) + |> Ok + } + } +} diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/predicates.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/predicates.gleam new file mode 100644 index 0000000..f8d357c --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/predicates.gleam @@ -0,0 +1,363 @@ +////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous"> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script> +////<script> +//// document.addEventListener("DOMContentLoaded", function() { +//// renderMathInElement(document.body, { +//// // customised options +//// // • auto-render specific keys, e.g.: +//// delimiters: [ +//// {left: '$$', right: '$$', display: false}, +//// // {left: '$', right: '$', display: false}, +//// // {left: '\\(', right: '\\)', display: false}, +//// {left: '\\[', right: '\\]', display: true} +//// ], +//// // • rendering keys, e.g.: +//// throwOnError : false +//// }); +//// }); +////</script> +////<style> +//// .katex { font-size: 1.1em; } +////</style> +//// +//// --- +//// +//// Predicates: A module containing functions for testing various mathematical properties of numbers. +//// +//// * **Tests** +//// * [`is_close`](#is_close) +//// * [`list_all_close`](#all_close) +//// * [`is_fractional`](#is_fractional) +//// * [`is_power`](#is_power) +//// * [`is_perfect`](#is_perfect) +//// * [`is_even`](#is_even) +//// * [`is_odd`](#is_odd) + +import gleam/pair +import gleam/int +import gleam/list +import gleam/option +import gleam_community/maths/elementary +import gleam_community/maths/piecewise +import gleam_community/maths/arithmetics + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Determine if a given value $$a$$ is close to or equivalent to a reference value +/// $$b$$ based on supplied relative $$r_{tol}$$ and absolute $$a_{tol}$$ tolerance values. +/// The equivalance of the two given values are then determined based on the equation: +/// +/// \\[ +/// \|a - b\| \leq (a_{tol} + r_{tol} \cdot \|b\|) +/// \\] +/// +/// `True` is returned if statement holds, otherwise `False` is returned. +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/tests +/// +/// pub fn example () { +/// let val: Float = 99. +/// let ref_val: Float = 100. +/// // We set 'atol' and 'rtol' such that the values are equivalent +/// // if 'val' is within 1 percent of 'ref_val' +/- 0.1 +/// let rtol: Float = 0.01 +/// let atol: Float = 0.10 +/// floatx.is_close(val, ref_val, rtol, atol) +/// |> should.be_true() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn is_close(a: Float, b: Float, rtol: Float, atol: Float) -> Bool { + let x: Float = float_absolute_difference(a, b) + let y: Float = atol +. rtol *. float_absolute_value(b) + case x <=. y { + True -> True + False -> False + } +} + +fn float_absolute_value(x: Float) -> Float { + case x >. 0.0 { + True -> x + False -> -1.0 *. x + } +} + +fn float_absolute_difference(a: Float, b: Float) -> Float { + a -. b + |> float_absolute_value() +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Determine if a list of values are close to or equivalent to a another list of reference values. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam/list +/// import gleam_community/maths/tests +/// +/// pub fn example () { +/// let val: Float = 99. +/// let ref_val: Float = 100. +/// let xarr: List(Float) = list.repeat(val, 42) +/// let yarr: List(Float) = list.repeat(ref_val, 42) +/// // We set 'atol' and 'rtol' such that the values are equivalent +/// // if 'val' is within 1 percent of 'ref_val' +/- 0.1 +/// let rtol: Float = 0.01 +/// let atol: Float = 0.10 +/// tests.all_close(xarr, yarr, rtol, atol) +/// |> fn(zarr: Result(List(Bool), String)) -> Result(Bool, Nil) { +/// case zarr { +/// Ok(arr) -> +/// arr +/// |> list.all(fn(a: Bool) -> Bool { a }) +/// |> Ok +/// _ -> Nil |> Error +/// } +/// } +/// |> should.equal(Ok(True)) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn all_close( + xarr: List(Float), + yarr: List(Float), + rtol: Float, + atol: Float, +) -> Result(List(Bool), String) { + let xlen: Int = list.length(xarr) + let ylen: Int = list.length(yarr) + case xlen == ylen { + False -> + "Invalid input argument: length(xarr) != length(yarr). Valid input is when length(xarr) == length(yarr)." + |> Error + True -> + list.zip(xarr, yarr) + |> list.map(fn(z: #(Float, Float)) -> Bool { + is_close(pair.first(z), pair.second(z), rtol, atol) + }) + |> Ok + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Determine if a given value is fractional. +/// +/// `True` is returned if the given value is fractional, otherwise `False` is returned. +/// +/// <details> +/// <summary>Example</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/tests +/// +/// pub fn example () { +/// tests.is_fractional(0.3333) +/// |> should.equal(True) +/// +/// tests.is_fractional(1.0) +/// |> should.equal(False) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn is_fractional(x: Float) -> Bool { + do_ceiling(x) -. x >. 0.0 +} + +@external(erlang, "math", "ceil") +@external(javascript, "../../maths.mjs", "ceiling") +fn do_ceiling(a: Float) -> Float + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// A function that tests whether a given integer value $$x \in \mathbb{Z}$$ is a power of another integer value $$y \in \mathbb{Z}$$. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/tests +/// +/// pub fn example() { +/// // Check if 4 is a power of 2 (it is) +/// tests.is_power(4, 2) +/// |> should.equal(True) +/// +/// // Check if 5 is a power of 2 (it is not) +/// tests.is_power(5, 2) +/// |> should.equal(False) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn is_power(x: Int, y: Int) -> Bool { + let assert Ok(value) = + elementary.logarithm(int.to_float(x), option.Some(int.to_float(y))) + let assert Ok(truncated) = piecewise.truncate(value, option.Some(0)) + let rem = value -. truncated + rem == 0.0 +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// A function that tests whether a given integer value $$n \in \mathbb{Z}$$ is a perfect number. A number is perfect if it is equal to the sum of its proper positive divisors. +/// +/// <details> +/// <summary>Details</summary> +/// +/// For example: +/// - $$6$$ is a perfect number since the divisors of 6 are $$1 + 2 + 3 = 6$$. +/// - $$28$$ is a perfect number since the divisors of 28 are $$1 + 2 + 4 + 7 + 14 = 28$$ +/// +/// </details> +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/tests +/// +/// pub fn example() { +/// tests.is_perfect(6) +/// |> should.equal(True) +/// +/// tests.is_perfect(28) +/// |> should.equal(True) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn is_perfect(n: Int) -> Bool { + do_sum(arithmetics.proper_divisors(n)) == n +} + +fn do_sum(arr: List(Int)) -> Int { + case arr { + [] -> 0 + _ -> + arr + |> list.fold(0, fn(acc: Int, a: Int) -> Int { a + acc }) + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// A function that tests whether a given integer value $$x \in \mathbb{Z}$$ is even. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/tests +/// +/// pub fn example() { +/// tests.is_even(-3) +/// |> should.equal(False) +/// +/// tests.is_even(-4) +/// |> should.equal(True) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn is_even(x: Int) -> Bool { + x % 2 == 0 +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// A function that tests whether a given integer value $$x \in \mathbb{Z}$$ is odd. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/tests +/// +/// pub fn example() { +/// tests.is_odd(-3) +/// |> should.equal(True) +/// +/// tests.is_odd(-4) +/// |> should.equal(False) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn is_odd(x: Int) -> Bool { + x % 2 != 0 +} diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/sequences.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/sequences.gleam new file mode 100644 index 0000000..e7c0388 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/sequences.gleam @@ -0,0 +1,302 @@ +////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous"> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script> +////<script> +//// document.addEventListener("DOMContentLoaded", function() { +//// renderMathInElement(document.body, { +//// // customised options +//// // • auto-render specific keys, e.g.: +//// delimiters: [ +//// {left: '$$', right: '$$', display: false}, +//// // {left: '$', right: '$', display: false}, +//// // {left: '\\(', right: '\\)', display: false}, +//// {left: '\\[', right: '\\]', display: true} +//// ], +//// // • rendering keys, e.g.: +//// throwOnError : false +//// }); +//// }); +////</script> +////<style> +//// .katex { font-size: 1.1em; } +////</style> +//// +//// --- +//// +//// Sequences: A module containing functions for generating various types of sequences, ranges and intervals. +//// +//// * **Ranges and intervals** +//// * [`arange`](#arange) +//// * [`linear_space`](#linear_space) +//// * [`logarithmic_space`](#logarithmic_space) +//// * [`geometric_space`](#geometric_space) + +import gleam_community/maths/elementary +import gleam_community/maths/piecewise +import gleam_community/maths/conversion +import gleam/list + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The function returns a list with evenly spaced values within a given interval based on a start, stop value and a given increment (step-length) between consecutive values. +/// The list returned includes the given start value but excludes the stop value. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/sequences +/// +/// pub fn example () { +/// sequences.arange(1.0, 5.0, 1.0) +/// |> should.equal([1.0, 2.0, 3.0, 4.0]) +/// +/// // No points returned since +/// // start smaller than stop and positive step +/// sequences.arange(5.0, 1.0, 1.0) +/// |> should.equal([]) +/// +/// // Points returned since +/// // start smaller than stop but negative step +/// sequences.arange(5.0, 1.0, -1.0) +/// |> should.equal([5.0, 4.0, 3.0, 2.0]) +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn arange(start: Float, stop: Float, step: Float) -> List(Float) { + case start >=. stop && step >. 0.0 || start <=. stop && step <. 0.0 { + True -> [] + False -> { + let direction: Float = case start <=. stop { + True -> 1.0 + False -> -1.0 + } + let step_abs: Float = piecewise.float_absolute_value(step) + let num: Float = piecewise.float_absolute_value(start -. stop) /. step_abs + + list.range(0, conversion.float_to_int(num) - 1) + |> list.map(fn(i: Int) -> Float { + start +. conversion.int_to_float(i) *. step_abs *. direction + }) + } + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Generate a linearly spaced list of points over a specified interval. The endpoint of the interval can optionally be included/excluded. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// import gleam_community/maths/sequences +/// import gleam_community/maths/predicates +/// +/// pub fn example () { +/// let assert Ok(tol) = elementary.power(-10.0, -6.0) +/// let assert Ok(linspace) = sequences.linear_space(10.0, 50.0, 5, True) +/// let assert Ok(result) = +/// predicates.all_close(linspace, [10.0, 20.0, 30.0, 40.0, 50.0], 0.0, tol) +/// result +/// |> list.all(fn(x) { x == True }) +/// |> should.be_true() +/// +/// // A negative number of points (-5) does not work +/// sequences.linear_space(10.0, 50.0, -5, True) +/// |> should.be_error() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn linear_space( + start: Float, + stop: Float, + num: Int, + endpoint: Bool, +) -> Result(List(Float), String) { + let direction: Float = case start <=. stop { + True -> 1.0 + False -> -1.0 + } + case num > 0 { + True -> + case endpoint { + True -> { + let increment: Float = + piecewise.float_absolute_value(start -. stop) /. conversion.int_to_float( + num - 1, + ) + list.range(0, num - 1) + |> list.map(fn(i: Int) -> Float { + start +. conversion.int_to_float(i) *. increment *. direction + }) + |> Ok + } + False -> { + let increment: Float = + piecewise.float_absolute_value(start -. stop) /. conversion.int_to_float( + num, + ) + list.range(0, num - 1) + |> list.map(fn(i: Int) -> Float { + start +. conversion.int_to_float(i) *. increment *. direction + }) + |> Ok + } + } + + False -> + "Invalid input: num < 0. Valid input is num > 0." + |> Error + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// Generate a logarithmically spaced list of points over a specified interval. The endpoint of the interval can optionally be included/excluded. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// import gleam_community/maths/sequences +/// import gleam_community/maths/predicates +/// +/// pub fn example () { +/// let assert Ok(tol) = elementary.power(-10.0, -6.0) +/// let assert Ok(logspace) = sequences.logarithmic_space(1.0, 3.0, 3, True, 10.0) +/// let assert Ok(result) = +/// predicates.all_close(logspace, [10.0, 100.0, 1000.0], 0.0, tol) +/// result +/// |> list.all(fn(x) { x == True }) +/// |> should.be_true() +/// +/// // A negative number of points (-3) does not work +/// sequences.logarithmic_space(1.0, 3.0, -3, False, 10.0) +/// |> should.be_error() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn logarithmic_space( + start: Float, + stop: Float, + num: Int, + endpoint: Bool, + base: Float, +) -> Result(List(Float), String) { + case num > 0 { + True -> { + let assert Ok(linspace) = linear_space(start, stop, num, endpoint) + linspace + |> list.map(fn(i: Float) -> Float { + let assert Ok(result) = elementary.power(base, i) + result + }) + |> Ok + } + False -> + "Invalid input: num < 0. Valid input is num > 0." + |> Error + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The function returns a list of numbers spaced evenly on a log scale (a geometric progression). Each point in the list is a constant multiple of the previous. +/// The function is similar to the [`logarithmic_space`](#logarithmic_space) function, but with endpoints specified directly. +/// +/// <details> +/// <summary>Example:</summary> +/// +/// import gleeunit/should +/// import gleam_community/maths/elementary +/// import gleam_community/maths/sequences +/// import gleam_community/maths/predicates +/// +/// pub fn example () { +/// let assert Ok(tol) = elementary.power(-10.0, -6.0) +/// let assert Ok(logspace) = sequences.geometric_space(10.0, 1000.0, 3, True) +/// let assert Ok(result) = +/// predicates.all_close(logspace, [10.0, 100.0, 1000.0], 0.0, tol) +/// result +/// |> list.all(fn(x) { x == True }) +/// |> should.be_true() +/// +/// // Input (start and stop can't be equal to 0.0) +/// sequences.geometric_space(0.0, 1000.0, 3, False) +/// |> should.be_error() +/// +/// sequences.geometric_space(-1000.0, 0.0, 3, False) +/// |> should.be_error() +/// +/// // A negative number of points (-3) does not work +/// sequences.geometric_space(10.0, 1000.0, -3, False) +/// |> should.be_error() +/// } +/// </details> +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn geometric_space( + start: Float, + stop: Float, + num: Int, + endpoint: Bool, +) -> Result(List(Float), String) { + case start == 0.0 || stop == 0.0 { + True -> + "" + |> Error + False -> + case num > 0 { + True -> { + let assert Ok(log_start) = elementary.logarithm_10(start) + let assert Ok(log_stop) = elementary.logarithm_10(stop) + logarithmic_space(log_start, log_stop, num, endpoint, 10.0) + } + False -> + "Invalid input: num < 0. Valid input is num > 0." + |> Error + } + } +} diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/special.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/special.gleam new file mode 100644 index 0000000..dfd9cbb --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/special.gleam @@ -0,0 +1,205 @@ +////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous"> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script> +////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script> +////<script> +//// document.addEventListener("DOMContentLoaded", function() { +//// renderMathInElement(document.body, { +//// // customised options +//// // • auto-render specific keys, e.g.: +//// delimiters: [ +//// {left: '$$', right: '$$', display: false}, +//// // {left: '$', right: '$', display: false}, +//// // {left: '\\(', right: '\\)', display: false}, +//// {left: '\\[', right: '\\]', display: true} +//// ], +//// // • rendering keys, e.g.: +//// throwOnError : false +//// }); +//// }); +////</script> +////<style> +//// .katex { font-size: 1.1em; } +////</style> +//// +//// --- +//// +//// Special: A module containing special mathematical functions. +//// +//// * **Special mathematical functions** +//// * [`beta`](#beta) +//// * [`erf`](#erf) +//// * [`gamma`](#gamma) +//// * [`incomplete_gamma`](#incomplete_gamma) +//// + +import gleam_community/maths/conversion +import gleam_community/maths/elementary +import gleam_community/maths/piecewise +import gleam/list + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The beta function over the real numbers: +/// +/// \\[ +/// \text{B}(x, y) = \frac{\Gamma(x) \cdot \Gamma(y)}{\Gamma(x + y)} +/// \\] +/// +/// The beta function is evaluated through the use of the gamma function. +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn beta(x: Float, y: Float) -> Float { + gamma(x) *. gamma(y) /. gamma(x +. y) +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The error function. +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn erf(x: Float) -> Float { + let assert [a1, a2, a3, a4, a5]: List(Float) = [ + 0.254829592, -0.284496736, 1.421413741, -1.453152027, 1.061405429, + ] + let p: Float = 0.3275911 + + let sign: Float = piecewise.float_sign(x) + let x: Float = piecewise.float_absolute_value(x) + + // Formula 7.1.26 given in Abramowitz and Stegun. + let t: Float = 1.0 /. { 1.0 +. p *. x } + let y: Float = + 1.0 -. { { { { a5 *. t +. a4 } *. t +. a3 } *. t +. a2 } *. t +. a1 } *. t *. elementary.exponential( + -1.0 *. x *. x, + ) + sign *. y +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The gamma function over the real numbers. The function is essentially equal to the +/// factorial for any positive integer argument: $$\Gamma(n) = (n - 1)!$$ +/// +/// The implemented gamma function is approximated through Lanczos approximation +/// using the same coefficients used by the GNU Scientific Library. +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn gamma(x: Float) -> Float { + gamma_lanczos(x) +} + +const lanczos_g: Float = 7.0 + +const lanczos_p: List(Float) = [ + 0.99999999999980993, 676.5203681218851, -1259.1392167224028, + 771.32342877765313, -176.61502916214059, 12.507343278686905, + -0.13857109526572012, 0.0000099843695780195716, 0.00000015056327351493116, +] + +fn gamma_lanczos(x: Float) -> Float { + case x <. 0.5 { + True -> + elementary.pi() /. { + elementary.sin(elementary.pi() *. x) *. gamma_lanczos(1.0 -. x) + } + False -> { + let z = x -. 1.0 + let x: Float = + list.index_fold( + lanczos_p, + 0.0, + fn(acc: Float, v: Float, index: Int) { + case index > 0 { + True -> acc +. v /. { z +. conversion.int_to_float(index) } + False -> v + } + }, + ) + let t: Float = z +. lanczos_g +. 0.5 + let assert Ok(v1) = elementary.power(2.0 *. elementary.pi(), 0.5) + let assert Ok(v2) = elementary.power(t, z +. 0.5) + v1 *. v2 *. elementary.exponential(-1.0 *. t) *. x + } + } +} + +/// <div style="text-align: right;"> +/// <a href="https://github.com/gleam-community/maths/issues"> +/// <small>Spot a typo? Open an issue!</small> +/// </a> +/// </div> +/// +/// The lower incomplete gamma function over the real numbers. +/// +/// The implemented incomplete gamma function is evaluated through a power series +/// expansion. +/// +/// <div style="text-align: right;"> +/// <a href="#"> +/// <small>Back to top ↑</small> +/// </a> +/// </div> +/// +pub fn incomplete_gamma(a: Float, x: Float) -> Result(Float, String) { + case a >. 0.0 && x >=. 0.0 { + True -> { + let assert Ok(v) = elementary.power(x, a) + v *. elementary.exponential(-1.0 *. x) *. incomplete_gamma_sum( + a, + x, + 1.0 /. a, + 0.0, + 1.0, + ) + |> Ok + } + + False -> + "Invlaid input argument: a <= 0 or x < 0. Valid input is a > 0 and x >= 0." + |> Error + } +} + +fn incomplete_gamma_sum( + a: Float, + x: Float, + t: Float, + s: Float, + n: Float, +) -> Float { + case t { + 0.0 -> s + _ -> { + let ns: Float = s +. t + let nt: Float = t *. { x /. { a +. n } } + incomplete_gamma_sum(a, x, nt, ns, n +. 1.0) + } + } +} diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@arithmetics.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@arithmetics.erl new file mode 100644 index 0000000..ca266c8 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@arithmetics.erl @@ -0,0 +1,172 @@ +-module(gleam_community@maths@arithmetics). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([gcd/2, lcm/2, divisors/1, proper_divisors/1, float_sum/1, int_sum/1, float_product/1, int_product/1, float_cumulative_sum/1, int_cumulative_sum/1, float_cumumlative_product/1, int_cumulative_product/1]). + +-spec do_gcd(integer(), integer()) -> integer(). +do_gcd(X, Y) -> + case X =:= 0 of + true -> + Y; + + false -> + _assert_subject = gleam@int:modulo(Y, X), + {ok, Z} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/arithmetics"/utf8>>, + function => <<"do_gcd"/utf8>>, + line => 93}) + end, + do_gcd(Z, X) + end. + +-spec gcd(integer(), integer()) -> integer(). +gcd(X, Y) -> + Absx = gleam_community@maths@piecewise:int_absolute_value(X), + Absy = gleam_community@maths@piecewise:int_absolute_value(Y), + do_gcd(Absx, Absy). + +-spec lcm(integer(), integer()) -> integer(). +lcm(X, Y) -> + Absx = gleam_community@maths@piecewise:int_absolute_value(X), + Absy = gleam_community@maths@piecewise:int_absolute_value(Y), + case do_gcd(Absx, Absy) of + 0 -> 0; + Gleam@denominator -> (Absx * Absy) div Gleam@denominator + end. + +-spec find_divisors(integer()) -> list(integer()). +find_divisors(N) -> + Nabs = gleam_community@maths@piecewise:float_absolute_value( + gleam_community@maths@conversion:int_to_float(N) + ), + _assert_subject = gleam_community@maths@elementary:square_root(Nabs), + {ok, Sqrt_result} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/arithmetics"/utf8>>, + function => <<"find_divisors"/utf8>>, + line => 176}) + end, + Max = gleam_community@maths@conversion:float_to_int(Sqrt_result) + 1, + _pipe = gleam@list:range(2, Max), + _pipe@1 = gleam@list:fold(_pipe, [1, N], fun(Acc, I) -> case (case I of + 0 -> 0; + Gleam@denominator -> N rem Gleam@denominator + end) =:= 0 of + true -> + [I, case I of + 0 -> 0; + Gleam@denominator@1 -> N div Gleam@denominator@1 + end | Acc]; + + false -> + Acc + end end), + _pipe@2 = gleam@list:unique(_pipe@1), + gleam@list:sort(_pipe@2, fun gleam@int:compare/2). + +-spec divisors(integer()) -> list(integer()). +divisors(N) -> + find_divisors(N). + +-spec proper_divisors(integer()) -> list(integer()). +proper_divisors(N) -> + Divisors = find_divisors(N), + _pipe = Divisors, + gleam@list:take(_pipe, gleam@list:length(Divisors) - 1). + +-spec float_sum(list(float())) -> float(). +float_sum(Arr) -> + case Arr of + [] -> + +0.0; + + _ -> + _pipe = Arr, + gleam@list:fold(_pipe, +0.0, fun(Acc, A) -> A + Acc end) + end. + +-spec int_sum(list(integer())) -> integer(). +int_sum(Arr) -> + case Arr of + [] -> + 0; + + _ -> + _pipe = Arr, + gleam@list:fold(_pipe, 0, fun(Acc, A) -> A + Acc end) + end. + +-spec float_product(list(float())) -> float(). +float_product(Arr) -> + case Arr of + [] -> + 1.0; + + _ -> + _pipe = Arr, + gleam@list:fold(_pipe, 1.0, fun(Acc, A) -> A * Acc end) + end. + +-spec int_product(list(integer())) -> integer(). +int_product(Arr) -> + case Arr of + [] -> + 1; + + _ -> + _pipe = Arr, + gleam@list:fold(_pipe, 1, fun(Acc, A) -> A * Acc end) + end. + +-spec float_cumulative_sum(list(float())) -> list(float()). +float_cumulative_sum(Arr) -> + case Arr of + [] -> + []; + + _ -> + _pipe = Arr, + gleam@list:scan(_pipe, +0.0, fun(Acc, A) -> A + Acc end) + end. + +-spec int_cumulative_sum(list(integer())) -> list(integer()). +int_cumulative_sum(Arr) -> + case Arr of + [] -> + []; + + _ -> + _pipe = Arr, + gleam@list:scan(_pipe, 0, fun(Acc, A) -> A + Acc end) + end. + +-spec float_cumumlative_product(list(float())) -> list(float()). +float_cumumlative_product(Arr) -> + case Arr of + [] -> + []; + + _ -> + _pipe = Arr, + gleam@list:scan(_pipe, 1.0, fun(Acc, A) -> A * Acc end) + end. + +-spec int_cumulative_product(list(integer())) -> list(integer()). +int_cumulative_product(Arr) -> + case Arr of + [] -> + []; + + _ -> + _pipe = Arr, + gleam@list:scan(_pipe, 1, fun(Acc, A) -> A * Acc end) + end. diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@combinatorics.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@combinatorics.erl new file mode 100644 index 0000000..17644c4 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@combinatorics.erl @@ -0,0 +1,218 @@ +-module(gleam_community@maths@combinatorics). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([combination/2, factorial/1, permutation/2, list_combination/2, list_permutation/1, cartesian_product/2]). + +-spec combination(integer(), integer()) -> {ok, integer()} | {error, binary()}. +combination(N, K) -> + case N < 0 of + true -> + _pipe = <<"Invalid input argument: n < 0. Valid input is n > 0."/utf8>>, + {error, _pipe}; + + false -> + case (K < 0) orelse (K > N) of + true -> + _pipe@1 = 0, + {ok, _pipe@1}; + + false -> + case (K =:= 0) orelse (K =:= N) of + true -> + _pipe@2 = 1, + {ok, _pipe@2}; + + false -> + Min = case K < (N - K) of + true -> + K; + + false -> + N - K + end, + _pipe@3 = gleam@list:range(1, Min), + _pipe@4 = gleam@list:fold( + _pipe@3, + 1, + fun(Acc, X) -> case X of + 0 -> 0; + Gleam@denominator -> (Acc * ((N + 1) - X)) + div Gleam@denominator + end end + ), + {ok, _pipe@4} + end + end + end. + +-spec factorial(integer()) -> {ok, integer()} | {error, binary()}. +factorial(N) -> + case N < 0 of + true -> + _pipe = <<"Invalid input argument: n < 0. Valid input is n > 0."/utf8>>, + {error, _pipe}; + + false -> + case N of + 0 -> + _pipe@1 = 1, + {ok, _pipe@1}; + + 1 -> + _pipe@2 = 1, + {ok, _pipe@2}; + + _ -> + _pipe@3 = gleam@list:range(1, N), + _pipe@4 = gleam@list:fold( + _pipe@3, + 1, + fun(Acc, X) -> Acc * X end + ), + {ok, _pipe@4} + end + end. + +-spec permutation(integer(), integer()) -> {ok, integer()} | {error, binary()}. +permutation(N, K) -> + case N < 0 of + true -> + _pipe = <<"Invalid input argument: n < 0. Valid input is n > 0."/utf8>>, + {error, _pipe}; + + false -> + case (K < 0) orelse (K > N) of + true -> + _pipe@1 = 0, + {ok, _pipe@1}; + + false -> + case K =:= N of + true -> + _pipe@2 = 1, + {ok, _pipe@2}; + + false -> + _assert_subject = factorial(N), + {ok, V1} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/combinatorics"/utf8>>, + function => <<"permutation"/utf8>>, + line => 241}) + end, + _assert_subject@1 = factorial(N - K), + {ok, V2} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/combinatorics"/utf8>>, + function => <<"permutation"/utf8>>, + line => 242}) + end, + _pipe@3 = case V2 of + 0 -> 0; + Gleam@denominator -> V1 div Gleam@denominator + end, + {ok, _pipe@3} + end + end + end. + +-spec do_list_combination(list(GIO), integer(), list(GIO)) -> list(list(GIO)). +do_list_combination(Arr, K, Prefix) -> + case K of + 0 -> + [gleam@list:reverse(Prefix)]; + + _ -> + case Arr of + [] -> + []; + + [X | Xs] -> + With_x = do_list_combination(Xs, K - 1, [X | Prefix]), + Without_x = do_list_combination(Xs, K, Prefix), + gleam@list:append(With_x, Without_x) + end + end. + +-spec list_combination(list(GII), integer()) -> {ok, list(list(GII))} | + {error, binary()}. +list_combination(Arr, K) -> + case K < 0 of + true -> + _pipe = <<"Invalid input argument: k < 0. Valid input is k > 0."/utf8>>, + {error, _pipe}; + + false -> + case K > gleam@list:length(Arr) of + true -> + _pipe@1 = <<"Invalid input argument: k > length(arr). Valid input is 0 < k <= length(arr)."/utf8>>, + {error, _pipe@1}; + + false -> + _pipe@2 = do_list_combination(Arr, K, []), + {ok, _pipe@2} + end + end. + +-spec list_permutation(list(GIT)) -> list(list(GIT)). +list_permutation(Arr) -> + case Arr of + [] -> + [[]]; + + _ -> + gleam@list:flat_map( + Arr, + fun(X) -> + _assert_subject = gleam@list:pop(Arr, fun(Y) -> X =:= Y end), + {ok, {_, Remaining}} = case _assert_subject of + {ok, {_, _}} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/combinatorics"/utf8>>, + function => <<"list_permutation"/utf8>>, + line => 373}) + end, + gleam@list:map( + list_permutation(Remaining), + fun(Perm) -> [X | Perm] end + ) + end + ) + end. + +-spec cartesian_product(list(GIX), list(GIX)) -> list({GIX, GIX}). +cartesian_product(Xarr, Yarr) -> + Xset = begin + _pipe = Xarr, + gleam@set:from_list(_pipe) + end, + Yset = begin + _pipe@1 = Yarr, + gleam@set:from_list(_pipe@1) + end, + _pipe@2 = Xset, + _pipe@3 = gleam@set:fold( + _pipe@2, + gleam@set:new(), + fun(Accumulator0, Member0) -> + gleam@set:fold( + Yset, + Accumulator0, + fun(Accumulator1, Member1) -> + gleam@set:insert(Accumulator1, {Member0, Member1}) + end + ) + end + ), + gleam@set:to_list(_pipe@3). diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@conversion.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@conversion.erl new file mode 100644 index 0000000..0f6decb --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@conversion.erl @@ -0,0 +1,23 @@ +-module(gleam_community@maths@conversion). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([int_to_float/1, float_to_int/1, degrees_to_radians/1, radians_to_degrees/1]). + +-spec int_to_float(integer()) -> float(). +int_to_float(X) -> + gleam@int:to_float(X). + +-spec float_to_int(float()) -> integer(). +float_to_int(X) -> + erlang:trunc(X). + +-spec degrees_to_radians(float()) -> float(). +degrees_to_radians(X) -> + (X * math:pi()) / 180.0. + +-spec radians_to_degrees(float()) -> float(). +radians_to_degrees(X) -> + case math:pi() of + 0.0 -> 0.0; + Gleam@denominator -> (X * 180.0) / Gleam@denominator + end. diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@elementary.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@elementary.erl new file mode 100644 index 0000000..dab5d68 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@elementary.erl @@ -0,0 +1,284 @@ +-module(gleam_community@maths@elementary). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([acos/1, acosh/1, asin/1, asinh/1, atan/1, atan2/2, atanh/1, cos/1, cosh/1, sin/1, sinh/1, tan/1, tanh/1, exponential/1, natural_logarithm/1, logarithm_2/1, logarithm_10/1, logarithm/2, power/2, square_root/1, cube_root/1, nth_root/2, pi/0, tau/0, e/0]). + +-spec acos(float()) -> {ok, float()} | {error, binary()}. +acos(X) -> + case (X >= -1.0) andalso (X =< 1.0) of + true -> + _pipe = math:acos(X), + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invalid input argument: x >= -1 or x <= 1. Valid input is -1. <= x <= 1."/utf8>>, + {error, _pipe@1} + end. + +-spec acosh(float()) -> {ok, float()} | {error, binary()}. +acosh(X) -> + case X >= 1.0 of + true -> + _pipe = math:acosh(X), + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invalid input argument: x < 1. Valid input is x >= 1."/utf8>>, + {error, _pipe@1} + end. + +-spec asin(float()) -> {ok, float()} | {error, binary()}. +asin(X) -> + case (X >= -1.0) andalso (X =< 1.0) of + true -> + _pipe = math:asin(X), + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invalid input argument: x >= -1 or x <= 1. Valid input is -1. <= x <= 1."/utf8>>, + {error, _pipe@1} + end. + +-spec asinh(float()) -> float(). +asinh(X) -> + math:asinh(X). + +-spec atan(float()) -> float(). +atan(X) -> + math:atan(X). + +-spec atan2(float(), float()) -> float(). +atan2(Y, X) -> + math:atan2(Y, X). + +-spec atanh(float()) -> {ok, float()} | {error, binary()}. +atanh(X) -> + case (X > -1.0) andalso (X < 1.0) of + true -> + _pipe = math:atanh(X), + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invalid input argument: x > -1 or x < 1. Valid input is -1. < x < 1."/utf8>>, + {error, _pipe@1} + end. + +-spec cos(float()) -> float(). +cos(X) -> + math:cos(X). + +-spec cosh(float()) -> float(). +cosh(X) -> + math:cosh(X). + +-spec sin(float()) -> float(). +sin(X) -> + math:sin(X). + +-spec sinh(float()) -> float(). +sinh(X) -> + math:sinh(X). + +-spec tan(float()) -> float(). +tan(X) -> + math:tan(X). + +-spec tanh(float()) -> float(). +tanh(X) -> + math:tanh(X). + +-spec exponential(float()) -> float(). +exponential(X) -> + math:exp(X). + +-spec natural_logarithm(float()) -> {ok, float()} | {error, binary()}. +natural_logarithm(X) -> + case X > +0.0 of + true -> + _pipe = math:log(X), + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invalid input argument: x <= 0. Valid input is x > 0."/utf8>>, + {error, _pipe@1} + end. + +-spec logarithm_2(float()) -> {ok, float()} | {error, binary()}. +logarithm_2(X) -> + case X > +0.0 of + true -> + _pipe = math:log2(X), + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invalid input argument: x <= 0. Valid input is x > 0."/utf8>>, + {error, _pipe@1} + end. + +-spec logarithm_10(float()) -> {ok, float()} | {error, binary()}. +logarithm_10(X) -> + case X > +0.0 of + true -> + _pipe = math:log10(X), + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invalid input argument: x <= 0. Valid input is x > 0."/utf8>>, + {error, _pipe@1} + end. + +-spec logarithm(float(), gleam@option:option(float())) -> {ok, float()} | + {error, binary()}. +logarithm(X, Base) -> + case X > +0.0 of + true -> + case Base of + {some, A} -> + case (A > +0.0) andalso (A /= 1.0) of + true -> + _assert_subject = logarithm_10(X), + {ok, Numerator} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/elementary"/utf8>>, + function => <<"logarithm"/utf8>>, + line => 820}) + end, + _assert_subject@1 = logarithm_10(A), + {ok, Denominator} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/elementary"/utf8>>, + function => <<"logarithm"/utf8>>, + line => 821}) + end, + _pipe = case Denominator of + 0.0 -> 0.0; + Gleam@denominator -> Numerator / Gleam@denominator + end, + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invalid input argument: base <= 0 or base == 1. Valid input is base > 0 and base != 1."/utf8>>, + {error, _pipe@1} + end; + + _ -> + _pipe@2 = <<"Invalid input argument: base <= 0 or base == 1. Valid input is base > 0 and base != 1."/utf8>>, + {error, _pipe@2} + end; + + _ -> + _pipe@3 = <<"Invalid input argument: x <= 0. Valid input is x > 0."/utf8>>, + {error, _pipe@3} + end. + +-spec power(float(), float()) -> {ok, float()} | {error, binary()}. +power(X, Y) -> + Fractional = (math:ceil(Y) - Y) > +0.0, + case ((X < +0.0) andalso Fractional) orelse ((X =:= +0.0) andalso (Y < +0.0)) of + true -> + _pipe = <<"Invalid input argument: x < 0 and y is fractional or x = 0 and y < 0."/utf8>>, + {error, _pipe}; + + false -> + _pipe@1 = math:pow(X, Y), + {ok, _pipe@1} + end. + +-spec square_root(float()) -> {ok, float()} | {error, binary()}. +square_root(X) -> + case X < +0.0 of + true -> + _pipe = <<"Invalid input argument: x < 0."/utf8>>, + {error, _pipe}; + + false -> + _assert_subject = power(X, 1.0 / 2.0), + {ok, Result} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/elementary"/utf8>>, + function => <<"square_root"/utf8>>, + line => 1066}) + end, + _pipe@1 = Result, + {ok, _pipe@1} + end. + +-spec cube_root(float()) -> {ok, float()} | {error, binary()}. +cube_root(X) -> + case X < +0.0 of + true -> + _pipe = <<"Invalid input argument: x < 0."/utf8>>, + {error, _pipe}; + + false -> + _assert_subject = power(X, 1.0 / 3.0), + {ok, Result} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/elementary"/utf8>>, + function => <<"cube_root"/utf8>>, + line => 1118}) + end, + _pipe@1 = Result, + {ok, _pipe@1} + end. + +-spec nth_root(float(), integer()) -> {ok, float()} | {error, binary()}. +nth_root(X, N) -> + case X < +0.0 of + true -> + _pipe = <<"Invalid input argument: x < 0. Valid input is x > 0"/utf8>>, + {error, _pipe}; + + false -> + case N >= 1 of + true -> + _assert_subject = power(X, case gleam@int:to_float(N) of + 0.0 -> 0.0; + Gleam@denominator -> 1.0 / Gleam@denominator + end), + {ok, Result} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/elementary"/utf8>>, + function => <<"nth_root"/utf8>>, + line => 1175}) + end, + _pipe@1 = Result, + {ok, _pipe@1}; + + false -> + _pipe@2 = <<"Invalid input argument: n < 1. Valid input is n >= 2."/utf8>>, + {error, _pipe@2} + end + end. + +-spec pi() -> float(). +pi() -> + math:pi(). + +-spec tau() -> float(). +tau() -> + 2.0 * pi(). + +-spec e() -> float(). +e() -> + exponential(1.0). diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@metrics.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@metrics.erl new file mode 100644 index 0000000..2a58da6 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@metrics.erl @@ -0,0 +1,278 @@ +-module(gleam_community@maths@metrics). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([norm/2, minkowski_distance/3, manhatten_distance/2, euclidean_distance/2, mean/1, median/1, variance/2, standard_deviation/2]). + +-spec norm(list(float()), float()) -> float(). +norm(Arr, P) -> + case Arr of + [] -> + +0.0; + + _ -> + Agg = begin + _pipe = Arr, + gleam@list:fold( + _pipe, + +0.0, + fun(Acc, A) -> + _assert_subject = gleam_community@maths@elementary:power( + gleam_community@maths@piecewise:float_absolute_value( + A + ), + P + ), + {ok, Result} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"norm"/utf8>>, + line => 101}) + end, + Result + Acc + end + ) + end, + _assert_subject@1 = gleam_community@maths@elementary:power( + Agg, + case P of + 0.0 -> 0.0; + Gleam@denominator -> 1.0 / Gleam@denominator + end + ), + {ok, Result@1} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"norm"/utf8>>, + line => 106}) + end, + Result@1 + end. + +-spec minkowski_distance(list(float()), list(float()), float()) -> {ok, float()} | + {error, binary()}. +minkowski_distance(Xarr, Yarr, P) -> + Xlen = gleam@list:length(Xarr), + Ylen = gleam@list:length(Yarr), + case Xlen =:= Ylen of + false -> + _pipe = <<"Invalid input argument: length(xarr) != length(yarr). Valid input is when length(xarr) == length(yarr)."/utf8>>, + {error, _pipe}; + + true -> + case P < 1.0 of + true -> + _pipe@1 = <<"Invalid input argument: p < 1. Valid input is p >= 1."/utf8>>, + {error, _pipe@1}; + + false -> + _pipe@2 = gleam@list:zip(Xarr, Yarr), + _pipe@3 = gleam@list:map( + _pipe@2, + fun(Tuple) -> + gleam@pair:first(Tuple) - gleam@pair:second(Tuple) + end + ), + _pipe@4 = norm(_pipe@3, P), + {ok, _pipe@4} + end + end. + +-spec manhatten_distance(list(float()), list(float())) -> {ok, float()} | + {error, binary()}. +manhatten_distance(Xarr, Yarr) -> + minkowski_distance(Xarr, Yarr, 1.0). + +-spec euclidean_distance(list(float()), list(float())) -> {ok, float()} | + {error, binary()}. +euclidean_distance(Xarr, Yarr) -> + minkowski_distance(Xarr, Yarr, 2.0). + +-spec mean(list(float())) -> {ok, float()} | {error, binary()}. +mean(Arr) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + _pipe@1 = Arr, + _pipe@2 = gleam_community@maths@arithmetics:float_sum(_pipe@1), + _pipe@3 = (fun(A) -> + case gleam_community@maths@conversion:int_to_float( + gleam@list:length(Arr) + ) of + 0.0 -> 0.0; + Gleam@denominator -> A / Gleam@denominator + end + end)(_pipe@2), + {ok, _pipe@3} + end. + +-spec median(list(float())) -> {ok, float()} | {error, binary()}. +median(Arr) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + Count = gleam@list:length(Arr), + Mid = gleam@list:length(Arr) div 2, + Sorted = gleam@list:sort(Arr, fun gleam@float:compare/2), + case gleam_community@maths@predicates:is_odd(Count) of + true -> + _assert_subject = gleam@list:at(Sorted, Mid), + {ok, Val0} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"median"/utf8>>, + line => 402}) + end, + _pipe@1 = Val0, + {ok, _pipe@1}; + + false -> + _assert_subject@1 = gleam@list:at(Sorted, Mid - 1), + {ok, Val0@1} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"median"/utf8>>, + line => 409}) + end, + _assert_subject@2 = gleam@list:at(Sorted, Mid), + {ok, Val1} = case _assert_subject@2 of + {ok, _} -> _assert_subject@2; + _assert_fail@2 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@2, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"median"/utf8>>, + line => 410}) + end, + _pipe@2 = [Val0@1, Val1], + mean(_pipe@2) + end + end. + +-spec variance(list(float()), integer()) -> {ok, float()} | {error, binary()}. +variance(Arr, Ddof) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + case Ddof < 0 of + true -> + _pipe@1 = <<"Invalid input argument: ddof < 0. Valid input is ddof >= 0."/utf8>>, + {error, _pipe@1}; + + false -> + _assert_subject = mean(Arr), + {ok, Mean} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"variance"/utf8>>, + line => 475}) + end, + _pipe@2 = Arr, + _pipe@3 = gleam@list:map( + _pipe@2, + fun(A) -> + _assert_subject@1 = gleam_community@maths@elementary:power( + A - Mean, + 2.0 + ), + {ok, Result} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"variance"/utf8>>, + line => 478}) + end, + Result + end + ), + _pipe@4 = gleam_community@maths@arithmetics:float_sum( + _pipe@3 + ), + _pipe@5 = (fun(A@1) -> + case (gleam_community@maths@conversion:int_to_float( + gleam@list:length(Arr) + ) + - gleam_community@maths@conversion:int_to_float(Ddof)) of + 0.0 -> 0.0; + Gleam@denominator -> A@1 / Gleam@denominator + end + end)(_pipe@4), + {ok, _pipe@5} + end + end. + +-spec standard_deviation(list(float()), integer()) -> {ok, float()} | + {error, binary()}. +standard_deviation(Arr, Ddof) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + case Ddof < 0 of + true -> + _pipe@1 = <<"Invalid input argument: ddof < 0. Valid input is ddof >= 0."/utf8>>, + {error, _pipe@1}; + + false -> + _assert_subject = variance(Arr, Ddof), + {ok, Variance} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"standard_deviation"/utf8>>, + line => 551}) + end, + _assert_subject@1 = gleam_community@maths@elementary:square_root( + Variance + ), + {ok, Stdev} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/metrics"/utf8>>, + function => <<"standard_deviation"/utf8>>, + line => 554}) + end, + _pipe@2 = Stdev, + {ok, _pipe@2} + end + end. diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@piecewise.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@piecewise.erl new file mode 100644 index 0000000..258d879 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@piecewise.erl @@ -0,0 +1,553 @@ +-module(gleam_community@maths@piecewise). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([float_absolute_value/1, int_absolute_value/1, float_absolute_difference/2, int_absolute_difference/2, float_sign/1, round/3, ceiling/2, floor/2, truncate/2, int_sign/1, float_flip_sign/1, float_copy_sign/2, int_flip_sign/1, int_copy_sign/2, minimum/3, maximum/3, minmax/3, list_minimum/2, list_maximum/2, arg_minimum/2, arg_maximum/2, extrema/2]). +-export_type([rounding_mode/0]). + +-type rounding_mode() :: round_nearest | + round_ties_away | + round_ties_up | + round_to_zero | + round_down | + round_up. + +-spec truncate_float(float()) -> float(). +truncate_float(X) -> + erlang:trunc(X). + +-spec round_to_zero(float(), float()) -> float(). +round_to_zero(P, X) -> + case P of + 0.0 -> 0.0; + Gleam@denominator -> truncate_float(X * P) / Gleam@denominator + end. + +-spec round_down(float(), float()) -> float(). +round_down(P, X) -> + case P of + 0.0 -> 0.0; + Gleam@denominator -> math:floor(X * P) / Gleam@denominator + end. + +-spec round_up(float(), float()) -> float(). +round_up(P, X) -> + case P of + 0.0 -> 0.0; + Gleam@denominator -> math:ceil(X * P) / Gleam@denominator + end. + +-spec float_absolute_value(float()) -> float(). +float_absolute_value(X) -> + case X > +0.0 of + true -> + X; + + false -> + -1.0 * X + end. + +-spec int_absolute_value(integer()) -> integer(). +int_absolute_value(X) -> + case X > 0 of + true -> + X; + + false -> + -1 * X + end. + +-spec float_absolute_difference(float(), float()) -> float(). +float_absolute_difference(A, B) -> + _pipe = A - B, + float_absolute_value(_pipe). + +-spec int_absolute_difference(integer(), integer()) -> integer(). +int_absolute_difference(A, B) -> + _pipe = A - B, + int_absolute_value(_pipe). + +-spec do_float_sign(float()) -> float(). +do_float_sign(X) -> + case X < +0.0 of + true -> + -1.0; + + false -> + case X =:= +0.0 of + true -> + +0.0; + + false -> + 1.0 + end + end. + +-spec float_sign(float()) -> float(). +float_sign(X) -> + do_float_sign(X). + +-spec round_to_nearest(float(), float()) -> float(). +round_to_nearest(P, X) -> + Xabs = float_absolute_value(X) * P, + Xabs_truncated = truncate_float(Xabs), + Remainder = Xabs - Xabs_truncated, + case Remainder of + _ when Remainder > 0.5 -> + case P of + 0.0 -> 0.0; + Gleam@denominator -> (float_sign(X) * truncate_float(Xabs + 1.0)) + / Gleam@denominator + end; + + _ when Remainder =:= 0.5 -> + _assert_subject = gleam@int:modulo( + gleam_community@maths@conversion:float_to_int(Xabs), + 2 + ), + {ok, Is_even} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/piecewise"/utf8>>, + function => <<"round_to_nearest"/utf8>>, + line => 423}) + end, + case Is_even =:= 0 of + true -> + case P of + 0.0 -> 0.0; + Gleam@denominator@1 -> (float_sign(X) * Xabs_truncated) + / Gleam@denominator@1 + end; + + false -> + case P of + 0.0 -> 0.0; + Gleam@denominator@2 -> (float_sign(X) * truncate_float( + Xabs + 1.0 + )) + / Gleam@denominator@2 + end + end; + + _ -> + case P of + 0.0 -> 0.0; + Gleam@denominator@3 -> (float_sign(X) * Xabs_truncated) / Gleam@denominator@3 + end + end. + +-spec round_ties_away(float(), float()) -> float(). +round_ties_away(P, X) -> + Xabs = float_absolute_value(X) * P, + Remainder = Xabs - truncate_float(Xabs), + case Remainder of + _ when Remainder >= 0.5 -> + case P of + 0.0 -> 0.0; + Gleam@denominator -> (float_sign(X) * truncate_float(Xabs + 1.0)) + / Gleam@denominator + end; + + _ -> + case P of + 0.0 -> 0.0; + Gleam@denominator@1 -> (float_sign(X) * truncate_float(Xabs)) / Gleam@denominator@1 + end + end. + +-spec round_ties_up(float(), float()) -> float(). +round_ties_up(P, X) -> + Xabs = float_absolute_value(X) * P, + Xabs_truncated = truncate_float(Xabs), + Remainder = Xabs - Xabs_truncated, + case Remainder of + _ when (Remainder >= 0.5) andalso (X >= +0.0) -> + case P of + 0.0 -> 0.0; + Gleam@denominator -> (float_sign(X) * truncate_float(Xabs + 1.0)) + / Gleam@denominator + end; + + _ -> + case P of + 0.0 -> 0.0; + Gleam@denominator@1 -> (float_sign(X) * Xabs_truncated) / Gleam@denominator@1 + end + end. + +-spec do_round(float(), float(), gleam@option:option(rounding_mode())) -> {ok, + float()} | + {error, binary()}. +do_round(P, X, Mode) -> + case Mode of + {some, round_nearest} -> + _pipe = round_to_nearest(P, X), + {ok, _pipe}; + + {some, round_ties_away} -> + _pipe@1 = round_ties_away(P, X), + {ok, _pipe@1}; + + {some, round_ties_up} -> + _pipe@2 = round_ties_up(P, X), + {ok, _pipe@2}; + + {some, round_to_zero} -> + _pipe@3 = round_to_zero(P, X), + {ok, _pipe@3}; + + {some, round_down} -> + _pipe@4 = round_down(P, X), + {ok, _pipe@4}; + + {some, round_up} -> + _pipe@5 = round_up(P, X), + {ok, _pipe@5}; + + none -> + _pipe@6 = round_to_nearest(P, X), + {ok, _pipe@6} + end. + +-spec round( + float(), + gleam@option:option(integer()), + gleam@option:option(rounding_mode()) +) -> {ok, float()} | {error, binary()}. +round(X, Digits, Mode) -> + case Digits of + {some, A} -> + _assert_subject = gleam_community@maths@elementary:power( + 10.0, + gleam_community@maths@conversion:int_to_float(A) + ), + {ok, P} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/piecewise"/utf8>>, + function => <<"round"/utf8>>, + line => 366}) + end, + do_round(P, X, Mode); + + none -> + do_round(1.0, X, Mode) + end. + +-spec ceiling(float(), gleam@option:option(integer())) -> {ok, float()} | + {error, binary()}. +ceiling(X, Digits) -> + round(X, Digits, {some, round_up}). + +-spec floor(float(), gleam@option:option(integer())) -> {ok, float()} | + {error, binary()}. +floor(X, Digits) -> + round(X, Digits, {some, round_down}). + +-spec truncate(float(), gleam@option:option(integer())) -> {ok, float()} | + {error, binary()}. +truncate(X, Digits) -> + round(X, Digits, {some, round_to_zero}). + +-spec do_int_sign(integer()) -> integer(). +do_int_sign(X) -> + case X < 0 of + true -> + -1; + + false -> + case X =:= 0 of + true -> + 0; + + false -> + 1 + end + end. + +-spec int_sign(integer()) -> integer(). +int_sign(X) -> + do_int_sign(X). + +-spec float_flip_sign(float()) -> float(). +float_flip_sign(X) -> + -1.0 * X. + +-spec float_copy_sign(float(), float()) -> float(). +float_copy_sign(X, Y) -> + case float_sign(X) =:= float_sign(Y) of + true -> + X; + + false -> + float_flip_sign(X) + end. + +-spec int_flip_sign(integer()) -> integer(). +int_flip_sign(X) -> + -1 * X. + +-spec int_copy_sign(integer(), integer()) -> integer(). +int_copy_sign(X, Y) -> + case int_sign(X) =:= int_sign(Y) of + true -> + X; + + false -> + int_flip_sign(X) + end. + +-spec minimum(FQL, FQL, fun((FQL, FQL) -> gleam@order:order())) -> FQL. +minimum(X, Y, Compare) -> + case Compare(X, Y) of + lt -> + X; + + eq -> + X; + + gt -> + Y + end. + +-spec maximum(FQM, FQM, fun((FQM, FQM) -> gleam@order:order())) -> FQM. +maximum(X, Y, Compare) -> + case Compare(X, Y) of + lt -> + Y; + + eq -> + Y; + + gt -> + X + end. + +-spec minmax(FQN, FQN, fun((FQN, FQN) -> gleam@order:order())) -> {FQN, FQN}. +minmax(X, Y, Compare) -> + {minimum(X, Y, Compare), maximum(X, Y, Compare)}. + +-spec list_minimum(list(FQO), fun((FQO, FQO) -> gleam@order:order())) -> {ok, + FQO} | + {error, binary()}. +list_minimum(Arr, Compare) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + _assert_subject = gleam@list:at(Arr, 0), + {ok, Val0} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/piecewise"/utf8>>, + function => <<"list_minimum"/utf8>>, + line => 945}) + end, + _pipe@1 = Arr, + _pipe@2 = gleam@list:fold( + _pipe@1, + Val0, + fun(Acc, Element) -> case Compare(Element, Acc) of + lt -> + Element; + + _ -> + Acc + end end + ), + {ok, _pipe@2} + end. + +-spec list_maximum(list(FQS), fun((FQS, FQS) -> gleam@order:order())) -> {ok, + FQS} | + {error, binary()}. +list_maximum(Arr, Compare) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + _assert_subject = gleam@list:at(Arr, 0), + {ok, Val0} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/piecewise"/utf8>>, + function => <<"list_maximum"/utf8>>, + line => 1004}) + end, + _pipe@1 = Arr, + _pipe@2 = gleam@list:fold( + _pipe@1, + Val0, + fun(Acc, Element) -> case Compare(Acc, Element) of + lt -> + Element; + + _ -> + Acc + end end + ), + {ok, _pipe@2} + end. + +-spec arg_minimum(list(FQW), fun((FQW, FQW) -> gleam@order:order())) -> {ok, + list(integer())} | + {error, binary()}. +arg_minimum(Arr, Compare) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + _assert_subject = begin + _pipe@1 = Arr, + list_minimum(_pipe@1, Compare) + end, + {ok, Min} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/piecewise"/utf8>>, + function => <<"arg_minimum"/utf8>>, + line => 1069}) + end, + _pipe@2 = Arr, + _pipe@3 = gleam@list:index_map( + _pipe@2, + fun(Index, Element) -> case Compare(Element, Min) of + eq -> + Index; + + _ -> + -1 + end end + ), + _pipe@4 = gleam@list:filter(_pipe@3, fun(Index@1) -> case Index@1 of + -1 -> + false; + + _ -> + true + end end), + {ok, _pipe@4} + end. + +-spec arg_maximum(list(FRB), fun((FRB, FRB) -> gleam@order:order())) -> {ok, + list(integer())} | + {error, binary()}. +arg_maximum(Arr, Compare) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + _assert_subject = begin + _pipe@1 = Arr, + list_maximum(_pipe@1, Compare) + end, + {ok, Max} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/piecewise"/utf8>>, + function => <<"arg_maximum"/utf8>>, + line => 1139}) + end, + _pipe@2 = Arr, + _pipe@3 = gleam@list:index_map( + _pipe@2, + fun(Index, Element) -> case Compare(Element, Max) of + eq -> + Index; + + _ -> + -1 + end end + ), + _pipe@4 = gleam@list:filter(_pipe@3, fun(Index@1) -> case Index@1 of + -1 -> + false; + + _ -> + true + end end), + {ok, _pipe@4} + end. + +-spec extrema(list(FRG), fun((FRG, FRG) -> gleam@order:order())) -> {ok, + {FRG, FRG}} | + {error, binary()}. +extrema(Arr, Compare) -> + case Arr of + [] -> + _pipe = <<"Invalid input argument: The list is empty."/utf8>>, + {error, _pipe}; + + _ -> + _assert_subject = gleam@list:at(Arr, 0), + {ok, Val_max} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/piecewise"/utf8>>, + function => <<"extrema"/utf8>>, + line => 1209}) + end, + _assert_subject@1 = gleam@list:at(Arr, 0), + {ok, Val_min} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/piecewise"/utf8>>, + function => <<"extrema"/utf8>>, + line => 1210}) + end, + _pipe@1 = Arr, + _pipe@2 = gleam@list:fold( + _pipe@1, + {Val_min, Val_max}, + fun(Acc, Element) -> + First = gleam@pair:first(Acc), + Second = gleam@pair:second(Acc), + case {Compare(Element, First), Compare(Second, Element)} of + {lt, lt} -> + {Element, Element}; + + {lt, _} -> + {Element, Second}; + + {_, lt} -> + {First, Element}; + + {_, _} -> + {First, Second} + end + end + ), + {ok, _pipe@2} + end. diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@predicates.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@predicates.erl new file mode 100644 index 0000000..d991d89 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@predicates.erl @@ -0,0 +1,118 @@ +-module(gleam_community@maths@predicates). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([is_close/4, all_close/4, is_fractional/1, is_power/2, is_perfect/1, is_even/1, is_odd/1]). + +-spec float_absolute_value(float()) -> float(). +float_absolute_value(X) -> + case X > +0.0 of + true -> + X; + + false -> + -1.0 * X + end. + +-spec float_absolute_difference(float(), float()) -> float(). +float_absolute_difference(A, B) -> + _pipe = A - B, + float_absolute_value(_pipe). + +-spec is_close(float(), float(), float(), float()) -> boolean(). +is_close(A, B, Rtol, Atol) -> + X = float_absolute_difference(A, B), + Y = Atol + (Rtol * float_absolute_value(B)), + case X =< Y of + true -> + true; + + false -> + false + end. + +-spec all_close(list(float()), list(float()), float(), float()) -> {ok, + list(boolean())} | + {error, binary()}. +all_close(Xarr, Yarr, Rtol, Atol) -> + Xlen = gleam@list:length(Xarr), + Ylen = gleam@list:length(Yarr), + case Xlen =:= Ylen of + false -> + _pipe = <<"Invalid input argument: length(xarr) != length(yarr). Valid input is when length(xarr) == length(yarr)."/utf8>>, + {error, _pipe}; + + true -> + _pipe@1 = gleam@list:zip(Xarr, Yarr), + _pipe@2 = gleam@list:map( + _pipe@1, + fun(Z) -> + is_close( + gleam@pair:first(Z), + gleam@pair:second(Z), + Rtol, + Atol + ) + end + ), + {ok, _pipe@2} + end. + +-spec is_fractional(float()) -> boolean(). +is_fractional(X) -> + (math:ceil(X) - X) > +0.0. + +-spec is_power(integer(), integer()) -> boolean(). +is_power(X, Y) -> + _assert_subject = gleam_community@maths@elementary:logarithm( + gleam@int:to_float(X), + {some, gleam@int:to_float(Y)} + ), + {ok, Value} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/predicates"/utf8>>, + function => <<"is_power"/utf8>>, + line => 241}) + end, + _assert_subject@1 = gleam_community@maths@piecewise:truncate( + Value, + {some, 0} + ), + {ok, Truncated} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/predicates"/utf8>>, + function => <<"is_power"/utf8>>, + line => 243}) + end, + Rem = Value - Truncated, + Rem =:= +0.0. + +-spec do_sum(list(integer())) -> integer(). +do_sum(Arr) -> + case Arr of + [] -> + 0; + + _ -> + _pipe = Arr, + gleam@list:fold(_pipe, 0, fun(Acc, A) -> A + Acc end) + end. + +-spec is_perfect(integer()) -> boolean(). +is_perfect(N) -> + do_sum(gleam_community@maths@arithmetics:proper_divisors(N)) =:= N. + +-spec is_even(integer()) -> boolean(). +is_even(X) -> + (X rem 2) =:= 0. + +-spec is_odd(integer()) -> boolean(). +is_odd(X) -> + (X rem 2) /= 0. diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@sequences.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@sequences.erl new file mode 100644 index 0000000..74dcff4 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@sequences.erl @@ -0,0 +1,199 @@ +-module(gleam_community@maths@sequences). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([arange/3, linear_space/4, logarithmic_space/5, geometric_space/4]). + +-spec arange(float(), float(), float()) -> list(float()). +arange(Start, Stop, Step) -> + case ((Start >= Stop) andalso (Step > +0.0)) orelse ((Start =< Stop) andalso (Step + < +0.0)) of + true -> + []; + + false -> + Direction = case Start =< Stop of + true -> + 1.0; + + false -> + -1.0 + end, + Step_abs = gleam_community@maths@piecewise:float_absolute_value( + Step + ), + Num = case Step_abs of + 0.0 -> 0.0; + Gleam@denominator -> gleam_community@maths@piecewise:float_absolute_value( + Start - Stop + ) + / Gleam@denominator + end, + _pipe = gleam@list:range( + 0, + gleam_community@maths@conversion:float_to_int(Num) - 1 + ), + gleam@list:map( + _pipe, + fun(I) -> + Start + ((gleam_community@maths@conversion:int_to_float(I) * Step_abs) + * Direction) + end + ) + end. + +-spec linear_space(float(), float(), integer(), boolean()) -> {ok, + list(float())} | + {error, binary()}. +linear_space(Start, Stop, Num, Endpoint) -> + Direction = case Start =< Stop of + true -> + 1.0; + + false -> + -1.0 + end, + case Num > 0 of + true -> + case Endpoint of + true -> + Increment = case gleam_community@maths@conversion:int_to_float( + Num - 1 + ) of + 0.0 -> 0.0; + Gleam@denominator -> gleam_community@maths@piecewise:float_absolute_value( + Start - Stop + ) + / Gleam@denominator + end, + _pipe = gleam@list:range(0, Num - 1), + _pipe@1 = gleam@list:map( + _pipe, + fun(I) -> + Start + ((gleam_community@maths@conversion:int_to_float( + I + ) + * Increment) + * Direction) + end + ), + {ok, _pipe@1}; + + false -> + Increment@1 = case gleam_community@maths@conversion:int_to_float( + Num + ) of + 0.0 -> 0.0; + Gleam@denominator@1 -> gleam_community@maths@piecewise:float_absolute_value( + Start - Stop + ) + / Gleam@denominator@1 + end, + _pipe@2 = gleam@list:range(0, Num - 1), + _pipe@3 = gleam@list:map( + _pipe@2, + fun(I@1) -> + Start + ((gleam_community@maths@conversion:int_to_float( + I@1 + ) + * Increment@1) + * Direction) + end + ), + {ok, _pipe@3} + end; + + false -> + _pipe@4 = <<"Invalid input: num < 0. Valid input is num > 0."/utf8>>, + {error, _pipe@4} + end. + +-spec logarithmic_space(float(), float(), integer(), boolean(), float()) -> {ok, + list(float())} | + {error, binary()}. +logarithmic_space(Start, Stop, Num, Endpoint, Base) -> + case Num > 0 of + true -> + _assert_subject = linear_space(Start, Stop, Num, Endpoint), + {ok, Linspace} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/sequences"/utf8>>, + function => <<"logarithmic_space"/utf8>>, + line => 221}) + end, + _pipe = Linspace, + _pipe@1 = gleam@list:map( + _pipe, + fun(I) -> + _assert_subject@1 = gleam_community@maths@elementary:power( + Base, + I + ), + {ok, Result} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/sequences"/utf8>>, + function => <<"logarithmic_space"/utf8>>, + line => 224}) + end, + Result + end + ), + {ok, _pipe@1}; + + false -> + _pipe@2 = <<"Invalid input: num < 0. Valid input is num > 0."/utf8>>, + {error, _pipe@2} + end. + +-spec geometric_space(float(), float(), integer(), boolean()) -> {ok, + list(float())} | + {error, binary()}. +geometric_space(Start, Stop, Num, Endpoint) -> + case (Start =:= +0.0) orelse (Stop =:= +0.0) of + true -> + _pipe = <<""/utf8>>, + {error, _pipe}; + + false -> + case Num > 0 of + true -> + _assert_subject = gleam_community@maths@elementary:logarithm_10( + Start + ), + {ok, Log_start} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/sequences"/utf8>>, + function => <<"geometric_space"/utf8>>, + line => 293}) + end, + _assert_subject@1 = gleam_community@maths@elementary:logarithm_10( + Stop + ), + {ok, Log_stop} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/sequences"/utf8>>, + function => <<"geometric_space"/utf8>>, + line => 294}) + end, + logarithmic_space(Log_start, Log_stop, Num, Endpoint, 10.0); + + false -> + _pipe@1 = <<"Invalid input: num < 0. Valid input is num > 0."/utf8>>, + {error, _pipe@1} + end + end. diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@special.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@special.erl new file mode 100644 index 0000000..925f4bb --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@special.erl @@ -0,0 +1,157 @@ +-module(gleam_community@maths@special). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([erf/1, gamma/1, beta/2, incomplete_gamma/2]). + +-spec erf(float()) -> float(). +erf(X) -> + _assert_subject = [0.254829592, + -0.284496736, + 1.421413741, + -1.453152027, + 1.061405429], + [A1, A2, A3, A4, A5] = case _assert_subject of + [_, _, _, _, _] -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/special"/utf8>>, + function => <<"erf"/utf8>>, + line => 79}) + end, + P = 0.3275911, + Sign = gleam_community@maths@piecewise:float_sign(X), + X@1 = gleam_community@maths@piecewise:float_absolute_value(X), + T = case (1.0 + (P * X@1)) of + 0.0 -> 0.0; + Gleam@denominator -> 1.0 / Gleam@denominator + end, + Y = 1.0 - ((((((((((A5 * T) + A4) * T) + A3) * T) + A2) * T) + A1) * T) * gleam_community@maths@elementary:exponential( + (-1.0 * X@1) * X@1 + )), + Sign * Y. + +-spec gamma_lanczos(float()) -> float(). +gamma_lanczos(X) -> + case X < 0.5 of + true -> + case (gleam_community@maths@elementary:sin( + gleam_community@maths@elementary:pi() * X + ) + * gamma_lanczos(1.0 - X)) of + 0.0 -> 0.0; + Gleam@denominator -> gleam_community@maths@elementary:pi() / Gleam@denominator + end; + + false -> + Z = X - 1.0, + X@1 = gleam@list:index_fold( + [0.99999999999980993, + 676.5203681218851, + -1259.1392167224028, + 771.32342877765313, + -176.61502916214059, + 12.507343278686905, + -0.13857109526572012, + 0.0000099843695780195716, + 0.00000015056327351493116], + +0.0, + fun(Acc, V, Index) -> case Index > 0 of + true -> + Acc + (case (Z + gleam_community@maths@conversion:int_to_float( + Index + )) of + 0.0 -> 0.0; + Gleam@denominator@1 -> V / Gleam@denominator@1 + end); + + false -> + V + end end + ), + T = (Z + 7.0) + 0.5, + _assert_subject = gleam_community@maths@elementary:power( + 2.0 * gleam_community@maths@elementary:pi(), + 0.5 + ), + {ok, V1} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/special"/utf8>>, + function => <<"gamma_lanczos"/utf8>>, + line => 146}) + end, + _assert_subject@1 = gleam_community@maths@elementary:power( + T, + Z + 0.5 + ), + {ok, V2} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"gleam_community/maths/special"/utf8>>, + function => <<"gamma_lanczos"/utf8>>, + line => 147}) + end, + ((V1 * V2) * gleam_community@maths@elementary:exponential(-1.0 * T)) + * X@1 + end. + +-spec gamma(float()) -> float(). +gamma(X) -> + gamma_lanczos(X). + +-spec beta(float(), float()) -> float(). +beta(X, Y) -> + case gamma(X + Y) of + 0.0 -> 0.0; + Gleam@denominator -> (gamma(X) * gamma(Y)) / Gleam@denominator + end. + +-spec incomplete_gamma_sum(float(), float(), float(), float(), float()) -> float(). +incomplete_gamma_sum(A, X, T, S, N) -> + case T of + +0.0 -> + S; + + _ -> + Ns = S + T, + Nt = T * (case (A + N) of + 0.0 -> 0.0; + Gleam@denominator -> X / Gleam@denominator + end), + incomplete_gamma_sum(A, X, Nt, Ns, N + 1.0) + end. + +-spec incomplete_gamma(float(), float()) -> {ok, float()} | {error, binary()}. +incomplete_gamma(A, X) -> + case (A > +0.0) andalso (X >= +0.0) of + true -> + _assert_subject = gleam_community@maths@elementary:power(X, A), + {ok, V} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam_community/maths/special"/utf8>>, + function => <<"incomplete_gamma"/utf8>>, + line => 173}) + end, + _pipe = (V * gleam_community@maths@elementary:exponential(-1.0 * X)) + * incomplete_gamma_sum(A, X, case A of + 0.0 -> 0.0; + Gleam@denominator -> 1.0 / Gleam@denominator + end, +0.0, 1.0), + {ok, _pipe}; + + false -> + _pipe@1 = <<"Invlaid input argument: a <= 0 or x < 0. Valid input is a > 0 and x >= 0."/utf8>>, + {error, _pipe@1} + end. diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community_maths.app.src b/aoc2023/build/packages/gleam_community_maths/src/gleam_community_maths.app.src new file mode 100644 index 0000000..091e679 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community_maths.app.src @@ -0,0 +1,16 @@ +{application, gleam_community_maths, [ + {vsn, "1.0.1"}, + {applications, [gleam_stdlib, + gleeunit]}, + {description, "A basic maths library"}, + {modules, [gleam_community@maths@arithmetics, + gleam_community@maths@combinatorics, + gleam_community@maths@conversion, + gleam_community@maths@elementary, + gleam_community@maths@metrics, + gleam_community@maths@piecewise, + gleam_community@maths@predicates, + gleam_community@maths@sequences, + gleam_community@maths@special]}, + {registered, []} +]}. diff --git a/aoc2023/build/packages/gleam_community_maths/src/maths.mjs b/aoc2023/build/packages/gleam_community_maths/src/maths.mjs new file mode 100644 index 0000000..5c5ab31 --- /dev/null +++ b/aoc2023/build/packages/gleam_community_maths/src/maths.mjs @@ -0,0 +1,95 @@ +export function sin(float) { + return Math.sin(float) +} + +export function pi() { + return Math.PI +} + +export function acos(float) { + return Math.acos(float) +} + +export function acosh(float) { + return Math.acosh(float) +} + +export function asin(float) { + return Math.asin(float) +} + +export function asinh(float) { + return Math.asinh(float) +} + +export function atan(float) { + return Math.atan(float) +} + +export function tan(float) { + return Math.tan(float) +} + +export function atan2(floaty, floatx) { + return Math.atan2(floaty, floatx) +} + +export function atanh(float) { + return Math.atanh(float) +} + +export function cos(float) { + return Math.cos(float) +} + +export function cosh(float) { + return Math.cosh(float) +} + +export function exponential(float) { + return Math.exp(float) +} + +export function ceiling(float) { + return Math.ceil(float) +} + +export function floor(float) { + return Math.floor(float) +} + +export function power(base, exponent) { + return Math.pow(base, exponent) +} + +export function logarithm(float) { + return Math.log(float) +} + +export function logarithm_10(float) { + return Math.log10(float) +} + +export function logarithm_2(float) { + return Math.log2(float) +} + +export function sinh(float) { + return Math.sinh(float) +} + +export function tanh(float) { + return Math.tanh(float) +} + +export function sign(float) { + return Math.sign(float) +} + +export function truncate(float) { + return Math.trunc(float) +} + +export function to_int(float) { + return Math.trunc(float) +} diff --git a/aoc2023/build/packages/gleam_erlang/LICENSE b/aoc2023/build/packages/gleam_erlang/LICENSE new file mode 100644 index 0000000..59e1345 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/LICENSE @@ -0,0 +1,191 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright {{copyright_year}}, {{author_name}} <{{author_email}}>. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/aoc2023/build/packages/gleam_erlang/README.md b/aoc2023/build/packages/gleam_erlang/README.md new file mode 100644 index 0000000..ffee4cd --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/README.md @@ -0,0 +1,37 @@ +# Gleam Erlang 🐙 + +A library for making use of Erlang specific code! + +## Features + +- Typed Erlang processes and message sending. +- Erlang binary format (de)serialisation. +- Functions for working with Erlang's charlists. +- Reading, writing, and deletion of files. +- Basic distributed Erlang support and working with nodes. +- Reading and writing of environment variables. +- Functions for working with atoms. + +## Usage + +Add this library to your Gleam project + +```shell +gleam add gleam_erlang +``` + +And then use it in your code + +```gleam +import gleam/io +import gleam/erlang/file + +pub fn main() { + assert Ok(contents) = file.read("pokedex.txt") + io.println(contents) +} +``` + +Documentation can be found at <https://hexdocs.pm/gleam_erlang/>. + +This library requires OTP 23.0 or higher. diff --git a/aoc2023/build/packages/gleam_erlang/gleam.toml b/aoc2023/build/packages/gleam_erlang/gleam.toml new file mode 100644 index 0000000..8d62603 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/gleam.toml @@ -0,0 +1,18 @@ +name = "gleam_erlang" + +version = "0.23.1" +licences = ["Apache-2.0"] +description = "A Gleam library for working with Erlang" + +repository = { type = "github", user = "gleam-lang", repo = "erlang" } +links = [ + { title = "Website", href = "https://gleam.run" }, + { title = "Sponsor", href = "https://github.com/sponsors/lpil" }, +] +gleam = ">= 0.32.0" + +[dependencies] +gleam_stdlib = "~> 0.32" + +[dev-dependencies] +gleeunit = "~> 0.6" diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@file_FileInfo.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@file_FileInfo.hrl new file mode 100644 index 0000000..b38d11e --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@file_FileInfo.hrl @@ -0,0 +1,15 @@ +-record(file_info, { + size :: integer(), + file_type :: gleam@erlang@file:file_type(), + access :: gleam@erlang@file:access(), + atime :: integer(), + mtime :: integer(), + ctime :: integer(), + mode :: integer(), + links :: integer(), + major_device :: integer(), + minor_device :: integer(), + inode :: integer(), + user_id :: integer(), + group_id :: integer() +}). diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Abnormal.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Abnormal.hrl new file mode 100644 index 0000000..4cd0452 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Abnormal.hrl @@ -0,0 +1 @@ +-record(abnormal, {reason :: binary()}). diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_CalleeDown.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_CalleeDown.hrl new file mode 100644 index 0000000..5dd5047 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_CalleeDown.hrl @@ -0,0 +1 @@ +-record(callee_down, {reason :: gleam@dynamic:dynamic_()}). diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Cancelled.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Cancelled.hrl new file mode 100644 index 0000000..b82b49f --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Cancelled.hrl @@ -0,0 +1 @@ +-record(cancelled, {time_remaining :: integer()}). diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ExitMessage.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ExitMessage.hrl new file mode 100644 index 0000000..c476308 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ExitMessage.hrl @@ -0,0 +1,4 @@ +-record(exit_message, { + pid :: gleam@erlang@process:pid_(), + reason :: gleam@erlang@process:exit_reason() +}). diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ProcessDown.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ProcessDown.hrl new file mode 100644 index 0000000..df0b6b7 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ProcessDown.hrl @@ -0,0 +1,4 @@ +-record(process_down, { + pid :: gleam@erlang@process:pid_(), + reason :: gleam@dynamic:dynamic_() +}). diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ProcessMonitor.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ProcessMonitor.hrl new file mode 100644 index 0000000..ce552e2 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ProcessMonitor.hrl @@ -0,0 +1 @@ +-record(process_monitor, {tag :: gleam@erlang:reference_()}). diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Subject.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Subject.hrl new file mode 100644 index 0000000..abc46b2 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Subject.hrl @@ -0,0 +1,4 @@ +-record(subject, { + owner :: gleam@erlang@process:pid_(), + tag :: gleam@erlang:reference_() +}). diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang_ApplicationFailedToStart.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang_ApplicationFailedToStart.hrl new file mode 100644 index 0000000..52c9896 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang_ApplicationFailedToStart.hrl @@ -0,0 +1,4 @@ +-record(application_failed_to_start, { + name :: gleam@erlang@atom:atom_(), + reason :: gleam@dynamic:dynamic_() +}). diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang_UnknownApplication.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang_UnknownApplication.hrl new file mode 100644 index 0000000..fde3c61 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang_UnknownApplication.hrl @@ -0,0 +1 @@ +-record(unknown_application, {name :: gleam@erlang@atom:atom_()}). diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam/erlang.gleam b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang.gleam new file mode 100644 index 0000000..783cd53 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang.gleam @@ -0,0 +1,158 @@ +import gleam/dynamic.{type Dynamic} +import gleam/list +import gleam/erlang/atom.{type Atom} +import gleam/erlang/charlist.{type Charlist} + +@external(erlang, "io_lib", "format") +fn erl_format(a: String, b: List(a)) -> Charlist + +/// Return a string representation of any term +pub fn format(term: any) -> String { + charlist.to_string(erl_format("~p", [term])) +} + +@external(erlang, "erlang", "term_to_binary") +pub fn term_to_binary(a: a) -> BitArray + +type Safe { + Safe +} + +@external(erlang, "erlang", "binary_to_term") +fn erl_binary_to_term(a: BitArray, b: List(Safe)) -> Dynamic + +pub fn binary_to_term(binary: BitArray) -> Result(Dynamic, Nil) { + case rescue(fn() { erl_binary_to_term(binary, [Safe]) }) { + Ok(term) -> Ok(term) + Error(_) -> Error(Nil) + } +} + +pub fn unsafe_binary_to_term(binary: BitArray) -> Result(Dynamic, Nil) { + case rescue(fn() { erl_binary_to_term(binary, []) }) { + Ok(term) -> Ok(term) + Error(_) -> Error(Nil) + } +} + +/// Error value returned by `get_line` function +/// +pub type GetLineError { + Eof + NoData +} + +/// Reads a line from standard input with the given prompt. +/// +/// # Example +/// +/// > get_line("Language: ") +/// // -> Language: <- gleam +/// Ok("gleam\n") +/// +@external(erlang, "gleam_erlang_ffi", "get_line") +pub fn get_line(prompt prompt: String) -> Result(String, GetLineError) + +pub type TimeUnit { + Second + Millisecond + Microsecond + Nanosecond +} + +/// Returns the current OS system time. +/// +/// <https://erlang.org/doc/apps/erts/time_correction.html#OS_System_Time> +@external(erlang, "os", "system_time") +pub fn system_time(a: TimeUnit) -> Int + +/// Returns the current OS system time as a tuple of Ints +/// +/// http://erlang.org/doc/man/os.html#timestamp-0 +@external(erlang, "os", "timestamp") +pub fn erlang_timestamp() -> #(Int, Int, Int) + +/// Gleam doesn't offer any way to raise exceptions, but they may still occur +/// due to bugs when working with unsafe code, such as when calling Erlang +/// function. +/// +/// This function will catch any error thrown and convert it into a result +/// rather than crashing the process. +/// +@external(erlang, "gleam_erlang_ffi", "rescue") +pub fn rescue(a: fn() -> a) -> Result(a, Crash) + +pub type Crash { + Exited(Dynamic) + Thrown(Dynamic) + Errored(Dynamic) +} + +@external(erlang, "init", "get_plain_arguments") +fn get_start_arguments() -> List(Charlist) + +/// Get the arguments given to the program when it was started. +/// +/// This is sometimes called `argv` in other languages. +pub fn start_arguments() -> List(String) { + get_start_arguments() + |> list.map(charlist.to_string) +} + +/// Starts an OTP application's process tree in the background, as well as +/// the trees of any applications that the given application depends upon. An +/// OTP application typically maps onto a Gleam or Hex package. +/// +/// Returns a list of the applications that were started. Calling this function +/// for application that have already been started is a no-op so you do not need +/// to check the application state beforehand. +/// +/// In Gleam we prefer to not use these implicit background process trees, but +/// you will likely still need to start the trees of OTP applications written in +/// other BEAM languages such as Erlang or Elixir, including those included by +/// default with Erlang/OTP. +/// +/// For more information see the OTP documentation. +/// - <https://www.erlang.org/doc/man/application.html#ensure_all_started-1> +/// - <https://www.erlang.org/doc/man/application.html#start-1> +/// +@external(erlang, "gleam_erlang_ffi", "ensure_all_started") +pub fn ensure_all_started( + application application: Atom, +) -> Result(List(Atom), EnsureAllStartedError) + +pub type EnsureAllStartedError { + UnknownApplication(name: Atom) + ApplicationFailedToStart(name: Atom, reason: Dynamic) +} + +/// A unique reference value. +/// +/// It holds no particular meaning or value, but unique values are often useful +/// in programs are used heavily within both Gleam and Erlang's OTP frameworks. +/// +/// More can be read about references in the [Erlang documentation][1]. +/// +/// [1]: https://www.erlang.org/doc/efficiency_guide/advanced.html#unique_references +/// +pub type Reference + +/// Create a new unique reference. +/// +@external(erlang, "erlang", "make_ref") +pub fn make_reference() -> Reference + +/// Returns the path of a package's `priv` directory, where extra non-Gleam +/// or Erlang files are typically kept. +/// +/// Returns an error if no package was found with the given name. +/// +/// # Example +/// +/// ```gleam +/// > erlang.priv_directory("my_app") +/// // -> Ok("/some/location/my_app/priv") +/// ``` +/// +@external(erlang, "gleam_erlang_ffi", "priv_directory") +pub fn priv_directory(name: String) -> Result(String, Nil) diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/atom.gleam b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/atom.gleam new file mode 100644 index 0000000..a27289c --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/atom.gleam @@ -0,0 +1,79 @@ +import gleam/dynamic.{type DecodeErrors, type Dynamic} + +/// Atom is a special string-like data-type that is most commonly used for +/// interfacing with code written in other BEAM languages such as Erlang and +/// Elixir. It is preferable to define your own custom types to use instead of +/// atoms where possible. +/// +/// Atoms are not used much in typical Gleam code! +/// +/// ## Creating atoms +/// +/// We can create atoms with the the [`create_from_string`](#create_from_string) +/// function, though we must be careful when doing so as atoms are never +/// garbage collected. If we create too many atoms (for example, if we convert +/// user input into atoms) we may hit the max limit of atoms and cause the +/// virtual machine to crash. +/// +pub type Atom + +/// An error returned when no atom is found in the virtual machine's atom table +/// for a given string when calling the [`from_string`](#from_string) function. +pub type FromStringError { + AtomNotLoaded +} + +/// Finds an existing Atom for the given String. +/// +/// If no atom is found in the virtual machine's atom table for the String then +/// an error is returned. +/// +/// ## Examples +/// +/// > from_string("ok") +/// Ok(create_from_string("ok")) +/// +/// > from_string("some_new_atom") +/// Error(AtomNotLoaded) +/// +@external(erlang, "gleam_erlang_ffi", "atom_from_string") +pub fn from_string(a: String) -> Result(Atom, FromStringError) + +/// Creates an atom from a string, inserting a new value into the virtual +/// machine's atom table if an atom does not already exist for the given +/// string. +/// +/// We must be careful when using this function as there is a limit to the +/// number of atom that can fit in the virtual machine's atom table. Never +/// convert user input into atoms as filling the atom table will cause the +/// virtual machine to crash! +/// +@external(erlang, "erlang", "binary_to_atom") +pub fn create_from_string(a: String) -> Atom + +/// Returns a `String` corresponding to the text representation of the given +/// `Atom`. +/// +/// ## Examples +/// +/// > let ok_atom = create_from_string("ok") +/// > to_string(ok_atom) +/// "ok" +/// +@external(erlang, "erlang", "atom_to_binary") +pub fn to_string(a: Atom) -> String + +/// Checks to see whether a `Dynamic` value is an atom, and return the atom if +/// it is. +/// +/// ## Examples +/// +/// > import gleam/dynamic +/// > from_dynamic(dynamic.from(create_from_string("hello"))) +/// Ok(create_from_string("hello")) +/// +/// > from_dynamic(dynamic.from(123)) +/// Error([DecodeError(expected: "Atom", found: "Int", path: [])]) +/// +@external(erlang, "gleam_erlang_ffi", "atom_from_dynamic") +pub fn from_dynamic(from from: Dynamic) -> Result(Atom, DecodeErrors) diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/charlist.gleam b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/charlist.gleam new file mode 100644 index 0000000..e5b6d65 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/charlist.gleam @@ -0,0 +1,25 @@ +//// A charlist is a list of integers where all the integers are valid code +//// points. +//// +//// In practice, you will not come across them often, except perhaps when +//// interfacing with Erlang, in particular when using older libraries that do +//// not accept binaries as arguments. + +/// A list of characters represented as ints. Commonly used by older Erlang +/// modules. +pub type Charlist + +/// Transform a charlist to a string +@external(erlang, "unicode", "characters_to_binary") +pub fn to_string(a: Charlist) -> String + +// Calls `unicode:characters_to_binary(Data, unicode, unicode)` +// Note: `unicode is an alias for utf8` +// See <https://www.erlang.org/doc/man/unicode.html#characters_to_binary-1> + +/// Transform a string to a charlist +@external(erlang, "unicode", "characters_to_list") +pub fn from_string(a: String) -> Charlist +// Calls `unicode:characters_to_list(Data, unicode)` +// Note: `unicode is an alias for utf8` +// See <https://www.erlang.org/doc/man/unicode.html#characters_to_list-1> diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/file.gleam b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/file.gleam new file mode 100644 index 0000000..48e11a7 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/file.gleam @@ -0,0 +1,737 @@ +//// Working with files on the filesystem. +//// +//// The functions included in this module are for high-level concepts such as +//// reading and writing. + +import gleam/bit_array +import gleam/result + +/// Reason represents all of the reasons that Erlang surfaces of why a file +/// system operation could fail. Most of these reasons are POSIX errors, which +/// come from the operating system and start with `E`. Others have been added to +/// represent other issues that may arise. +pub type Reason { + /// Permission denied. + Eacces + /// Resource temporarily unavailable. + Eagain + /// Bad file number + Ebadf + /// Bad message. + Ebadmsg + /// File busy. + Ebusy + /// Resource deadlock avoided. + Edeadlk + /// On most architectures, same as `Edeadlk`. On some architectures, it + /// means "File locking deadlock error." + Edeadlock + /// Disk quota exceeded. + Edquot + /// File already exists. + Eexist + /// Bad address in system call argument. + Efault + /// File too large. + Efbig + /// Inappropriate file type or format. Usually caused by trying to set the + /// "sticky bit" on a regular file (not a directory). + Eftype + /// Interrupted system call. + Eintr + /// Invalid argument. + Einval + /// I/O error. + Eio + /// Illegal operation on a directory. + Eisdir + /// Too many levels of symbolic links. + Eloop + /// Too many open files. + Emfile + /// Too many links. + Emlink + /// Multihop attempted. + Emultihop + /// Filename too long + Enametoolong + /// File table overflow + Enfile + /// No buffer space available. + Enobufs + /// No such device. + Enodev + /// No locks available. + Enolck + /// Link has been severed. + Enolink + /// No such file or directory. + Enoent + /// Not enough memory. + Enomem + /// No space left on device. + Enospc + /// No STREAM resources. + Enosr + /// Not a STREAM. + Enostr + /// Function not implemented. + Enosys + /// Block device required. + Enotblk + /// Not a directory. + Enotdir + /// Operation not supported. + Enotsup + /// No such device or address. + Enxio + /// Operation not supported on socket. + Eopnotsupp + /// Value too large to be stored in data type. + Eoverflow + /// Not owner. + Eperm + /// Broken pipe. + Epipe + /// Result too large. + Erange + /// Read-only file system. + Erofs + /// Invalid seek. + Espipe + /// No such process. + Esrch + /// Stale remote file handle. + Estale + /// Text file busy. + Etxtbsy + /// Cross-domain link. + Exdev + /// File was requested to be read as UTF-8, but is not UTF-8 encoded. + NotUtf8 +} + +/// The type of file found by `file_info` or `link_info`. +/// +pub type FileType { + Device + Directory + Other + Regular + Symlink +} + +/// The read/write permissions a user can have for a file. +/// +pub type Access { + NoAccess + Read + ReadWrite + Write +} + +/// Meta information for a file. +/// +/// Timestamps are in seconds before or after the Unix time epoch, +/// `1970-01-01 00:00:00 UTC`. +/// +pub type FileInfo { + FileInfo( + /// File size in bytes. + /// + size: Int, + /// `Regular`, `Directory`, `Symlink`, `Device`, or `Other`. + /// + file_type: FileType, + /// `ReadWrite`, `Read`, `Write`, or `NoAccess`. + /// + access: Access, + /// Timestamp of most recent access. + /// + atime: Int, + /// Timestamp of most recent modification. + /// + mtime: Int, + /// Timestamp of most recent change (or file creation, depending on + /// operating system). + /// + ctime: Int, + /// File permissions encoded as a sum of bit values, including but not + /// limited to: + /// + /// Owner read, write, execute. + /// + /// `0o400`, `0o200`, `0o100` + /// + /// Group read, write, execute. + /// + /// `0o40`, `0o20`, `0o10` + /// + /// Other read, write, execute. + /// + /// `0o4`, `0o2`, `0o1` + /// + /// Set user ID, group ID on execution. + /// + /// `0x800`, `0x400` + /// + mode: Int, + /// Total links to a file (always `1` for file systems without links). + /// + links: Int, + /// The file system where a file is located (`0` for drive `A:` on Windows, + /// `1` for `B:`, etc.). + /// + major_device: Int, + /// Character device (or `0` on non-Unix systems). + /// + minor_device: Int, + /// The `inode` number for a file (always `0` on non-Unix file systems). + /// + inode: Int, + /// The owner of a file (always `0` on non-Unix file systems). + /// + user_id: Int, + /// The group id of a file (always `0` on non-Unix file systems). + /// + group_id: Int, + ) +} + +/// Results in `FileInfo` about the given `path` on success, otherwise a +/// `Reason` for failure. +/// +/// When `path` refers to a symlink, the result pertains to the link's target. +/// To get `FileInfo` about a symlink itself, use `link_info`. +/// +/// ## Examples +/// +/// ```gleam +/// > file_info("gleam.toml") +/// Ok(FileInfo( +/// size: 430, +/// file_type: Regular, +/// access: ReadWrite, +/// atime: 1680580321, +/// mtime: 1680580272, +/// ctime: 1680580272, +/// mode: 33188, +/// links: 1, +/// major_device: 64, +/// minor_device: 0, +/// inode: 469028, +/// user_id: 1000, +/// group_id: 1000, +/// )) +/// +/// > file_info("/root") +/// Ok(FileInfo( +/// size: 16, +/// file_type: Directory, +/// access: Read, +/// atime: 1677789967, +/// mtime: 1664561240, +/// ctime: 1664561240, +/// mode: 16877, +/// links: 11, +/// major_device: 54, +/// minor_device: 0, +/// inode: 34, +/// user_id: 0, +/// group_id: 0, +/// )) +/// +/// > file_info("./build/dev/erlang/rad/priv") +/// Ok(FileInfo( +/// size: 140, +/// file_type: Directory, +/// access: ReadWrite, +/// atime: 1680580321, +/// mtime: 1680580272, +/// ctime: 1680580272, +/// mode: 33188, +/// links: 1, +/// major_device: 64, +/// minor_device: 0, +/// inode: 469028, +/// user_id: 1000, +/// group_id: 1000, +/// )) +/// +/// > file_info("/does_not_exist") +/// Error(Enoent) +/// +/// > file_info("/root/.local/maybe_exists") +/// Error(Eacces) +/// ``` +/// +@deprecated("Use the simplifile package instead") +pub fn file_info(a: String) -> Result(FileInfo, Reason) { + do_file_info(a) +} + +@external(erlang, "gleam_erlang_ffi", "file_info") +fn do_file_info(a: String) -> Result(FileInfo, Reason) + +/// Results in `FileInfo` about the given `path` on success, otherwise a +/// `Reason` for failure. +/// +/// When `path` refers to a symlink, the result pertains to the link itself. +/// To get `FileInfo` about a symlink's target, use `file_info`. +/// +/// ## Examples +/// +/// ```gleam +/// > link_info("gleam.toml") +/// Ok(FileInfo( +/// size: 430, +/// file_type: Regular, +/// access: ReadWrite, +/// atime: 1680580321, +/// mtime: 1680580272, +/// ctime: 1680580272, +/// mode: 33188, +/// links: 1, +/// major_device: 64, +/// minor_device: 0, +/// inode: 469028, +/// user_id: 1000, +/// group_id: 1000, +/// )) +/// +/// > link_info("/root") +/// Ok(FileInfo( +/// size: 16, +/// file_type: Directory, +/// access: Read, +/// atime: 1677789967, +/// mtime: 1664561240, +/// ctime: 1664561240, +/// mode: 16877, +/// links: 11, +/// major_device: 54, +/// minor_device: 0, +/// inode: 34, +/// user_id: 0, +/// group_id: 0, +/// )) +/// +/// > link_info("./build/dev/erlang/rad/priv") +/// Ok(FileInfo( +/// size: 41, +/// file_type: Symlink, +/// access: ReadWrite, +/// atime: 1680581150, +/// mtime: 1680581150, +/// ctime: 1680581150, +/// mode: 41471, +/// links: 1, +/// major_device: 64, +/// minor_device: 0, +/// inode: 471587, +/// user_id: 1000, +/// group_id: 1000, +/// )) +/// +/// > link_info("/does_not_exist") +/// Error(Enoent) +/// +/// > link_info("/root/.local/maybe_exists") +/// Error(Eacces) +/// ``` +/// +@deprecated("Use the simplifile package instead") +pub fn link_info(a: String) -> Result(FileInfo, Reason) { + do_link_info(a) +} + +@external(erlang, "gleam_erlang_ffi", "link_info") +fn do_link_info(a: String) -> Result(FileInfo, Reason) + +/// Results in a `Bool` on success that indicates whether the given `path` has +/// a `Directory` `FileType`, otherwise a `Reason` for failure. +/// +/// When `path` refers to a symlink, the result pertains to the link's target. +/// +/// ## Examples +/// +/// ```gleam +/// > is_directory("/tmp") +/// Ok(True) +/// +/// > is_directory("resume.pdf") +/// Ok(False) +/// +/// > is_directory("/does_not_exist") +/// Error(Enoent) +/// ``` +/// +@deprecated("Use the simplifile package instead") +pub fn is_directory(path: String) -> Result(Bool, Reason) { + use FileInfo(file_type: file_type, ..) <- result.map(over: do_file_info(path)) + file_type == Directory +} + +/// Results in a `Bool` on success that indicates whether the given `path` has +/// a `Regular` `FileType`, otherwise a `Reason` for failure. +/// +/// When `path` refers to a symlink, the result pertains to the link's target. +/// +/// ## Examples +/// +/// ```gleam +/// > is_regular("resume.pdf") +/// Ok(True) +/// +/// > is_regular("/tmp") +/// Ok(False) +/// +/// > is_regular("/does_not_exist.txt") +/// Error(Enoent) +/// ``` +/// +@deprecated("Use the simplifile package instead") +pub fn is_regular(path: String) -> Result(Bool, Reason) { + use FileInfo(file_type: file_type, ..) <- result.map(over: do_file_info(path)) + file_type == Regular +} + +/// Results in a `Bool` on success that indicates whether the given `path` +/// exists, otherwise a `Reason` for failure. +/// +/// When `path` refers to a symlink, the result pertains to the link's target. +/// To find whether a symlink itself exists, use `link_exists`. +/// +/// ## Examples +/// +/// ```gleam +/// > file_exists("resume.pdf") +/// Ok(True) +/// +/// > file_exists("/tmp") +/// Ok(True) +/// +/// > file_exists("/does_not_exist") +/// Ok(False) +/// +/// > file_exists("/root/.local/maybe_exists") +/// Error(Eacces) +/// ``` +/// +@deprecated("Use the simplifile package instead") +pub fn file_exists(path: String) -> Result(Bool, Reason) { + let result = + path + |> do_file_info + |> result.replace(True) + case result { + Error(Enoent) -> Ok(False) + _ -> result + } +} + +/// Results in a `Bool` on success that indicates whether the given `path` +/// exists, otherwise a `Reason` for failure. +/// +/// When `path` refers to a symlink, the result pertains to the link itself. +/// To find whether a symlink's target exists, use `file_exists`. +/// +/// ## Examples +/// +/// ```gleam +/// > link_exists("resume.pdf") +/// Ok(True) +/// +/// > link_exists("/tmp") +/// Ok(True) +/// +/// > link_exists("/does_not_exist") +/// Ok(False) +/// +/// > link_exists("/root/.local/maybe_exists") +/// Error(Eacces) +/// ``` +/// +@deprecated("Use the simplifile package instead") +pub fn link_exists(path: String) -> Result(Bool, Reason) { + let result = + path + |> do_link_info + |> result.replace(True) + case result { + Error(Enoent) -> Ok(False) + _ -> result + } +} + +/// Tries to create a directory. Missing parent directories are not created. +/// +/// Returns a Result of nil if the directory is created or Reason if the +/// operation failed. +/// +/// ## Examples +/// +/// ```gleam +/// > make_directory("/tmp/foo") +/// Ok(Nil) +/// +/// > make_directory("relative_directory") +/// Ok(Nil) +/// +/// > make_directory("/tmp/missing_intermediate_directory/foo") +/// Error(Enoent) +/// ``` +/// +@deprecated("Use the simplifile package instead") +@external(erlang, "gleam_erlang_ffi", "make_directory") +pub fn make_directory(a: String) -> Result(Nil, Reason) + +/// Lists all files in a directory, except files with +/// [raw filenames](https://www.erlang.org/doc/apps/stdlib/unicode_usage.html#notes-about-raw-filenames). +/// +/// Returns a Result containing the list of filenames in the directory, or Reason +/// if the operation failed. +/// +/// ## Examples +/// +/// ```gleam +/// > list_directory("/tmp") +/// Ok(["FB01293B-8597-4359-80D5-130140A0C0DE","AlTest2.out"]) +/// +/// > list_directory("resume.docx") +/// Error(Enotdir) +/// ``` +/// +@deprecated("Use the simplifile package instead") +@external(erlang, "gleam_erlang_ffi", "list_directory") +pub fn list_directory(a: String) -> Result(List(String), Reason) + +/// Deletes a directory. +/// +/// The directory must be empty before it can be deleted. Returns a nil Success +/// or Reason if the operation failed. +/// +/// ## Examples +/// +/// ```gleam +/// > delete_directory("foo") +/// Ok(Nil) +/// +/// > delete_directory("does_not_exist/") +/// Error(Enoent) +/// ``` +/// +@deprecated("Use the simplifile package instead") +@external(erlang, "gleam_erlang_ffi", "delete_directory") +pub fn delete_directory(a: String) -> Result(Nil, Reason) + +/// Deletes a file or directory recursively. +/// +/// Returns a nil Success or Reason if the operation failed. +/// +/// ## Examples +/// +/// ```gleam +/// > recursive_delete("foo") +/// Ok(Nil) +/// +/// > recursive_delete("/bar") +/// Ok(Nil) +/// +/// > recursive_delete("does_not_exist/") +/// Error(Enoent) +/// ``` +/// +@deprecated("Use the simplifile package instead") +@external(erlang, "gleam_erlang_ffi", "recursive_delete") +pub fn recursive_delete(a: String) -> Result(Nil, Reason) + +/// Read the contents of the given file as a String +/// +/// Assumes the file is UTF-8 encoded. Returns a Result containing the file's +/// contents as a String if the operation was successful, or Reason if the file +/// operation failed. If the file is not UTF-8 encoded, the `NotUTF8` variant +/// will be returned. +/// +/// ## Examples +/// +/// ```gleam +/// > read("example.txt") +/// Ok("Hello, World!") +/// +/// > read(from: "example.txt") +/// Ok("Hello, World!") +/// +/// > read("does_not_exist.txt") +/// Error(Enoent) +/// +/// > read("cat.gif") +/// Error(NotUTF8) +/// ``` +/// +@deprecated("Use the simplifile package instead?") +pub fn read(from path: String) -> Result(String, Reason) { + path + |> do_read_bits() + |> result.then(fn(content) { + case bit_array.to_string(content) { + Ok(string) -> Ok(string) + Error(Nil) -> Error(NotUtf8) + } + }) +} + +/// Read the contents of the given file as a BitString +/// +/// Returns a Result containing the file's contents as a BitString if the +/// operation was successful, or Reason if the operation failed. +/// +/// ## Examples +/// +/// ```gleam +/// > read_bits("example.txt") +/// Ok(<<"Hello, World!">>) +/// +/// > read_bits(from: "cat.gif") +/// Ok(<<71,73,70,56,57,97,1,0,1,0,0,0,0,59>>) +/// +/// > read_bits("does_not_exist.txt") +/// Error(Enoent) +/// ``` +/// +@deprecated("Use the simplifile package instead") +pub fn read_bits(from path: String) -> Result(BitArray, Reason) { + do_read_bits(path) +} + +@external(erlang, "gleam_erlang_ffi", "read_file") +fn do_read_bits(a: path) -> Result(BitArray, Reason) + +/// Write the given String contents to a file of the given name. +/// +/// Returns a Result with Nil if the operation was successful or a Reason +/// otherwise. +/// +/// ## Examples +/// +/// ```gleam +/// > write("Hello, World!", "file.txt") +/// Ok(Nil) +/// +/// > write(to: "file.txt", contents: "Hello, World!") +/// Ok(Nil) +/// +/// > write("Hello, World!", "does_not_exist/file.txt") +/// Error(Enoent) +/// ``` +/// +@deprecated("Use the simplifile package instead") +pub fn write(contents contents: String, to path: String) -> Result(Nil, Reason) { + contents + |> bit_array.from_string + |> do_write_bits(path) +} + +/// Write the given BitString contents to a file of the given name. +/// +/// Returns a Result with Nil if the operation was successful or a Reason +/// otherwise. +/// +/// ## Examples +/// +/// ```gleam +/// > write_bits(<<71,73,70,56,57,97,1,0,1,0,0,0,0,59>>, "cat.gif") +/// Ok(Nil) +/// +/// > write_bits(to: "cat.gif", contents: <<71,73,70,56,57,97,1,0,1,0,0,0,0,59>>) +/// Ok(Nil) +/// +/// > write_bits(<<71,73,70,56,57,97,1,0,1,0,0,0,0,59>>, "does_not_exist/cat.gif") +/// Error(Enoent) +/// ``` +/// +@deprecated("Use the simplifile package instead") +pub fn write_bits( + contents contents: BitArray, + to path: String, +) -> Result(Nil, Reason) { + do_write_bits(contents, path) +} + +@external(erlang, "gleam_erlang_ffi", "write_file") +fn do_write_bits(a: BitArray, b: String) -> Result(Nil, Reason) + +/// Append the given String contents to a file of the given name. +/// +/// Returns a Result with Nil if the operation was successful or a Reason +/// otherwise. +/// +/// ## Examples +/// +/// ```gleam +/// > append("Hello, World!", "file.txt") +/// Ok(Nil) +/// +/// > append(to: "file.txt", contents: "Hello, World!") +/// Ok(Nil) +/// +/// > append("Hello, World!", "does_not_exist/file.txt") +/// Error(Enoent) +/// ``` +/// +@deprecated("Use the simplifile package instead") +pub fn append(contents contents: String, to path: String) -> Result(Nil, Reason) { + contents + |> bit_array.from_string + |> do_append_bits(path) +} + +/// Append the given BitString contents to a file of the given name. +/// +/// Returns a Result with Nil if the operation was successful or a Reason +/// otherwise. +/// +/// ## Examples +/// +/// ```gleam +/// > append_bits(<<71,73,70,56,57,97,1,0,1,0,0,0,0,59>>, "cat.gif") +/// Ok(Nil) +/// +/// > append_bits(to: "cat.gif", contents: <<71,73,70,56,57,97,1,0,1,0,0,0,0,59>>) +/// Ok(Nil) +/// +/// > append_bits(<<71,73,70,56,57,97,1,0,1,0,0,0,0,59>>, "does_not_exist/cat.gif") +/// Error(Enoent) +/// ``` +/// +pub fn append_bits( + contents contents: BitArray, + to path: String, +) -> Result(Nil, Reason) { + do_append_bits(contents, path) +} + +@external(erlang, "gleam_erlang_ffi", "append_file") +fn do_append_bits( + contents contents: BitArray, + path path: String, +) -> Result(Nil, Reason) + +/// Delete the given file. +/// +/// Returns a Result with Nil if the operation was successful or a Reason +/// otherwise. +/// +/// ## Examples +/// +/// ```gleam +/// > delete("file.txt") +/// Ok(Nil) +/// +/// > delete("does_not_exist.txt") +/// Error(Enoent) +/// ``` +/// +@deprecated("Use the simplifile package instead") +@external(erlang, "gleam_erlang_ffi", "delete_file") +pub fn delete(a: String) -> Result(Nil, Reason) diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/node.gleam b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/node.gleam new file mode 100644 index 0000000..339415c --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/node.gleam @@ -0,0 +1,62 @@ +import gleam/erlang/atom.{type Atom} + +pub type Node + +type DoNotLeak + +/// Return the current node. +/// +@external(erlang, "erlang", "node") +pub fn self() -> Node + +/// Return a list of all visible nodes in the cluster, not including the current +/// node. +/// +/// The current node can be included by calling `self()` and prepending the +/// result. +/// +/// ```gleam +/// let all_nodes = [node.self(), ..node.visible()] +/// ``` +/// +@external(erlang, "erlang", "nodes") +pub fn visible() -> List(Node) + +pub type ConnectError { + /// Was unable to connect to the node. + FailedToConnect + /// The local node is not alive, so it is not possible to connect to the other + /// node. + LocalNodeIsNotAlive +} + +// TODO: test unknown node +// TODO: test successfully connecting +/// Establish a connection to a node, so the nodes can send messages to each +/// other and any other connected nodes. +/// +/// Returns `Error(FailedToConnect)` if the node is not reachable. +/// +/// Returns `Error(LocalNodeIsNotAlive)` if the local node is not alive, meaning +/// it is not running in distributed mode. +/// +@external(erlang, "gleam_erlang_ffi", "connect_node") +pub fn connect(node: Atom) -> Result(Node, ConnectError) + +// TODO: test +/// Send a message to a named process on a given node. +/// +/// These messages are untyped, like regular Erlang messages. +/// +pub fn send(node: Node, name: Atom, message: message) -> Nil { + raw_send(#(name, node), message) + Nil +} + +@external(erlang, "erlang", "send") +fn raw_send(receiver: #(Atom, Node), message: message) -> DoNotLeak + +/// Convert a node to the atom of its name. +/// +@external(erlang, "gleam_erlang_ffi", "identity") +pub fn to_atom(node: Node) -> Atom diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/os.gleam b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/os.gleam new file mode 100644 index 0000000..e135974 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/os.gleam @@ -0,0 +1,95 @@ +//// Access to the shell's environment variables + +import gleam/map.{type Map} + +/// Returns the list of all available environment variables as a list of key, +/// tuples. +/// +/// ## Examples +/// +/// > get_all_env() +/// map.from_list([ +/// #("SHELL", "/bin/bash"), +/// #("PWD", "/home/j3rn"), +/// ... +/// ]) +/// +@external(erlang, "gleam_erlang_ffi", "get_all_env") +pub fn get_all_env() -> Map(String, String) + +/// Returns the value associated with the given environment variable name. +/// +/// ## Examples +/// +/// > get_env("SHELL") +/// "/bin/bash" +/// +/// > get_env(name: "PWD") +/// "/home/j3rn" +/// +@external(erlang, "gleam_erlang_ffi", "get_env") +pub fn get_env(name name: String) -> Result(String, Nil) + +/// Associates the given value with the given environment variable name. +/// +/// ## Examples +/// +/// > set_env("MYVAR", "MYVALUE") +/// Nil +/// > get_env("MYVAR") +/// "MYVALUE" +/// +/// > set_env(value: "MYVALUE", name: "MYVAR") +/// Nil +/// +@external(erlang, "gleam_erlang_ffi", "set_env") +pub fn set_env(name name: String, value value: String) -> Nil + +/// Removes the environment variable with the given name. +/// +/// Returns Nil regardless of whether the variable ever existed. +/// +/// ## Examples +/// +/// > get_env("MYVAR") +/// Ok("MYVALUE") +/// > unset_env("MYVAR") +/// Nil +/// > get_env("MYVAR") +/// Error(Nil) +/// +/// > unset_env(name: "MYVAR") +/// Nil +/// +@external(erlang, "gleam_erlang_ffi", "unset_env") +pub fn unset_env(name name: String) -> Nil + +/// Represents operating system kernels +pub type OsFamily { + // The family which includes modern versions of the Windows operating system. + WindowsNt + // The family of operating systems based on the open source Linux kernel. + Linux + // The family of Apple operating systems such as macOS and iOS. + Darwin + // The family of operating systems based on the FreeBSD kernel. + FreeBsd + // An operating system kernel other than Linux, Darwin, FreeBSD, or NT. + Other(String) +} + +/// Returns the kernel of the host operating system. +/// +/// Unknown kernels are reported as `Other(String)`; e.g. `Other("sunos")`. +/// +/// ## Examples +/// +/// > family() +/// Linux +/// > family() +/// Darwin +/// > family() +/// Other("sunos") +/// +@external(erlang, "gleam_erlang_ffi", "os_family") +pub fn family() -> OsFamily diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/process.gleam b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/process.gleam new file mode 100644 index 0000000..f660306 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/process.gleam @@ -0,0 +1,744 @@ +import gleam/string +import gleam/dynamic.{type Dynamic} +import gleam/erlang.{type Reference} +import gleam/erlang/atom.{type Atom} + +/// A `Pid` (or Process identifier) is a reference to an Erlang process. Each +/// process has a `Pid` and it is one of the lowest level building blocks of +/// inter-process communication in the Erlang and Gleam OTP frameworks. +/// +pub type Pid + +/// Get the `Pid` for the current process. +@external(erlang, "erlang", "self") +pub fn self() -> Pid + +/// Create a new Erlang process that runs concurrently to the creator. In other +/// languages this might be called a fibre, a green thread, or a coroutine. +/// +/// If `linked` is `True` then the created process is linked to the creator +/// process. When a process terminates an exit signal is sent to all other +/// processes that are linked to it, causing the process to either terminate or +/// have to handle the signal. +/// +/// More can be read about processes and links in the [Erlang documentation][1]. +/// +/// [1]: https://www.erlang.org/doc/reference_manual/processes.html +/// +pub fn start(running implementation: fn() -> anything, linked link: Bool) -> Pid { + case link { + True -> spawn_link(implementation) + False -> spawn(implementation) + } +} + +@external(erlang, "erlang", "spawn") +fn spawn(a: fn() -> anything) -> Pid + +@external(erlang, "erlang", "spawn_link") +fn spawn_link(a: fn() -> anything) -> Pid + +/// A `Subject` is a value that processes can use to send and receive messages +/// to and from each other in a well typed way. +/// +/// Each subject is "owned" by the process that created it. Any process can use +/// the `send` function to sent a message of the correct type to the process +/// that owns the subject, and the owner can use the `receive` function or the +/// `Selector` type to receive these messages. +/// +/// The `Subject` type is similar to the "channel" types found in other +/// languages and the "topic" concept found in some pub-sub systems. +/// +/// # Examples +/// +/// ```gleam +/// let subject = new_subject() +/// +/// // Send a message with the subject +/// send(subject, "Hello, Joe!") +/// +/// // Receive the message +/// receive(subject, within: 10) +/// ``` +/// +pub opaque type Subject(message) { + Subject(owner: Pid, tag: Reference) +} + +/// Create a new `Subject` owned by the current process. +/// +pub fn new_subject() -> Subject(message) { + Subject(owner: self(), tag: erlang.make_reference()) +} + +/// Get the owner process for a `Subject`. This is the process that created the +/// `Subject` and will receive messages sent with it. +/// +pub fn subject_owner(subject: Subject(message)) -> Pid { + subject.owner +} + +type DoNotLeak + +@external(erlang, "erlang", "send") +fn raw_send(a: Pid, b: message) -> DoNotLeak + +/// Send a message to a process using a `Subject`. The message must be of the +/// type that the `Subject` accepts. +/// +/// This function does not wait for the `Subject` owner process to call the +/// `receive` function, instead it returns once the message has been placed in +/// the process' mailbox. +/// +/// # Ordering +/// +/// If process P1 sends two messages to process P2 it is guaranteed that process +/// P1 will receive the messages in the order they were sent. +/// +/// If you wish to receive the messages in a different order you can send them +/// on two different subjects and the receiver function can call the `receive` +/// function for each subject in the desired order, or you can write some Erlang +/// code to perform a selective receive. +/// +/// # Examples +/// +/// ```gleam +/// let subject = new_subject() +/// send(subject, "Hello, Joe!") +/// ``` +/// +pub fn send(subject: Subject(message), message: message) -> Nil { + raw_send(subject.owner, #(subject.tag, message)) + Nil +} + +/// Receive a message that has been sent to current process using the `Subject`. +/// +/// If there is not an existing message for the `Subject` in the process' +/// mailbox or one does not arrive `within` the permitted timeout then the +/// `Error(Nil)` is returned. +/// +/// Only the process that is owner of the `Subject` can receive a message using +/// it. If a process that does not own the `Subject` attempts to receive with it +/// then it will not receive a message. +/// +/// To wait for messages from multiple `Subject`s at the same time see the +/// `Selector` type. +/// +pub fn receive( + from subject: Subject(message), + within milliseconds: Int, +) -> Result(message, Nil) { + new_selector() + |> selecting(subject, fn(x) { x }) + |> select(within: milliseconds) +} + +/// A type that enables a process to wait for messages from multiple `Subject`s +/// at the same time, returning whichever message arrives first. +/// +/// Used with the `new_selector`, `selecting`, and `select` functions. +/// +/// # Examples +/// +/// ```gleam +/// > let int_subject = new_subject() +/// > let float_subject = new_subject() +/// > send(int_subject, 1) +/// > +/// > let selector = +/// > new_selector() +/// > |> selecting(int_subject, int.to_string) +/// > |> selecting(float_subject, float.to_string) +/// > +/// > select(selector, 10) +/// Ok("1") +/// ``` +/// +pub type Selector(payload) + +/// Create a new `Selector` which can be used to receive messages on multiple +/// `Subject`s at once. +/// +@external(erlang, "gleam_erlang_ffi", "new_selector") +pub fn new_selector() -> Selector(payload) + +/// Receive a message that has been sent to current process using any of the +/// `Subject`s that have been added to the `Selector` with the `selecting` +/// function. +/// +/// If there is not an existing message for the `Selector` in the process' +/// mailbox or one does not arrive `within` the permitted timeout then the +/// `Error(Nil)` is returned. +/// +/// Only the process that is owner of the `Subject`s can receive a message using +/// them. If a process that does not own the a `Subject` attempts to receive +/// with it then it will not receive a message. +/// +/// To wait forever for the next message rather than for a limited amount of +/// time see the `select_forever` function. +/// +@external(erlang, "gleam_erlang_ffi", "select") +pub fn select( + from from: Selector(payload), + within within: Int, +) -> Result(payload, Nil) + +/// Similar to the `select` function but will wait forever for a message to +/// arrive rather than timing out after a specified amount of time. +/// +@external(erlang, "gleam_erlang_ffi", "select") +pub fn select_forever(from from: Selector(payload)) -> payload + +/// Add a transformation function to a selector. When a message is received +/// using this selector the transformation function is applied to the message. +/// +/// This function can be used to change the type of messages received and may +/// be useful when combined with the `merge_selector` function. +/// +@external(erlang, "gleam_erlang_ffi", "map_selector") +pub fn map_selector(a: Selector(a), b: fn(a) -> b) -> Selector(b) + +/// Merge one selector into another, producing a selector that contains the +/// message handlers of both. +/// +/// If a subject is handled by both selectors the handler function of the +/// second selector is used. +/// +@external(erlang, "gleam_erlang_ffi", "merge_selector") +pub fn merge_selector(a: Selector(a), b: Selector(a)) -> Selector(a) + +pub type ExitMessage { + ExitMessage(pid: Pid, reason: ExitReason) +} + +pub type ExitReason { + Normal + Killed + Abnormal(reason: String) +} + +/// Add a handler for trapped exit messages. In order for these messages to be +/// sent to the process when a linked process exits the process must call the +/// `trap_exit` beforehand. +/// +pub fn selecting_trapped_exits( + selector: Selector(a), + handler: fn(ExitMessage) -> a, +) -> Selector(a) { + let tag = atom.create_from_string("EXIT") + let handler = fn(message: #(Atom, Pid, Dynamic)) -> a { + let reason = message.2 + let normal = dynamic.from(Normal) + let killed = dynamic.from(Killed) + let reason = case dynamic.string(reason) { + _ if reason == normal -> Normal + _ if reason == killed -> Killed + Ok(reason) -> Abnormal(reason) + Error(_) -> Abnormal(string.inspect(reason)) + } + handler(ExitMessage(message.1, reason)) + } + insert_selector_handler(selector, #(tag, 3), handler) +} + +// TODO: implement in Gleam +/// Discard all messages in the current process' mailbox. +/// +/// Warning: This function may cause other processes to crash if they sent a +/// message to the current process and are waiting for a response, so use with +/// caution. +/// +@external(erlang, "gleam_erlang_ffi", "flush_messages") +pub fn flush_messages() -> Nil + +/// Add a new `Subject` to the `Selector` to that it's messages can be received. +/// +/// The `mapping` function provided with the `Subject` can be used to convert +/// the type of messages received using this `Subject`. This is useful for when +/// you wish to add multiple `Subject`s to a `Seletor` when they have differing +/// message types. If you do not wish to transform the incoming messages in any +/// way then the `identity` function can be given. +/// +pub fn selecting( + selector: Selector(payload), + for subject: Subject(message), + mapping transform: fn(message) -> payload, +) -> Selector(payload) { + let handler = fn(message: #(Reference, message)) { transform(message.1) } + insert_selector_handler(selector, #(subject.tag, 2), handler) +} + +/// Add a handler to a selector for 2 element tuple messages with a given tag +/// element in the first position. +/// +/// Typically you want to use the `selecting` function with a `Subject` instead, +/// but this function may be useful if you need to receive messages sent from +/// other BEAM languages that do not use the `Subject` type. +/// +pub fn selecting_record2( + selector: Selector(payload), + tag: tag, + mapping transform: fn(Dynamic) -> payload, +) -> Selector(payload) { + let handler = fn(message: #(tag, Dynamic)) { transform(message.1) } + insert_selector_handler(selector, #(tag, 2), handler) +} + +/// Add a handler to a selector for 3 element tuple messages with a given tag +/// element in the first position. +/// +/// Typically you want to use the `selecting` function with a `Subject` instead, +/// but this function may be useful if you need to receive messages sent from +/// other BEAM languages that do not use the `Subject` type. +/// +pub fn selecting_record3( + selector: Selector(payload), + tag: tag, + mapping transform: fn(Dynamic, Dynamic) -> payload, +) -> Selector(payload) { + let handler = fn(message: #(tag, Dynamic, Dynamic)) { + transform(message.1, message.2) + } + insert_selector_handler(selector, #(tag, 3), handler) +} + +/// Add a handler to a selector for 4 element tuple messages with a given tag +/// element in the first position. +/// +/// Typically you want to use the `selecting` function with a `Subject` instead, +/// but this function may be useful if you need to receive messages sent from +/// other BEAM languages that do not use the `Subject` type. +/// +pub fn selecting_record4( + selector: Selector(payload), + tag: tag, + mapping transform: fn(Dynamic, Dynamic, Dynamic) -> payload, +) -> Selector(payload) { + let handler = fn(message: #(tag, Dynamic, Dynamic, Dynamic)) { + transform(message.1, message.2, message.3) + } + insert_selector_handler(selector, #(tag, 4), handler) +} + +/// Add a handler to a selector for 5 element tuple messages with a given tag +/// element in the first position. +/// +/// Typically you want to use the `selecting` function with a `Subject` instead, +/// but this function may be useful if you need to receive messages sent from +/// other BEAM languages that do not use the `Subject` type. +/// +pub fn selecting_record5( + selector: Selector(payload), + tag: tag, + mapping transform: fn(Dynamic, Dynamic, Dynamic, Dynamic) -> payload, +) -> Selector(payload) { + let handler = fn(message: #(tag, Dynamic, Dynamic, Dynamic, Dynamic)) { + transform(message.1, message.2, message.3, message.4) + } + insert_selector_handler(selector, #(tag, 5), handler) +} + +/// Add a handler to a selector for 6 element tuple messages with a given tag +/// element in the first position. +/// +/// Typically you want to use the `selecting` function with a `Subject` instead, +/// but this function may be useful if you need to receive messages sent from +/// other BEAM languages that do not use the `Subject` type. +/// +pub fn selecting_record6( + selector: Selector(payload), + tag: tag, + mapping transform: fn(Dynamic, Dynamic, Dynamic, Dynamic, Dynamic) -> payload, +) -> Selector(payload) { + let handler = fn(message: #(tag, Dynamic, Dynamic, Dynamic, Dynamic, Dynamic)) { + transform(message.1, message.2, message.3, message.4, message.5) + } + insert_selector_handler(selector, #(tag, 6), handler) +} + +/// Add a handler to a selector for 7 element tuple messages with a given tag +/// element in the first position. +/// +/// Typically you want to use the `selecting` function with a `Subject` instead, +/// but this function may be useful if you need to receive messages sent from +/// other BEAM languages that do not use the `Subject` type. +/// +pub fn selecting_record7( + selector: Selector(payload), + tag: tag, + mapping transform: fn(Dynamic, Dynamic, Dynamic, Dynamic, Dynamic, Dynamic) -> + payload, +) -> Selector(payload) { + let handler = fn( + message: #(tag, Dynamic, Dynamic, Dynamic, Dynamic, Dynamic, Dynamic), + ) { + transform(message.1, message.2, message.3, message.4, message.5, message.6) + } + insert_selector_handler(selector, #(tag, 7), handler) +} + +/// Add a handler to a selector for 8 element tuple messages with a given tag +/// element in the first position. +/// +/// Typically you want to use the `selecting` function with a `Subject` instead, +/// but this function may be useful if you need to receive messages sent from +/// other BEAM languages that do not use the `Subject` type. +/// +pub fn selecting_record8( + selector: Selector(payload), + tag: tag, + mapping transform: fn( + Dynamic, + Dynamic, + Dynamic, + Dynamic, + Dynamic, + Dynamic, + Dynamic, + ) -> + payload, +) -> Selector(payload) { + let handler = fn( + message: #( + tag, + Dynamic, + Dynamic, + Dynamic, + Dynamic, + Dynamic, + Dynamic, + Dynamic, + ), + ) { + transform( + message.1, + message.2, + message.3, + message.4, + message.5, + message.6, + message.7, + ) + } + insert_selector_handler(selector, #(tag, 8), handler) +} + +type AnythingSelectorTag { + Anything +} + +/// Add a catch-all handler to a selector that will be used when no other +/// handler in a selector is suitable for a given message. +/// +/// This may be useful for when you want to ensure that any message in the inbox +/// is handled, or when you need to handle messages from other BEAM languages +/// which do not use subjects or record format messages. +/// +pub fn selecting_anything( + selector: Selector(payload), + mapping handler: fn(Dynamic) -> payload, +) -> Selector(payload) { + insert_selector_handler(selector, Anything, handler) +} + +@external(erlang, "gleam_erlang_ffi", "insert_selector_handler") +fn insert_selector_handler( + a: Selector(payload), + for for: tag, + mapping mapping: fn(message) -> payload, +) -> Selector(payload) + +/// Suspends the process calling this function for the specified number of +/// milliseconds. +/// +@external(erlang, "gleam_erlang_ffi", "sleep") +pub fn sleep(a: Int) -> Nil + +/// Suspends the process forever! This may be useful for suspending the main +/// process in a Gleam program when it has no more work to do but we want other +/// processes to continue to work. +/// +@external(erlang, "gleam_erlang_ffi", "sleep_forever") +pub fn sleep_forever() -> Nil + +/// Check to see whether the process for a given `Pid` is alive. +/// +/// See the [Erlang documentation][1] for more information. +/// +/// [1]: http://erlang.org/doc/man/erlang.html#is_process_alive-1 +/// +@external(erlang, "erlang", "is_process_alive") +pub fn is_alive(a: Pid) -> Bool + +type ProcessMonitorFlag { + Process +} + +@external(erlang, "erlang", "monitor") +fn erlang_monitor_process(a: ProcessMonitorFlag, b: Pid) -> Reference + +pub opaque type ProcessMonitor { + ProcessMonitor(tag: Reference) +} + +/// A message received when a monitored process exits. +/// +pub type ProcessDown { + ProcessDown(pid: Pid, reason: Dynamic) +} + +/// Start monitoring a process so that when the monitored process exits a +/// message is sent to the monitoring process. +/// +/// The message is only sent once, when the target process exits. If the +/// process was not alive when this function is called the message will never +/// be received. +/// +/// The down message can be received with a `Selector` and the +/// `selecting_process_down` function. +/// +/// The process can be demonitored with the `demonitor_process` function. +/// +pub fn monitor_process(pid: Pid) -> ProcessMonitor { + Process + |> erlang_monitor_process(pid) + |> ProcessMonitor +} + +/// Add a `ProcessMonitor` to a `Selector` so that the `ProcessDown` message can +/// be received using the `Selector` and the `select` function. +/// +pub fn selecting_process_down( + selector: Selector(payload), + monitor: ProcessMonitor, + mapping: fn(ProcessDown) -> payload, +) -> Selector(payload) { + insert_selector_handler(selector, monitor.tag, mapping) +} + +/// Remove the monitor for a process so that when the monitor process exits a +/// `ProcessDown` message is not sent to the monitoring process. +/// +/// If the message has already been sent it is removed from the monitoring +/// process' mailbox. +/// +@external(erlang, "gleam_erlang_ffi", "demonitor") +pub fn demonitor_process(monitor monitor: ProcessMonitor) -> Nil + +/// An error returned when making a call to a process. +/// +pub type CallError(msg) { + /// The process being called exited before it sent a response. + /// + CalleeDown(reason: Dynamic) + + /// The process being called did not response within the permitted amount of + /// time. + /// + CallTimeout +} + +// This function is based off of Erlang's gen:do_call/4. +/// Send a message to a process and wait for a reply. +/// +/// If the receiving process exits or does not reply within the allowed amount +/// of time then an error is returned. +/// +pub fn try_call( + subject: Subject(request), + make_request: fn(Subject(response)) -> request, + within timeout: Int, +) -> Result(response, CallError(response)) { + let reply_subject = new_subject() + + // Monitor the callee process so we can tell if it goes down (meaning we + // won't get a reply) + let monitor = monitor_process(subject_owner(subject)) + + // Send the request to the process over the channel + send(subject, make_request(reply_subject)) + + // Await a reply or handle failure modes (timeout, process down, etc) + let result = + new_selector() + |> selecting(reply_subject, Ok) + |> selecting_process_down( + monitor, + fn(down: ProcessDown) { Error(CalleeDown(reason: down.reason)) }, + ) + |> select(timeout) + + // Demonitor the process and close the channels as we're done + demonitor_process(monitor) + + // Prepare an appropriate error (if present) for the caller + case result { + Error(Nil) -> Error(CallTimeout) + Ok(res) -> res + } +} + +/// Send a message to a process and wait for a reply. +/// +/// If the receiving process exits or does not reply within the allowed amount +/// of time the calling process crashes. If you wish an error to be returned +/// instead see the `try_call` function. +/// +pub fn call( + subject: Subject(request), + make_request: fn(Subject(response)) -> request, + within timeout: Int, +) -> response { + let assert Ok(resp) = try_call(subject, make_request, timeout) + resp +} + +/// Creates a link between the calling process and another process. +/// +/// When a process crashes any linked processes will also crash. This is useful +/// to ensure that groups of processes that depend on each other all either +/// succeed or fail together. +/// +/// Returns `True` if the link was created successfully, returns `False` if the +/// process was not alive and as such could not be linked. +/// +@external(erlang, "gleam_erlang_ffi", "link") +pub fn link(pid pid: Pid) -> Bool + +@external(erlang, "erlang", "unlink") +fn erlang_unlink(pid pid: Pid) -> Bool + +/// Removes any existing link between the caller process and the target process. +/// +pub fn unlink(pid: Pid) -> Nil { + erlang_unlink(pid) + Nil +} + +pub type Timer + +@external(erlang, "erlang", "send_after") +fn erlang_send_after(a: Int, b: Pid, c: msg) -> Timer + +/// Send a message over a channel after a specified number of milliseconds. +/// +pub fn send_after(subject: Subject(msg), delay: Int, message: msg) -> Timer { + erlang_send_after(delay, subject.owner, #(subject.tag, message)) +} + +@external(erlang, "erlang", "cancel_timer") +fn erlang_cancel_timer(a: Timer) -> Dynamic + +/// Values returned when a timer is cancelled. +/// +pub type Cancelled { + /// The timer could not be found. It likely has already triggered. + /// + TimerNotFound + + /// The timer was found and cancelled before it triggered. + /// + /// The amount of remaining time before the timer was due to be triggered is + /// returned in milliseconds. + /// + Cancelled(time_remaining: Int) +} + +/// Cancel a given timer, causing it not to trigger if it has not done already. +/// +pub fn cancel_timer(timer: Timer) -> Cancelled { + case dynamic.int(erlang_cancel_timer(timer)) { + Ok(i) -> Cancelled(i) + Error(_) -> TimerNotFound + } +} + +type KillFlag { + Kill +} + +@external(erlang, "erlang", "exit") +fn erlang_kill(to to: Pid, because because: KillFlag) -> Bool + +// Go, my pretties. Kill! Kill! +// - Bart Simpson +// +/// Send an untrappable `kill` exit signal to the target process. +/// +/// See the documentation for the Erlang [`erlang:exit`][1] function for more +/// information. +/// +/// [1]: https://erlang.org/doc/man/erlang.html#exit-1 +/// +pub fn kill(pid: Pid) -> Nil { + erlang_kill(pid, Kill) + Nil +} + +@external(erlang, "erlang", "exit") +fn erlang_send_exit(to to: Pid, because because: whatever) -> Bool + +// TODO: test +/// Sends an exit signal to a process, indicating that the process is to shut +/// down. +/// +/// See the [Erlang documentation][erl] for more information. +/// [erl]: http://erlang.org/doc/man/erlang.html#exit-2 +/// +pub fn send_exit(to pid: Pid) -> Nil { + erlang_send_exit(pid, Normal) + Nil +} + +/// Sends an exit signal to a process, indicating that the process is to shut +/// down due to an abnormal reason such as a failure. +/// +/// See the [Erlang documentation][erl] for more information. +/// [erl]: http://erlang.org/doc/man/erlang.html#exit-2 +/// +pub fn send_abnormal_exit(pid: Pid, reason: String) -> Nil { + erlang_send_exit(pid, Abnormal(reason)) + Nil +} + +/// Set whether the current process is to trap exit signals or not. +/// +/// When not trapping exits if a linked process crashes the exit signal +/// propagates to the process which will also crash. +/// This is the normal behaviour before this function is called. +/// +/// When trapping exits (after this function is called) if a linked process +/// crashes an exit message is sent to the process instead. These messages can +/// be handled with the `selecting_trapped_exits` function. +/// +@external(erlang, "gleam_erlang_ffi", "trap_exits") +pub fn trap_exits(a: Bool) -> Nil + +/// Register a process under a given name, allowing it to be looked up using +/// the `named` function. +/// +/// This function will return an error under the following conditions: +/// - The process for the pid no longer exists. +/// - The name has already been registered. +/// - The process already has a name. +/// - The name is the atom `undefined`, which is reserved by Erlang. +/// +@external(erlang, "gleam_erlang_ffi", "register_process") +pub fn register(pid: Pid, name: Atom) -> Result(Nil, Nil) + +/// Un-register a process name, after which the process can no longer be looked +/// up by that name, and both the name and the process can be re-used in other +/// registrations. +/// +/// It is possible to un-register process that are not from your application, +/// including those from Erlang/OTP itself. This is not recommended and will +/// likely result in undesirable behaviour and crashes. +/// +@external(erlang, "gleam_erlang_ffi", "unregister_process") +pub fn unregister(name: Atom) -> Result(Nil, Nil) + +/// Look up a process by name, returning the pid if it exists. +/// +@external(erlang, "gleam_erlang_ffi", "process_named") +pub fn named(name: Atom) -> Result(Pid, Nil) diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam@erlang.erl b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang.erl new file mode 100644 index 0000000..14a5538 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang.erl @@ -0,0 +1,90 @@ +-module(gleam@erlang). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([format/1, term_to_binary/1, get_line/1, system_time/1, erlang_timestamp/0, rescue/1, binary_to_term/1, unsafe_binary_to_term/1, start_arguments/0, ensure_all_started/1, make_reference/0, priv_directory/1]). +-export_type([safe/0, get_line_error/0, time_unit/0, crash/0, ensure_all_started_error/0, reference_/0]). + +-type safe() :: safe. + +-type get_line_error() :: eof | no_data. + +-type time_unit() :: second | millisecond | microsecond | nanosecond. + +-type crash() :: {exited, gleam@dynamic:dynamic_()} | + {thrown, gleam@dynamic:dynamic_()} | + {errored, gleam@dynamic:dynamic_()}. + +-type ensure_all_started_error() :: {unknown_application, + gleam@erlang@atom:atom_()} | + {application_failed_to_start, + gleam@erlang@atom:atom_(), + gleam@dynamic:dynamic_()}. + +-type reference_() :: any(). + +-spec format(any()) -> binary(). +format(Term) -> + unicode:characters_to_binary(io_lib:format(<<"~p"/utf8>>, [Term])). + +-spec term_to_binary(any()) -> bitstring(). +term_to_binary(A) -> + erlang:term_to_binary(A). + +-spec get_line(binary()) -> {ok, binary()} | {error, get_line_error()}. +get_line(Prompt) -> + gleam_erlang_ffi:get_line(Prompt). + +-spec system_time(time_unit()) -> integer(). +system_time(A) -> + os:system_time(A). + +-spec erlang_timestamp() -> {integer(), integer(), integer()}. +erlang_timestamp() -> + os:timestamp(). + +-spec rescue(fun(() -> FHH)) -> {ok, FHH} | {error, crash()}. +rescue(A) -> + gleam_erlang_ffi:rescue(A). + +-spec binary_to_term(bitstring()) -> {ok, gleam@dynamic:dynamic_()} | + {error, nil}. +binary_to_term(Binary) -> + case gleam_erlang_ffi:rescue( + fun() -> erlang:binary_to_term(Binary, [safe]) end + ) of + {ok, Term} -> + {ok, Term}; + + {error, _} -> + {error, nil} + end. + +-spec unsafe_binary_to_term(bitstring()) -> {ok, gleam@dynamic:dynamic_()} | + {error, nil}. +unsafe_binary_to_term(Binary) -> + case gleam_erlang_ffi:rescue(fun() -> erlang:binary_to_term(Binary, []) end) of + {ok, Term} -> + {ok, Term}; + + {error, _} -> + {error, nil} + end. + +-spec start_arguments() -> list(binary()). +start_arguments() -> + _pipe = init:get_plain_arguments(), + gleam@list:map(_pipe, fun unicode:characters_to_binary/1). + +-spec ensure_all_started(gleam@erlang@atom:atom_()) -> {ok, + list(gleam@erlang@atom:atom_())} | + {error, ensure_all_started_error()}. +ensure_all_started(Application) -> + gleam_erlang_ffi:ensure_all_started(Application). + +-spec make_reference() -> reference_(). +make_reference() -> + erlang:make_ref(). + +-spec priv_directory(binary()) -> {ok, binary()} | {error, nil}. +priv_directory(Name) -> + gleam_erlang_ffi:priv_directory(Name). diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@atom.erl b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@atom.erl new file mode 100644 index 0000000..e9ad530 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@atom.erl @@ -0,0 +1,26 @@ +-module(gleam@erlang@atom). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([from_string/1, create_from_string/1, to_string/1, from_dynamic/1]). +-export_type([atom_/0, from_string_error/0]). + +-type atom_() :: any(). + +-type from_string_error() :: atom_not_loaded. + +-spec from_string(binary()) -> {ok, atom_()} | {error, from_string_error()}. +from_string(A) -> + gleam_erlang_ffi:atom_from_string(A). + +-spec create_from_string(binary()) -> atom_(). +create_from_string(A) -> + erlang:binary_to_atom(A). + +-spec to_string(atom_()) -> binary(). +to_string(A) -> + erlang:atom_to_binary(A). + +-spec from_dynamic(gleam@dynamic:dynamic_()) -> {ok, atom_()} | + {error, list(gleam@dynamic:decode_error())}. +from_dynamic(From) -> + gleam_erlang_ffi:atom_from_dynamic(From). diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@charlist.erl b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@charlist.erl new file mode 100644 index 0000000..9f9c0fa --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@charlist.erl @@ -0,0 +1,15 @@ +-module(gleam@erlang@charlist). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([to_string/1, from_string/1]). +-export_type([charlist/0]). + +-type charlist() :: any(). + +-spec to_string(charlist()) -> binary(). +to_string(A) -> + unicode:characters_to_binary(A). + +-spec from_string(binary()) -> charlist(). +from_string(A) -> + unicode:characters_to_list(A). diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@file.erl b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@file.erl new file mode 100644 index 0000000..1fe6628 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@file.erl @@ -0,0 +1,190 @@ +-module(gleam@erlang@file). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([file_info/1, link_info/1, is_directory/1, is_regular/1, file_exists/1, link_exists/1, make_directory/1, list_directory/1, delete_directory/1, recursive_delete/1, read/1, read_bits/1, write/2, write_bits/2, append/2, append_bits/2, delete/1]). +-export_type([reason/0, file_type/0, access/0, file_info/0]). + +-type reason() :: eacces | + eagain | + ebadf | + ebadmsg | + ebusy | + edeadlk | + edeadlock | + edquot | + eexist | + efault | + efbig | + eftype | + eintr | + einval | + eio | + eisdir | + eloop | + emfile | + emlink | + emultihop | + enametoolong | + enfile | + enobufs | + enodev | + enolck | + enolink | + enoent | + enomem | + enospc | + enosr | + enostr | + enosys | + enotblk | + enotdir | + enotsup | + enxio | + eopnotsupp | + eoverflow | + eperm | + epipe | + erange | + erofs | + espipe | + esrch | + estale | + etxtbsy | + exdev | + not_utf8. + +-type file_type() :: device | directory | other | regular | symlink. + +-type access() :: no_access | read | read_write | write. + +-type file_info() :: {file_info, + integer(), + file_type(), + access(), + integer(), + integer(), + integer(), + integer(), + integer(), + integer(), + integer(), + integer(), + integer(), + integer()}. + +-spec file_info(binary()) -> {ok, file_info()} | {error, reason()}. +file_info(A) -> + gleam_erlang_ffi:file_info(A). + +-spec link_info(binary()) -> {ok, file_info()} | {error, reason()}. +link_info(A) -> + gleam_erlang_ffi:link_info(A). + +-spec is_directory(binary()) -> {ok, boolean()} | {error, reason()}. +is_directory(Path) -> + gleam@result:map( + gleam_erlang_ffi:file_info(Path), + fun(_use0) -> + {file_info, _, File_type, _, _, _, _, _, _, _, _, _, _, _} = _use0, + File_type =:= directory + end + ). + +-spec is_regular(binary()) -> {ok, boolean()} | {error, reason()}. +is_regular(Path) -> + gleam@result:map( + gleam_erlang_ffi:file_info(Path), + fun(_use0) -> + {file_info, _, File_type, _, _, _, _, _, _, _, _, _, _, _} = _use0, + File_type =:= regular + end + ). + +-spec file_exists(binary()) -> {ok, boolean()} | {error, reason()}. +file_exists(Path) -> + Result = begin + _pipe = Path, + _pipe@1 = gleam_erlang_ffi:file_info(_pipe), + gleam@result:replace(_pipe@1, true) + end, + case Result of + {error, enoent} -> + {ok, false}; + + _ -> + Result + end. + +-spec link_exists(binary()) -> {ok, boolean()} | {error, reason()}. +link_exists(Path) -> + Result = begin + _pipe = Path, + _pipe@1 = gleam_erlang_ffi:link_info(_pipe), + gleam@result:replace(_pipe@1, true) + end, + case Result of + {error, enoent} -> + {ok, false}; + + _ -> + Result + end. + +-spec make_directory(binary()) -> {ok, nil} | {error, reason()}. +make_directory(A) -> + gleam_erlang_ffi:make_directory(A). + +-spec list_directory(binary()) -> {ok, list(binary())} | {error, reason()}. +list_directory(A) -> + gleam_erlang_ffi:list_directory(A). + +-spec delete_directory(binary()) -> {ok, nil} | {error, reason()}. +delete_directory(A) -> + gleam_erlang_ffi:delete_directory(A). + +-spec recursive_delete(binary()) -> {ok, nil} | {error, reason()}. +recursive_delete(A) -> + gleam_erlang_ffi:recursive_delete(A). + +-spec read(binary()) -> {ok, binary()} | {error, reason()}. +read(Path) -> + _pipe = Path, + _pipe@1 = gleam_erlang_ffi:read_file(_pipe), + gleam@result:then( + _pipe@1, + fun(Content) -> case gleam@bit_array:to_string(Content) of + {ok, String} -> + {ok, String}; + + {error, nil} -> + {error, not_utf8} + end end + ). + +-spec read_bits(binary()) -> {ok, bitstring()} | {error, reason()}. +read_bits(Path) -> + gleam_erlang_ffi:read_file(Path). + +-spec write(binary(), binary()) -> {ok, nil} | {error, reason()}. +write(Contents, Path) -> + _pipe = Contents, + _pipe@1 = gleam_stdlib:identity(_pipe), + gleam_erlang_ffi:write_file(_pipe@1, Path). + +-spec write_bits(bitstring(), binary()) -> {ok, nil} | {error, reason()}. +write_bits(Contents, Path) -> + gleam_erlang_ffi:write_file(Contents, Path). + +-spec append(binary(), binary()) -> {ok, nil} | {error, reason()}. +append(Contents, Path) -> + _pipe = Contents, + _pipe@1 = gleam_stdlib:identity(_pipe), + gleam_erlang_ffi:append_file(_pipe@1, Path). + +-spec append_bits(bitstring(), binary()) -> {ok, nil} | {error, reason()}. +append_bits(Contents, Path) -> + gleam_erlang_ffi:append_file(Contents, Path). + +-spec delete(binary()) -> {ok, nil} | {error, reason()}. +delete(A) -> + gleam_erlang_ffi:delete_file(A). diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@node.erl b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@node.erl new file mode 100644 index 0000000..f57d029 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@node.erl @@ -0,0 +1,33 @@ +-module(gleam@erlang@node). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([self/0, visible/0, connect/1, send/3, to_atom/1]). +-export_type([node_/0, do_not_leak/0, connect_error/0]). + +-type node_() :: any(). + +-type do_not_leak() :: any(). + +-type connect_error() :: failed_to_connect | local_node_is_not_alive. + +-spec self() -> node_(). +self() -> + erlang:node(). + +-spec visible() -> list(node_()). +visible() -> + erlang:nodes(). + +-spec connect(gleam@erlang@atom:atom_()) -> {ok, node_()} | + {error, connect_error()}. +connect(Node) -> + gleam_erlang_ffi:connect_node(Node). + +-spec send(node_(), gleam@erlang@atom:atom_(), any()) -> nil. +send(Node, Name, Message) -> + erlang:send({Name, Node}, Message), + nil. + +-spec to_atom(node_()) -> gleam@erlang@atom:atom_(). +to_atom(Node) -> + gleam_erlang_ffi:identity(Node). diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@os.erl b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@os.erl new file mode 100644 index 0000000..6604255 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@os.erl @@ -0,0 +1,27 @@ +-module(gleam@erlang@os). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([get_all_env/0, get_env/1, set_env/2, unset_env/1, family/0]). +-export_type([os_family/0]). + +-type os_family() :: windows_nt | linux | darwin | free_bsd | {other, binary()}. + +-spec get_all_env() -> gleam@map:map_(binary(), binary()). +get_all_env() -> + gleam_erlang_ffi:get_all_env(). + +-spec get_env(binary()) -> {ok, binary()} | {error, nil}. +get_env(Name) -> + gleam_erlang_ffi:get_env(Name). + +-spec set_env(binary(), binary()) -> nil. +set_env(Name, Value) -> + gleam_erlang_ffi:set_env(Name, Value). + +-spec unset_env(binary()) -> nil. +unset_env(Name) -> + gleam_erlang_ffi:unset_env(Name). + +-spec family() -> os_family(). +family() -> + gleam_erlang_ffi:os_family(). diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@process.erl b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@process.erl new file mode 100644 index 0000000..fc8e0ff --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@process.erl @@ -0,0 +1,374 @@ +-module(gleam@erlang@process). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([self/0, start/2, new_subject/0, subject_owner/1, send/2, new_selector/0, select/2, select_forever/1, map_selector/2, merge_selector/2, flush_messages/0, selecting_trapped_exits/2, selecting/3, 'receive'/2, selecting_record2/3, selecting_record3/3, selecting_record4/3, selecting_record5/3, selecting_record6/3, selecting_record7/3, selecting_record8/3, selecting_anything/2, sleep/1, sleep_forever/0, is_alive/1, monitor_process/1, selecting_process_down/3, demonitor_process/1, try_call/3, call/3, link/1, unlink/1, send_after/3, cancel_timer/1, kill/1, send_exit/1, send_abnormal_exit/2, trap_exits/1, register/2, unregister/1, named/1]). +-export_type([pid_/0, subject/1, do_not_leak/0, selector/1, exit_message/0, exit_reason/0, anything_selector_tag/0, process_monitor_flag/0, process_monitor/0, process_down/0, call_error/1, timer/0, cancelled/0, kill_flag/0]). + +-type pid_() :: any(). + +-opaque subject(FJD) :: {subject, pid_(), gleam@erlang:reference_()} | + {gleam_phantom, FJD}. + +-type do_not_leak() :: any(). + +-type selector(FJE) :: any() | {gleam_phantom, FJE}. + +-type exit_message() :: {exit_message, pid_(), exit_reason()}. + +-type exit_reason() :: normal | killed | {abnormal, binary()}. + +-type anything_selector_tag() :: anything. + +-type process_monitor_flag() :: process. + +-opaque process_monitor() :: {process_monitor, gleam@erlang:reference_()}. + +-type process_down() :: {process_down, pid_(), gleam@dynamic:dynamic_()}. + +-type call_error(FJF) :: {callee_down, gleam@dynamic:dynamic_()} | + call_timeout | + {gleam_phantom, FJF}. + +-type timer() :: any(). + +-type cancelled() :: timer_not_found | {cancelled, integer()}. + +-type kill_flag() :: kill. + +-spec self() -> pid_(). +self() -> + erlang:self(). + +-spec start(fun(() -> any()), boolean()) -> pid_(). +start(Implementation, Link) -> + case Link of + true -> + erlang:spawn_link(Implementation); + + false -> + erlang:spawn(Implementation) + end. + +-spec new_subject() -> subject(any()). +new_subject() -> + {subject, erlang:self(), erlang:make_ref()}. + +-spec subject_owner(subject(any())) -> pid_(). +subject_owner(Subject) -> + erlang:element(2, Subject). + +-spec send(subject(FJO), FJO) -> nil. +send(Subject, Message) -> + erlang:send( + erlang:element(2, Subject), + {erlang:element(3, Subject), Message} + ), + nil. + +-spec new_selector() -> selector(any()). +new_selector() -> + gleam_erlang_ffi:new_selector(). + +-spec select(selector(FJW), integer()) -> {ok, FJW} | {error, nil}. +select(From, Within) -> + gleam_erlang_ffi:select(From, Within). + +-spec select_forever(selector(FKA)) -> FKA. +select_forever(From) -> + gleam_erlang_ffi:select(From). + +-spec map_selector(selector(FKC), fun((FKC) -> FKE)) -> selector(FKE). +map_selector(A, B) -> + gleam_erlang_ffi:map_selector(A, B). + +-spec merge_selector(selector(FKG), selector(FKG)) -> selector(FKG). +merge_selector(A, B) -> + gleam_erlang_ffi:merge_selector(A, B). + +-spec flush_messages() -> nil. +flush_messages() -> + gleam_erlang_ffi:flush_messages(). + +-spec selecting_trapped_exits(selector(FKK), fun((exit_message()) -> FKK)) -> selector(FKK). +selecting_trapped_exits(Selector, Handler) -> + Tag = erlang:binary_to_atom(<<"EXIT"/utf8>>), + Handler@1 = fun(Message) -> + Reason = erlang:element(3, Message), + Normal = gleam@dynamic:from(normal), + Killed = gleam@dynamic:from(killed), + Reason@2 = case gleam@dynamic:string(Reason) of + _ when Reason =:= Normal -> + normal; + + _ when Reason =:= Killed -> + killed; + + {ok, Reason@1} -> + {abnormal, Reason@1}; + + {error, _} -> + {abnormal, gleam@string:inspect(Reason)} + end, + Handler({exit_message, erlang:element(2, Message), Reason@2}) + end, + gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 3}, Handler@1). + +-spec selecting(selector(FKN), subject(FKP), fun((FKP) -> FKN)) -> selector(FKN). +selecting(Selector, Subject, Transform) -> + Handler = fun(Message) -> Transform(erlang:element(2, Message)) end, + gleam_erlang_ffi:insert_selector_handler( + Selector, + {erlang:element(3, Subject), 2}, + Handler + ). + +-spec 'receive'(subject(FJQ), integer()) -> {ok, FJQ} | {error, nil}. +'receive'(Subject, Milliseconds) -> + _pipe = gleam_erlang_ffi:new_selector(), + _pipe@1 = selecting(_pipe, Subject, fun(X) -> X end), + gleam_erlang_ffi:select(_pipe@1, Milliseconds). + +-spec selecting_record2( + selector(FKS), + any(), + fun((gleam@dynamic:dynamic_()) -> FKS) +) -> selector(FKS). +selecting_record2(Selector, Tag, Transform) -> + Handler = fun(Message) -> Transform(erlang:element(2, Message)) end, + gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 2}, Handler). + +-spec selecting_record3( + selector(FKW), + any(), + fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> FKW) +) -> selector(FKW). +selecting_record3(Selector, Tag, Transform) -> + Handler = fun(Message) -> + Transform(erlang:element(2, Message), erlang:element(3, Message)) + end, + gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 3}, Handler). + +-spec selecting_record4( + selector(FLA), + any(), + fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> FLA) +) -> selector(FLA). +selecting_record4(Selector, Tag, Transform) -> + Handler = fun(Message) -> + Transform( + erlang:element(2, Message), + erlang:element(3, Message), + erlang:element(4, Message) + ) + end, + gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 4}, Handler). + +-spec selecting_record5( + selector(FLE), + any(), + fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> FLE) +) -> selector(FLE). +selecting_record5(Selector, Tag, Transform) -> + Handler = fun(Message) -> + Transform( + erlang:element(2, Message), + erlang:element(3, Message), + erlang:element(4, Message), + erlang:element(5, Message) + ) + end, + gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 5}, Handler). + +-spec selecting_record6( + selector(FLI), + any(), + fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> FLI) +) -> selector(FLI). +selecting_record6(Selector, Tag, Transform) -> + Handler = fun(Message) -> + Transform( + erlang:element(2, Message), + erlang:element(3, Message), + erlang:element(4, Message), + erlang:element(5, Message), + erlang:element(6, Message) + ) + end, + gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 6}, Handler). + +-spec selecting_record7( + selector(FLM), + any(), + fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> FLM) +) -> selector(FLM). +selecting_record7(Selector, Tag, Transform) -> + Handler = fun(Message) -> + Transform( + erlang:element(2, Message), + erlang:element(3, Message), + erlang:element(4, Message), + erlang:element(5, Message), + erlang:element(6, Message), + erlang:element(7, Message) + ) + end, + gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 7}, Handler). + +-spec selecting_record8( + selector(FLQ), + any(), + fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> FLQ) +) -> selector(FLQ). +selecting_record8(Selector, Tag, Transform) -> + Handler = fun(Message) -> + Transform( + erlang:element(2, Message), + erlang:element(3, Message), + erlang:element(4, Message), + erlang:element(5, Message), + erlang:element(6, Message), + erlang:element(7, Message), + erlang:element(8, Message) + ) + end, + gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 8}, Handler). + +-spec selecting_anything(selector(FLU), fun((gleam@dynamic:dynamic_()) -> FLU)) -> selector(FLU). +selecting_anything(Selector, Handler) -> + gleam_erlang_ffi:insert_selector_handler(Selector, anything, Handler). + +-spec sleep(integer()) -> nil. +sleep(A) -> + gleam_erlang_ffi:sleep(A). + +-spec sleep_forever() -> nil. +sleep_forever() -> + gleam_erlang_ffi:sleep_forever(). + +-spec is_alive(pid_()) -> boolean(). +is_alive(A) -> + erlang:is_process_alive(A). + +-spec monitor_process(pid_()) -> process_monitor(). +monitor_process(Pid) -> + _pipe = process, + _pipe@1 = erlang:monitor(_pipe, Pid), + {process_monitor, _pipe@1}. + +-spec selecting_process_down( + selector(FMC), + process_monitor(), + fun((process_down()) -> FMC) +) -> selector(FMC). +selecting_process_down(Selector, Monitor, Mapping) -> + gleam_erlang_ffi:insert_selector_handler( + Selector, + erlang:element(2, Monitor), + Mapping + ). + +-spec demonitor_process(process_monitor()) -> nil. +demonitor_process(Monitor) -> + gleam_erlang_ffi:demonitor(Monitor). + +-spec try_call(subject(FMF), fun((subject(FMH)) -> FMF), integer()) -> {ok, FMH} | + {error, call_error(FMH)}. +try_call(Subject, Make_request, Timeout) -> + Reply_subject = new_subject(), + Monitor = monitor_process(subject_owner(Subject)), + send(Subject, Make_request(Reply_subject)), + Result = begin + _pipe = gleam_erlang_ffi:new_selector(), + _pipe@1 = selecting( + _pipe, + Reply_subject, + fun(Field@0) -> {ok, Field@0} end + ), + _pipe@2 = selecting_process_down( + _pipe@1, + Monitor, + fun(Down) -> {error, {callee_down, erlang:element(3, Down)}} end + ), + gleam_erlang_ffi:select(_pipe@2, Timeout) + end, + gleam_erlang_ffi:demonitor(Monitor), + case Result of + {error, nil} -> + {error, call_timeout}; + + {ok, Res} -> + Res + end. + +-spec call(subject(FMM), fun((subject(FMO)) -> FMM), integer()) -> FMO. +call(Subject, Make_request, Timeout) -> + _assert_subject = try_call(Subject, Make_request, Timeout), + {ok, Resp} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam/erlang/process"/utf8>>, + function => <<"call"/utf8>>, + line => 593}) + end, + Resp. + +-spec link(pid_()) -> boolean(). +link(Pid) -> + gleam_erlang_ffi:link(Pid). + +-spec unlink(pid_()) -> nil. +unlink(Pid) -> + erlang:unlink(Pid), + nil. + +-spec send_after(subject(FMR), integer(), FMR) -> timer(). +send_after(Subject, Delay, Message) -> + erlang:send_after( + Delay, + erlang:element(2, Subject), + {erlang:element(3, Subject), Message} + ). + +-spec cancel_timer(timer()) -> cancelled(). +cancel_timer(Timer) -> + case gleam@dynamic:int(erlang:cancel_timer(Timer)) of + {ok, I} -> + {cancelled, I}; + + {error, _} -> + timer_not_found + end. + +-spec kill(pid_()) -> nil. +kill(Pid) -> + erlang:exit(Pid, kill), + nil. + +-spec send_exit(pid_()) -> nil. +send_exit(Pid) -> + erlang:exit(Pid, normal), + nil. + +-spec send_abnormal_exit(pid_(), binary()) -> nil. +send_abnormal_exit(Pid, Reason) -> + erlang:exit(Pid, {abnormal, Reason}), + nil. + +-spec trap_exits(boolean()) -> nil. +trap_exits(A) -> + gleam_erlang_ffi:trap_exits(A). + +-spec register(pid_(), gleam@erlang@atom:atom_()) -> {ok, nil} | {error, nil}. +register(Pid, Name) -> + gleam_erlang_ffi:register_process(Pid, Name). + +-spec unregister(gleam@erlang@atom:atom_()) -> {ok, nil} | {error, nil}. +unregister(Name) -> + gleam_erlang_ffi:unregister_process(Name). + +-spec named(gleam@erlang@atom:atom_()) -> {ok, pid_()} | {error, nil}. +named(Name) -> + gleam_erlang_ffi:process_named(Name). diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam_erlang.app.src b/aoc2023/build/packages/gleam_erlang/src/gleam_erlang.app.src new file mode 100644 index 0000000..bb1b8e6 --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/src/gleam_erlang.app.src @@ -0,0 +1,14 @@ +{application, gleam_erlang, [ + {vsn, "0.23.1"}, + {applications, [gleam_stdlib, + gleeunit]}, + {description, "A Gleam library for working with Erlang"}, + {modules, [gleam@erlang, + gleam@erlang@atom, + gleam@erlang@charlist, + gleam@erlang@file, + gleam@erlang@node, + gleam@erlang@os, + gleam@erlang@process]}, + {registered, []} +]}. diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam_erlang_ffi.erl b/aoc2023/build/packages/gleam_erlang/src/gleam_erlang_ffi.erl new file mode 100644 index 0000000..872126f --- /dev/null +++ b/aoc2023/build/packages/gleam_erlang/src/gleam_erlang_ffi.erl @@ -0,0 +1,263 @@ +-module(gleam_erlang_ffi). +-export([ + atom_from_dynamic/1, rescue/1, atom_from_string/1, get_line/1, + ensure_all_started/1, sleep/1, os_family/0, sleep_forever/0, read_file/1, + append_file/2, write_file/2, delete_file/1, get_all_env/0, get_env/1, + set_env/2, unset_env/1, delete_directory/1, recursive_delete/1, + list_directory/1, demonitor/1, make_directory/1, new_selector/0, link/1, + insert_selector_handler/3, select/1, select/2, trap_exits/1, map_selector/2, + merge_selector/2, flush_messages/0, file_info/1, link_info/1, + priv_directory/1, connect_node/1, register_process/2, unregister_process/1, + process_named/1, identity/1 +]). + +-define(is_posix_error(Error), + Error =:= eacces orelse Error =:= eagain orelse Error =:= ebadf orelse + Error =:= ebadmsg orelse Error =:= ebusy orelse Error =:= edeadlk orelse + Error =:= edeadlock orelse Error =:= edquot orelse Error =:= eexist orelse + Error =:= efault orelse Error =:= efbig orelse Error =:= eftype orelse + Error =:= eintr orelse Error =:= einval orelse Error =:= eio orelse + Error =:= eisdir orelse Error =:= eloop orelse Error =:= emfile orelse + Error =:= emlink orelse Error =:= emultihop orelse Error =:= enametoolong orelse + Error =:= enfile orelse Error =:= enobufs orelse Error =:= enodev orelse + Error =:= enolck orelse Error =:= enolink orelse Error =:= enoent orelse + Error =:= enomem orelse Error =:= enospc orelse Error =:= enosr orelse + Error =:= enostr orelse Error =:= enosys orelse Error =:= enotblk orelse + Error =:= enotdir orelse Error =:= enotsup orelse Error =:= enxio orelse + Error =:= eopnotsupp orelse Error =:= eoverflow orelse Error =:= eperm orelse + Error =:= epipe orelse Error =:= erange orelse Error =:= erofs orelse + Error =:= espipe orelse Error =:= esrch orelse Error =:= estale orelse + Error =:= etxtbsy orelse Error =:= exdev +). + +-spec atom_from_string(binary()) -> {ok, atom()} | {error, atom_not_loaded}. +atom_from_string(S) -> + try {ok, binary_to_existing_atom(S)} + catch error:badarg -> {error, atom_not_loaded} + end. + +atom_from_dynamic(Data) when is_atom(Data) -> + {ok, Data}; +atom_from_dynamic(Data) -> + {error, [{decode_error, <<"Atom">>, gleam@dynamic:classify(Data), []}]}. + +-spec get_line(io:prompt()) -> {ok, unicode:unicode_binary()} | {error, eof | no_data}. +get_line(Prompt) -> + case io:get_line(Prompt) of + eof -> {error, eof}; + {error, _} -> {error, no_data}; + Data when is_binary(Data) -> {ok, Data}; + Data when is_list(Data) -> {ok, unicode:characters_to_binary(Data)} + end. + +rescue(F) -> + try {ok, F()} + catch + throw:X -> {error, {thrown, X}}; + error:X -> {error, {errored, X}}; + exit:X -> {error, {exited, X}} + end. + +ensure_all_started(Application) -> + case application:ensure_all_started(Application) of + {ok, _} = Ok -> Ok; + + {error, {ProblemApp, {"no such file or directory", _}}} -> + {error, {unknown_application, ProblemApp}} + end. + +sleep(Microseconds) -> + timer:sleep(Microseconds), + nil. + +sleep_forever() -> + timer:sleep(infinity), + nil. + +file_info_result(Result) -> + case Result of + {ok, {file_info, Size, Type, Access, Atime, Mtime, Ctime, Mode, Links, MajorDevice, MinorDevice, Inode, Uid, Gid}} when Access =:= none -> + {ok, {file_info, Size, Type, no_access, Atime, Mtime, Ctime, Mode, Links, MajorDevice, MinorDevice, Inode, Uid, Gid}}; + {ok, _} -> + Result; + {error, Reason} when ?is_posix_error(Reason) -> + Result + end. + +file_info(Filename) -> + file_info_result(file:read_file_info(Filename, [{time, posix}])). + +link_info(Filename) -> + file_info_result(file:read_link_info(Filename, [{time, posix}])). + +posix_result(Result) -> + case Result of + ok -> {ok, nil}; + {ok, Value} -> {ok, Value}; + {error, Reason} when ?is_posix_error(Reason) -> {error, Reason} + end. + +read_file(Filename) -> + posix_result(file:read_file(Filename)). + +write_file(Contents, Filename) -> + posix_result(file:write_file(Filename, Contents)). + +append_file(Contents, Filename) -> + posix_result(file:write_file(Filename, Contents, [append])). + +delete_file(Filename) -> + posix_result(file:delete(Filename)). + +make_directory(Dir) -> + posix_result(file:make_dir(Dir)). + +list_directory(Dir) -> + case file:list_dir(Dir) of + {ok, Filenames} -> + {ok, [list_to_binary(Filename) || Filename <- Filenames]}; + {error, Reason} when ?is_posix_error(Reason) -> + {error, Reason} + end. + +delete_directory(Dir) -> + posix_result(file:del_dir(Dir)). + +recursive_delete(Dir) -> + posix_result(file:del_dir_r(Dir)). + +get_all_env() -> + BinVars = lists:map(fun(VarString) -> + [VarName, VarVal] = string:split(VarString, "="), + {list_to_binary(VarName), list_to_binary(VarVal)} + end, os:getenv()), + maps:from_list(BinVars). + +get_env(Name) -> + case os:getenv(binary_to_list(Name)) of + false -> {error, nil}; + Value -> {ok, list_to_binary(Value)} + end. + +set_env(Name, Value) -> + os:putenv(binary_to_list(Name), binary_to_list(Value)), + nil. + +unset_env(Name) -> + os:unsetenv(binary_to_list(Name)), + nil. + +os_family() -> + case os:type() of + {win32, nt} -> + windows_nt; + {unix, linux} -> + linux; + {unix, darwin} -> + darwin; + {unix, freebsd} -> + free_bsd; + {_, Other} -> + {other, atom_to_binary(Other, utf8)} + end. + +new_selector() -> + {selector, #{}}. + +map_selector({selector, Handlers}, Fn) -> + MappedHandlers = maps:map(fun(_Tag, Handler) -> + fun(Message) -> Fn(Handler(Message)) end + end, Handlers), + {selector, MappedHandlers}. + +merge_selector({selector, HandlersA}, {selector, HandlersB}) -> + {selector, maps:merge(HandlersA, HandlersB)}. + +insert_selector_handler({selector, Handlers}, Tag, Fn) -> + {selector, Handlers#{Tag => Fn}}. + +select(Selector) -> + {ok, Message} = select(Selector, infinity), + Message. + +select({selector, Handlers}, Timeout) -> + AnythingHandler = maps:get(anything, Handlers, undefined), + receive + % Monitored process down messages. + % This is special cased so we can selectively receive based on the + % reference as well as the record tag. + {'DOWN', Ref, process, Pid, Reason} when is_map_key(Ref, Handlers) -> + Fn = maps:get(Ref, Handlers), + {ok, Fn({process_down, Pid, Reason})}; + + Msg when is_map_key({element(1, Msg), tuple_size(Msg)}, Handlers) -> + Fn = maps:get({element(1, Msg), tuple_size(Msg)}, Handlers), + {ok, Fn(Msg)}; + + Msg when AnythingHandler =/= undefined -> + {ok, AnythingHandler(Msg)} + after Timeout -> + {error, nil} + end. + +demonitor({_, Reference}) -> + erlang:demonitor(Reference, [flush]). + +link(Pid) -> + try + erlang:link(Pid) + catch + error:_ -> false + end. + +trap_exits(ShouldTrap) -> + erlang:process_flag(trap_exit, ShouldTrap), + nil. + +flush_messages() -> + receive _Message -> flush_messages() + after 0 -> nil + end. + +priv_directory(Name) -> + try erlang:binary_to_existing_atom(Name) of + Atom -> + case code:priv_dir(Atom) of + {error, _} -> {error, nil}; + Path -> {ok, unicode:characters_to_binary(Path)} + end + catch + error:badarg -> {error, nil} + end. + +connect_node(Node) -> + case net_kernel:connect_node(Node) of + true -> {ok, Node}; + false -> {error, failed_to_connect}; + ignored -> {error, local_node_is_not_alive} + end. + +register_process(Pid, Name) -> + try + true = erlang:register(Name, Pid), + {ok, nil} + catch + error:badarg -> {error, nil} + end. + +unregister_process(Name) -> + try + true = erlang:unregister(Name), + {ok, nil} + catch + error:badarg -> {error, nil} + end. + +process_named(Name) -> + case erlang:whereis(Name) of + Pid when is_pid(Pid) -> {ok, Pid}; + _ -> {error, nil} + end. + +identity(X) -> + X. diff --git a/aoc2023/build/packages/gleam_http/LICENSE b/aoc2023/build/packages/gleam_http/LICENSE new file mode 100644 index 0000000..619ec77 --- /dev/null +++ b/aoc2023/build/packages/gleam_http/LICENSE @@ -0,0 +1,191 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2019, Louis Pilfold <louis@lpil.uk>. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/aoc2023/build/packages/gleam_http/README.md b/aoc2023/build/packages/gleam_http/README.md new file mode 100644 index 0000000..9e06952 --- /dev/null +++ b/aoc2023/build/packages/gleam_http/README.md @@ -0,0 +1,67 @@ +# Gleam HTTP + +Types and functions for HTTP clients and servers! + +## HTTP Service Example + +```gleam +import gleam/http/elli +import gleam/http/response.{Response} +import gleam/http/request.{Request} +import gleam/bit_builder.{BitBuilder} + +// Define a HTTP service +// +pub fn my_service(request: Request(t)) -> Response(BitBuilder) { + let body = bit_builder.from_string("Hello, world!") + + response.new(200) + |> response.prepend_header("made-with", "Gleam") + |> response.set_body(body) +} + +// Start it on port 3000 using the Elli web server +// +pub fn main() { + elli.become(my_service, on_port: 3000) +} +``` + +## Server adapters + +In the example above the Elli Erlang web server is used to run the Gleam HTTP +service. Here's a full list of the server adapters available, sorted +alphabetically. + +| Adapter | About | +| --- | --- | +| [Mist][mist] | [Mist][mist] is a high performance pure Gleam web server | +| [gleam_cowboy][cowboy-adapter] | [Cowboy][cowboy] is an Erlang HTTP2 & HTTP1.1 web server | +| [gleam_elli][elli-adapter] | [Elli][elli] is an Erlang HTTP1.1 web server | +| [gleam_plug][plug-adapter] | [Plug][plug] is an Elixir web application interface | + +[cowboy]:https://github.com/ninenines/cowboy +[cowboy-adapter]: https://github.com/gleam-lang/cowboy +[elli]:https://github.com/elli-lib/elli +[elli-adapter]: https://github.com/gleam-lang/elli +[plug]:https://github.com/elixir-plug/plug +[plug-adapter]: https://github.com/gleam-lang/plug +[mist]: https://github.com/rawhat/mist + +## Client adapters + +Client adapters are used to send HTTP requests to services over the network. +Here's a full list of the client adapters available, sorted alphabetically. + +| Adapter | About | +| --- | --- | +| [gleam_fetch][fetch-adapter] | [fetch][fetch] is a HTTP client included with JavaScript | +| [gleam_hackney][hackney-adapter] | [Hackney][hackney] is a simple HTTP client for Erlang | +| [gleam_httpc][httpc-adapter] | [httpc][httpc] is a HTTP client included with Erlang | + +[hackney]: https://github.com/benoitc/hackney +[hackney-adapter]: https://github.com/gleam-lang/hackney +[httpc]: https://erlang.org/doc/man/httpc.html +[httpc-adapter]: https://github.com/gleam-lang/httpc +[fetch]: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API +[fetch-adapter]: https://github.com/gleam-lang/fetch diff --git a/aoc2023/build/packages/gleam_http/gleam.toml b/aoc2023/build/packages/gleam_http/gleam.toml new file mode 100644 index 0000000..ba733e8 --- /dev/null +++ b/aoc2023/build/packages/gleam_http/gleam.toml @@ -0,0 +1,17 @@ +name = "gleam_http" +version = "3.5.2" +licences = ["Apache-2.0"] +description = "Types and functions for Gleam HTTP clients and servers" +gleam = ">= 0.32.0" + +repository = { type = "github", user = "gleam-lang", repo = "http" } +links = [ + { title = "Website", href = "https://gleam.run" }, + { title = "Sponsor", href = "https://github.com/sponsors/lpil" }, +] + +[dependencies] +gleam_stdlib = "~> 0.32" + +[dev-dependencies] +gleeunit = "~> 1.0" diff --git a/aoc2023/build/packages/gleam_http/include/gleam@http@cookie_Attributes.hrl b/aoc2023/build/packages/gleam_http/include/gleam@http@cookie_Attributes.hrl new file mode 100644 index 0000000..78a7d02 --- /dev/null +++ b/aoc2023/build/packages/gleam_http/include/gleam@http@cookie_Attributes.hrl @@ -0,0 +1,8 @@ +-record(attributes, { + max_age :: gleam@option:option(integer()), + domain :: gleam@option:option(binary()), + path :: gleam@option:option(binary()), + secure :: boolean(), + http_only :: boolean(), + same_site :: gleam@option:option(gleam@http@cookie:same_site_policy()) +}). diff --git a/aoc2023/build/packages/gleam_http/include/gleam@http@request_Request.hrl b/aoc2023/build/packages/gleam_http/include/gleam@http@request_Request.hrl new file mode 100644 index 0000000..c8bbae6 --- /dev/null +++ b/aoc2023/build/packages/gleam_http/include/gleam@http@request_Request.hrl @@ -0,0 +1,10 @@ +-record(request, { + method :: gleam@http:method(), + headers :: list({binary(), binary()}), + body :: any(), + scheme :: gleam@http:scheme(), + host :: binary(), + port :: gleam@option:option(integer()), + path :: binary(), + 'query' :: gleam@option:option(binary()) +}). diff --git a/aoc2023/build/packages/gleam_http/include/gleam@http@response_Response.hrl b/aoc2023/build/packages/gleam_http/include/gleam@http@response_Response.hrl new file mode 100644 index 0000000..ba6f077 --- /dev/null +++ b/aoc2023/build/packages/gleam_http/include/gleam@http@response_Response.hrl @@ -0,0 +1,5 @@ +-record(response, { + status :: integer(), + headers :: list({binary(), binary()}), + body :: any() +}). diff --git a/aoc2023/build/packages/gleam_http/include/gleam@http_MoreRequiredForBody.hrl b/aoc2023/build/packages/gleam_http/include/gleam@http_MoreRequiredForBody.hrl new file mode 100644 index 0000000..abd56dd --- /dev/null +++ b/aoc2023/build/packages/gleam_http/include/gleam@http_MoreRequiredForBody.hrl @@ -0,0 +1,5 @@ +-record(more_required_for_body, { + chunk :: bitstring(), + continuation :: fun((bitstring()) -> {ok, gleam@http:multipart_body()} | + {error, nil}) +}). diff --git a/aoc2023/build/packages/gleam_http/include/gleam@http_MoreRequiredForHeaders.hrl b/aoc2023/build/packages/gleam_http/include/gleam@http_MoreRequiredForHeaders.hrl new file mode 100644 index 0000000..43729c1 --- /dev/null +++ b/aoc2023/build/packages/gleam_http/include/gleam@http_MoreRequiredForHeaders.hrl @@ -0,0 +1,4 @@ +-record(more_required_for_headers, { + continuation :: fun((bitstring()) -> {ok, gleam@http:multipart_headers()} | + {error, nil}) +}). diff --git a/aoc2023/build/packages/gleam_http/include/gleam@http_MultipartBody.hrl b/aoc2023/build/packages/gleam_http/include/gleam@http_MultipartBody.hrl new file mode 100644 index 0000000..4521591 --- /dev/null +++ b/aoc2023/build/packages/gleam_http/include/gleam@http_MultipartBody.hrl @@ -0,0 +1,5 @@ +-record(multipart_body, { + chunk :: bitstring(), + done :: boolean(), + remaining :: bitstring() +}). diff --git a/aoc2023/build/packages/gleam_http/include/gleam@http_MultipartHeaders.hrl b/aoc2023/build/packages/gleam_http/include/gleam@http_MultipartHeaders.hrl new file mode 100644 index 0000000..d9fca5c --- /dev/null +++ b/aoc2023/build/packages/gleam_http/include/gleam@http_MultipartHeaders.hrl @@ -0,0 +1,4 @@ +-record(multipart_headers, { + headers :: list({binary(), binary()}), + remaining :: bitstring() +}). diff --git a/aoc2023/build/packages/gleam_http/src/gleam/http.gleam b/aoc2023/build/packages/gleam_http/src/gleam/http.gleam new file mode 100644 index 0000000..a892006 --- /dev/null +++ b/aoc2023/build/packages/gleam_http/src/gleam/http.gleam @@ -0,0 +1,560 @@ +//// Functions for working with HTTP data structures in Gleam. +//// +//// This module makes it easy to create and modify Requests and Responses, data types. +//// A general HTTP message type is defined that enables functions to work on both requests and responses. +//// +//// This module does not implement a HTTP client or HTTP server, but it can be used as a base for them. + +import gleam/dynamic.{type DecodeError, type Dynamic, DecodeError} +import gleam/string +import gleam/bit_array +import gleam/result +import gleam/list +import gleam/bool + +/// HTTP standard method as defined by [RFC 2616](https://tools.ietf.org/html/rfc2616), +/// and PATCH which is defined by [RFC 5789](https://tools.ietf.org/html/rfc5789). +pub type Method { + Get + Post + Head + Put + Delete + Trace + Connect + Options + Patch + + /// Non-standard but valid HTTP methods. + Other(String) +} + +// TODO: check if the a is a valid HTTP method (i.e. it is a token, as per the +// spec) and return Ok(Other(s)) if so. +pub fn parse_method(s) -> Result(Method, Nil) { + case string.lowercase(s) { + "connect" -> Ok(Connect) + "delete" -> Ok(Delete) + "get" -> Ok(Get) + "head" -> Ok(Head) + "options" -> Ok(Options) + "patch" -> Ok(Patch) + "post" -> Ok(Post) + "put" -> Ok(Put) + "trace" -> Ok(Trace) + _ -> Error(Nil) + } +} + +pub fn method_to_string(method: Method) -> String { + case method { + Connect -> "connect" + Delete -> "delete" + Get -> "get" + Head -> "head" + Options -> "options" + Patch -> "patch" + Post -> "post" + Put -> "put" + Trace -> "trace" + Other(s) -> s + } +} + +/// The two URI schemes for HTTP +/// +pub type Scheme { + Http + Https +} + +/// Convert a scheme into a string. +/// +/// # Examples +/// +/// > scheme_to_string(Http) +/// "http" +/// +/// > scheme_to_string(Https) +/// "https" +/// +pub fn scheme_to_string(scheme: Scheme) -> String { + case scheme { + Http -> "http" + Https -> "https" + } +} + +/// Parse a HTTP scheme from a string +/// +/// # Examples +/// +/// > scheme_from_string("http") +/// Ok(Http) +/// +/// > scheme_from_string("ftp") +/// Error(Nil) +/// +pub fn scheme_from_string(scheme: String) -> Result(Scheme, Nil) { + case string.lowercase(scheme) { + "http" -> Ok(Http) + "https" -> Ok(Https) + _ -> Error(Nil) + } +} + +pub fn method_from_dynamic(value: Dynamic) -> Result(Method, List(DecodeError)) { + case do_method_from_dynamic(value) { + Ok(method) -> Ok(method) + Error(_) -> Error([DecodeError("HTTP method", dynamic.classify(value), [])]) + } +} + +pub type MultipartHeaders { + /// The headers for the part have been fully parsed. + MultipartHeaders( + headers: List(Header), + /// The remaining content that has not yet been parsed. This will contain + /// the body for this part, if any, and can be parsed with the + /// `parse_multipart_body` function. + remaining: BitArray, + ) + /// More input is required to parse the headers for this part. + MoreRequiredForHeaders( + /// Call this function to continue parsing the headers for this part. + continuation: fn(BitArray) -> Result(MultipartHeaders, Nil), + ) +} + +pub type MultipartBody { + /// The body for the part has been fully parsed. + MultipartBody( + // The rest of the body for this part. The full body of the part is this + // concatenated onto the end of each chunk returned by any previous + // `MoreRequiredForBody` returns. + chunk: BitArray, + /// This is `True` if this was the last part in the multipart message, + /// otherwise there are more parts to parse. + done: Bool, + /// The remaining content that has not yet been parsed. This will contain + /// the next part if `done` is `False`, otherwise it will contain the + /// epilogue, if any. + remaining: BitArray, + ) + MoreRequiredForBody( + // The body that has been parsed so far. The full body of the part is this + // concatenated with the chunk returned by each `MoreRequiredForBody` return + // value, and the final `MultipartBody` return value. + chunk: BitArray, + /// Call this function to continue parsing the body for this part. + continuation: fn(BitArray) -> Result(MultipartBody, Nil), + ) +} + +/// Parse the headers for part of a multipart message, as defined in RFC 2045. +/// +/// This function skips any preamble before the boundary. The preamble may be +/// retrieved using `parse_multipart_body`. +/// +/// This function will accept input of any size, it is up to the caller to limit +/// it if needed. +/// +/// To enable streaming parsing of multipart messages, this function will return +/// a continuation if there is not enough data to fully parse the headers. +/// Further information is available in the documentation for `MultipartBody`. +/// +pub fn parse_multipart_headers( + data: BitArray, + boundary: String, +) -> Result(MultipartHeaders, Nil) { + let boundary = bit_array.from_string(boundary) + // TODO: rewrite this to use a bit pattern once JavaScript supports + // the `b:binary-size(bsize)` pattern. + let prefix = <<45, 45, boundary:bits>> + case bit_array.slice(data, 0, bit_array.byte_size(prefix)) == Ok(prefix) { + // There is no preamble, parse the headers. + True -> parse_headers_after_prelude(data, boundary) + // There is a preamble, skip it before parsing. + False -> skip_preamble(data, boundary) + } +} + +/// Parse the body for part of a multipart message, as defined in RFC 2045. The +/// body is everything until the next boundary. This function is generally to be +/// called after calling `parse_multipart_headers` for a given part. +/// +/// This function will accept input of any size, it is up to the caller to limit +/// it if needed. +/// +/// To enable streaming parsing of multipart messages, this function will return +/// a continuation if there is not enough data to fully parse the body, along +/// with the data that has been parsed so far. Further information is available +/// in the documentation for `MultipartBody`. +/// +pub fn parse_multipart_body( + data: BitArray, + boundary: String, +) -> Result(MultipartBody, Nil) { + boundary + |> bit_array.from_string + |> parse_body_with_bit_array(data, _) +} + +fn parse_body_with_bit_array( + data: BitArray, + boundary: BitArray, +) -> Result(MultipartBody, Nil) { + let bsize = bit_array.byte_size(boundary) + let prefix = bit_array.slice(data, 0, 2 + bsize) + case prefix == Ok(<<45, 45, boundary:bits>>) { + True -> Ok(MultipartBody(<<>>, done: False, remaining: data)) + False -> parse_body_loop(data, boundary, <<>>) + } +} + +fn parse_body_loop( + data: BitArray, + boundary: BitArray, + body: BitArray, +) -> Result(MultipartBody, Nil) { + let dsize = bit_array.byte_size(data) + let bsize = bit_array.byte_size(boundary) + let required = 6 + bsize + case data { + _ if dsize < required -> { + more_please_body(parse_body_loop(_, boundary, <<>>), body, data) + } + + // TODO: flatten this into a single case expression once JavaScript supports + // the `b:binary-size(bsize)` pattern. + // + // \r\n + <<13, 10, data:bytes>> -> { + let desired = <<45, 45, boundary:bits>> + let size = bit_array.byte_size(desired) + let dsize = bit_array.byte_size(data) + let prefix = bit_array.slice(data, 0, size) + let rest = bit_array.slice(data, size, dsize - size) + case prefix == Ok(desired), rest { + // --boundary\r\n + True, Ok(<<13, 10, _:bytes>>) -> + Ok(MultipartBody(body, done: False, remaining: data)) + + // --boundary-- + True, Ok(<<45, 45, data:bytes>>) -> + Ok(MultipartBody(body, done: True, remaining: data)) + + False, _ -> parse_body_loop(data, boundary, <<body:bits, 13, 10>>) + _, _ -> Error(Nil) + } + } + + <<char, data:bytes>> -> { + parse_body_loop(data, boundary, <<body:bits, char>>) + } + } +} + +fn parse_headers_after_prelude( + data: BitArray, + boundary: BitArray, +) -> Result(MultipartHeaders, Nil) { + let dsize = bit_array.byte_size(data) + let bsize = bit_array.byte_size(boundary) + let required_size = bsize + 4 + + // TODO: this could be written as a single case expression if JavaScript had + // support for the `b:binary-size(bsize)` pattern. Rewrite this once the + // compiler support this. + + use <- bool.guard( + when: dsize < required_size, + return: more_please_headers(parse_headers_after_prelude(_, boundary), data), + ) + + use prefix <- result.try(bit_array.slice(data, 0, required_size - 2)) + use second <- result.try(bit_array.slice(data, 2 + bsize, 2)) + let desired = <<45, 45, boundary:bits>> + + use <- bool.guard(prefix != desired, return: Error(Nil)) + + case second == <<45, 45>> { + // --boundary-- + // The last boundary. Return the epilogue. + True -> { + let rest_size = dsize - required_size + use data <- result.map(bit_array.slice(data, required_size, rest_size)) + MultipartHeaders([], remaining: data) + } + + // --boundary + False -> { + let start = required_size - 2 + let rest_size = dsize - required_size + 2 + use data <- result.try(bit_array.slice(data, start, rest_size)) + do_parse_headers(data) + } + } +} + +fn skip_preamble( + data: BitArray, + boundary: BitArray, +) -> Result(MultipartHeaders, Nil) { + let data_size = bit_array.byte_size(data) + let boundary_size = bit_array.byte_size(boundary) + let required = boundary_size + 4 + case data { + _ if data_size < required -> + more_please_headers(skip_preamble(_, boundary), data) + + // TODO: change this to use one non-nested case expression once the compiler + // supports the `b:binary-size(bsize)` pattern on JS. + // \r\n-- + <<13, 10, 45, 45, data:bytes>> -> { + case bit_array.slice(data, 0, boundary_size) { + // --boundary + Ok(prefix) if prefix == boundary -> { + let start = boundary_size + let length = bit_array.byte_size(data) - boundary_size + use rest <- result.try(bit_array.slice(data, start, length)) + do_parse_headers(rest) + } + Ok(_) -> skip_preamble(data, boundary) + Error(_) -> Error(Nil) + } + } + + <<_, data:bytes>> -> skip_preamble(data, boundary) + } +} + +fn skip_whitespace(data: BitArray) -> BitArray { + case data { + // Space or tab. + <<32, data:bytes>> | <<9, data:bytes>> -> skip_whitespace(data) + _ -> data + } +} + +fn do_parse_headers(data: BitArray) -> Result(MultipartHeaders, Nil) { + case data { + // \r\n\r\n + // We've reached the end, there are no headers. + <<13, 10, 13, 10, data:bytes>> -> Ok(MultipartHeaders([], remaining: data)) + + // \r\n + // Skip the line break after the boundary. + <<13, 10, data:bytes>> -> parse_header_name(data, [], <<>>) + + <<13>> | <<>> -> more_please_headers(do_parse_headers, data) + + _ -> Error(Nil) + } +} + +fn parse_header_name( + data: BitArray, + headers: List(Header), + name: BitArray, +) -> Result(MultipartHeaders, Nil) { + case skip_whitespace(data) { + // : + <<58, data:bytes>> -> + data + |> skip_whitespace + |> parse_header_value(headers, name, <<>>) + + <<char, data:bytes>> -> + parse_header_name(data, headers, <<name:bits, char>>) + + <<>> -> more_please_headers(parse_header_name(_, headers, name), data) + } +} + +fn parse_header_value( + data: BitArray, + headers: List(Header), + name: BitArray, + value: BitArray, +) -> Result(MultipartHeaders, Nil) { + let size = bit_array.byte_size(data) + case data { + // We need at least 4 bytes to check for the end of the headers. + _ if size < 4 -> + fn(data) { + data + |> skip_whitespace + |> parse_header_value(headers, name, value) + } + |> more_please_headers(data) + + // \r\n\r\n + <<13, 10, 13, 10, data:bytes>> -> { + use name <- result.try(bit_array.to_string(name)) + use value <- result.map(bit_array.to_string(value)) + let headers = list.reverse([#(string.lowercase(name), value), ..headers]) + MultipartHeaders(headers, data) + } + + // \r\n\s + // \r\n\t + <<13, 10, 32, data:bytes>> | <<13, 10, 9, data:bytes>> -> + parse_header_value(data, headers, name, value) + + // \r\n + <<13, 10, data:bytes>> -> { + use name <- result.try(bit_array.to_string(name)) + use value <- result.try(bit_array.to_string(value)) + let headers = [#(string.lowercase(name), value), ..headers] + parse_header_name(data, headers, <<>>) + } + + <<char, rest:bytes>> -> { + let value = <<value:bits, char>> + parse_header_value(rest, headers, name, value) + } + + _ -> Error(Nil) + } +} + +fn more_please_headers( + continuation: fn(BitArray) -> Result(MultipartHeaders, Nil), + existing: BitArray, +) -> Result(MultipartHeaders, Nil) { + Ok(MoreRequiredForHeaders(fn(more) { + use <- bool.guard(more == <<>>, return: Error(Nil)) + continuation(<<existing:bits, more:bits>>) + })) +} + +pub type ContentDisposition { + ContentDisposition(String, parameters: List(#(String, String))) +} + +pub fn parse_content_disposition( + header: String, +) -> Result(ContentDisposition, Nil) { + parse_content_disposition_type(header, "") +} + +fn parse_content_disposition_type( + header: String, + name: String, +) -> Result(ContentDisposition, Nil) { + case string.pop_grapheme(header) { + Error(Nil) -> Ok(ContentDisposition(name, [])) + + Ok(#(" ", rest)) | Ok(#("\t", rest)) | Ok(#(";", rest)) -> { + let result = parse_rfc_2045_parameters(rest, []) + use parameters <- result.map(result) + ContentDisposition(name, parameters) + } + + Ok(#(grapheme, rest)) -> + parse_content_disposition_type(rest, name <> string.lowercase(grapheme)) + } +} + +fn parse_rfc_2045_parameters( + header: String, + parameters: List(#(String, String)), +) -> Result(List(#(String, String)), Nil) { + case string.pop_grapheme(header) { + Error(Nil) -> Ok(list.reverse(parameters)) + + Ok(#(";", rest)) | Ok(#(" ", rest)) | Ok(#("\t", rest)) -> + parse_rfc_2045_parameters(rest, parameters) + + Ok(#(grapheme, rest)) -> { + let acc = string.lowercase(grapheme) + use #(parameter, rest) <- result.try(parse_rfc_2045_parameter(rest, acc)) + parse_rfc_2045_parameters(rest, [parameter, ..parameters]) + } + } +} + +fn parse_rfc_2045_parameter( + header: String, + name: String, +) -> Result(#(#(String, String), String), Nil) { + use #(grapheme, rest) <- result.try(string.pop_grapheme(header)) + case grapheme { + "=" -> parse_rfc_2045_parameter_value(rest, name) + _ -> parse_rfc_2045_parameter(rest, name <> string.lowercase(grapheme)) + } +} + +fn parse_rfc_2045_parameter_value( + header: String, + name: String, +) -> Result(#(#(String, String), String), Nil) { + case string.pop_grapheme(header) { + Error(Nil) -> Error(Nil) + Ok(#("\"", rest)) -> parse_rfc_2045_parameter_quoted_value(rest, name, "") + Ok(#(grapheme, rest)) -> + Ok(parse_rfc_2045_parameter_unquoted_value(rest, name, grapheme)) + } +} + +fn parse_rfc_2045_parameter_quoted_value( + header: String, + name: String, + value: String, +) -> Result(#(#(String, String), String), Nil) { + case string.pop_grapheme(header) { + Error(Nil) -> Error(Nil) + Ok(#("\"", rest)) -> Ok(#(#(name, value), rest)) + Ok(#("\\", rest)) -> { + use #(grapheme, rest) <- result.try(string.pop_grapheme(rest)) + parse_rfc_2045_parameter_quoted_value(rest, name, value <> grapheme) + } + Ok(#(grapheme, rest)) -> + parse_rfc_2045_parameter_quoted_value(rest, name, value <> grapheme) + } +} + +fn parse_rfc_2045_parameter_unquoted_value( + header: String, + name: String, + value: String, +) -> #(#(String, String), String) { + case string.pop_grapheme(header) { + Error(Nil) -> #(#(name, value), header) + + Ok(#(";", rest)) | Ok(#(" ", rest)) | Ok(#("\t", rest)) -> #( + #(name, value), + rest, + ) + + Ok(#(grapheme, rest)) -> + parse_rfc_2045_parameter_unquoted_value(rest, name, value <> grapheme) + } +} + +fn more_please_body( + continuation: fn(BitArray) -> Result(MultipartBody, Nil), + chunk: BitArray, + existing: BitArray, +) -> Result(MultipartBody, Nil) { + fn(more) { + use <- bool.guard(more == <<>>, return: Error(Nil)) + continuation(<<existing:bits, more:bits>>) + } + |> MoreRequiredForBody(chunk, _) + |> Ok +} + +@target(erlang) +@external(erlang, "gleam_http_native", "decode_method") +fn do_method_from_dynamic(a: Dynamic) -> Result(Method, nil) + +@target(javascript) +@external(javascript, "../gleam_http_native.mjs", "decode_method") +fn do_method_from_dynamic(a: Dynamic) -> Result(Method, Nil) + +/// A HTTP header is a key-value pair. Header keys should be all lowercase +/// characters. +pub type Header = + #(String, String) diff --git a/aoc2023/build/packages/gleam_http/src/gleam/http/cookie.gleam b/aoc2023/build/packages/gleam_http/src/gleam/http/cookie.gleam new file mode 100644 index 0000000..e9ccb55 --- /dev/null +++ b/aoc2023/build/packages/gleam_http/src/gleam/http/cookie.gleam @@ -0,0 +1,128 @@ +import gleam/result +import gleam/int +import gleam/list +import gleam/regex +import gleam/string +import gleam/option.{type Option, Some} +import gleam/http.{type Scheme} + +/// Policy options for the SameSite cookie attribute +/// +/// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite +pub type SameSitePolicy { + Lax + Strict + None +} + +fn same_site_to_string(policy) { + case policy { + Lax -> "Lax" + Strict -> "Strict" + None -> "None" + } +} + +/// Attributes of a cookie when sent to a client in the `set-cookie` header. +pub type Attributes { + Attributes( + max_age: Option(Int), + domain: Option(String), + path: Option(String), + secure: Bool, + http_only: Bool, + same_site: Option(SameSitePolicy), + ) +} + +/// Helper to create sensible default attributes for a set cookie. +/// +/// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#Attributes +pub fn defaults(scheme: Scheme) { + Attributes( + max_age: option.None, + domain: option.None, + path: option.Some("/"), + secure: scheme == http.Https, + http_only: True, + same_site: Some(Lax), + ) +} + +const epoch = "Expires=Thu, 01 Jan 1970 00:00:00 GMT" + +fn cookie_attributes_to_list(attributes) { + let Attributes( + max_age: max_age, + domain: domain, + path: path, + secure: secure, + http_only: http_only, + same_site: same_site, + ) = attributes + [ + // Expires is a deprecated attribute for cookies, it has been replaced with MaxAge + // MaxAge is widely supported and so Expires values are not set. + // Only when deleting cookies is the exception made to use the old format, + // to ensure complete clearup of cookies if required by an application. + case max_age { + option.Some(0) -> option.Some([epoch]) + _ -> option.None + }, + option.map(max_age, fn(max_age) { ["Max-Age=", int.to_string(max_age)] }), + option.map(domain, fn(domain) { ["Domain=", domain] }), + option.map(path, fn(path) { ["Path=", path] }), + case secure { + True -> option.Some(["Secure"]) + False -> option.None + }, + case http_only { + True -> option.Some(["HttpOnly"]) + False -> option.None + }, + option.map( + same_site, + fn(same_site) { ["SameSite=", same_site_to_string(same_site)] }, + ), + ] + |> list.filter_map(option.to_result(_, Nil)) +} + +pub fn set_header(name: String, value: String, attributes: Attributes) -> String { + [[name, "=", value], ..cookie_attributes_to_list(attributes)] + |> list.map(string.join(_, "")) + |> string.join("; ") +} + +/// Parse a list of cookies from a header string. Any malformed cookies will be +/// discarded. +/// +pub fn parse(cookie_string: String) -> List(#(String, String)) { + let assert Ok(re) = regex.from_string("[,;]") + regex.split(re, cookie_string) + |> list.filter_map(fn(pair) { + case string.split_once(string.trim(pair), "=") { + Ok(#("", _)) -> Error(Nil) + Ok(#(key, value)) -> { + let key = string.trim(key) + let value = string.trim(value) + use _ <- result.then(check_token(key)) + use _ <- result.then(check_token(value)) + Ok(#(key, value)) + } + Error(Nil) -> Error(Nil) + } + }) +} + +fn check_token(token: String) -> Result(Nil, Nil) { + case string.pop_grapheme(token) { + Error(Nil) -> Ok(Nil) + Ok(#(" ", _)) -> Error(Nil) + Ok(#("\t", _)) -> Error(Nil) + Ok(#("\r", _)) -> Error(Nil) + Ok(#("\n", _)) -> Error(Nil) + Ok(#("\f", _)) -> Error(Nil) + Ok(#(_, rest)) -> check_token(rest) + } +} diff --git a/aoc2023/build/packages/gleam_http/src/gleam/http/request.gleam b/aoc2023/build/packages/gleam_http/src/gleam/http/request.gleam new file mode 100644 index 0000000..0bf9af9 --- /dev/null +++ b/aoc2023/build/packages/gleam_http/src/gleam/http/request.gleam @@ -0,0 +1,267 @@ +import gleam/result +// TODO: validate_req +import gleam/http.{type Header, type Method, type Scheme, Get} +import gleam/http/cookie +import gleam/option.{type Option} +import gleam/uri.{type Uri, Uri} +import gleam/list +import gleam/string +import gleam/string_builder + +// TODO: document +pub type Request(body) { + Request( + method: Method, + headers: List(Header), + body: body, + scheme: Scheme, + host: String, + port: Option(Int), + path: String, + query: Option(String), + ) +} + +/// Return the uri that a request was sent to. +/// +pub fn to_uri(request: Request(a)) -> Uri { + Uri( + scheme: option.Some(http.scheme_to_string(request.scheme)), + userinfo: option.None, + host: option.Some(request.host), + port: request.port, + path: request.path, + query: request.query, + fragment: option.None, + ) +} + +/// Construct a request from a URI. +/// +pub fn from_uri(uri: Uri) -> Result(Request(String), Nil) { + use scheme <- result.then( + uri.scheme + |> option.unwrap("") + |> http.scheme_from_string, + ) + use host <- result.then( + uri.host + |> option.to_result(Nil), + ) + let req = + Request( + method: Get, + headers: [], + body: "", + scheme: scheme, + host: host, + port: uri.port, + path: uri.path, + query: uri.query, + ) + Ok(req) +} + +/// Get the value for a given header. +/// +/// If the request does not have that header then `Error(Nil)` is returned. +/// +pub fn get_header(request: Request(body), key: String) -> Result(String, Nil) { + list.key_find(request.headers, string.lowercase(key)) +} + +/// Set the header with the given value under the given header key. +/// +/// If already present, it is replaced. +pub fn set_header( + request: Request(body), + key: String, + value: String, +) -> Request(body) { + let headers = list.key_set(request.headers, string.lowercase(key), value) + Request(..request, headers: headers) +} + +/// Prepend the header with the given value under the given header key. +/// +/// Similar to `set_header` except if the header already exists it prepends +/// another header with the same key. +pub fn prepend_header( + request: Request(body), + key: String, + value: String, +) -> Request(body) { + let headers = [#(string.lowercase(key), value), ..request.headers] + Request(..request, headers: headers) +} + +// TODO: record update syntax, which can't be done currently as body type changes +/// Set the body of the request, overwriting any existing body. +/// +pub fn set_body(req: Request(old_body), body: new_body) -> Request(new_body) { + let Request( + method: method, + headers: headers, + scheme: scheme, + host: host, + port: port, + path: path, + query: query, + .., + ) = req + Request( + method: method, + headers: headers, + body: body, + scheme: scheme, + host: host, + port: port, + path: path, + query: query, + ) +} + +/// Update the body of a request using a given function. +/// +pub fn map( + request: Request(old_body), + transform: fn(old_body) -> new_body, +) -> Request(new_body) { + request.body + |> transform + |> set_body(request, _) +} + +/// Return the non-empty segments of a request path. +/// +/// # Examples +/// +/// ```gleam +/// > new() +/// > |> set_path("/one/two/three") +/// > |> path_segments +/// ["one", "two", "three"] +/// ``` +/// +pub fn path_segments(request: Request(body)) -> List(String) { + request.path + |> uri.path_segments +} + +/// Decode the query of a request. +pub fn get_query(request: Request(body)) -> Result(List(#(String, String)), Nil) { + case request.query { + option.Some(query_string) -> uri.parse_query(query_string) + option.None -> Ok([]) + } +} + +// TODO: escape +/// Set the query of the request. +/// +pub fn set_query( + req: Request(body), + query: List(#(String, String)), +) -> Request(body) { + let pair = fn(t: #(String, String)) { + string_builder.from_strings([t.0, "=", t.1]) + } + let query = + query + |> list.map(pair) + |> list.intersperse(string_builder.from_string("&")) + |> string_builder.concat + |> string_builder.to_string + |> option.Some + Request(..req, query: query) +} + +/// Set the method of the request. +/// +pub fn set_method(req: Request(body), method: Method) -> Request(body) { + Request(..req, method: method) +} + +/// A request with commonly used default values. This request can be used as +/// an initial value and then update to create the desired request. +/// +pub fn new() -> Request(String) { + Request( + method: Get, + headers: [], + body: "", + scheme: http.Https, + host: "localhost", + port: option.None, + path: "", + query: option.None, + ) +} + +/// Construct a request from a URL string +/// +pub fn to(url: String) -> Result(Request(String), Nil) { + url + |> uri.parse + |> result.then(from_uri) +} + +/// Set the scheme (protocol) of the request. +/// +pub fn set_scheme(req: Request(body), scheme: Scheme) -> Request(body) { + Request(..req, scheme: scheme) +} + +/// Set the method of the request. +/// +pub fn set_host(req: Request(body), host: String) -> Request(body) { + Request(..req, host: host) +} + +/// Set the port of the request. +/// +pub fn set_port(req: Request(body), port: Int) -> Request(body) { + Request(..req, port: option.Some(port)) +} + +/// Set the path of the request. +/// +pub fn set_path(req: Request(body), path: String) -> Request(body) { + Request(..req, path: path) +} + +/// Send a cookie with a request +/// +/// Multiple cookies are added to the same cookie header. +pub fn set_cookie(req: Request(body), name: String, value: String) { + let new_cookie_string = string.join([name, value], "=") + + let #(cookies_string, headers) = case list.key_pop(req.headers, "cookie") { + Ok(#(cookies_string, headers)) -> { + let cookies_string = + string.join([cookies_string, new_cookie_string], "; ") + #(cookies_string, headers) + } + Error(Nil) -> #(new_cookie_string, req.headers) + } + + Request(..req, headers: [#("cookie", cookies_string), ..headers]) +} + +/// Fetch the cookies sent in a request. +/// +/// Note badly formed cookie pairs will be ignored. +/// RFC6265 specifies that invalid cookie names/attributes should be ignored. +pub fn get_cookies(req) -> List(#(String, String)) { + let Request(headers: headers, ..) = req + + headers + |> list.filter_map(fn(header) { + let #(name, value) = header + case name { + "cookie" -> Ok(cookie.parse(value)) + _ -> Error(Nil) + } + }) + |> list.flatten() +} diff --git a/aoc2023/build/packages/gleam_http/src/gleam/http/response.gleam b/aoc2023/build/packages/gleam_http/src/gleam/http/response.gleam new file mode 100644 index 0000000..87f9140 --- /dev/null +++ b/aoc2023/build/packages/gleam_http/src/gleam/http/response.gleam @@ -0,0 +1,141 @@ +import gleam/result +import gleam/http.{type Header} +import gleam/http/cookie +import gleam/list +import gleam/string +import gleam/option + +// TODO: document +pub type Response(body) { + Response(status: Int, headers: List(Header), body: body) +} + +/// Update the body of a response using a given result returning function. +/// +/// If the given function returns an `Ok` value the body is set, if it returns +/// an `Error` value then the error is returned. +/// +pub fn try_map( + response: Response(old_body), + transform: fn(old_body) -> Result(new_body, error), +) -> Result(Response(new_body), error) { + use body <- result.then(transform(response.body)) + Ok(set_body(response, body)) +} + +/// Construct an empty Response. +/// +/// The body type of the returned response is `String` and could be set with a +/// call to `set_body`. +/// +pub fn new(status: Int) -> Response(String) { + Response(status: status, headers: [], body: "") +} + +/// Get the value for a given header. +/// +/// If the response does not have that header then `Error(Nil)` is returned. +/// +pub fn get_header(response: Response(body), key: String) -> Result(String, Nil) { + list.key_find(response.headers, string.lowercase(key)) +} + +/// Set the header with the given value under the given header key. +/// +/// If the response already has that key, it is replaced. +pub fn set_header( + response: Response(body), + key: String, + value: String, +) -> Response(body) { + let headers = list.key_set(response.headers, string.lowercase(key), value) + Response(..response, headers: headers) +} + +/// Prepend the header with the given value under the given header key. +/// +/// Similar to `set_header` except if the header already exists it prepends +/// another header with the same key. +pub fn prepend_header( + response: Response(body), + key: String, + value: String, +) -> Response(body) { + let headers = [#(string.lowercase(key), value), ..response.headers] + Response(..response, headers: headers) +} + +/// Set the body of the response, overwriting any existing body. +/// +pub fn set_body( + response: Response(old_body), + body: new_body, +) -> Response(new_body) { + let Response(status: status, headers: headers, ..) = response + Response(status: status, headers: headers, body: body) +} + +/// Update the body of a response using a given function. +/// +pub fn map( + response: Response(old_body), + transform: fn(old_body) -> new_body, +) -> Response(new_body) { + response.body + |> transform + |> set_body(response, _) +} + +/// Create a response that redirects to the given uri. +/// +pub fn redirect(uri: String) -> Response(String) { + Response( + status: 303, + headers: [#("location", uri)], + body: string.append("You are being redirected to ", uri), + ) +} + +/// Fetch the cookies sent in a response. +/// +/// Badly formed cookies will be discarded. +/// +pub fn get_cookies(resp) -> List(#(String, String)) { + let Response(headers: headers, ..) = resp + headers + |> list.filter_map(fn(header) { + let #(name, value) = header + case name { + "set-cookie" -> Ok(cookie.parse(value)) + _ -> Error(Nil) + } + }) + |> list.flatten() +} + +/// Set a cookie value for a client +/// +pub fn set_cookie( + response: Response(t), + name: String, + value: String, + attributes: cookie.Attributes, +) -> Response(t) { + prepend_header( + response, + "set-cookie", + cookie.set_header(name, value, attributes), + ) +} + +/// Expire a cookie value for a client +/// +/// Note: The attributes value should be the same as when the response cookie was set. +pub fn expire_cookie( + response: Response(t), + name: String, + attributes: cookie.Attributes, +) -> Response(t) { + let attrs = cookie.Attributes(..attributes, max_age: option.Some(0)) + set_cookie(response, name, "", attrs) +} diff --git a/aoc2023/build/packages/gleam_http/src/gleam/http/service.gleam b/aoc2023/build/packages/gleam_http/src/gleam/http/service.gleam new file mode 100644 index 0000000..3dfac87 --- /dev/null +++ b/aoc2023/build/packages/gleam_http/src/gleam/http/service.gleam @@ -0,0 +1,82 @@ +import gleam/http.{Delete, Patch, Post, Put} +import gleam/http/request.{type Request} +import gleam/http/response.{type Response} +import gleam/list +import gleam/result + +// TODO: document +pub type Service(in, out) = + fn(Request(in)) -> Response(out) + +pub type Middleware(before_req, before_resp, after_req, after_resp) = + fn(Service(before_req, before_resp)) -> Service(after_req, after_resp) + +/// A middleware that transform the response body returned by the service using +/// a given function. +/// +pub fn map_response_body( + service: Service(req, a), + with mapper: fn(a) -> b, +) -> Service(req, b) { + fn(req) { + req + |> service + |> response.map(mapper) + } +} + +/// A middleware that prepends a header to the request. +/// +pub fn prepend_response_header( + service: Service(req, resp), + key: String, + value: String, +) -> Service(req, resp) { + fn(req) { + req + |> service + |> response.prepend_header(key, value) + } +} + +fn ensure_post(req: Request(a)) { + case req.method { + Post -> Ok(req) + _ -> Error(Nil) + } +} + +fn get_override_method(request: Request(t)) -> Result(http.Method, Nil) { + use query_params <- result.then(request.get_query(request)) + use method <- result.then(list.key_find(query_params, "_method")) + use method <- result.then(http.parse_method(method)) + case method { + Put | Patch | Delete -> Ok(method) + _ -> Error(Nil) + } +} + +/// A middleware that overrides an incoming POST request with a method given in +/// the request's `_method` query paramerter. This is useful as web browsers +/// typically only support GET and POST requests, but our application may +/// expect other HTTP methods that are more semantically correct. +/// +/// The methods PUT, PATCH, and DELETE are accepted for overriding, all others +/// are ignored. +/// +/// The `_method` query paramerter can be specified in a HTML form like so: +/// +/// <form method="POST" action="/item/1?_method=DELETE"> +/// <button type="submit">Delete item</button> +/// </form> +/// +pub fn method_override(service: Service(req, resp)) -> Service(req, resp) { + fn(request) { + request + |> ensure_post + |> result.then(get_override_method) + |> result.map(request.set_method(request, _)) + |> result.unwrap(request) + |> service + } +} diff --git a/aoc2023/build/packages/gleam_http/src/gleam@http.erl b/aoc2023/build/packages/gleam_http/src/gleam@http.erl new file mode 100644 index 0000000..91ee6e8 --- /dev/null +++ b/aoc2023/build/packages/gleam_http/src/gleam@http.erl @@ -0,0 +1,626 @@ +-module(gleam@http). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([parse_method/1, method_to_string/1, scheme_to_string/1, scheme_from_string/1, parse_content_disposition/1, parse_multipart_body/2, method_from_dynamic/1, parse_multipart_headers/2]). +-export_type([method/0, scheme/0, multipart_headers/0, multipart_body/0, content_disposition/0]). + +-type method() :: get | + post | + head | + put | + delete | + trace | + connect | + options | + patch | + {other, binary()}. + +-type scheme() :: http | https. + +-type multipart_headers() :: {multipart_headers, + list({binary(), binary()}), + bitstring()} | + {more_required_for_headers, + fun((bitstring()) -> {ok, multipart_headers()} | {error, nil})}. + +-type multipart_body() :: {multipart_body, bitstring(), boolean(), bitstring()} | + {more_required_for_body, + bitstring(), + fun((bitstring()) -> {ok, multipart_body()} | {error, nil})}. + +-type content_disposition() :: {content_disposition, + binary(), + list({binary(), binary()})}. + +-spec parse_method(binary()) -> {ok, method()} | {error, nil}. +parse_method(S) -> + case gleam@string:lowercase(S) of + <<"connect"/utf8>> -> + {ok, connect}; + + <<"delete"/utf8>> -> + {ok, delete}; + + <<"get"/utf8>> -> + {ok, get}; + + <<"head"/utf8>> -> + {ok, head}; + + <<"options"/utf8>> -> + {ok, options}; + + <<"patch"/utf8>> -> + {ok, patch}; + + <<"post"/utf8>> -> + {ok, post}; + + <<"put"/utf8>> -> + {ok, put}; + + <<"trace"/utf8>> -> + {ok, trace}; + + _ -> + {error, nil} + end. + +-spec method_to_string(method()) -> binary(). +method_to_string(Method) -> + case Method of + connect -> + <<"connect"/utf8>>; + + delete -> + <<"delete"/utf8>>; + + get -> + <<"get"/utf8>>; + + head -> + <<"head"/utf8>>; + + options -> + <<"options"/utf8>>; + + patch -> + <<"patch"/utf8>>; + + post -> + <<"post"/utf8>>; + + put -> + <<"put"/utf8>>; + + trace -> + <<"trace"/utf8>>; + + {other, S} -> + S + end. + +-spec scheme_to_string(scheme()) -> binary(). +scheme_to_string(Scheme) -> + case Scheme of + http -> + <<"http"/utf8>>; + + https -> + <<"https"/utf8>> + end. + +-spec scheme_from_string(binary()) -> {ok, scheme()} | {error, nil}. +scheme_from_string(Scheme) -> + case gleam@string:lowercase(Scheme) of + <<"http"/utf8>> -> + {ok, http}; + + <<"https"/utf8>> -> + {ok, https}; + + _ -> + {error, nil} + end. + +-spec skip_whitespace(bitstring()) -> bitstring(). +skip_whitespace(Data) -> + case Data of + <<32, Data@1/binary>> -> + skip_whitespace(Data@1); + + <<9, Data@1/binary>> -> + skip_whitespace(Data@1); + + _ -> + Data + end. + +-spec more_please_headers( + fun((bitstring()) -> {ok, multipart_headers()} | {error, nil}), + bitstring() +) -> {ok, multipart_headers()} | {error, nil}. +more_please_headers(Continuation, Existing) -> + {ok, + {more_required_for_headers, + fun(More) -> + gleam@bool:guard( + More =:= <<>>, + {error, nil}, + fun() -> + Continuation(<<Existing/bitstring, More/bitstring>>) + end + ) + end}}. + +-spec parse_rfc_2045_parameter_quoted_value(binary(), binary(), binary()) -> {ok, + {{binary(), binary()}, binary()}} | + {error, nil}. +parse_rfc_2045_parameter_quoted_value(Header, Name, Value) -> + case gleam@string:pop_grapheme(Header) of + {error, nil} -> + {error, nil}; + + {ok, {<<"\""/utf8>>, Rest}} -> + {ok, {{Name, Value}, Rest}}; + + {ok, {<<"\\"/utf8>>, Rest@1}} -> + gleam@result:'try'( + gleam@string:pop_grapheme(Rest@1), + fun(_use0) -> + {Grapheme, Rest@2} = _use0, + parse_rfc_2045_parameter_quoted_value( + Rest@2, + Name, + <<Value/binary, Grapheme/binary>> + ) + end + ); + + {ok, {Grapheme@1, Rest@3}} -> + parse_rfc_2045_parameter_quoted_value( + Rest@3, + Name, + <<Value/binary, Grapheme@1/binary>> + ) + end. + +-spec parse_rfc_2045_parameter_unquoted_value(binary(), binary(), binary()) -> {{binary(), + binary()}, + binary()}. +parse_rfc_2045_parameter_unquoted_value(Header, Name, Value) -> + case gleam@string:pop_grapheme(Header) of + {error, nil} -> + {{Name, Value}, Header}; + + {ok, {<<";"/utf8>>, Rest}} -> + {{Name, Value}, Rest}; + + {ok, {<<" "/utf8>>, Rest}} -> + {{Name, Value}, Rest}; + + {ok, {<<"\t"/utf8>>, Rest}} -> + {{Name, Value}, Rest}; + + {ok, {Grapheme, Rest@1}} -> + parse_rfc_2045_parameter_unquoted_value( + Rest@1, + Name, + <<Value/binary, Grapheme/binary>> + ) + end. + +-spec parse_rfc_2045_parameter_value(binary(), binary()) -> {ok, + {{binary(), binary()}, binary()}} | + {error, nil}. +parse_rfc_2045_parameter_value(Header, Name) -> + case gleam@string:pop_grapheme(Header) of + {error, nil} -> + {error, nil}; + + {ok, {<<"\""/utf8>>, Rest}} -> + parse_rfc_2045_parameter_quoted_value(Rest, Name, <<""/utf8>>); + + {ok, {Grapheme, Rest@1}} -> + {ok, + parse_rfc_2045_parameter_unquoted_value(Rest@1, Name, Grapheme)} + end. + +-spec parse_rfc_2045_parameter(binary(), binary()) -> {ok, + {{binary(), binary()}, binary()}} | + {error, nil}. +parse_rfc_2045_parameter(Header, Name) -> + gleam@result:'try'( + gleam@string:pop_grapheme(Header), + fun(_use0) -> + {Grapheme, Rest} = _use0, + case Grapheme of + <<"="/utf8>> -> + parse_rfc_2045_parameter_value(Rest, Name); + + _ -> + parse_rfc_2045_parameter( + Rest, + <<Name/binary, + (gleam@string:lowercase(Grapheme))/binary>> + ) + end + end + ). + +-spec parse_rfc_2045_parameters(binary(), list({binary(), binary()})) -> {ok, + list({binary(), binary()})} | + {error, nil}. +parse_rfc_2045_parameters(Header, Parameters) -> + case gleam@string:pop_grapheme(Header) of + {error, nil} -> + {ok, gleam@list:reverse(Parameters)}; + + {ok, {<<";"/utf8>>, Rest}} -> + parse_rfc_2045_parameters(Rest, Parameters); + + {ok, {<<" "/utf8>>, Rest}} -> + parse_rfc_2045_parameters(Rest, Parameters); + + {ok, {<<"\t"/utf8>>, Rest}} -> + parse_rfc_2045_parameters(Rest, Parameters); + + {ok, {Grapheme, Rest@1}} -> + Acc = gleam@string:lowercase(Grapheme), + gleam@result:'try'( + parse_rfc_2045_parameter(Rest@1, Acc), + fun(_use0) -> + {Parameter, Rest@2} = _use0, + parse_rfc_2045_parameters(Rest@2, [Parameter | Parameters]) + end + ) + end. + +-spec parse_content_disposition_type(binary(), binary()) -> {ok, + content_disposition()} | + {error, nil}. +parse_content_disposition_type(Header, Name) -> + case gleam@string:pop_grapheme(Header) of + {error, nil} -> + {ok, {content_disposition, Name, []}}; + + {ok, {<<" "/utf8>>, Rest}} -> + Result = parse_rfc_2045_parameters(Rest, []), + gleam@result:map( + Result, + fun(Parameters) -> {content_disposition, Name, Parameters} end + ); + + {ok, {<<"\t"/utf8>>, Rest}} -> + Result = parse_rfc_2045_parameters(Rest, []), + gleam@result:map( + Result, + fun(Parameters) -> {content_disposition, Name, Parameters} end + ); + + {ok, {<<";"/utf8>>, Rest}} -> + Result = parse_rfc_2045_parameters(Rest, []), + gleam@result:map( + Result, + fun(Parameters) -> {content_disposition, Name, Parameters} end + ); + + {ok, {Grapheme, Rest@1}} -> + parse_content_disposition_type( + Rest@1, + <<Name/binary, (gleam@string:lowercase(Grapheme))/binary>> + ) + end. + +-spec parse_content_disposition(binary()) -> {ok, content_disposition()} | + {error, nil}. +parse_content_disposition(Header) -> + parse_content_disposition_type(Header, <<""/utf8>>). + +-spec more_please_body( + fun((bitstring()) -> {ok, multipart_body()} | {error, nil}), + bitstring(), + bitstring() +) -> {ok, multipart_body()} | {error, nil}. +more_please_body(Continuation, Chunk, Existing) -> + _pipe = fun(More) -> + gleam@bool:guard( + More =:= <<>>, + {error, nil}, + fun() -> Continuation(<<Existing/bitstring, More/bitstring>>) end + ) + end, + _pipe@1 = {more_required_for_body, Chunk, _pipe}, + {ok, _pipe@1}. + +-spec parse_body_loop(bitstring(), bitstring(), bitstring()) -> {ok, + multipart_body()} | + {error, nil}. +parse_body_loop(Data, Boundary, Body) -> + Dsize = erlang:byte_size(Data), + Bsize = erlang:byte_size(Boundary), + Required = 6 + Bsize, + case Data of + _ when Dsize < Required -> + more_please_body( + fun(_capture) -> parse_body_loop(_capture, Boundary, <<>>) end, + Body, + Data + ); + + <<13, 10, Data@1/binary>> -> + Desired = <<45, 45, Boundary/bitstring>>, + Size = erlang:byte_size(Desired), + Dsize@1 = erlang:byte_size(Data@1), + Prefix = gleam_stdlib:bit_array_slice(Data@1, 0, Size), + Rest = gleam_stdlib:bit_array_slice(Data@1, Size, Dsize@1 - Size), + case {Prefix =:= {ok, Desired}, Rest} of + {true, {ok, <<13, 10, _/binary>>}} -> + {ok, {multipart_body, Body, false, Data@1}}; + + {true, {ok, <<45, 45, Data@2/binary>>}} -> + {ok, {multipart_body, Body, true, Data@2}}; + + {false, _} -> + parse_body_loop( + Data@1, + Boundary, + <<Body/bitstring, 13, 10>> + ); + + {_, _} -> + {error, nil} + end; + + <<Char, Data@3/binary>> -> + parse_body_loop(Data@3, Boundary, <<Body/bitstring, Char>>) + end. + +-spec parse_body_with_bit_array(bitstring(), bitstring()) -> {ok, + multipart_body()} | + {error, nil}. +parse_body_with_bit_array(Data, Boundary) -> + Bsize = erlang:byte_size(Boundary), + Prefix = gleam_stdlib:bit_array_slice(Data, 0, 2 + Bsize), + case Prefix =:= {ok, <<45, 45, Boundary/bitstring>>} of + true -> + {ok, {multipart_body, <<>>, false, Data}}; + + false -> + parse_body_loop(Data, Boundary, <<>>) + end. + +-spec parse_multipart_body(bitstring(), binary()) -> {ok, multipart_body()} | + {error, nil}. +parse_multipart_body(Data, Boundary) -> + _pipe = Boundary, + _pipe@1 = gleam_stdlib:identity(_pipe), + parse_body_with_bit_array(Data, _pipe@1). + +-spec method_from_dynamic(gleam@dynamic:dynamic_()) -> {ok, method()} | + {error, list(gleam@dynamic:decode_error())}. +method_from_dynamic(Value) -> + case gleam_http_native:decode_method(Value) of + {ok, Method} -> + {ok, Method}; + + {error, _} -> + {error, + [{decode_error, + <<"HTTP method"/utf8>>, + gleam@dynamic:classify(Value), + []}]} + end. + +-spec parse_header_value( + bitstring(), + list({binary(), binary()}), + bitstring(), + bitstring() +) -> {ok, multipart_headers()} | {error, nil}. +parse_header_value(Data, Headers, Name, Value) -> + Size = erlang:byte_size(Data), + case Data of + _ when Size < 4 -> + _pipe@2 = fun(Data@1) -> _pipe = Data@1, + _pipe@1 = skip_whitespace(_pipe), + parse_header_value(_pipe@1, Headers, Name, Value) end, + more_please_headers(_pipe@2, Data); + + <<13, 10, 13, 10, Data@2/binary>> -> + gleam@result:'try'( + gleam@bit_array:to_string(Name), + fun(Name@1) -> + gleam@result:map( + gleam@bit_array:to_string(Value), + fun(Value@1) -> + Headers@1 = gleam@list:reverse( + [{gleam@string:lowercase(Name@1), Value@1} | + Headers] + ), + {multipart_headers, Headers@1, Data@2} + end + ) + end + ); + + <<13, 10, 32, Data@3/binary>> -> + parse_header_value(Data@3, Headers, Name, Value); + + <<13, 10, 9, Data@3/binary>> -> + parse_header_value(Data@3, Headers, Name, Value); + + <<13, 10, Data@4/binary>> -> + gleam@result:'try'( + gleam@bit_array:to_string(Name), + fun(Name@2) -> + gleam@result:'try'( + gleam@bit_array:to_string(Value), + fun(Value@2) -> + Headers@2 = [{gleam@string:lowercase(Name@2), + Value@2} | + Headers], + parse_header_name(Data@4, Headers@2, <<>>) + end + ) + end + ); + + <<Char, Rest/binary>> -> + Value@3 = <<Value/bitstring, Char>>, + parse_header_value(Rest, Headers, Name, Value@3); + + _ -> + {error, nil} + end. + +-spec parse_header_name(bitstring(), list({binary(), binary()}), bitstring()) -> {ok, + multipart_headers()} | + {error, nil}. +parse_header_name(Data, Headers, Name) -> + case skip_whitespace(Data) of + <<58, Data@1/binary>> -> + _pipe = Data@1, + _pipe@1 = skip_whitespace(_pipe), + parse_header_value(_pipe@1, Headers, Name, <<>>); + + <<Char, Data@2/binary>> -> + parse_header_name(Data@2, Headers, <<Name/bitstring, Char>>); + + <<>> -> + more_please_headers( + fun(_capture) -> parse_header_name(_capture, Headers, Name) end, + Data + ) + end. + +-spec do_parse_headers(bitstring()) -> {ok, multipart_headers()} | {error, nil}. +do_parse_headers(Data) -> + case Data of + <<13, 10, 13, 10, Data@1/binary>> -> + {ok, {multipart_headers, [], Data@1}}; + + <<13, 10, Data@2/binary>> -> + parse_header_name(Data@2, [], <<>>); + + <<13>> -> + more_please_headers(fun do_parse_headers/1, Data); + + <<>> -> + more_please_headers(fun do_parse_headers/1, Data); + + _ -> + {error, nil} + end. + +-spec parse_headers_after_prelude(bitstring(), bitstring()) -> {ok, + multipart_headers()} | + {error, nil}. +parse_headers_after_prelude(Data, Boundary) -> + Dsize = erlang:byte_size(Data), + Bsize = erlang:byte_size(Boundary), + Required_size = Bsize + 4, + gleam@bool:guard( + Dsize < Required_size, + more_please_headers( + fun(_capture) -> parse_headers_after_prelude(_capture, Boundary) end, + Data + ), + fun() -> + gleam@result:'try'( + gleam_stdlib:bit_array_slice(Data, 0, Required_size - 2), + fun(Prefix) -> + gleam@result:'try'( + gleam_stdlib:bit_array_slice(Data, 2 + Bsize, 2), + fun(Second) -> + Desired = <<45, 45, Boundary/bitstring>>, + gleam@bool:guard( + Prefix /= Desired, + {error, nil}, + fun() -> case Second =:= <<45, 45>> of + true -> + Rest_size = Dsize - Required_size, + gleam@result:map( + gleam_stdlib:bit_array_slice( + Data, + Required_size, + Rest_size + ), + fun(Data@1) -> + {multipart_headers, + [], + Data@1} + end + ); + + false -> + Start = Required_size - 2, + Rest_size@1 = (Dsize - Required_size) + + 2, + gleam@result:'try'( + gleam_stdlib:bit_array_slice( + Data, + Start, + Rest_size@1 + ), + fun(Data@2) -> + do_parse_headers(Data@2) + end + ) + end end + ) + end + ) + end + ) + end + ). + +-spec skip_preamble(bitstring(), bitstring()) -> {ok, multipart_headers()} | + {error, nil}. +skip_preamble(Data, Boundary) -> + Data_size = erlang:byte_size(Data), + Boundary_size = erlang:byte_size(Boundary), + Required = Boundary_size + 4, + case Data of + _ when Data_size < Required -> + more_please_headers( + fun(_capture) -> skip_preamble(_capture, Boundary) end, + Data + ); + + <<13, 10, 45, 45, Data@1/binary>> -> + case gleam_stdlib:bit_array_slice(Data@1, 0, Boundary_size) of + {ok, Prefix} when Prefix =:= Boundary -> + Start = Boundary_size, + Length = erlang:byte_size(Data@1) - Boundary_size, + gleam@result:'try'( + gleam_stdlib:bit_array_slice(Data@1, Start, Length), + fun(Rest) -> do_parse_headers(Rest) end + ); + + {ok, _} -> + skip_preamble(Data@1, Boundary); + + {error, _} -> + {error, nil} + end; + + <<_, Data@2/binary>> -> + skip_preamble(Data@2, Boundary) + end. + +-spec parse_multipart_headers(bitstring(), binary()) -> {ok, + multipart_headers()} | + {error, nil}. +parse_multipart_headers(Data, Boundary) -> + Boundary@1 = gleam_stdlib:identity(Boundary), + Prefix = <<45, 45, Boundary@1/bitstring>>, + case gleam_stdlib:bit_array_slice(Data, 0, erlang:byte_size(Prefix)) =:= {ok, + Prefix} of + true -> + parse_headers_after_prelude(Data, Boundary@1); + + false -> + skip_preamble(Data, Boundary@1) + end. diff --git a/aoc2023/build/packages/gleam_http/src/gleam@http@cookie.erl b/aoc2023/build/packages/gleam_http/src/gleam@http@cookie.erl new file mode 100644 index 0000000..9d6d13e --- /dev/null +++ b/aoc2023/build/packages/gleam_http/src/gleam@http@cookie.erl @@ -0,0 +1,153 @@ +-module(gleam@http@cookie). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([defaults/1, set_header/3, parse/1]). +-export_type([same_site_policy/0, attributes/0]). + +-type same_site_policy() :: lax | strict | none. + +-type attributes() :: {attributes, + gleam@option:option(integer()), + gleam@option:option(binary()), + gleam@option:option(binary()), + boolean(), + boolean(), + gleam@option:option(same_site_policy())}. + +-spec same_site_to_string(same_site_policy()) -> binary(). +same_site_to_string(Policy) -> + case Policy of + lax -> + <<"Lax"/utf8>>; + + strict -> + <<"Strict"/utf8>>; + + none -> + <<"None"/utf8>> + end. + +-spec defaults(gleam@http:scheme()) -> attributes(). +defaults(Scheme) -> + {attributes, + none, + none, + {some, <<"/"/utf8>>}, + Scheme =:= https, + true, + {some, lax}}. + +-spec cookie_attributes_to_list(attributes()) -> list(list(binary())). +cookie_attributes_to_list(Attributes) -> + {attributes, Max_age, Domain, Path, Secure, Http_only, Same_site} = Attributes, + _pipe = [case Max_age of + {some, 0} -> + {some, [<<"Expires=Thu, 01 Jan 1970 00:00:00 GMT"/utf8>>]}; + + _ -> + none + end, gleam@option:map( + Max_age, + fun(Max_age@1) -> + [<<"Max-Age="/utf8>>, gleam@int:to_string(Max_age@1)] + end + ), gleam@option:map( + Domain, + fun(Domain@1) -> [<<"Domain="/utf8>>, Domain@1] end + ), gleam@option:map(Path, fun(Path@1) -> [<<"Path="/utf8>>, Path@1] end), case Secure of + true -> + {some, [<<"Secure"/utf8>>]}; + + false -> + none + end, case Http_only of + true -> + {some, [<<"HttpOnly"/utf8>>]}; + + false -> + none + end, gleam@option:map( + Same_site, + fun(Same_site@1) -> + [<<"SameSite="/utf8>>, same_site_to_string(Same_site@1)] + end + )], + gleam@list:filter_map( + _pipe, + fun(_capture) -> gleam@option:to_result(_capture, nil) end + ). + +-spec set_header(binary(), binary(), attributes()) -> binary(). +set_header(Name, Value, Attributes) -> + _pipe = [[Name, <<"="/utf8>>, Value] | + cookie_attributes_to_list(Attributes)], + _pipe@1 = gleam@list:map( + _pipe, + fun(_capture) -> gleam@string:join(_capture, <<""/utf8>>) end + ), + gleam@string:join(_pipe@1, <<"; "/utf8>>). + +-spec check_token(binary()) -> {ok, nil} | {error, nil}. +check_token(Token) -> + case gleam@string:pop_grapheme(Token) of + {error, nil} -> + {ok, nil}; + + {ok, {<<" "/utf8>>, _}} -> + {error, nil}; + + {ok, {<<"\t"/utf8>>, _}} -> + {error, nil}; + + {ok, {<<"\r"/utf8>>, _}} -> + {error, nil}; + + {ok, {<<"\n"/utf8>>, _}} -> + {error, nil}; + + {ok, {<<"\f"/utf8>>, _}} -> + {error, nil}; + + {ok, {_, Rest}} -> + check_token(Rest) + end. + +-spec parse(binary()) -> list({binary(), binary()}). +parse(Cookie_string) -> + _assert_subject = gleam@regex:from_string(<<"[,;]"/utf8>>), + {ok, Re} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam/http/cookie"/utf8>>, + function => <<"parse"/utf8>>, + line => 101}) + end, + _pipe = gleam@regex:split(Re, Cookie_string), + gleam@list:filter_map( + _pipe, + fun(Pair) -> + case gleam@string:split_once(gleam@string:trim(Pair), <<"="/utf8>>) of + {ok, {<<""/utf8>>, _}} -> + {error, nil}; + + {ok, {Key, Value}} -> + Key@1 = gleam@string:trim(Key), + Value@1 = gleam@string:trim(Value), + gleam@result:then( + check_token(Key@1), + fun(_) -> + gleam@result:then( + check_token(Value@1), + fun(_) -> {ok, {Key@1, Value@1}} end + ) + end + ); + + {error, nil} -> + {error, nil} + end + end + ). diff --git a/aoc2023/build/packages/gleam_http/src/gleam@http@request.erl b/aoc2023/build/packages/gleam_http/src/gleam@http@request.erl new file mode 100644 index 0000000..630788d --- /dev/null +++ b/aoc2023/build/packages/gleam_http/src/gleam@http@request.erl @@ -0,0 +1,202 @@ +-module(gleam@http@request). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([to_uri/1, from_uri/1, get_header/2, set_header/3, prepend_header/3, set_body/2, map/2, path_segments/1, get_query/1, set_query/2, set_method/2, new/0, to/1, set_scheme/2, set_host/2, set_port/2, set_path/2, set_cookie/3, get_cookies/1]). +-export_type([request/1]). + +-type request(FYJ) :: {request, + gleam@http:method(), + list({binary(), binary()}), + FYJ, + gleam@http:scheme(), + binary(), + gleam@option:option(integer()), + binary(), + gleam@option:option(binary())}. + +-spec to_uri(request(any())) -> gleam@uri:uri(). +to_uri(Request) -> + {uri, + {some, gleam@http:scheme_to_string(erlang:element(5, Request))}, + none, + {some, erlang:element(6, Request)}, + erlang:element(7, Request), + erlang:element(8, Request), + erlang:element(9, Request), + none}. + +-spec from_uri(gleam@uri:uri()) -> {ok, request(binary())} | {error, nil}. +from_uri(Uri) -> + gleam@result:then( + begin + _pipe = erlang:element(2, Uri), + _pipe@1 = gleam@option:unwrap(_pipe, <<""/utf8>>), + gleam@http:scheme_from_string(_pipe@1) + end, + fun(Scheme) -> + gleam@result:then( + begin + _pipe@2 = erlang:element(4, Uri), + gleam@option:to_result(_pipe@2, nil) + end, + fun(Host) -> + Req = {request, + get, + [], + <<""/utf8>>, + Scheme, + Host, + erlang:element(5, Uri), + erlang:element(6, Uri), + erlang:element(7, Uri)}, + {ok, Req} + end + ) + end + ). + +-spec get_header(request(any()), binary()) -> {ok, binary()} | {error, nil}. +get_header(Request, Key) -> + gleam@list:key_find(erlang:element(3, Request), gleam@string:lowercase(Key)). + +-spec set_header(request(FYT), binary(), binary()) -> request(FYT). +set_header(Request, Key, Value) -> + Headers = gleam@list:key_set( + erlang:element(3, Request), + gleam@string:lowercase(Key), + Value + ), + erlang:setelement(3, Request, Headers). + +-spec prepend_header(request(FYW), binary(), binary()) -> request(FYW). +prepend_header(Request, Key, Value) -> + Headers = [{gleam@string:lowercase(Key), Value} | + erlang:element(3, Request)], + erlang:setelement(3, Request, Headers). + +-spec set_body(request(any()), FZB) -> request(FZB). +set_body(Req, Body) -> + {request, Method, Headers, _, Scheme, Host, Port, Path, Query} = Req, + {request, Method, Headers, Body, Scheme, Host, Port, Path, Query}. + +-spec map(request(FZD), fun((FZD) -> FZF)) -> request(FZF). +map(Request, Transform) -> + _pipe = erlang:element(4, Request), + _pipe@1 = Transform(_pipe), + set_body(Request, _pipe@1). + +-spec path_segments(request(any())) -> list(binary()). +path_segments(Request) -> + _pipe = erlang:element(8, Request), + gleam@uri:path_segments(_pipe). + +-spec get_query(request(any())) -> {ok, list({binary(), binary()})} | + {error, nil}. +get_query(Request) -> + case erlang:element(9, Request) of + {some, Query_string} -> + gleam@uri:parse_query(Query_string); + + none -> + {ok, []} + end. + +-spec set_query(request(FZP), list({binary(), binary()})) -> request(FZP). +set_query(Req, Query) -> + Pair = fun(T) -> + gleam@string_builder:from_strings( + [erlang:element(1, T), <<"="/utf8>>, erlang:element(2, T)] + ) + end, + Query@1 = begin + _pipe = Query, + _pipe@1 = gleam@list:map(_pipe, Pair), + _pipe@2 = gleam@list:intersperse( + _pipe@1, + gleam@string_builder:from_string(<<"&"/utf8>>) + ), + _pipe@3 = gleam@string_builder:concat(_pipe@2), + _pipe@4 = gleam@string_builder:to_string(_pipe@3), + {some, _pipe@4} + end, + erlang:setelement(9, Req, Query@1). + +-spec set_method(request(FZT), gleam@http:method()) -> request(FZT). +set_method(Req, Method) -> + erlang:setelement(2, Req, Method). + +-spec new() -> request(binary()). +new() -> + {request, + get, + [], + <<""/utf8>>, + https, + <<"localhost"/utf8>>, + none, + <<""/utf8>>, + none}. + +-spec to(binary()) -> {ok, request(binary())} | {error, nil}. +to(Url) -> + _pipe = Url, + _pipe@1 = gleam@uri:parse(_pipe), + gleam@result:then(_pipe@1, fun from_uri/1). + +-spec set_scheme(request(GAA), gleam@http:scheme()) -> request(GAA). +set_scheme(Req, Scheme) -> + erlang:setelement(5, Req, Scheme). + +-spec set_host(request(GAD), binary()) -> request(GAD). +set_host(Req, Host) -> + erlang:setelement(6, Req, Host). + +-spec set_port(request(GAG), integer()) -> request(GAG). +set_port(Req, Port) -> + erlang:setelement(7, Req, {some, Port}). + +-spec set_path(request(GAJ), binary()) -> request(GAJ). +set_path(Req, Path) -> + erlang:setelement(8, Req, Path). + +-spec set_cookie(request(GAM), binary(), binary()) -> request(GAM). +set_cookie(Req, Name, Value) -> + New_cookie_string = gleam@string:join([Name, Value], <<"="/utf8>>), + {Cookies_string@2, Headers@1} = case gleam@list:key_pop( + erlang:element(3, Req), + <<"cookie"/utf8>> + ) of + {ok, {Cookies_string, Headers}} -> + Cookies_string@1 = gleam@string:join( + [Cookies_string, New_cookie_string], + <<"; "/utf8>> + ), + {Cookies_string@1, Headers}; + + {error, nil} -> + {New_cookie_string, erlang:element(3, Req)} + end, + erlang:setelement( + 3, + Req, + [{<<"cookie"/utf8>>, Cookies_string@2} | Headers@1] + ). + +-spec get_cookies(request(any())) -> list({binary(), binary()}). +get_cookies(Req) -> + {request, _, Headers, _, _, _, _, _, _} = Req, + _pipe = Headers, + _pipe@1 = gleam@list:filter_map( + _pipe, + fun(Header) -> + {Name, Value} = Header, + case Name of + <<"cookie"/utf8>> -> + {ok, gleam@http@cookie:parse(Value)}; + + _ -> + {error, nil} + end + end + ), + gleam@list:flatten(_pipe@1). diff --git a/aoc2023/build/packages/gleam_http/src/gleam@http@response.erl b/aoc2023/build/packages/gleam_http/src/gleam@http@response.erl new file mode 100644 index 0000000..b073c1d --- /dev/null +++ b/aoc2023/build/packages/gleam_http/src/gleam@http@response.erl @@ -0,0 +1,97 @@ +-module(gleam@http@response). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([new/1, get_header/2, set_header/3, prepend_header/3, set_body/2, try_map/2, map/2, redirect/1, get_cookies/1, set_cookie/4, expire_cookie/3]). +-export_type([response/1]). + +-type response(GFN) :: {response, integer(), list({binary(), binary()}), GFN}. + +-spec new(integer()) -> response(binary()). +new(Status) -> + {response, Status, [], <<""/utf8>>}. + +-spec get_header(response(any()), binary()) -> {ok, binary()} | {error, nil}. +get_header(Response, Key) -> + gleam@list:key_find( + erlang:element(3, Response), + gleam@string:lowercase(Key) + ). + +-spec set_header(response(GGC), binary(), binary()) -> response(GGC). +set_header(Response, Key, Value) -> + Headers = gleam@list:key_set( + erlang:element(3, Response), + gleam@string:lowercase(Key), + Value + ), + erlang:setelement(3, Response, Headers). + +-spec prepend_header(response(GGF), binary(), binary()) -> response(GGF). +prepend_header(Response, Key, Value) -> + Headers = [{gleam@string:lowercase(Key), Value} | + erlang:element(3, Response)], + erlang:setelement(3, Response, Headers). + +-spec set_body(response(any()), GGK) -> response(GGK). +set_body(Response, Body) -> + {response, Status, Headers, _} = Response, + {response, Status, Headers, Body}. + +-spec try_map(response(GFO), fun((GFO) -> {ok, GFQ} | {error, GFR})) -> {ok, + response(GFQ)} | + {error, GFR}. +try_map(Response, Transform) -> + gleam@result:then( + Transform(erlang:element(4, Response)), + fun(Body) -> {ok, set_body(Response, Body)} end + ). + +-spec map(response(GGM), fun((GGM) -> GGO)) -> response(GGO). +map(Response, Transform) -> + _pipe = erlang:element(4, Response), + _pipe@1 = Transform(_pipe), + set_body(Response, _pipe@1). + +-spec redirect(binary()) -> response(binary()). +redirect(Uri) -> + {response, + 303, + [{<<"location"/utf8>>, Uri}], + gleam@string:append(<<"You are being redirected to "/utf8>>, Uri)}. + +-spec get_cookies(response(any())) -> list({binary(), binary()}). +get_cookies(Resp) -> + {response, _, Headers, _} = Resp, + _pipe = Headers, + _pipe@1 = gleam@list:filter_map( + _pipe, + fun(Header) -> + {Name, Value} = Header, + case Name of + <<"set-cookie"/utf8>> -> + {ok, gleam@http@cookie:parse(Value)}; + + _ -> + {error, nil} + end + end + ), + gleam@list:flatten(_pipe@1). + +-spec set_cookie( + response(GGT), + binary(), + binary(), + gleam@http@cookie:attributes() +) -> response(GGT). +set_cookie(Response, Name, Value, Attributes) -> + prepend_header( + Response, + <<"set-cookie"/utf8>>, + gleam@http@cookie:set_header(Name, Value, Attributes) + ). + +-spec expire_cookie(response(GGW), binary(), gleam@http@cookie:attributes()) -> response(GGW). +expire_cookie(Response, Name, Attributes) -> + Attrs = erlang:setelement(2, Attributes, {some, 0}), + set_cookie(Response, Name, <<""/utf8>>, Attrs). diff --git a/aoc2023/build/packages/gleam_http/src/gleam@http@service.erl b/aoc2023/build/packages/gleam_http/src/gleam@http@service.erl new file mode 100644 index 0000000..d07b31f --- /dev/null +++ b/aoc2023/build/packages/gleam_http/src/gleam@http@service.erl @@ -0,0 +1,82 @@ +-module(gleam@http@service). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([map_response_body/2, prepend_response_header/3, method_override/1]). + +-spec map_response_body( + fun((gleam@http@request:request(GJL)) -> gleam@http@response:response(GJM)), + fun((GJM) -> GJP) +) -> fun((gleam@http@request:request(GJL)) -> gleam@http@response:response(GJP)). +map_response_body(Service, Mapper) -> + fun(Req) -> _pipe = Req, + _pipe@1 = Service(_pipe), + gleam@http@response:map(_pipe@1, Mapper) end. + +-spec prepend_response_header( + fun((gleam@http@request:request(GJS)) -> gleam@http@response:response(GJT)), + binary(), + binary() +) -> fun((gleam@http@request:request(GJS)) -> gleam@http@response:response(GJT)). +prepend_response_header(Service, Key, Value) -> + fun(Req) -> _pipe = Req, + _pipe@1 = Service(_pipe), + gleam@http@response:prepend_header(_pipe@1, Key, Value) end. + +-spec ensure_post(gleam@http@request:request(GJY)) -> {ok, + gleam@http@request:request(GJY)} | + {error, nil}. +ensure_post(Req) -> + case erlang:element(2, Req) of + post -> + {ok, Req}; + + _ -> + {error, nil} + end. + +-spec get_override_method(gleam@http@request:request(any())) -> {ok, + gleam@http:method()} | + {error, nil}. +get_override_method(Request) -> + gleam@result:then( + gleam@http@request:get_query(Request), + fun(Query_params) -> + gleam@result:then( + gleam@list:key_find(Query_params, <<"_method"/utf8>>), + fun(Method) -> + gleam@result:then( + gleam@http:parse_method(Method), + fun(Method@1) -> case Method@1 of + put -> + {ok, Method@1}; + + patch -> + {ok, Method@1}; + + delete -> + {ok, Method@1}; + + _ -> + {error, nil} + end end + ) + end + ) + end + ). + +-spec method_override( + fun((gleam@http@request:request(GKF)) -> gleam@http@response:response(GKG)) +) -> fun((gleam@http@request:request(GKF)) -> gleam@http@response:response(GKG)). +method_override(Service) -> + fun(Request) -> _pipe = Request, + _pipe@1 = ensure_post(_pipe), + _pipe@2 = gleam@result:then(_pipe@1, fun get_override_method/1), + _pipe@3 = gleam@result:map( + _pipe@2, + fun(_capture) -> + gleam@http@request:set_method(Request, _capture) + end + ), + _pipe@4 = gleam@result:unwrap(_pipe@3, Request), + Service(_pipe@4) end. diff --git a/aoc2023/build/packages/gleam_http/src/gleam_http.app.src b/aoc2023/build/packages/gleam_http/src/gleam_http.app.src new file mode 100644 index 0000000..c37ad54 --- /dev/null +++ b/aoc2023/build/packages/gleam_http/src/gleam_http.app.src @@ -0,0 +1,12 @@ +{application, gleam_http, [ + {vsn, "3.5.2"}, + {applications, [gleam_stdlib, + gleeunit]}, + {description, "Types and functions for Gleam HTTP clients and servers"}, + {modules, [gleam@http, + gleam@http@cookie, + gleam@http@request, + gleam@http@response, + gleam@http@service]}, + {registered, []} +]}. diff --git a/aoc2023/build/packages/gleam_http/src/gleam_http_native.erl b/aoc2023/build/packages/gleam_http/src/gleam_http_native.erl new file mode 100644 index 0000000..bb499bb --- /dev/null +++ b/aoc2023/build/packages/gleam_http/src/gleam_http_native.erl @@ -0,0 +1,88 @@ +-module(gleam_http_native). +-export([decode_method/1]). + +decode_method(Term) -> + case Term of + "connect" -> {ok, connect}; + "delete" -> {ok, delete}; + "get" -> {ok, get}; + "head" -> {ok, head}; + "options" -> {ok, options}; + "patch" -> {ok, patch}; + "post" -> {ok, post}; + "put" -> {ok, put}; + "trace" -> {ok, trace}; + "CONNECT" -> {ok, connect}; + "DELETE" -> {ok, delete}; + "GET" -> {ok, get}; + "HEAD" -> {ok, head}; + "OPTIONS" -> {ok, options}; + "PATCH" -> {ok, patch}; + "POST" -> {ok, post}; + "PUT" -> {ok, put}; + "TRACE" -> {ok, trace}; + "Connect" -> {ok, connect}; + "Delete" -> {ok, delete}; + "Get" -> {ok, get}; + "Head" -> {ok, head}; + "Options" -> {ok, options}; + "Patch" -> {ok, patch}; + "Post" -> {ok, post}; + "Put" -> {ok, put}; + "Trace" -> {ok, trace}; + 'connect' -> {ok, connect}; + 'delete' -> {ok, delete}; + 'get' -> {ok, get}; + 'head' -> {ok, head}; + 'options' -> {ok, options}; + 'patch' -> {ok, patch}; + 'post' -> {ok, post}; + 'put' -> {ok, put}; + 'trace' -> {ok, trace}; + 'CONNECT' -> {ok, connect}; + 'DELETE' -> {ok, delete}; + 'GET' -> {ok, get}; + 'HEAD' -> {ok, head}; + 'OPTIONS' -> {ok, options}; + 'PATCH' -> {ok, patch}; + 'POST' -> {ok, post}; + 'PUT' -> {ok, put}; + 'TRACE' -> {ok, trace}; + 'Connect' -> {ok, connect}; + 'Delete' -> {ok, delete}; + 'Get' -> {ok, get}; + 'Head' -> {ok, head}; + 'Options' -> {ok, options}; + 'Patch' -> {ok, patch}; + 'Post' -> {ok, post}; + 'Put' -> {ok, put}; + 'Trace' -> {ok, trace}; + <<"connect">> -> {ok, connect}; + <<"delete">> -> {ok, delete}; + <<"get">> -> {ok, get}; + <<"head">> -> {ok, head}; + <<"options">> -> {ok, options}; + <<"patch">> -> {ok, patch}; + <<"post">> -> {ok, post}; + <<"put">> -> {ok, put}; + <<"trace">> -> {ok, trace}; + <<"CONNECT">> -> {ok, connect}; + <<"DELETE">> -> {ok, delete}; + <<"GET">> -> {ok, get}; + <<"HEAD">> -> {ok, head}; + <<"OPTIONS">> -> {ok, options}; + <<"PATCH">> -> {ok, patch}; + <<"POST">> -> {ok, post}; + <<"PUT">> -> {ok, put}; + <<"TRACE">> -> {ok, trace}; + <<"Connect">> -> {ok, connect}; + <<"Delete">> -> {ok, delete}; + <<"Get">> -> {ok, get}; + <<"Head">> -> {ok, head}; + <<"Options">> -> {ok, options}; + <<"Patch">> -> {ok, patch}; + <<"Post">> -> {ok, post}; + <<"Put">> -> {ok, put}; + <<"Trace">> -> {ok, trace}; + _ -> {error, nil} + end. diff --git a/aoc2023/build/packages/gleam_http/src/gleam_http_native.mjs b/aoc2023/build/packages/gleam_http/src/gleam_http_native.mjs new file mode 100644 index 0000000..c871a8b --- /dev/null +++ b/aoc2023/build/packages/gleam_http/src/gleam_http_native.mjs @@ -0,0 +1,38 @@ +import { Ok, Error } from "./gleam.mjs"; +import { + Get, + Post, + Head, + Put, + Delete, + Trace, + Connect, + Options, + Patch, +} from "./gleam/http.mjs"; + +export function decode_method(value) { + try { + switch (value.toLowerCase()) { + case "get": + return new Ok(new Get()); + case "post": + return new Ok(new Post()); + case "head": + return new Ok(new Head()); + case "put": + return new Ok(new Put()); + case "delete": + return new Ok(new Delete()); + case "trace": + return new Ok(new Trace()); + case "connect": + return new Ok(new Connect()); + case "options": + return new Ok(new Options()); + case "patch": + return new Ok(new Patch()); + } + } catch {} + return new Error(undefined); +} diff --git a/aoc2023/build/packages/gleam_httpc/LICENSE b/aoc2023/build/packages/gleam_httpc/LICENSE new file mode 100644 index 0000000..59e1345 --- /dev/null +++ b/aoc2023/build/packages/gleam_httpc/LICENSE @@ -0,0 +1,191 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright {{copyright_year}}, {{author_name}} <{{author_email}}>. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/aoc2023/build/packages/gleam_httpc/README.md b/aoc2023/build/packages/gleam_httpc/README.md new file mode 100644 index 0000000..c2363c5 --- /dev/null +++ b/aoc2023/build/packages/gleam_httpc/README.md @@ -0,0 +1,52 @@ +# httpc +<a href="https://github.com/gleam-lang/httpc/releases"><img src="https://img.shields.io/github/release/gleam-lang/httpc" alt="GitHub release"></a> +<a href="https://discord.gg/Fm8Pwmy"><img src="https://img.shields.io/discord/768594524158427167?color=blue" alt="Discord chat"></a> + + +Bindings to Erlang's built in HTTP client, `httpc`. + +```gleam +import gleam/httpc +import gleam/http.{Get} +import gleam/http/request +import gleam/http/response +import gleeunit/should + +pub fn main() { + // Prepare a HTTP request record + let request = request.new() + |> request.set_method(Get) + |> request.set_host("test-api.service.hmrc.gov.uk") + |> request.set_path("/hello/world") + |> request.prepend_header("accept", "application/vnd.hmrc.1.0+json") + + // Send the HTTP request to the server + try resp = httpc.send(req) + + // We get a response record back + resp.status + |> should.equal(200) + + resp + |> response.get_header("content-type") + |> should.equal(Ok("application/json")) + + resp.body + |> should.equal("{\"message\":\"Hello World\"}") + + Ok(resp) +} +``` + +## Installation + +```shell +gleam add gleam_httpc +``` + +## Use with Erlang/OTP versions older than 26.0 + +Older versions of HTTPC do not verify TLS connections by default, so with them +your connection may not be secure when using this library. Consider upgrading to +a newer version of Erlang/OTP, or using a different HTTP client such as +[hackney](https://github.com/gleam-lang/hackney). diff --git a/aoc2023/build/packages/gleam_httpc/gleam.toml b/aoc2023/build/packages/gleam_httpc/gleam.toml new file mode 100644 index 0000000..d623a94 --- /dev/null +++ b/aoc2023/build/packages/gleam_httpc/gleam.toml @@ -0,0 +1,23 @@ +name = "gleam_httpc" +version = "2.1.1" +gleam = ">= 0.32.0" + +licences = ["Apache-2.0"] +description = "Gleam bindings to Erlang's built in HTTP client, httpc" + +repository = { type = "github", user = "gleam-lang", repo = "httpc" } +links = [ + { title = "Website", href = "https://gleam.run" }, + { title = "Sponsor", href = "https://github.com/sponsors/lpil" }, +] + +[erlang] +extra_applications = ["inets", "ssl"] + +[dependencies] +gleam_stdlib = "~> 0.32" +gleam_http = "~> 3.0" + +[dev-dependencies] +gleeunit = "~> 0.6" +gleam_erlang = "~> 0.9" diff --git a/aoc2023/build/packages/gleam_httpc/src/gleam/httpc.gleam b/aoc2023/build/packages/gleam_httpc/src/gleam/httpc.gleam new file mode 100644 index 0000000..cf166c3 --- /dev/null +++ b/aoc2023/build/packages/gleam_httpc/src/gleam/httpc.gleam @@ -0,0 +1,105 @@ +import gleam/dynamic.{type Dynamic} +import gleam/http.{type Method} +import gleam/http/response.{type Response, Response} +import gleam/http/request.{type Request} +import gleam/bit_array +import gleam/result +import gleam/list +import gleam/uri + +type Charlist + +@external(erlang, "erlang", "binary_to_list") +fn binary_to_list(a: String) -> Charlist + +@external(erlang, "erlang", "list_to_binary") +fn list_to_binary(a: Charlist) -> String + +type ErlHttpOption + +type BodyFormat { + Binary +} + +type ErlOption { + BodyFormat(BodyFormat) +} + +@external(erlang, "httpc", "request") +fn erl_request( + a: Method, + b: #(Charlist, List(#(Charlist, Charlist)), Charlist, BitArray), + c: List(ErlHttpOption), + d: List(ErlOption), +) -> Result( + #(#(Charlist, Int, Charlist), List(#(Charlist, Charlist)), BitArray), + Dynamic, +) + +@external(erlang, "httpc", "request") +fn erl_request_no_body( + a: Method, + b: #(Charlist, List(#(Charlist, Charlist))), + c: List(ErlHttpOption), + d: List(ErlOption), +) -> Result( + #(#(Charlist, Int, Charlist), List(#(Charlist, Charlist)), BitArray), + Dynamic, +) + +fn charlist_header(header: #(String, String)) -> #(Charlist, Charlist) { + let #(k, v) = header + #(binary_to_list(k), binary_to_list(v)) +} + +fn string_header(header: #(Charlist, Charlist)) -> #(String, String) { + let #(k, v) = header + #(list_to_binary(k), list_to_binary(v)) +} + +// TODO: test +// TODO: refine error type +pub fn send_bits(req: Request(BitArray)) -> Result(Response(BitArray), Dynamic) { + let erl_url = + req + |> request.to_uri + |> uri.to_string + |> binary_to_list + let erl_headers = list.map(req.headers, charlist_header) + let erl_http_options = [] + let erl_options = [BodyFormat(Binary)] + + use response <- result.then(case req.method { + http.Options | http.Head | http.Get -> { + let erl_req = #(erl_url, erl_headers) + erl_request_no_body(req.method, erl_req, erl_http_options, erl_options) + } + _ -> { + let erl_content_type = + req + |> request.get_header("content-type") + |> result.unwrap("application/octet-stream") + |> binary_to_list + let erl_req = #(erl_url, erl_headers, erl_content_type, req.body) + erl_request(req.method, erl_req, erl_http_options, erl_options) + } + }) + + let #(#(_version, status, _status), headers, resp_body) = response + Ok(Response(status, list.map(headers, string_header), resp_body)) +} + +// TODO: test +// TODO: refine error type +pub fn send(req: Request(String)) -> Result(Response(String), Dynamic) { + use resp <- result.then( + req + |> request.map(bit_array.from_string) + |> send_bits, + ) + + case bit_array.to_string(resp.body) { + Ok(body) -> Ok(response.set_body(resp, body)) + Error(_) -> Error(dynamic.from("Response body was not valid UTF-8")) + } +} diff --git a/aoc2023/build/packages/gleam_httpc/src/gleam@httpc.erl b/aoc2023/build/packages/gleam_httpc/src/gleam@httpc.erl new file mode 100644 index 0000000..1d634df --- /dev/null +++ b/aoc2023/build/packages/gleam_httpc/src/gleam@httpc.erl @@ -0,0 +1,118 @@ +-module(gleam@httpc). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([send_bits/1, send/1]). +-export_type([charlist/0, erl_http_option/0, body_format/0, erl_option/0]). + +-type charlist() :: any(). + +-type erl_http_option() :: any(). + +-type body_format() :: binary. + +-type erl_option() :: {body_format, body_format()}. + +-spec charlist_header({binary(), binary()}) -> {charlist(), charlist()}. +charlist_header(Header) -> + {K, V} = Header, + {erlang:binary_to_list(K), erlang:binary_to_list(V)}. + +-spec string_header({charlist(), charlist()}) -> {binary(), binary()}. +string_header(Header) -> + {K, V} = Header, + {erlang:list_to_binary(K), erlang:list_to_binary(V)}. + +-spec send_bits(gleam@http@request:request(bitstring())) -> {ok, + gleam@http@response:response(bitstring())} | + {error, gleam@dynamic:dynamic_()}. +send_bits(Req) -> + Erl_url = begin + _pipe = Req, + _pipe@1 = gleam@http@request:to_uri(_pipe), + _pipe@2 = gleam@uri:to_string(_pipe@1), + erlang:binary_to_list(_pipe@2) + end, + Erl_headers = gleam@list:map(erlang:element(3, Req), fun charlist_header/1), + Erl_http_options = [], + Erl_options = [{body_format, binary}], + gleam@result:then(case erlang:element(2, Req) of + options -> + Erl_req = {Erl_url, Erl_headers}, + httpc:request( + erlang:element(2, Req), + Erl_req, + Erl_http_options, + Erl_options + ); + + head -> + Erl_req = {Erl_url, Erl_headers}, + httpc:request( + erlang:element(2, Req), + Erl_req, + Erl_http_options, + Erl_options + ); + + get -> + Erl_req = {Erl_url, Erl_headers}, + httpc:request( + erlang:element(2, Req), + Erl_req, + Erl_http_options, + Erl_options + ); + + _ -> + Erl_content_type = begin + _pipe@3 = Req, + _pipe@4 = gleam@http@request:get_header( + _pipe@3, + <<"content-type"/utf8>> + ), + _pipe@5 = gleam@result:unwrap( + _pipe@4, + <<"application/octet-stream"/utf8>> + ), + erlang:binary_to_list(_pipe@5) + end, + Erl_req@1 = {Erl_url, + Erl_headers, + Erl_content_type, + erlang:element(4, Req)}, + httpc:request( + erlang:element(2, Req), + Erl_req@1, + Erl_http_options, + Erl_options + ) + end, fun(Response) -> + {{_, Status, _}, Headers, Resp_body} = Response, + {ok, + {response, + Status, + gleam@list:map(Headers, fun string_header/1), + Resp_body}} + end). + +-spec send(gleam@http@request:request(binary())) -> {ok, + gleam@http@response:response(binary())} | + {error, gleam@dynamic:dynamic_()}. +send(Req) -> + gleam@result:then( + begin + _pipe = Req, + _pipe@1 = gleam@http@request:map(_pipe, fun gleam_stdlib:identity/1), + send_bits(_pipe@1) + end, + fun(Resp) -> case gleam@bit_array:to_string(erlang:element(4, Resp)) of + {ok, Body} -> + {ok, gleam@http@response:set_body(Resp, Body)}; + + {error, _} -> + {error, + gleam@dynamic:from( + <<"Response body was not valid UTF-8"/utf8>> + )} + end end + ). diff --git a/aoc2023/build/packages/gleam_httpc/src/gleam_httpc.app.src b/aoc2023/build/packages/gleam_httpc/src/gleam_httpc.app.src new file mode 100644 index 0000000..c0d2b20 --- /dev/null +++ b/aoc2023/build/packages/gleam_httpc/src/gleam_httpc.app.src @@ -0,0 +1,12 @@ +{application, gleam_httpc, [ + {vsn, "2.1.1"}, + {applications, [gleam_erlang, + gleam_http, + gleam_stdlib, + gleeunit, + inets, + ssl]}, + {description, "Gleam bindings to Erlang's built in HTTP client, httpc"}, + {modules, [gleam@httpc]}, + {registered, []} +]}. diff --git a/aoc2023/build/packages/gleam_otp/LICENCE b/aoc2023/build/packages/gleam_otp/LICENCE new file mode 100644 index 0000000..619ec77 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/LICENCE @@ -0,0 +1,191 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2019, Louis Pilfold <louis@lpil.uk>. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/aoc2023/build/packages/gleam_otp/README.md b/aoc2023/build/packages/gleam_otp/README.md new file mode 100644 index 0000000..3c313a1 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/README.md @@ -0,0 +1,91 @@ +# Gleam OTP + +<a href="https://github.com/gleam-lang/otp/releases"><img src="https://img.shields.io/github/release/gleam-lang/otp" alt="GitHub release"></a> +<a href="https://discord.gg/Fm8Pwmy"><img src="https://img.shields.io/discord/768594524158427167?color=blue" alt="Discord chat"></a> + + +A Gleam library for building fault tolerant multi-core programs using the +actor model. It is compatible with Erlang's OTP framework. + +This library is experimental and will likely have many breaking changes in the +future! + +Gleam’s actor system is built with a few primary goals: + +- Full type safety of actors and messages. +- Be compatible with Erlang’s OTP actor framework. +- Provide fault tolerance and self-healing through supervisors. +- Have equivalent performance to Erlang’s OTP. + +This library documents its abstractions and functionality, but you may also wish +to read the documentation or other material on Erlang’s OTP framework to get a +fuller understanding of OTP, the problems it solves, and and the motivations for +its design. + +## Usage + +Add this library to your Gleam project. + +```shell +gleam add gleam_otp +``` + +## Actor hierarchy + +This library provides several different types of actor that can be used in +Gleam programs. + +### Process + +The process is the lowest level building block of OTP, all other actors are +built on top of processes either directly or indirectly. Typically this +abstraction would be not be used very often in Gleam applications, favour +other actor types that provide more functionality. + +Gleam's process module is defined in the `gleam_erlang` library. + +[[Documentation]](https://hexdocs.pm/gleam_erlang/gleam/erlang/process.html) + +### Actor + +The `actor` is the most commonly used process type in Gleam and serves as a good +building block for other abstractions. Like Erlang's `gen_server` it handles +OTP's system messages automatically to enable OTP's debugging and tracing +functionality. + +[[Documentation]](https://hexdocs.pm/gleam_otp/gleam/otp/actor.html) + +### Task + +A task is a kind of process that performs a single task and then shuts down. +Commonly tasks are used to convert sequential code into concurrent code by +performing computation in another process. + +[[Documentation]](https://hexdocs.pm/gleam_otp/gleam/otp/task.html) + +### Supervisor + +Supervisors is a process that starts and then supervises a group of processes, +restarting them if they crash. Supervisors can start other supervisors, +resulting in a hierarchical process structure called a supervision tree, +providing fault tolerance to a Gleam application. + +[[Documentation]](https://hexdocs.pm/gleam_otp/gleam/otp/supervisor.html) + +## Limitations and known issues + +This library is experimental there are some limitations that not yet been resolved. + +- There is no support for named processes. They are untyped global mutable + variables which may be uninitialized, more research is needed to find a + suitable type safe alternative. +- There are relatively few actor abstractions provided by this library. More + will be added in the future. +- Actors do not yet support all OTP system messages. Unsupported messages are + dropped. +- Supervisors do not yet support different shutdown periods per child. In + practice this means that children that are supervisors do not get an + unlimited amount of time to shut down, as is expected in Erlang or Elixir. +- This library has not seen much testing compared to the Erlang OTP + libraries, both in terms of unit tests and real world testing in + applications. diff --git a/aoc2023/build/packages/gleam_otp/gleam.toml b/aoc2023/build/packages/gleam_otp/gleam.toml new file mode 100644 index 0000000..26e451b --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/gleam.toml @@ -0,0 +1,19 @@ +name = "gleam_otp" +version = "0.8.0" +licences = ["Apache-2.0"] +description = "Fault tolerant multicore Gleam programs with OTP" + +gleam = ">= 0.32.0" + +repository = { type = "github", user = "gleam-lang", repo = "otp" } +links = [ + { title = "Website", href = "https://gleam.run" }, + { title = "Sponsor", href = "https://github.com/sponsors/lpil" }, +] + +[dependencies] +gleam_stdlib = "~> 0.32" +gleam_erlang = "~> 0.22" + +[dev-dependencies] +gleeunit = "~> 1.0" diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Continue.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Continue.hrl new file mode 100644 index 0000000..85677d1 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Continue.hrl @@ -0,0 +1,4 @@ +-record(continue, { + state :: any(), + selector :: gleam@option:option(gleam@erlang@process:selector(any())) +}). diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Ready.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Ready.hrl new file mode 100644 index 0000000..75faa95 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Ready.hrl @@ -0,0 +1 @@ +-record(ready, {state :: any(), selector :: gleam@erlang@process:selector(any())}). diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Spec.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Spec.hrl new file mode 100644 index 0000000..5287439 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Spec.hrl @@ -0,0 +1,5 @@ +-record(spec, { + init :: fun(() -> gleam@otp@actor:init_result(any(), any())), + init_timeout :: integer(), + loop :: fun((any(), any()) -> gleam@otp@actor:next(any(), any())) +}). diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@intensity_tracker_IntensityTracker.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@intensity_tracker_IntensityTracker.hrl new file mode 100644 index 0000000..3ed0b01 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@intensity_tracker_IntensityTracker.hrl @@ -0,0 +1,5 @@ +-record(intensity_tracker, { + limit :: integer(), + period :: integer(), + events :: list(integer()) +}). diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@supervisor_ChildSpec.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@supervisor_ChildSpec.hrl new file mode 100644 index 0000000..7afd07f --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@supervisor_ChildSpec.hrl @@ -0,0 +1,5 @@ +-record(child_spec, { + start :: fun((any()) -> {ok, gleam@erlang@process:subject(any())} | + {error, gleam@otp@actor:start_error()}), + returning :: fun((any(), gleam@erlang@process:subject(any())) -> any()) +}). diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@supervisor_Spec.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@supervisor_Spec.hrl new file mode 100644 index 0000000..b10bd9f --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@supervisor_Spec.hrl @@ -0,0 +1,6 @@ +-record(spec, { + argument :: any(), + max_frequency :: integer(), + frequency_period :: integer(), + init :: fun((gleam@otp@supervisor:children(any())) -> gleam@otp@supervisor:children(any())) +}). diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@system_StatusInfo.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@system_StatusInfo.hrl new file mode 100644 index 0000000..99ab4cb --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@system_StatusInfo.hrl @@ -0,0 +1,7 @@ +-record(status_info, { + module :: gleam@erlang@atom:atom_(), + parent :: gleam@erlang@process:pid_(), + mode :: gleam@otp@system:mode(), + debug_state :: gleam@otp@system:debug_state(), + state :: gleam@dynamic:dynamic_() +}). diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@task_Exit.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@task_Exit.hrl new file mode 100644 index 0000000..7c83874 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@task_Exit.hrl @@ -0,0 +1 @@ +-record(exit, {reason :: gleam@dynamic:dynamic_()}). diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@task_Task.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@task_Task.hrl new file mode 100644 index 0000000..959bea8 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@task_Task.hrl @@ -0,0 +1,6 @@ +-record(task, { + owner :: gleam@erlang@process:pid_(), + pid :: gleam@erlang@process:pid_(), + monitor :: gleam@erlang@process:process_monitor(), + selector :: gleam@erlang@process:selector(gleam@otp@task:message(any())) +}). diff --git a/aoc2023/build/packages/gleam_otp/src/gleam/otp/actor.gleam b/aoc2023/build/packages/gleam_otp/src/gleam/otp/actor.gleam new file mode 100644 index 0000000..9f6a6c4 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/src/gleam/otp/actor.gleam @@ -0,0 +1,504 @@ +//// This module provides the _Actor_ abstraction, one of the most common +//// building blocks of Gleam OTP programs. +//// +//// An Actor is a process like any other BEAM process and can be be used to hold +//// state, execute code, and communicate with other processes by sending and +//// receiving messages. The advantage of using the actor abstraction over a bare +//// process is that it provides a single interface for commonly needed +//// functionality, including support for the [tracing and debugging +//// features in OTP](erlang-sys). +//// +//// Gleam's Actor is similar to Erlang's `gen_server` and Elixir's `GenServer` +//// but differs in that it offers a fully typed interface. This different API is +//// why Gleam uses the name Actor rather than some variation of generic-server. +//// +//// [erlang-sys]: https://www.erlang.org/doc/man/sys.html +//// +//// ## Example +//// +//// An Actor can be used to create a client-server interaction between an Actor +//// (the server) and other processes (the clients). In this example we have an +//// Actor that works as a stack, allowing clients to push and pop elements. +//// +//// ```gleam +//// pub fn main() { +//// // Start the actor with initial state of an empty list, and the +//// // `handle_message` callback function (defined below). +//// // We assert that it starts successfully. +//// // +//// // In real-world Gleam OTP programs we would likely write a wrapper functions +//// // called `start`, `push` `pop`, `shutdown` to start and interact with the +//// // Actor. We are not doing that here for the sake of showing how the Actor +//// // API works. +//// let assert Ok(actor) = actor.start([], handle_message) +//// +//// // We can send a message to the actor to push elements onto the stack. +//// process.send(actor, Push("Joe")) +//// process.send(actor, Push("Mike")) +//// process.send(actor, Push("Robert")) +//// +//// // The `Push` message expects no response, these messages are sent purely for +//// // the side effect of mutating the state held by the actor. +//// // +//// // We can also send the `Pop` message to take a value off of the actor's +//// // stack. This message expects a response, so we use `process.call` to send a +//// // message and wait until a reply is received. +//// // +//// // In this instance we are giving the actor 10 milliseconds to reply, if the +//// // `call` function doesn't get a reply within this time it will panic and +//// // crash the client process. +//// let assert Ok("Robert") = process.call(actor, Pop, 10) +//// let assert Ok("Mike") = process.call(actor, Pop, 10) +//// let assert Ok("Joe") = process.call(actor, Pop, 10) +//// +//// // The stack is now empty, so if we pop again the actor replies with an error. +//// let assert Error(Nil) = process.call(actor, Pop, 10) +//// +//// // Lastly, we can send a message to the actor asking it to shut down. +//// process.send(actor, Shutdown) +//// } +//// ``` +//// +//// Here is the code that is used to implement this actor: +//// +//// ```gleam +//// // First step of implementing the stack Actor is to define the message type that +//// // it can receive. +//// // +//// // The type of the elements in the stack is no fixed so a type parameter is used +//// // for it instead of a concrete type such as `String` or `Int`. +//// pub type Message(element) { +//// // The `Shutdown` message is used to tell the actor to stop. +//// // It is the simplest message type, it contains no data. +//// Shutdown +//// +//// // The `Push` message is used to add a new element to the stack. +//// // It contains the item to add, the type of which is the `element` +//// // parameterised type. +//// Push(push: element) +//// +//// // The `Pop` message is used to remove an element from the stack. +//// // It contains a `Subject`, which is used to send the response back to the +//// // message sender. In this case the reply is of type `Result(element, Nil)`. +//// Pop(reply_with: Subject(Result(element, Nil))) +//// } +//// +//// // The last part is to implement the `handle_message` callback function. +//// // +//// // This function is called by the Actor each for each message it receives. +//// // Actor is single threaded only does one thing at a time, so it handles +//// // messages sequentially and one at a time, in the order they are received. +//// // +//// // The function takes the message and the current state, and returns a data +//// // structure that indicates what to do next, along with the new state. +//// fn handle_message( +//// message: Message(e), +//// stack: List(e), +//// ) -> actor.Next(Message(e), List(e)) { +//// case message { +//// // For the `Shutdown` message we return the `actor.Stop` value, which causes +//// // the actor to discard any remaining messages and stop. +//// Shutdown -> actor.Stop(process.Normal) +//// +//// // For the `Push` message we add the new element to the stack and return +//// // `actor.continue` with this new stack, causing the actor to process any +//// // queued messages or wait for more. +//// Push(value) -> { +//// let new_state = [value, ..stack] +//// actor.continue(new_state) +//// } +//// +//// // For the `Pop` message we attempt to remove an element from the stack, +//// // sending it or an error back to the caller, before continuing. +//// Pop(client) -> +//// case stack { +//// [] -> { +//// // When the stack is empty we can't pop an element, so we send an +//// // error back. +//// process.send(client, Error(Nil)) +//// actor.continue([]) +//// } +//// +//// [first, ..rest] -> { +//// // Otherwise we send the first element back and use the remaining +//// // elements as the new state. +//// process.send(client, Ok(first)) +//// actor.continue(rest) +//// } +//// } +//// } +//// } +//// ``` + +import gleam/erlang/process.{ + type ExitReason, type Pid, type Selector, type Subject, Abnormal, +} +import gleam/erlang/charlist.{type Charlist} +import gleam/otp/system.{ + type DebugState, type Mode, type StatusInfo, type SystemMessage, GetState, + GetStatus, Resume, Running, StatusInfo, Suspend, Suspended, +} +import gleam/string +import gleam/dynamic.{type Dynamic} +import gleam/erlang/atom +import gleam/option.{type Option, None, Some} + +type Message(message) { + /// A regular message excepted by the process + Message(message) + + /// An OTP system message, for debugging or maintenance + System(SystemMessage) + + /// An unexpected message + Unexpected(Dynamic) +} + +/// The type used to indicate what to do after handling a message. +/// +pub type Next(message, state) { + /// Continue handling messages. + /// + Continue(state: state, selector: Option(Selector(message))) + + /// Stop handling messages and shut down. + /// + Stop(ExitReason) +} + +pub fn continue(state: state) -> Next(message, state) { + Continue(state, None) +} + +pub fn with_selector( + value: Next(message, state), + selector: Selector(message), +) -> Next(message, state) { + case value { + Continue(state, _) -> Continue(state, Some(selector)) + _ -> value + } +} + +/// The type used to indicate whether an actor has started successfully or not. +/// +pub type InitResult(state, message) { + /// The actor has successfully initialised. The actor can start handling + /// messages and actor's channel sender can be returned to the parent + /// process. + /// + Ready(state: state, selector: Selector(message)) + + /// The actor has failed to initialise. The actor shuts down and an error is + /// returned to the parent process. + /// + Failed(String) +} + +type Self(state, msg) { + Self( + mode: Mode, + parent: Pid, + state: state, + subject: Subject(msg), + selector: Selector(Message(msg)), + debug_state: DebugState, + message_handler: fn(msg, state) -> Next(msg, state), + ) +} + +/// This data structure holds all the values required by the `start_spec` +/// function in order to create an actor. +/// +/// If you do not need to configure the initialisation behaviour of your actor +/// consider using the `start` function. +/// +pub type Spec(state, msg) { + Spec( + /// The initialisation functionality for the actor. This function is called + /// just after the actor starts but before the channel sender is returned + /// to the parent. + /// + /// This function is used to ensure that any required data or state is + /// correct. If this function returns an error it means that the actor has + /// failed to start and an error is returned to the parent. + /// + init: fn() -> InitResult(state, msg), + /// How many milliseconds the `init` function has to return before it is + /// considered to have taken too long and failed. + /// + init_timeout: Int, + /// This function is called to handle each message that the actor receives. + /// + loop: fn(msg, state) -> Next(msg, state), + ) +} + +// TODO: Check needed functionality here to be OTP compatible +fn exit_process(reason: ExitReason) -> ExitReason { + // TODO + reason +} + +fn receive_message(self: Self(state, msg)) -> Message(msg) { + let selector = case self.mode { + // When suspended we only respond to system messages + Suspended -> + process.new_selector() + |> selecting_system_messages + + // When running we respond to all messages + Running -> + // We add the handler for unexpected messages first so that the user + // supplied selector can override it if desired + process.new_selector() + |> process.selecting_anything(Unexpected) + |> process.merge_selector(self.selector) + |> selecting_system_messages + } + + process.select_forever(selector) +} + +fn selecting_system_messages( + selector: Selector(Message(msg)), +) -> Selector(Message(msg)) { + selector + |> process.selecting_record3( + atom.create_from_string("system"), + convert_system_message, + ) +} + +@external(erlang, "gleam_otp_external", "convert_system_message") +fn convert_system_message(a: Dynamic, b: Dynamic) -> Message(msg) + +fn process_status_info(self: Self(state, msg)) -> StatusInfo { + StatusInfo( + module: atom.create_from_string("gleam@otp@actor"), + parent: self.parent, + mode: self.mode, + debug_state: self.debug_state, + state: dynamic.from(self.state), + ) +} + +fn loop(self: Self(state, msg)) -> ExitReason { + case receive_message(self) { + System(system) -> + case system { + GetState(callback) -> { + callback(dynamic.from(self.state)) + loop(self) + } + Resume(callback) -> { + callback() + loop(Self(..self, mode: Running)) + } + Suspend(callback) -> { + callback() + loop(Self(..self, mode: Suspended)) + } + GetStatus(callback) -> { + callback(process_status_info(self)) + loop(self) + } + } + + Unexpected(message) -> { + log_warning( + charlist.from_string("Actor discarding unexpected message: ~s"), + [charlist.from_string(string.inspect(message))], + ) + loop(self) + } + + Message(msg) -> + case self.message_handler(msg, self.state) { + Stop(reason) -> exit_process(reason) + Continue(state: state, selector: new_selector) -> { + let selector = + new_selector + |> option.map(init_selector(self.subject, _)) + |> option.unwrap(self.selector) + loop(Self(..self, state: state, selector: selector)) + } + } + } +} + +// TODO: replace this when we have Gleam bindings to the logger +@external(erlang, "logger", "warning") +fn log_warning(a: Charlist, b: List(Charlist)) -> Nil + +fn initialise_actor( + spec: Spec(state, msg), + ack: Subject(Result(Subject(msg), ExitReason)), +) { + let subject = process.new_subject() + case spec.init() { + Ready(state, selector) -> { + let selector = init_selector(subject, selector) + // Signal to parent that the process has initialised successfully + process.send(ack, Ok(subject)) + // Start message receive loop + let self = + Self( + state: state, + parent: process.subject_owner(ack), + subject: subject, + selector: selector, + message_handler: spec.loop, + debug_state: system.debug_state([]), + mode: Running, + ) + loop(self) + } + + Failed(reason) -> { + process.send(ack, Error(Abnormal(reason))) + exit_process(Abnormal(reason)) + } + } +} + +fn init_selector(subject, selector) { + process.new_selector() + |> process.selecting(subject, Message) + |> process.merge_selector(process.map_selector(selector, Message)) +} + +pub type StartError { + InitTimeout + InitFailed(ExitReason) + InitCrashed(Dynamic) +} + +/// The result of starting a Gleam actor. +/// +/// This type is compatible with Gleam supervisors. If you wish to convert it +/// to a type compatible with Erlang supervisors see the `ErlangStartResult` +/// type and `erlang_start_result` function. +/// +pub type StartResult(msg) = + Result(Subject(msg), StartError) + +/// An Erlang supervisor compatible process start result. +/// +/// If you wish to convert this into a `StartResult` compatible with Gleam +/// supervisors see the `from_erlang_start_result` and `wrap_erlang_starter` +/// functions. +/// +pub type ErlangStartResult = + Result(Pid, Dynamic) + +/// Convert a Gleam actor start result into an Erlang supervisor compatible +/// process start result. +/// +pub fn to_erlang_start_result(res: StartResult(msg)) -> ErlangStartResult { + case res { + Ok(x) -> Ok(process.subject_owner(x)) + Error(x) -> Error(dynamic.from(x)) + } +} + +type StartInitMessage(msg) { + Ack(Result(Subject(msg), ExitReason)) + Mon(process.ProcessDown) +} + +// TODO: test init_timeout. Currently if we test it eunit prints an error from +// the process death. How do we avoid this? +// +/// Start an actor from a given specification. If the actor's `init` function +/// returns an error or does not return within `init_timeout` then an error is +/// returned. +/// +/// If you do not need to specify the initialisation behaviour of your actor +/// consider using the `start` function. +/// +pub fn start_spec(spec: Spec(state, msg)) -> Result(Subject(msg), StartError) { + let ack_subject = process.new_subject() + + let child = + process.start( + linked: True, + running: fn() { initialise_actor(spec, ack_subject) }, + ) + + let monitor = process.monitor_process(child) + let selector = + process.new_selector() + |> process.selecting(ack_subject, Ack) + |> process.selecting_process_down(monitor, Mon) + + let result = case process.select(selector, spec.init_timeout) { + // Child started OK + Ok(Ack(Ok(channel))) -> Ok(channel) + + // Child initialiser returned an error + Ok(Ack(Error(reason))) -> Error(InitFailed(reason)) + + // Child went down while initialising + Ok(Mon(down)) -> Error(InitCrashed(down.reason)) + + // Child did not finish initialising in time + Error(Nil) -> { + process.kill(child) + Error(InitTimeout) + } + } + + // Remove the monitor used for the starting of the actor as to avoid an extra + // message arriving at the parent if the child dies later. + process.demonitor_process(monitor) + + result +} + +/// Start an actor with a given initial state and message handling loop +/// function. +/// +/// This function returns a `Result` but it will always be `Ok` so it is safe +/// to use with `assert` if you are not starting this actor as part of a +/// supervision tree. +/// +/// If you wish to configure the initialisation behaviour of a new actor see +/// the `Spec` record and the `start_spec` function. +/// +pub fn start( + state: state, + loop: fn(msg, state) -> Next(msg, state), +) -> Result(Subject(msg), StartError) { + start_spec(Spec( + init: fn() { Ready(state, process.new_selector()) }, + loop: loop, + init_timeout: 5000, + )) +} + +/// Send a message over a given channel. +/// +/// This is a re-export of `process.send`, for the sake of convenience. +/// +pub fn send(subject: Subject(msg), msg: msg) -> Nil { + process.send(subject, msg) +} + +// TODO: test +/// Send a synchronous message and wait for a response from the receiving +/// process. +/// +/// If a reply is not received within the given timeout then the sender process +/// crashes. If you wish receive a `Result` rather than crashing see the +/// `process.try_call` function. +/// +/// This is a re-export of `process.call`, for the sake of convenience. +/// +pub fn call( + selector: Subject(message), + make_message: fn(Subject(reply)) -> message, + timeout: Int, +) -> reply { + process.call(selector, make_message, timeout) +} diff --git a/aoc2023/build/packages/gleam_otp/src/gleam/otp/intensity_tracker.gleam b/aoc2023/build/packages/gleam_otp/src/gleam/otp/intensity_tracker.gleam new file mode 100644 index 0000000..2044be0 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/src/gleam/otp/intensity_tracker.gleam @@ -0,0 +1,46 @@ +//// The intensity tracker is used to monitor how frequently an event happens, +//// erroring if it happens too many times within a period of time. + +import gleam/list + +// TODO: test +pub opaque type IntensityTracker { + IntensityTracker(limit: Int, period: Int, events: List(Int)) +} + +pub type TooIntense { + TooIntense +} + +pub fn new(limit limit: Int, period period: Int) -> IntensityTracker { + IntensityTracker(limit: limit, period: period, events: []) +} + +@external(erlang, "erlang", "monotonic_time") +fn monotonic_time(a: Int) -> Int + +fn now_seconds() -> Int { + monotonic_time(1) +} + +pub fn trim_window(events: List(Int), now: Int, period: Int) -> List(Int) { + case events { + [] -> [] + [event, ..events] -> + case now >= event + period { + True -> [event, ..trim_window(events, now, period)] + False -> [] + } + } +} + +pub fn add_event( + tracker: IntensityTracker, +) -> Result(IntensityTracker, TooIntense) { + let now = now_seconds() + let events = trim_window([now, ..tracker.events], now, tracker.period) + case list.length(events) >= tracker.limit { + True -> Error(TooIntense) + False -> Ok(IntensityTracker(..tracker, events: events)) + } +} diff --git a/aoc2023/build/packages/gleam_otp/src/gleam/otp/port.gleam b/aoc2023/build/packages/gleam_otp/src/gleam/otp/port.gleam new file mode 100644 index 0000000..4e1b4d8 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/src/gleam/otp/port.gleam @@ -0,0 +1,9 @@ +/// Ports are how code running on the Erlang virtual machine interacts with +/// the outside world. Bytes of data can be sent to and read from ports, +/// providing a form of message passing to an external program or resource. +/// +/// For more information on ports see the [Erlang ports documentation][1]. +/// +/// [1]: https://erlang.org/doc/reference_manual/ports.html +/// +pub type Port diff --git a/aoc2023/build/packages/gleam_otp/src/gleam/otp/supervisor.gleam b/aoc2023/build/packages/gleam_otp/src/gleam/otp/supervisor.gleam new file mode 100644 index 0000000..b99ad8e --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/src/gleam/otp/supervisor.gleam @@ -0,0 +1,410 @@ +// TODO: specify amount of time permitted for shut-down +import gleam/result +import gleam/string +import gleam/option.{type Option, None, Some} +import gleam/erlang/process.{type Pid, type Subject} +import gleam/otp/actor.{type StartError} +import gleam/otp/intensity_tracker.{type IntensityTracker} +import gleam/erlang/node.{type Node} + +/// This data structure holds all the values required by the `start_spec` +/// function in order to create an supervisor. +/// +/// If you do not need to configure the behaviour of your supervisor consider +/// using the `start` function. +/// +pub type Spec(argument, return) { + Spec( + argument: argument, + max_frequency: Int, + frequency_period: Int, + init: fn(Children(argument)) -> Children(return), + ) +} + +/// This type represents the starting children of a supervisor within the +/// `init` function. +/// +pub opaque type Children(argument) { + Ready(Starter(argument)) + Failed(ChildStartError) +} + +/// This type contains all the information required to start a new child and +/// add it to the `Children`. +/// +/// This is typically created with the `worker` function. +/// +pub opaque type ChildSpec(msg, argument, returning) { + ChildSpec( + // TODO: merge this into one field + start: fn(argument) -> Result(Subject(msg), StartError), + returning: fn(argument, Subject(msg)) -> returning, + ) +} + +type ChildStartError { + ChildStartError(previous_pid: Option(Pid), error: StartError) +} + +pub opaque type Message { + Exit(process.ExitMessage) + RetryRestart(Pid) +} + +type Instruction { + StartAll + StartFrom(Pid) +} + +type State(a) { + State( + restarts: IntensityTracker, + starter: Starter(a), + retry_restarts: Subject(Pid), + ) +} + +type Starter(argument) { + Starter( + argument: argument, + exec: Option( + fn(Instruction) -> + Result(#(Starter(argument), Instruction), ChildStartError), + ), + ) +} + +type Child(argument) { + Child(pid: Pid, argument: argument) +} + +fn start_child( + child_spec: ChildSpec(msg, argument_in, argument_out), + argument: argument_in, +) -> Result(Child(argument_out), ChildStartError) { + use subject <- result.then( + child_spec.start(argument) + |> result.map_error(ChildStartError(None, _)), + ) + + Ok(Child( + pid: process.subject_owner(subject), + // Merge the new child's pid into the argument to produce the new argument + // used to start any remaining children. + argument: child_spec.returning(argument, subject), + )) +} + +// TODO: more sophsiticated stopping of processes. i.e. give supervisors +// more time to shut down. +fn shutdown_child(pid: Pid, _spec: ChildSpec(msg, arg_1, arg_2)) -> Nil { + process.send_exit(pid) +} + +fn perform_instruction_for_child( + argument: argument_in, + instruction: Instruction, + child_spec: ChildSpec(msg, argument_in, argument_out), + child: Child(argument_out), +) -> Result(#(Child(argument_out), Instruction), ChildStartError) { + let current = child.pid + case instruction { + // This child is older than the StartFrom target, we don't need to + // restart it + StartFrom(target) if target != current -> Ok(#(child, instruction)) + + // This pid either is the cause of the problem, or we have the StartAll + // instruction. Either way it and its younger siblings need to be restarted. + _ -> { + shutdown_child(current, child_spec) + use child <- result.then(start_child(child_spec, argument)) + Ok(#(child, StartAll)) + } + } +} + +fn add_child_to_starter( + starter: Starter(argument_in), + child_spec: ChildSpec(msg, argument_in, argument_out), + child: Child(argument_out), +) -> Starter(argument_out) { + let starter = fn(instruction) { + // Restart the older children. We use `try` to return early if the older + // children failed to start + use #(starter, instruction) <- result.then(case starter.exec { + Some(start) -> start(instruction) + None -> Ok(#(starter, instruction)) + }) + + // Perform the instruction, restarting the child as required + use #(child, instruction) <- result.then(perform_instruction_for_child( + starter.argument, + instruction, + child_spec, + child, + )) + + // Create a new starter for the next time the supervisor needs to restart + let starter = add_child_to_starter(starter, child_spec, child) + + Ok(#(starter, instruction)) + } + + Starter(exec: Some(starter), argument: child.argument) +} + +fn start_and_add_child( + state: Starter(argument_0), + child_spec: ChildSpec(msg, argument_0, argument_1), +) -> Children(argument_1) { + case start_child(child_spec, state.argument) { + Ok(child) -> Ready(add_child_to_starter(state, child_spec, child)) + Error(reason) -> Failed(reason) + } +} + +/// Add a child to the collection of children of the supervisor +/// +/// This function starts the child from the child spec. +/// +pub fn add( + children: Children(argument), + child_spec: ChildSpec(msg, argument, new_argument), +) -> Children(new_argument) { + case children { + // If one of the previous children has failed then we cannot continue + Failed(fail) -> Failed(fail) + + // If everything is OK so far then we can add the child + Ready(state) -> start_and_add_child(state, child_spec) + } +} + +// TODO: test +// TODO: unlimitd shut down duration +/// Prepare a new supervisor type child. +/// +/// If you wish to prepare a new non-supervisor type child see the `worker` +/// function. +/// +/// If you wish to change the type of the argument for later children see the +/// `returning` function. +/// +/// Note: Gleam supervisors do not yet support different shutdown periods per +/// child so this function is currently identical in behaviour to `worker`. It is +/// recommended to use this function for supervisor children nevertheless so the +/// correct shut down behaviour is used in later releases of this library. +/// +pub fn supervisor( + start: fn(argument) -> Result(Subject(msg), StartError), +) -> ChildSpec(msg, argument, argument) { + ChildSpec(start: start, returning: fn(argument, _channel) { argument }) +} + +/// Prepare a new worker type child. +/// +/// If you wish to prepare a new supervisor type child see the `supervisor` +/// function. +/// +/// If you wish to change the type of the argument for later children see the +/// `returning` function. +/// +pub fn worker( + start: fn(argument) -> Result(Subject(msg), StartError), +) -> ChildSpec(msg, argument, argument) { + ChildSpec(start: start, returning: fn(argument, _channel) { argument }) +} + +// TODO: test +/// As each child is added to a supervisors children a new argument is prepared +/// with which to start the next child. By default argument is the same as the +/// previous argument, but this function can be used to change it to something +/// else by passing a function that takes the previous argument and the sender +/// of the previous child. +/// +pub fn returning( + child: ChildSpec(msg, argument_a, argument_b), + updater: fn(argument_a, Subject(msg)) -> argument_c, +) -> ChildSpec(msg, argument_a, argument_c) { + ChildSpec(start: child.start, returning: updater) +} + +fn init( + spec: Spec(argument, return), +) -> actor.InitResult(State(return), Message) { + // Create a subject so that we can asynchronously retry restarting when we + // fail to bring an exited child + let retry = process.new_subject() + + // Trap exits so that we get a message when a child crashes + process.trap_exits(True) + + // Combine selectors + let selector = + process.new_selector() + |> process.selecting(retry, RetryRestart) + |> process.selecting_trapped_exits(Exit) + + // Start any children + let result = + Starter(argument: spec.argument, exec: None) + |> Ready + |> spec.init + + // Pass back up the result + case result { + Ready(starter) -> { + let restarts = + intensity_tracker.new( + limit: spec.max_frequency, + period: spec.frequency_period, + ) + let state = + State(starter: starter, restarts: restarts, retry_restarts: retry) + actor.Ready(state, selector) + } + + Failed(error) -> + actor.Failed(case error.error { + actor.InitTimeout -> "Child initialisation timed out" + actor.InitCrashed(reason) -> + string.append( + "Child crashed during initialisation: ", + string.inspect(reason), + ) + actor.InitFailed(reason) -> + string.append( + "Child failed to start during initialisation: ", + string.inspect(reason), + ) + }) + } +} + +type HandleExitError { + RestartFailed(pid: Pid, restarts: IntensityTracker) + TooManyRestarts +} + +fn handle_exit(pid: Pid, state: State(a)) -> actor.Next(Message, State(a)) { + let outcome = { + // If we are handling an exit then we must have some children + let assert Some(start) = state.starter.exec + + // Check to see if there has been too many restarts in this period + use restarts <- result.then( + state.restarts + |> intensity_tracker.add_event + |> result.map_error(fn(_) { TooManyRestarts }), + ) + + // Restart the exited child and any following children + use #(starter, _) <- result.then( + start(StartFrom(pid)) + |> result.map_error(fn(e: ChildStartError) { + RestartFailed(option.unwrap(e.previous_pid, pid), restarts) + }), + ) + + Ok(State(..state, starter: starter, restarts: restarts)) + } + + case outcome { + Ok(state) -> actor.continue(state) + Error(RestartFailed(failed_child, restarts)) -> { + // Asynchronously enqueue the restarting of this child again as we were + // unable to restart them this time. We do this asynchronously as we want + // to have a chance to handle any system messages that have come in. + process.send(state.retry_restarts, failed_child) + let state = State(..state, restarts: restarts) + actor.continue(state) + } + Error(TooManyRestarts) -> + actor.Stop(process.Abnormal( + "Child processes restarted too many times within allowed period", + )) + } +} + +fn loop( + message: Message, + state: State(argument), +) -> actor.Next(Message, State(argument)) { + case message { + Exit(exit_message) -> handle_exit(exit_message.pid, state) + RetryRestart(pid) -> handle_exit(pid, state) + } +} + +/// Start a supervisor from a given specification. +/// +pub fn start_spec(spec: Spec(a, b)) -> Result(Subject(Message), StartError) { + actor.start_spec(actor.Spec( + init: fn() { init(spec) }, + loop: loop, + init_timeout: 60_000, + )) +} + +/// Start a supervisor from a given `init` function. +/// +/// The init argument passed to children will be `Nil` and the maximum restart +/// intensity will be 1 restart per 5 seconds (the same as the default for +/// [Erlang supervisors][erl-sup]). If you wish to specify these values, see +/// the `start_spec` function and the `Spec` type. +/// +/// [erl-sup]: https://www.erlang.org/doc/design_principles/sup_princ.html#maximum-restart-intensity +/// +pub fn start( + init: fn(Children(Nil)) -> Children(a), +) -> Result(Subject(Message), StartError) { + start_spec(Spec( + init: init, + argument: Nil, + max_frequency: 1, + frequency_period: 5, + )) +} + +/// A type used to describe the situation in which an Erlang based application +/// is starting. +/// +/// For more information see the [Erlang distributed application +/// documentation][1] and the Learn Your Some Erlang chapter on [distributed +/// applications][2]. +/// +/// [1]: https://erlang.org/doc/design_principles/distributed_applications.html +/// [2]: https://learnyousomeerlang.com/distributed-otp-applications +/// +pub type ApplicationStartMode { + Normal + Takeover(Node) + Failover(Node) +} + +pub type ApplicationStop + +@external(erlang, "gleam_otp_external", "application_stopped") +pub fn application_stopped() -> ApplicationStop + +/// The result of starting a Gleam actor. +/// +/// This type is compatible with Gleam supervisors. If you wish to convert it +/// to a type compatible with Erlang supervisors see the `ErlangStartResult` +/// type and `erlang_start_result` function. +/// +pub type StartResult(msg) = + actor.StartResult(msg) + +/// An Erlang supervisor compatible process start result. +/// +pub type ErlangStartResult = + actor.ErlangStartResult + +/// Convert a Gleam actor start result into an Erlang supervisor compatible +/// process start result. +/// +pub fn to_erlang_start_result(res: StartResult(msg)) -> ErlangStartResult { + actor.to_erlang_start_result(res) +} diff --git a/aoc2023/build/packages/gleam_otp/src/gleam/otp/system.gleam b/aoc2023/build/packages/gleam_otp/src/gleam/otp/system.gleam new file mode 100644 index 0000000..c05646b --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/src/gleam/otp/system.gleam @@ -0,0 +1,89 @@ +import gleam/dynamic.{type Dynamic} +import gleam/erlang/atom.{type Atom} +import gleam/erlang/process.{type Pid} + +pub type Mode { + Running + Suspended +} + +pub type DebugOption { + NoDebug +} + +pub type DebugState + +@external(erlang, "sys", "debug_options") +pub fn debug_state(a: List(DebugOption)) -> DebugState + +pub type StatusInfo { + StatusInfo( + module: Atom, + parent: Pid, + mode: Mode, + debug_state: DebugState, + state: Dynamic, + ) +} + +// TODO: document +// TODO: implement remaining messages +pub type SystemMessage { + // {replace_state, StateFn} + // {change_code, Mod, Vsn, Extra} + // {terminate, Reason} + // {debug, {log, Flag}} + // {debug, {trace, Flag}} + // {debug, {log_to_file, FileName}} + // {debug, {statistics, Flag}} + // {debug, no_debug} + // {debug, {install, {Func, FuncState}}} + // {debug, {install, {FuncId, Func, FuncState}}} + // {debug, {remove, FuncOrId}} + Resume(fn() -> Nil) + Suspend(fn() -> Nil) + GetState(fn(Dynamic) -> Nil) + GetStatus(fn(StatusInfo) -> Nil) +} + +type DoNotLeak + +/// Get the state of a given OTP compatible process. This function is only +/// intended for debugging. +/// +/// For more information see the [Erlang documentation][1]. +/// +/// [1]: https://erlang.org/doc/man/sys.html#get_state-1 +/// +@external(erlang, "sys", "get_state") +pub fn get_state(from from: Pid) -> Dynamic + +@external(erlang, "sys", "suspend") +fn erl_suspend(a: Pid) -> DoNotLeak + +/// Request an OTP compatible process to suspend, causing it to only handle +/// system messages. +/// +/// For more information see the [Erlang documentation][1]. +/// +/// [1]: https://erlang.org/doc/man/sys.html#suspend-1 +/// +pub fn suspend(pid: Pid) -> Nil { + erl_suspend(pid) + Nil +} + +@external(erlang, "sys", "resume") +fn erl_resume(from from: Pid) -> DoNotLeak + +/// Request a suspended OTP compatible process to result, causing it to handle +/// all messages rather than only system messages. +/// +/// For more information see the [Erlang documentation][1]. +/// +/// [1]: https://erlang.org/doc/man/sys.html#resume-1 +/// +pub fn resume(pid: Pid) -> Nil { + erl_resume(pid) + Nil +} diff --git a/aoc2023/build/packages/gleam_otp/src/gleam/otp/task.gleam b/aoc2023/build/packages/gleam_otp/src/gleam/otp/task.gleam new file mode 100644 index 0000000..b2b2c5c --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/src/gleam/otp/task.gleam @@ -0,0 +1,151 @@ +//// A task is a kind of process that performs a single task and then shuts +//// down. Commonly tasks are used to convert sequential code into concurrent +//// code by performing computation in another process. +//// +//// let task = task.async(fn() { do_some_work() }) +//// let value = do_some_other_work() +//// value + task.await(task, 100) +//// +//// Tasks spawned with async can be awaited on by their caller process (and +//// only their caller) as shown in the example above. They are implemented by +//// spawning a process that sends a message to the caller once the given +//// computation is performed. +//// +//// There are two important things to consider when using `async`: +//// +//// 1. If you are using async tasks, you must await a reply as they are always +//// sent. +//// +//// 2. async tasks link the caller and the spawned process. This means that, +//// if the caller crashes, the task will crash too and vice-versa. This is +//// on purpose: if the process meant to receive the result no longer +//// exists, there is no purpose in completing the computation. +//// +//// This module is inspired by Elixir's [Task module][1]. +//// +//// [1]: https://hexdocs.pm/elixir/master/Task.html +//// + +// TODO: await_many +import gleam/erlang/process.{type Pid, type ProcessMonitor, type Selector} +import gleam/dynamic.{type Dynamic} + +pub opaque type Task(value) { + Task( + owner: Pid, + pid: Pid, + monitor: ProcessMonitor, + selector: Selector(Message(value)), + ) +} + +// TODO: test +/// Spawn a task process that calls a given function in order to perform some +/// work. The result of this function is send back to the parent and can be +/// received using the `await` function. +/// +/// See the top level module documentation for more information on async/await. +/// +pub fn async(work: fn() -> value) -> Task(value) { + let owner = process.self() + let subject = process.new_subject() + let pid = + process.start(linked: True, running: fn() { process.send(subject, work()) }) + let monitor = process.monitor_process(pid) + let selector = + process.new_selector() + |> process.selecting_process_down(monitor, FromMonitor) + |> process.selecting(subject, FromSubject) + Task(owner: owner, pid: pid, monitor: monitor, selector: selector) +} + +pub type AwaitError { + Timeout + Exit(reason: Dynamic) +} + +// We can only wait on a task if we are the owner of it so crash if we are +// waiting on a task we don't own. +fn assert_owner(task: Task(a)) -> Nil { + let self = process.self() + case task.owner == self { + True -> Nil + False -> + process.send_abnormal_exit( + self, + "awaited on a task that does not belong to this process", + ) + } +} + +type Message(value) { + FromMonitor(process.ProcessDown) + FromSubject(value) +} + +// TODO: test +/// Wait for the value computed by a task. +/// +/// If the a value is not received before the timeout has elapsed or if the +/// task process crashes then an error is returned. +/// +pub fn try_await(task: Task(value), timeout: Int) -> Result(value, AwaitError) { + assert_owner(task) + case process.select(task.selector, timeout) { + // The task process has sent back a value + Ok(FromSubject(x)) -> { + process.demonitor_process(task.monitor) + Ok(x) + } + + // The task process crashed without sending a value + Ok(FromMonitor(process.ProcessDown(reason: reason, ..))) -> + Error(Exit(reason)) + + // The task process is alive but has not sent a value yet + Error(Nil) -> Error(Timeout) + } +} + +// TODO: test +/// Wait for the value computed by a task. +/// +/// If the a value is not received before the timeout has elapsed or if the +/// task process crashes then this function crashes. +/// +pub fn await(task: Task(value), timeout: Int) -> value { + let assert Ok(value) = try_await(task, timeout) + value +} + +/// Wait endlessly for the value computed by a task. +/// +/// Be Careful! This function does not return until there is a value to +/// receive. If a value is not received then the process will be stuck waiting +/// forever. +/// +pub fn try_await_forever(task: Task(value)) -> Result(value, AwaitError) { + assert_owner(task) + case process.select_forever(task.selector) { + // The task process has sent back a value + FromSubject(x) -> { + process.demonitor_process(task.monitor) + Ok(x) + } + + // The task process crashed without sending a value + FromMonitor(process.ProcessDown(reason: reason, ..)) -> Error(Exit(reason)) + } +} + +/// Wait endlessly for the value computed by a task. +/// +/// Be Careful! Like `try_await_forever`, this function does not return until there is a value to +/// receive. +/// +/// If the task process crashes then this function crashes. +/// +pub fn await_forever(task: Task(value)) -> value { + let assert Ok(value) = try_await_forever(task) + value +} diff --git a/aoc2023/build/packages/gleam_otp/src/gleam@otp@actor.erl b/aoc2023/build/packages/gleam_otp/src/gleam@otp@actor.erl new file mode 100644 index 0000000..0606147 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/src/gleam@otp@actor.erl @@ -0,0 +1,273 @@ +-module(gleam@otp@actor). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([continue/1, with_selector/2, to_erlang_start_result/1, start_spec/1, start/2, send/2, call/3]). +-export_type([message/1, next/2, init_result/2, self/2, spec/2, start_error/0, start_init_message/1]). + +-type message(GAS) :: {message, GAS} | + {system, gleam@otp@system:system_message()} | + {unexpected, gleam@dynamic:dynamic_()}. + +-type next(GAT, GAU) :: {continue, + GAU, + gleam@option:option(gleam@erlang@process:selector(GAT))} | + {stop, gleam@erlang@process:exit_reason()}. + +-type init_result(GAV, GAW) :: {ready, GAV, gleam@erlang@process:selector(GAW)} | + {failed, binary()}. + +-type self(GAX, GAY) :: {self, + gleam@otp@system:mode(), + gleam@erlang@process:pid_(), + GAX, + gleam@erlang@process:subject(GAY), + gleam@erlang@process:selector(message(GAY)), + gleam@otp@system:debug_state(), + fun((GAY, GAX) -> next(GAY, GAX))}. + +-type spec(GAZ, GBA) :: {spec, + fun(() -> init_result(GAZ, GBA)), + integer(), + fun((GBA, GAZ) -> next(GBA, GAZ))}. + +-type start_error() :: init_timeout | + {init_failed, gleam@erlang@process:exit_reason()} | + {init_crashed, gleam@dynamic:dynamic_()}. + +-type start_init_message(GBB) :: {ack, + {ok, gleam@erlang@process:subject(GBB)} | + {error, gleam@erlang@process:exit_reason()}} | + {mon, gleam@erlang@process:process_down()}. + +-spec continue(GBI) -> next(any(), GBI). +continue(State) -> + {continue, State, none}. + +-spec with_selector(next(GBM, GBN), gleam@erlang@process:selector(GBM)) -> next(GBM, GBN). +with_selector(Value, Selector) -> + case Value of + {continue, State, _} -> + {continue, State, {some, Selector}}; + + _ -> + Value + end. + +-spec exit_process(gleam@erlang@process:exit_reason()) -> gleam@erlang@process:exit_reason(). +exit_process(Reason) -> + Reason. + +-spec selecting_system_messages(gleam@erlang@process:selector(message(GBY))) -> gleam@erlang@process:selector(message(GBY)). +selecting_system_messages(Selector) -> + _pipe = Selector, + gleam@erlang@process:selecting_record3( + _pipe, + erlang:binary_to_atom(<<"system"/utf8>>), + fun gleam_otp_external:convert_system_message/2 + ). + +-spec receive_message(self(any(), GBU)) -> message(GBU). +receive_message(Self) -> + Selector = case erlang:element(2, Self) of + suspended -> + _pipe = gleam_erlang_ffi:new_selector(), + selecting_system_messages(_pipe); + + running -> + _pipe@1 = gleam_erlang_ffi:new_selector(), + _pipe@2 = gleam@erlang@process:selecting_anything( + _pipe@1, + fun(Field@0) -> {unexpected, Field@0} end + ), + _pipe@3 = gleam_erlang_ffi:merge_selector( + _pipe@2, + erlang:element(6, Self) + ), + selecting_system_messages(_pipe@3) + end, + gleam_erlang_ffi:select(Selector). + +-spec process_status_info(self(any(), any())) -> gleam@otp@system:status_info(). +process_status_info(Self) -> + {status_info, + erlang:binary_to_atom(<<"gleam@otp@actor"/utf8>>), + erlang:element(3, Self), + erlang:element(2, Self), + erlang:element(7, Self), + gleam@dynamic:from(erlang:element(4, Self))}. + +-spec init_selector( + gleam@erlang@process:subject(GGN), + gleam@erlang@process:selector(GGN) +) -> gleam@erlang@process:selector(message(GGN)). +init_selector(Subject, Selector) -> + _pipe = gleam_erlang_ffi:new_selector(), + _pipe@1 = gleam@erlang@process:selecting( + _pipe, + Subject, + fun(Field@0) -> {message, Field@0} end + ), + gleam_erlang_ffi:merge_selector( + _pipe@1, + gleam_erlang_ffi:map_selector( + Selector, + fun(Field@0) -> {message, Field@0} end + ) + ). + +-spec loop(self(any(), any())) -> gleam@erlang@process:exit_reason(). +loop(Self) -> + case receive_message(Self) of + {system, System} -> + case System of + {get_state, Callback} -> + Callback(gleam@dynamic:from(erlang:element(4, Self))), + loop(Self); + + {resume, Callback@1} -> + Callback@1(), + loop(erlang:setelement(2, Self, running)); + + {suspend, Callback@2} -> + Callback@2(), + loop(erlang:setelement(2, Self, suspended)); + + {get_status, Callback@3} -> + Callback@3(process_status_info(Self)), + loop(Self) + end; + + {unexpected, Message} -> + logger:warning( + unicode:characters_to_list( + <<"Actor discarding unexpected message: ~s"/utf8>> + ), + [unicode:characters_to_list(gleam@string:inspect(Message))] + ), + loop(Self); + + {message, Msg} -> + case (erlang:element(8, Self))(Msg, erlang:element(4, Self)) of + {stop, Reason} -> + exit_process(Reason); + + {continue, State, New_selector} -> + Selector = begin + _pipe = New_selector, + _pipe@1 = gleam@option:map( + _pipe, + fun(_capture) -> + init_selector(erlang:element(5, Self), _capture) + end + ), + gleam@option:unwrap(_pipe@1, erlang:element(6, Self)) + end, + loop( + erlang:setelement( + 6, + erlang:setelement(4, Self, State), + Selector + ) + ) + end + end. + +-spec initialise_actor( + spec(any(), GCP), + gleam@erlang@process:subject({ok, gleam@erlang@process:subject(GCP)} | + {error, gleam@erlang@process:exit_reason()}) +) -> gleam@erlang@process:exit_reason(). +initialise_actor(Spec, Ack) -> + Subject = gleam@erlang@process:new_subject(), + case (erlang:element(2, Spec))() of + {ready, State, Selector} -> + Selector@1 = init_selector(Subject, Selector), + gleam@erlang@process:send(Ack, {ok, Subject}), + Self = {self, + running, + gleam@erlang@process:subject_owner(Ack), + State, + Subject, + Selector@1, + sys:debug_options([]), + erlang:element(4, Spec)}, + loop(Self); + + {failed, Reason} -> + gleam@erlang@process:send(Ack, {error, {abnormal, Reason}}), + exit_process({abnormal, Reason}) + end. + +-spec to_erlang_start_result( + {ok, gleam@erlang@process:subject(any())} | {error, start_error()} +) -> {ok, gleam@erlang@process:pid_()} | {error, gleam@dynamic:dynamic_()}. +to_erlang_start_result(Res) -> + case Res of + {ok, X} -> + {ok, gleam@erlang@process:subject_owner(X)}; + + {error, X@1} -> + {error, gleam@dynamic:from(X@1)} + end. + +-spec start_spec(spec(any(), GDD)) -> {ok, gleam@erlang@process:subject(GDD)} | + {error, start_error()}. +start_spec(Spec) -> + Ack_subject = gleam@erlang@process:new_subject(), + Child = gleam@erlang@process:start( + fun() -> initialise_actor(Spec, Ack_subject) end, + true + ), + Monitor = gleam@erlang@process:monitor_process(Child), + Selector = begin + _pipe = gleam_erlang_ffi:new_selector(), + _pipe@1 = gleam@erlang@process:selecting( + _pipe, + Ack_subject, + fun(Field@0) -> {ack, Field@0} end + ), + gleam@erlang@process:selecting_process_down( + _pipe@1, + Monitor, + fun(Field@0) -> {mon, Field@0} end + ) + end, + Result = case gleam_erlang_ffi:select(Selector, erlang:element(3, Spec)) of + {ok, {ack, {ok, Channel}}} -> + {ok, Channel}; + + {ok, {ack, {error, Reason}}} -> + {error, {init_failed, Reason}}; + + {ok, {mon, Down}} -> + {error, {init_crashed, erlang:element(3, Down)}}; + + {error, nil} -> + gleam@erlang@process:kill(Child), + {error, init_timeout} + end, + gleam_erlang_ffi:demonitor(Monitor), + Result. + +-spec start(GDJ, fun((GDK, GDJ) -> next(GDK, GDJ))) -> {ok, + gleam@erlang@process:subject(GDK)} | + {error, start_error()}. +start(State, Loop) -> + start_spec( + {spec, + fun() -> {ready, State, gleam_erlang_ffi:new_selector()} end, + 5000, + Loop} + ). + +-spec send(gleam@erlang@process:subject(GDQ), GDQ) -> nil. +send(Subject, Msg) -> + gleam@erlang@process:send(Subject, Msg). + +-spec call( + gleam@erlang@process:subject(GDS), + fun((gleam@erlang@process:subject(GDU)) -> GDS), + integer() +) -> GDU. +call(Selector, Make_message, Timeout) -> + gleam@erlang@process:call(Selector, Make_message, Timeout). diff --git a/aoc2023/build/packages/gleam_otp/src/gleam@otp@intensity_tracker.erl b/aoc2023/build/packages/gleam_otp/src/gleam@otp@intensity_tracker.erl new file mode 100644 index 0000000..8792f14 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/src/gleam@otp@intensity_tracker.erl @@ -0,0 +1,53 @@ +-module(gleam@otp@intensity_tracker). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([new/2, trim_window/3, add_event/1]). +-export_type([intensity_tracker/0, too_intense/0]). + +-opaque intensity_tracker() :: {intensity_tracker, + integer(), + integer(), + list(integer())}. + +-type too_intense() :: too_intense. + +-spec new(integer(), integer()) -> intensity_tracker(). +new(Limit, Period) -> + {intensity_tracker, Limit, Period, []}. + +-spec now_seconds() -> integer(). +now_seconds() -> + erlang:monotonic_time(1). + +-spec trim_window(list(integer()), integer(), integer()) -> list(integer()). +trim_window(Events, Now, Period) -> + case Events of + [] -> + []; + + [Event | Events@1] -> + case Now >= (Event + Period) of + true -> + [Event | trim_window(Events@1, Now, Period)]; + + false -> + [] + end + end. + +-spec add_event(intensity_tracker()) -> {ok, intensity_tracker()} | + {error, too_intense()}. +add_event(Tracker) -> + Now = now_seconds(), + Events = trim_window( + [Now | erlang:element(4, Tracker)], + Now, + erlang:element(3, Tracker) + ), + case gleam@list:length(Events) >= erlang:element(2, Tracker) of + true -> + {error, too_intense}; + + false -> + {ok, erlang:setelement(4, Tracker, Events)} + end. diff --git a/aoc2023/build/packages/gleam_otp/src/gleam@otp@port.erl b/aoc2023/build/packages/gleam_otp/src/gleam@otp@port.erl new file mode 100644 index 0000000..b205739 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/src/gleam@otp@port.erl @@ -0,0 +1,8 @@ +-module(gleam@otp@port). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export_type([port_/0]). + +-type port_() :: any(). + + diff --git a/aoc2023/build/packages/gleam_otp/src/gleam@otp@supervisor.erl b/aoc2023/build/packages/gleam_otp/src/gleam@otp@supervisor.erl new file mode 100644 index 0000000..39118f1 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/src/gleam@otp@supervisor.erl @@ -0,0 +1,322 @@ +-module(gleam@otp@supervisor). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([add/2, supervisor/1, worker/1, returning/2, start_spec/1, start/1, application_stopped/0, to_erlang_start_result/1]). +-export_type([spec/2, children/1, child_spec/3, child_start_error/0, message/0, instruction/0, state/1, starter/1, child/1, handle_exit_error/0, application_start_mode/0, application_stop/0]). + +-type spec(GLS, GLT) :: {spec, + GLS, + integer(), + integer(), + fun((children(GLS)) -> children(GLT))}. + +-opaque children(GLU) :: {ready, starter(GLU)} | {failed, child_start_error()}. + +-opaque child_spec(GLV, GLW, GLX) :: {child_spec, + fun((GLW) -> {ok, gleam@erlang@process:subject(GLV)} | + {error, gleam@otp@actor:start_error()}), + fun((GLW, gleam@erlang@process:subject(GLV)) -> GLX)}. + +-type child_start_error() :: {child_start_error, + gleam@option:option(gleam@erlang@process:pid_()), + gleam@otp@actor:start_error()}. + +-opaque message() :: {exit, gleam@erlang@process:exit_message()} | + {retry_restart, gleam@erlang@process:pid_()}. + +-type instruction() :: start_all | {start_from, gleam@erlang@process:pid_()}. + +-type state(GLY) :: {state, + gleam@otp@intensity_tracker:intensity_tracker(), + starter(GLY), + gleam@erlang@process:subject(gleam@erlang@process:pid_())}. + +-type starter(GLZ) :: {starter, + GLZ, + gleam@option:option(fun((instruction()) -> {ok, + {starter(GLZ), instruction()}} | + {error, child_start_error()}))}. + +-type child(GMA) :: {child, gleam@erlang@process:pid_(), GMA}. + +-type handle_exit_error() :: {restart_failed, + gleam@erlang@process:pid_(), + gleam@otp@intensity_tracker:intensity_tracker()} | + too_many_restarts. + +-type application_start_mode() :: normal | + {takeover, gleam@erlang@node:node_()} | + {failover, gleam@erlang@node:node_()}. + +-type application_stop() :: any(). + +-spec start_child(child_spec(any(), GME, GMF), GME) -> {ok, child(GMF)} | + {error, child_start_error()}. +start_child(Child_spec, Argument) -> + gleam@result:then( + begin + _pipe = (erlang:element(2, Child_spec))(Argument), + gleam@result:map_error( + _pipe, + fun(_capture) -> {child_start_error, none, _capture} end + ) + end, + fun(Subject) -> + {ok, + {child, + gleam@erlang@process:subject_owner(Subject), + (erlang:element(3, Child_spec))(Argument, Subject)}} + end + ). + +-spec shutdown_child( + gleam@erlang@process:pid_(), + child_spec(any(), any(), any()) +) -> nil. +shutdown_child(Pid, _) -> + gleam@erlang@process:send_exit(Pid). + +-spec perform_instruction_for_child( + GMS, + instruction(), + child_spec(any(), GMS, GMU), + child(GMU) +) -> {ok, {child(GMU), instruction()}} | {error, child_start_error()}. +perform_instruction_for_child(Argument, Instruction, Child_spec, Child) -> + Current = erlang:element(2, Child), + case Instruction of + {start_from, Target} when Target =/= Current -> + {ok, {Child, Instruction}}; + + _ -> + shutdown_child(Current, Child_spec), + gleam@result:then( + start_child(Child_spec, Argument), + fun(Child@1) -> {ok, {Child@1, start_all}} end + ) + end. + +-spec add_child_to_starter( + starter(GNC), + child_spec(any(), GNC, GNF), + child(GNF) +) -> starter(GNF). +add_child_to_starter(Starter, Child_spec, Child) -> + Starter@3 = fun(Instruction) -> + gleam@result:then(case erlang:element(3, Starter) of + {some, Start} -> + Start(Instruction); + + none -> + {ok, {Starter, Instruction}} + end, fun(_use0) -> + {Starter@1, Instruction@1} = _use0, + gleam@result:then( + perform_instruction_for_child( + erlang:element(2, Starter@1), + Instruction@1, + Child_spec, + Child + ), + fun(_use0@1) -> + {Child@1, Instruction@2} = _use0@1, + Starter@2 = add_child_to_starter( + Starter@1, + Child_spec, + Child@1 + ), + {ok, {Starter@2, Instruction@2}} + end + ) + end) + end, + {starter, erlang:element(3, Child), {some, Starter@3}}. + +-spec start_and_add_child(starter(GNL), child_spec(any(), GNL, GNO)) -> children(GNO). +start_and_add_child(State, Child_spec) -> + case start_child(Child_spec, erlang:element(2, State)) of + {ok, Child} -> + {ready, add_child_to_starter(State, Child_spec, Child)}; + + {error, Reason} -> + {failed, Reason} + end. + +-spec add(children(GNT), child_spec(any(), GNT, GNW)) -> children(GNW). +add(Children, Child_spec) -> + case Children of + {failed, Fail} -> + {failed, Fail}; + + {ready, State} -> + start_and_add_child(State, Child_spec) + end. + +-spec supervisor( + fun((GOB) -> {ok, gleam@erlang@process:subject(GOC)} | + {error, gleam@otp@actor:start_error()}) +) -> child_spec(GOC, GOB, GOB). +supervisor(Start) -> + {child_spec, Start, fun(Argument, _) -> Argument end}. + +-spec worker( + fun((GOJ) -> {ok, gleam@erlang@process:subject(GOK)} | + {error, gleam@otp@actor:start_error()}) +) -> child_spec(GOK, GOJ, GOJ). +worker(Start) -> + {child_spec, Start, fun(Argument, _) -> Argument end}. + +-spec returning( + child_spec(GOR, GOS, any()), + fun((GOS, gleam@erlang@process:subject(GOR)) -> GOY) +) -> child_spec(GOR, GOS, GOY). +returning(Child, Updater) -> + {child_spec, erlang:element(2, Child), Updater}. + +-spec init(spec(any(), GPD)) -> gleam@otp@actor:init_result(state(GPD), message()). +init(Spec) -> + Retry = gleam@erlang@process:new_subject(), + gleam_erlang_ffi:trap_exits(true), + Selector = begin + _pipe = gleam_erlang_ffi:new_selector(), + _pipe@1 = gleam@erlang@process:selecting( + _pipe, + Retry, + fun(Field@0) -> {retry_restart, Field@0} end + ), + gleam@erlang@process:selecting_trapped_exits( + _pipe@1, + fun(Field@0) -> {exit, Field@0} end + ) + end, + Result = begin + _pipe@2 = {starter, erlang:element(2, Spec), none}, + _pipe@3 = {ready, _pipe@2}, + (erlang:element(5, Spec))(_pipe@3) + end, + case Result of + {ready, Starter} -> + Restarts = gleam@otp@intensity_tracker:new( + erlang:element(3, Spec), + erlang:element(4, Spec) + ), + State = {state, Restarts, Starter, Retry}, + {ready, State, Selector}; + + {failed, Error} -> + {failed, case erlang:element(3, Error) of + init_timeout -> + <<"Child initialisation timed out"/utf8>>; + + {init_crashed, Reason} -> + gleam@string:append( + <<"Child crashed during initialisation: "/utf8>>, + gleam@string:inspect(Reason) + ); + + {init_failed, Reason@1} -> + gleam@string:append( + <<"Child failed to start during initialisation: "/utf8>>, + gleam@string:inspect(Reason@1) + ) + end} + end. + +-spec handle_exit(gleam@erlang@process:pid_(), state(GPJ)) -> gleam@otp@actor:next(message(), state(GPJ)). +handle_exit(Pid, State) -> + Outcome = begin + _assert_subject = erlang:element(3, erlang:element(3, State)), + {some, Start} = case _assert_subject of + {some, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam/otp/supervisor"/utf8>>, + function => <<"handle_exit"/utf8>>, + line => 293}) + end, + gleam@result:then( + begin + _pipe = erlang:element(2, State), + _pipe@1 = gleam@otp@intensity_tracker:add_event(_pipe), + gleam@result:map_error(_pipe@1, fun(_) -> too_many_restarts end) + end, + fun(Restarts) -> + gleam@result:then( + begin + _pipe@2 = Start({start_from, Pid}), + gleam@result:map_error( + _pipe@2, + fun(E) -> + {restart_failed, + gleam@option:unwrap( + erlang:element(2, E), + Pid + ), + Restarts} + end + ) + end, + fun(_use0) -> + {Starter, _} = _use0, + {ok, + erlang:setelement( + 2, + erlang:setelement(3, State, Starter), + Restarts + )} + end + ) + end + ) + end, + case Outcome of + {ok, State@1} -> + gleam@otp@actor:continue(State@1); + + {error, {restart_failed, Failed_child, Restarts@1}} -> + gleam@erlang@process:send(erlang:element(4, State), Failed_child), + State@2 = erlang:setelement(2, State, Restarts@1), + gleam@otp@actor:continue(State@2); + + {error, too_many_restarts} -> + {stop, + {abnormal, + <<"Child processes restarted too many times within allowed period"/utf8>>}} + end. + +-spec loop(message(), state(GPO)) -> gleam@otp@actor:next(message(), state(GPO)). +loop(Message, State) -> + case Message of + {exit, Exit_message} -> + handle_exit(erlang:element(2, Exit_message), State); + + {retry_restart, Pid} -> + handle_exit(Pid, State) + end. + +-spec start_spec(spec(any(), any())) -> {ok, + gleam@erlang@process:subject(message())} | + {error, gleam@otp@actor:start_error()}. +start_spec(Spec) -> + gleam@otp@actor:start_spec( + {spec, fun() -> init(Spec) end, 60000, fun loop/2} + ). + +-spec start(fun((children(nil)) -> children(any()))) -> {ok, + gleam@erlang@process:subject(message())} | + {error, gleam@otp@actor:start_error()}. +start(Init) -> + start_spec({spec, nil, 1, 5, Init}). + +-spec application_stopped() -> application_stop(). +application_stopped() -> + gleam_otp_external:application_stopped(). + +-spec to_erlang_start_result( + {ok, gleam@erlang@process:subject(any())} | + {error, gleam@otp@actor:start_error()} +) -> {ok, gleam@erlang@process:pid_()} | {error, gleam@dynamic:dynamic_()}. +to_erlang_start_result(Res) -> + gleam@otp@actor:to_erlang_start_result(Res). diff --git a/aoc2023/build/packages/gleam_otp/src/gleam@otp@system.erl b/aoc2023/build/packages/gleam_otp/src/gleam@otp@system.erl new file mode 100644 index 0000000..622e5ea --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/src/gleam@otp@system.erl @@ -0,0 +1,43 @@ +-module(gleam@otp@system). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([debug_state/1, get_state/1, suspend/1, resume/1]). +-export_type([mode/0, debug_option/0, debug_state/0, status_info/0, system_message/0, do_not_leak/0]). + +-type mode() :: running | suspended. + +-type debug_option() :: no_debug. + +-type debug_state() :: any(). + +-type status_info() :: {status_info, + gleam@erlang@atom:atom_(), + gleam@erlang@process:pid_(), + mode(), + debug_state(), + gleam@dynamic:dynamic_()}. + +-type system_message() :: {resume, fun(() -> nil)} | + {suspend, fun(() -> nil)} | + {get_state, fun((gleam@dynamic:dynamic_()) -> nil)} | + {get_status, fun((status_info()) -> nil)}. + +-type do_not_leak() :: any(). + +-spec debug_state(list(debug_option())) -> debug_state(). +debug_state(A) -> + sys:debug_options(A). + +-spec get_state(gleam@erlang@process:pid_()) -> gleam@dynamic:dynamic_(). +get_state(From) -> + sys:get_state(From). + +-spec suspend(gleam@erlang@process:pid_()) -> nil. +suspend(Pid) -> + sys:suspend(Pid), + nil. + +-spec resume(gleam@erlang@process:pid_()) -> nil. +resume(Pid) -> + sys:resume(Pid), + nil. diff --git a/aoc2023/build/packages/gleam_otp/src/gleam@otp@task.erl b/aoc2023/build/packages/gleam_otp/src/gleam@otp@task.erl new file mode 100644 index 0000000..e004284 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/src/gleam@otp@task.erl @@ -0,0 +1,111 @@ +-module(gleam@otp@task). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([async/1, try_await/2, await/2, try_await_forever/1, await_forever/1]). +-export_type([task/1, await_error/0, message/1]). + +-opaque task(FWJ) :: {task, + gleam@erlang@process:pid_(), + gleam@erlang@process:pid_(), + gleam@erlang@process:process_monitor(), + gleam@erlang@process:selector(message(FWJ))}. + +-type await_error() :: timeout | {exit, gleam@dynamic:dynamic_()}. + +-type message(FWK) :: {from_monitor, gleam@erlang@process:process_down()} | + {from_subject, FWK}. + +-spec async(fun(() -> FWL)) -> task(FWL). +async(Work) -> + Owner = erlang:self(), + Subject = gleam@erlang@process:new_subject(), + Pid = gleam@erlang@process:start( + fun() -> gleam@erlang@process:send(Subject, Work()) end, + true + ), + Monitor = gleam@erlang@process:monitor_process(Pid), + Selector = begin + _pipe = gleam_erlang_ffi:new_selector(), + _pipe@1 = gleam@erlang@process:selecting_process_down( + _pipe, + Monitor, + fun(Field@0) -> {from_monitor, Field@0} end + ), + gleam@erlang@process:selecting( + _pipe@1, + Subject, + fun(Field@0) -> {from_subject, Field@0} end + ) + end, + {task, Owner, Pid, Monitor, Selector}. + +-spec assert_owner(task(any())) -> nil. +assert_owner(Task) -> + Self = erlang:self(), + case erlang:element(2, Task) =:= Self of + true -> + nil; + + false -> + gleam@erlang@process:send_abnormal_exit( + Self, + <<"awaited on a task that does not belong to this process"/utf8>> + ) + end. + +-spec try_await(task(FWP), integer()) -> {ok, FWP} | {error, await_error()}. +try_await(Task, Timeout) -> + assert_owner(Task), + case gleam_erlang_ffi:select(erlang:element(5, Task), Timeout) of + {ok, {from_subject, X}} -> + gleam_erlang_ffi:demonitor(erlang:element(4, Task)), + {ok, X}; + + {ok, {from_monitor, {process_down, _, Reason}}} -> + {error, {exit, Reason}}; + + {error, nil} -> + {error, timeout} + end. + +-spec await(task(FWT), integer()) -> FWT. +await(Task, Timeout) -> + _assert_subject = try_await(Task, Timeout), + {ok, Value} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam/otp/task"/utf8>>, + function => <<"await"/utf8>>, + line => 117}) + end, + Value. + +-spec try_await_forever(task(FWV)) -> {ok, FWV} | {error, await_error()}. +try_await_forever(Task) -> + assert_owner(Task), + case gleam_erlang_ffi:select(erlang:element(5, Task)) of + {from_subject, X} -> + gleam_erlang_ffi:demonitor(erlang:element(4, Task)), + {ok, X}; + + {from_monitor, {process_down, _, Reason}} -> + {error, {exit, Reason}} + end. + +-spec await_forever(task(FWZ)) -> FWZ. +await_forever(Task) -> + _assert_subject = try_await_forever(Task), + {ok, Value} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"gleam/otp/task"/utf8>>, + function => <<"await_forever"/utf8>>, + line => 149}) + end, + Value. diff --git a/aoc2023/build/packages/gleam_otp/src/gleam_otp.app.src b/aoc2023/build/packages/gleam_otp/src/gleam_otp.app.src new file mode 100644 index 0000000..5c52295 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/src/gleam_otp.app.src @@ -0,0 +1,15 @@ +{application, gleam_otp, [ + {vsn, "0.8.0"}, + {applications, [gleam_erlang, + gleam_stdlib, + gleeunit]}, + {description, "Fault tolerant multicore Gleam programs with OTP"}, + {modules, [gleam@otp@actor, + gleam@otp@intensity_tracker, + gleam@otp@port, + gleam@otp@supervisor, + gleam@otp@system, + gleam@otp@task, + gleam_otp]}, + {registered, []} +]}. diff --git a/aoc2023/build/packages/gleam_otp/src/gleam_otp.erl b/aoc2023/build/packages/gleam_otp/src/gleam_otp.erl new file mode 100644 index 0000000..9381ad2 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/src/gleam_otp.erl @@ -0,0 +1,28 @@ +-module(gleam_otp). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([main/0]). + +-spec spawn_task(integer()) -> gleam@otp@task:task(nil). +spawn_task(I) -> + gleam@otp@task:async(fun() -> case (I rem 500) =:= 0 of + true -> + gleam@io:println( + <<"Hello from "/utf8, (gleam@int:to_string(I))/binary>> + ); + + false -> + nil + end end). + +-spec main() -> integer(). +main() -> + gleam@io:debug( + gleam_otp_test_external:get_message_queue_length(erlang:self()) + ), + _pipe = gleam@list:range(0, 1000000), + _pipe@1 = gleam@list:map(_pipe, fun spawn_task/1), + gleam@list:each(_pipe@1, fun gleam@otp@task:await_forever/1), + gleam@io:debug( + gleam_otp_test_external:get_message_queue_length(erlang:self()) + ). diff --git a/aoc2023/build/packages/gleam_otp/src/gleam_otp.gleam b/aoc2023/build/packages/gleam_otp/src/gleam_otp.gleam new file mode 100644 index 0000000..69cdd5b --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/src/gleam_otp.gleam @@ -0,0 +1,27 @@ +import gleam/io +import gleam/int +import gleam/list +import gleam/otp/task +import gleam/erlang/process.{type Pid} + +@external(erlang, "gleam_otp_test_external", "get_message_queue_length") +fn get_message_queue_length(pid pid: Pid) -> Int + +fn spawn_task(i) { + task.async(fn() { + case i % 500 == 0 { + True -> io.println("Hello from " <> int.to_string(i)) + False -> Nil + } + }) +} + +pub fn main() { + io.debug(get_message_queue_length(process.self())) + + list.range(0, 1_000_000) + |> list.map(spawn_task) + |> list.each(task.await_forever) + + io.debug(get_message_queue_length(process.self())) +} diff --git a/aoc2023/build/packages/gleam_otp/src/gleam_otp_external.erl b/aoc2023/build/packages/gleam_otp/src/gleam_otp_external.erl new file mode 100644 index 0000000..8910a67 --- /dev/null +++ b/aoc2023/build/packages/gleam_otp/src/gleam_otp_external.erl @@ -0,0 +1,43 @@ +-module(gleam_otp_external). + +-export([application_stopped/0, convert_system_message/2]). + +% TODO: support other system messages +% {replace_state, StateFn} +% {change_code, Mod, Vsn, Extra} +% {terminate, Reason} +% {debug, {log, Flag}} +% {debug, {trace, Flag}} +% {debug, {log_to_file, FileName}} +% {debug, {statistics, Flag}} +% {debug, no_debug} +% {debug, {install, {Func, FuncState}}} +% {debug, {install, {FuncId, Func, FuncState}}} +% {debug, {remove, FuncOrId}} +% GetStatus(Subject(StatusInfo)) +convert_system_message({From, Ref}, Request) when is_pid(From) -> + Reply = fun(Msg) -> + erlang:send(From, {Ref, Msg}), + nil + end, + System = fun(Callback) -> + {system, {Request, Callback}} + end, + case Request of + get_status -> System(fun(Status) -> Reply(process_status(Status)) end); + get_state -> System(Reply); + suspend -> System(fun() -> Reply(ok) end); + resume -> System(fun() -> Reply(ok) end); + Other -> {unexpeceted, Other} + end. + +process_status({status_info, Module, Parent, Mode, DebugState, State}) -> + Data = [ + get(), Mode, Parent, DebugState, + [{header, "Status for Gleam process " ++ pid_to_list(self())}, + {data, [{'Status', Mode}, {'Parent', Parent}, {'State', State}]}] + ], + {status, self(), {module, Module}, Data}. + +application_stopped() -> + ok. diff --git a/aoc2023/build/packages/gleam_stdlib/LICENCE b/aoc2023/build/packages/gleam_stdlib/LICENCE new file mode 100644 index 0000000..c1dabd0 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/LICENCE @@ -0,0 +1,191 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2018, Louis Pilfold <louis@lpil.uk>. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/aoc2023/build/packages/gleam_stdlib/README.md b/aoc2023/build/packages/gleam_stdlib/README.md new file mode 100644 index 0000000..05c68ca --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/README.md @@ -0,0 +1,39 @@ +# stdlib + +<a href="https://github.com/gleam-lang/stdlib/releases"><img src="https://img.shields.io/github/release/gleam-lang/stdlib" alt="GitHub release"></a> +<a href="https://discord.gg/Fm8Pwmy"><img src="https://img.shields.io/discord/768594524158427167?color=blue" alt="Discord chat"></a> + + +Gleam's standard library! +Documentation available on [HexDocs](https://hexdocs.pm/gleam_stdlib/). + +## Installation + +Add `gleam_stdlib` to your Gleam project. + +```sh +gleam add gleam_stdlib +``` + +## Usage + +Import the modules you want to use and write some code! + +```gleam +import gleam/string + +pub fn greet(name: String) -> String { + string.concat(["Hello ", name, "!"]) +} +``` + +## Targets + +Gleam's standard library supports both targets: Erlang and JavaScript. + +### Compatibility + +This library is compatible with all versions of Erlang/OTP, NodeJS, and +major browsers that are currently supported by their maintainers. If you +have a compatibility issue with any platform open an issue and we'll see +what we can do to help. diff --git a/aoc2023/build/packages/gleam_stdlib/gleam.toml b/aoc2023/build/packages/gleam_stdlib/gleam.toml new file mode 100644 index 0000000..0cb0531 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/gleam.toml @@ -0,0 +1,16 @@ +name = "gleam_stdlib" +version = "0.33.0" +gleam = ">= 0.32.0" +licences = ["Apache-2.0"] +description = "A standard library for the Gleam programming language" + +repository = { type = "github", user = "gleam-lang", repo = "stdlib" } +links = [ + { title = "Website", href = "https://gleam.run" }, + { title = "Sponsor", href = "https://github.com/sponsors/lpil" }, +] + +[javascript.deno] +allow_read = [ + "./", +] diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@dynamic_DecodeError.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@dynamic_DecodeError.hrl new file mode 100644 index 0000000..b1135f2 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@dynamic_DecodeError.hrl @@ -0,0 +1,5 @@ +-record(decode_error, { + expected :: binary(), + found :: binary(), + path :: list(binary()) +}). diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@iterator_Iterator.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@iterator_Iterator.hrl new file mode 100644 index 0000000..b0d08dc --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@iterator_Iterator.hrl @@ -0,0 +1 @@ +-record(iterator, {continuation :: fun(() -> gleam@iterator:action(any()))}). diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@iterator_Next.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@iterator_Next.hrl new file mode 100644 index 0000000..1f61922 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@iterator_Next.hrl @@ -0,0 +1 @@ +-record(next, {element :: any(), accumulator :: any()}). diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@queue_Queue.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@queue_Queue.hrl new file mode 100644 index 0000000..88ac25e --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@queue_Queue.hrl @@ -0,0 +1 @@ +-record(queue, {in :: list(any()), out :: list(any())}). diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_CompileError.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_CompileError.hrl new file mode 100644 index 0000000..ad5511e --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_CompileError.hrl @@ -0,0 +1 @@ +-record(compile_error, {error :: binary(), byte_index :: integer()}). diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_Match.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_Match.hrl new file mode 100644 index 0000000..4216619 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_Match.hrl @@ -0,0 +1,4 @@ +-record(match, { + content :: binary(), + submatches :: list(gleam@option:option(binary())) +}). diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_Options.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_Options.hrl new file mode 100644 index 0000000..0074603 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_Options.hrl @@ -0,0 +1 @@ +-record(options, {case_insensitive :: boolean(), multi_line :: boolean()}). diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@set_Set.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@set_Set.hrl new file mode 100644 index 0000000..6e1e226 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@set_Set.hrl @@ -0,0 +1 @@ +-record(set, {map :: gleam@dict:dict(any(), list(nil))}). diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@uri_Uri.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@uri_Uri.hrl new file mode 100644 index 0000000..50150f4 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@uri_Uri.hrl @@ -0,0 +1,9 @@ +-record(uri, { + scheme :: gleam@option:option(binary()), + userinfo :: gleam@option:option(binary()), + host :: gleam@option:option(binary()), + port :: gleam@option:option(integer()), + path :: binary(), + 'query' :: gleam@option:option(binary()), + fragment :: gleam@option:option(binary()) +}). diff --git a/aoc2023/build/packages/gleam_stdlib/src/dict.mjs b/aoc2023/build/packages/gleam_stdlib/src/dict.mjs new file mode 100644 index 0000000..a8309e0 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/dict.mjs @@ -0,0 +1,957 @@ +/** + * This file uses jsdoc to annotate types. + * These types can be checked using the typescript compiler with "checkjs" option. + */ + +import { isEqual } from "./gleam.mjs"; + +const referenceMap = new WeakMap(); +const tempDataView = new DataView(new ArrayBuffer(8)); +let referenceUID = 0; +/** + * hash the object by reference using a weak map and incrementing uid + * @param {any} o + * @returns {number} + */ +function hashByReference(o) { + const known = referenceMap.get(o); + if (known !== undefined) { + return known; + } + const hash = referenceUID++; + if (referenceUID === 0x7fffffff) { + referenceUID = 0; + } + referenceMap.set(o, hash); + return hash; +} +/** + * merge two hashes in an order sensitive way + * @param {number} a + * @param {number} b + * @returns {number} + */ +function hashMerge(a, b) { + return (a ^ (b + 0x9e3779b9 + (a << 6) + (a >> 2))) | 0; +} +/** + * standard string hash popularised by java + * @param {string} s + * @returns {number} + */ +function hashString(s) { + let hash = 0; + const len = s.length; + for (let i = 0; i < len; i++) { + hash = (Math.imul(31, hash) + s.charCodeAt(i)) | 0; + } + return hash; +} +/** + * hash a number by converting to two integers and do some jumbling + * @param {number} n + * @returns {number} + */ +function hashNumber(n) { + tempDataView.setFloat64(0, n); + const i = tempDataView.getInt32(0); + const j = tempDataView.getInt32(4); + return Math.imul(0x45d9f3b, (i >> 16) ^ i) ^ j; +} +/** + * hash a BigInt by converting it to a string and hashing that + * @param {BigInt} n + * @returns {number} + */ +function hashBigInt(n) { + return hashString(n.toString()); +} +/** + * hash any js object + * @param {any} o + * @returns {number} + */ +function hashObject(o) { + const proto = Object.getPrototypeOf(o); + if (proto !== null && typeof proto.hashCode === "function") { + try { + const code = o.hashCode(o); + if (typeof code === "number") { + return code; + } + } catch {} + } + if (o instanceof Promise || o instanceof WeakSet || o instanceof WeakMap) { + return hashByReference(o); + } + if (o instanceof Date) { + return hashNumber(o.getTime()); + } + let h = 0; + if (o instanceof ArrayBuffer) { + o = new Uint8Array(o); + } + if (Array.isArray(o) || o instanceof Uint8Array) { + for (let i = 0; i < o.length; i++) { + h = (Math.imul(31, h) + getHash(o[i])) | 0; + } + } else if (o instanceof Set) { + o.forEach((v) => { + h = (h + getHash(v)) | 0; + }); + } else if (o instanceof Map) { + o.forEach((v, k) => { + h = (h + hashMerge(getHash(v), getHash(k))) | 0; + }); + } else { + const keys = Object.keys(o); + for (let i = 0; i < keys.length; i++) { + const k = keys[i]; + const v = o[k]; + h = (h + hashMerge(getHash(v), hashString(k))) | 0; + } + } + return h; +} +/** + * hash any js value + * @param {any} u + * @returns {number} + */ +export function getHash(u) { + if (u === null) return 0x42108422; + if (u === undefined) return 0x42108423; + if (u === true) return 0x42108421; + if (u === false) return 0x42108420; + switch (typeof u) { + case "number": + return hashNumber(u); + case "string": + return hashString(u); + case "bigint": + return hashBigInt(u); + case "object": + return hashObject(u); + case "symbol": + return hashByReference(u); + case "function": + return hashByReference(u); + default: + return 0; // should be unreachable + } +} +/** + * @template K,V + * @typedef {ArrayNode<K,V> | IndexNode<K,V> | CollisionNode<K,V>} Node + */ +/** + * @template K,V + * @typedef {{ type: typeof ENTRY, k: K, v: V }} Entry + */ +/** + * @template K,V + * @typedef {{ type: typeof ARRAY_NODE, size: number, array: (undefined | Entry<K,V> | Node<K,V>)[] }} ArrayNode + */ +/** + * @template K,V + * @typedef {{ type: typeof INDEX_NODE, bitmap: number, array: (Entry<K,V> | Node<K,V>)[] }} IndexNode + */ +/** + * @template K,V + * @typedef {{ type: typeof COLLISION_NODE, hash: number, array: Entry<K, V>[] }} CollisionNode + */ +/** + * @typedef {{ val: boolean }} Flag + */ +const SHIFT = 5; // number of bits you need to shift by to get the next bucket +const BUCKET_SIZE = Math.pow(2, SHIFT); +const MASK = BUCKET_SIZE - 1; // used to zero out all bits not in the bucket +const MAX_INDEX_NODE = BUCKET_SIZE / 2; // when does index node grow into array node +const MIN_ARRAY_NODE = BUCKET_SIZE / 4; // when does array node shrink to index node +const ENTRY = 0; +const ARRAY_NODE = 1; +const INDEX_NODE = 2; +const COLLISION_NODE = 3; +/** @type {IndexNode<any,any>} */ +const EMPTY = { + type: INDEX_NODE, + bitmap: 0, + array: [], +}; +/** + * Mask the hash to get only the bucket corresponding to shift + * @param {number} hash + * @param {number} shift + * @returns {number} + */ +function mask(hash, shift) { + return (hash >>> shift) & MASK; +} +/** + * Set only the Nth bit where N is the masked hash + * @param {number} hash + * @param {number} shift + * @returns {number} + */ +function bitpos(hash, shift) { + return 1 << mask(hash, shift); +} +/** + * Count the number of 1 bits in a number + * @param {number} x + * @returns {number} + */ +function bitcount(x) { + x -= (x >> 1) & 0x55555555; + x = (x & 0x33333333) + ((x >> 2) & 0x33333333); + x = (x + (x >> 4)) & 0x0f0f0f0f; + x += x >> 8; + x += x >> 16; + return x & 0x7f; +} +/** + * Calculate the array index of an item in a bitmap index node + * @param {number} bitmap + * @param {number} bit + * @returns {number} + */ +function index(bitmap, bit) { + return bitcount(bitmap & (bit - 1)); +} +/** + * Efficiently copy an array and set one value at an index + * @template T + * @param {T[]} arr + * @param {number} at + * @param {T} val + * @returns {T[]} + */ +function cloneAndSet(arr, at, val) { + const len = arr.length; + const out = new Array(len); + for (let i = 0; i < len; ++i) { + out[i] = arr[i]; + } + out[at] = val; + return out; +} +/** + * Efficiently copy an array and insert one value at an index + * @template T + * @param {T[]} arr + * @param {number} at + * @param {T} val + * @returns {T[]} + */ +function spliceIn(arr, at, val) { + const len = arr.length; + const out = new Array(len + 1); + let i = 0; + let g = 0; + while (i < at) { + out[g++] = arr[i++]; + } + out[g++] = val; + while (i < len) { + out[g++] = arr[i++]; + } + return out; +} +/** + * Efficiently copy an array and remove one value at an index + * @template T + * @param {T[]} arr + * @param {number} at + * @returns {T[]} + */ +function spliceOut(arr, at) { + const len = arr.length; + const out = new Array(len - 1); + let i = 0; + let g = 0; + while (i < at) { + out[g++] = arr[i++]; + } + ++i; + while (i < len) { + out[g++] = arr[i++]; + } + return out; +} +/** + * Create a new node containing two entries + * @template K,V + * @param {number} shift + * @param {K} key1 + * @param {V} val1 + * @param {number} key2hash + * @param {K} key2 + * @param {V} val2 + * @returns {Node<K,V>} + */ +function createNode(shift, key1, val1, key2hash, key2, val2) { + const key1hash = getHash(key1); + if (key1hash === key2hash) { + return { + type: COLLISION_NODE, + hash: key1hash, + array: [ + { type: ENTRY, k: key1, v: val1 }, + { type: ENTRY, k: key2, v: val2 }, + ], + }; + } + const addedLeaf = { val: false }; + return assoc( + assocIndex(EMPTY, shift, key1hash, key1, val1, addedLeaf), + shift, + key2hash, + key2, + val2, + addedLeaf + ); +} +/** + * @template T,K,V + * @callback AssocFunction + * @param {T} root + * @param {number} shift + * @param {number} hash + * @param {K} key + * @param {V} val + * @param {Flag} addedLeaf + * @returns {Node<K,V>} + */ +/** + * Associate a node with a new entry, creating a new node + * @template T,K,V + * @type {AssocFunction<Node<K,V>,K,V>} + */ +function assoc(root, shift, hash, key, val, addedLeaf) { + switch (root.type) { + case ARRAY_NODE: + return assocArray(root, shift, hash, key, val, addedLeaf); + case INDEX_NODE: + return assocIndex(root, shift, hash, key, val, addedLeaf); + case COLLISION_NODE: + return assocCollision(root, shift, hash, key, val, addedLeaf); + } +} +/** + * @template T,K,V + * @type {AssocFunction<ArrayNode<K,V>,K,V>} + */ +function assocArray(root, shift, hash, key, val, addedLeaf) { + const idx = mask(hash, shift); + const node = root.array[idx]; + // if the corresponding index is empty set the index to a newly created node + if (node === undefined) { + addedLeaf.val = true; + return { + type: ARRAY_NODE, + size: root.size + 1, + array: cloneAndSet(root.array, idx, { type: ENTRY, k: key, v: val }), + }; + } + if (node.type === ENTRY) { + // if keys are equal replace the entry + if (isEqual(key, node.k)) { + if (val === node.v) { + return root; + } + return { + type: ARRAY_NODE, + size: root.size, + array: cloneAndSet(root.array, idx, { + type: ENTRY, + k: key, + v: val, + }), + }; + } + // otherwise upgrade the entry to a node and insert + addedLeaf.val = true; + return { + type: ARRAY_NODE, + size: root.size, + array: cloneAndSet( + root.array, + idx, + createNode(shift + SHIFT, node.k, node.v, hash, key, val) + ), + }; + } + // otherwise call assoc on the child node + const n = assoc(node, shift + SHIFT, hash, key, val, addedLeaf); + // if the child node hasn't changed just return the old root + if (n === node) { + return root; + } + // otherwise set the index to the new node + return { + type: ARRAY_NODE, + size: root.size, + array: cloneAndSet(root.array, idx, n), + }; +} +/** + * @template T,K,V + * @type {AssocFunction<IndexNode<K,V>,K,V>} + */ +function assocIndex(root, shift, hash, key, val, addedLeaf) { + const bit = bitpos(hash, shift); + const idx = index(root.bitmap, bit); + // if there is already a item at this hash index.. + if ((root.bitmap & bit) !== 0) { + // if there is a node at the index (not an entry), call assoc on the child node + const node = root.array[idx]; + if (node.type !== ENTRY) { + const n = assoc(node, shift + SHIFT, hash, key, val, addedLeaf); + if (n === node) { + return root; + } + return { + type: INDEX_NODE, + bitmap: root.bitmap, + array: cloneAndSet(root.array, idx, n), + }; + } + // otherwise there is an entry at the index + // if the keys are equal replace the entry with the updated value + const nodeKey = node.k; + if (isEqual(key, nodeKey)) { + if (val === node.v) { + return root; + } + return { + type: INDEX_NODE, + bitmap: root.bitmap, + array: cloneAndSet(root.array, idx, { + type: ENTRY, + k: key, + v: val, + }), + }; + } + // if the keys are not equal, replace the entry with a new child node + addedLeaf.val = true; + return { + type: INDEX_NODE, + bitmap: root.bitmap, + array: cloneAndSet( + root.array, + idx, + createNode(shift + SHIFT, nodeKey, node.v, hash, key, val) + ), + }; + } else { + // else there is currently no item at the hash index + const n = root.array.length; + // if the number of nodes is at the maximum, expand this node into an array node + if (n >= MAX_INDEX_NODE) { + // create a 32 length array for the new array node (one for each bit in the hash) + const nodes = new Array(32); + // create and insert a node for the new entry + const jdx = mask(hash, shift); + nodes[jdx] = assocIndex(EMPTY, shift + SHIFT, hash, key, val, addedLeaf); + let j = 0; + let bitmap = root.bitmap; + // place each item in the index node into the correct spot in the array node + // loop through all 32 bits / array positions + for (let i = 0; i < 32; i++) { + if ((bitmap & 1) !== 0) { + const node = root.array[j++]; + nodes[i] = node; + } + // shift the bitmap to process the next bit + bitmap = bitmap >>> 1; + } + return { + type: ARRAY_NODE, + size: n + 1, + array: nodes, + }; + } else { + // else there is still space in this index node + // simply insert a new entry at the hash index + const newArray = spliceIn(root.array, idx, { + type: ENTRY, + k: key, + v: val, + }); + addedLeaf.val = true; + return { + type: INDEX_NODE, + bitmap: root.bitmap | bit, + array: newArray, + }; + } + } +} +/** + * @template T,K,V + * @type {AssocFunction<CollisionNode<K,V>,K,V>} + */ +function assocCollision(root, shift, hash, key, val, addedLeaf) { + // if there is a hash collision + if (hash === root.hash) { + const idx = collisionIndexOf(root, key); + // if this key already exists replace the entry with the new value + if (idx !== -1) { + const entry = root.array[idx]; + if (entry.v === val) { + return root; + } + return { + type: COLLISION_NODE, + hash: hash, + array: cloneAndSet(root.array, idx, { type: ENTRY, k: key, v: val }), + }; + } + // otherwise insert the entry at the end of the array + const size = root.array.length; + addedLeaf.val = true; + return { + type: COLLISION_NODE, + hash: hash, + array: cloneAndSet(root.array, size, { type: ENTRY, k: key, v: val }), + }; + } + // if there is no hash collision, upgrade to an index node + return assoc( + { + type: INDEX_NODE, + bitmap: bitpos(root.hash, shift), + array: [root], + }, + shift, + hash, + key, + val, + addedLeaf + ); +} +/** + * Find the index of a key in the collision node's array + * @template K,V + * @param {CollisionNode<K,V>} root + * @param {K} key + * @returns {number} + */ +function collisionIndexOf(root, key) { + const size = root.array.length; + for (let i = 0; i < size; i++) { + if (isEqual(key, root.array[i].k)) { + return i; + } + } + return -1; +} +/** + * @template T,K,V + * @callback FindFunction + * @param {T} root + * @param {number} shift + * @param {number} hash + * @param {K} key + * @returns {undefined | Entry<K,V>} + */ +/** + * Return the found entry or undefined if not present in the root + * @template K,V + * @type {FindFunction<Node<K,V>,K,V>} + */ +function find(root, shift, hash, key) { + switch (root.type) { + case ARRAY_NODE: + return findArray(root, shift, hash, key); + case INDEX_NODE: + return findIndex(root, shift, hash, key); + case COLLISION_NODE: + return findCollision(root, key); + } +} +/** + * @template K,V + * @type {FindFunction<ArrayNode<K,V>,K,V>} + */ +function findArray(root, shift, hash, key) { + const idx = mask(hash, shift); + const node = root.array[idx]; + if (node === undefined) { + return undefined; + } + if (node.type !== ENTRY) { + return find(node, shift + SHIFT, hash, key); + } + if (isEqual(key, node.k)) { + return node; + } + return undefined; +} +/** + * @template K,V + * @type {FindFunction<IndexNode<K,V>,K,V>} + */ +function findIndex(root, shift, hash, key) { + const bit = bitpos(hash, shift); + if ((root.bitmap & bit) === 0) { + return undefined; + } + const idx = index(root.bitmap, bit); + const node = root.array[idx]; + if (node.type !== ENTRY) { + return find(node, shift + SHIFT, hash, key); + } + if (isEqual(key, node.k)) { + return node; + } + return undefined; +} +/** + * @template K,V + * @param {CollisionNode<K,V>} root + * @param {K} key + * @returns {undefined | Entry<K,V>} + */ +function findCollision(root, key) { + const idx = collisionIndexOf(root, key); + if (idx < 0) { + return undefined; + } + return root.array[idx]; +} +/** + * @template T,K,V + * @callback WithoutFunction + * @param {T} root + * @param {number} shift + * @param {number} hash + * @param {K} key + * @returns {undefined | Node<K,V>} + */ +/** + * Remove an entry from the root, returning the updated root. + * Returns undefined if the node should be removed from the parent. + * @template K,V + * @type {WithoutFunction<Node<K,V>,K,V>} + * */ +function without(root, shift, hash, key) { + switch (root.type) { + case ARRAY_NODE: + return withoutArray(root, shift, hash, key); + case INDEX_NODE: + return withoutIndex(root, shift, hash, key); + case COLLISION_NODE: + return withoutCollision(root, key); + } +} +/** + * @template K,V + * @type {WithoutFunction<ArrayNode<K,V>,K,V>} + */ +function withoutArray(root, shift, hash, key) { + const idx = mask(hash, shift); + const node = root.array[idx]; + if (node === undefined) { + return root; // already empty + } + let n = undefined; + // if node is an entry and the keys are not equal there is nothing to remove + // if node is not an entry do a recursive call + if (node.type === ENTRY) { + if (!isEqual(node.k, key)) { + return root; // no changes + } + } else { + n = without(node, shift + SHIFT, hash, key); + if (n === node) { + return root; // no changes + } + } + // if the recursive call returned undefined the node should be removed + if (n === undefined) { + // if the number of child nodes is at the minimum, pack into an index node + if (root.size <= MIN_ARRAY_NODE) { + const arr = root.array; + const out = new Array(root.size - 1); + let i = 0; + let j = 0; + let bitmap = 0; + while (i < idx) { + const nv = arr[i]; + if (nv !== undefined) { + out[j] = nv; + bitmap |= 1 << i; + ++j; + } + ++i; + } + ++i; // skip copying the removed node + while (i < arr.length) { + const nv = arr[i]; + if (nv !== undefined) { + out[j] = nv; + bitmap |= 1 << i; + ++j; + } + ++i; + } + return { + type: INDEX_NODE, + bitmap: bitmap, + array: out, + }; + } + return { + type: ARRAY_NODE, + size: root.size - 1, + array: cloneAndSet(root.array, idx, n), + }; + } + return { + type: ARRAY_NODE, + size: root.size, + array: cloneAndSet(root.array, idx, n), + }; +} +/** + * @template K,V + * @type {WithoutFunction<IndexNode<K,V>,K,V>} + */ +function withoutIndex(root, shift, hash, key) { + const bit = bitpos(hash, shift); + if ((root.bitmap & bit) === 0) { + return root; // already empty + } + const idx = index(root.bitmap, bit); + const node = root.array[idx]; + // if the item is not an entry + if (node.type !== ENTRY) { + const n = without(node, shift + SHIFT, hash, key); + if (n === node) { + return root; // no changes + } + // if not undefined, the child node still has items, so update it + if (n !== undefined) { + return { + type: INDEX_NODE, + bitmap: root.bitmap, + array: cloneAndSet(root.array, idx, n), + }; + } + // otherwise the child node should be removed + // if it was the only child node, remove this node from the parent + if (root.bitmap === bit) { + return undefined; + } + // otherwise just remove the child node + return { + type: INDEX_NODE, + bitmap: root.bitmap ^ bit, + array: spliceOut(root.array, idx), + }; + } + // otherwise the item is an entry, remove it if the key matches + if (isEqual(key, node.k)) { + if (root.bitmap === bit) { + return undefined; + } + return { + type: INDEX_NODE, + bitmap: root.bitmap ^ bit, + array: spliceOut(root.array, idx), + }; + } + return root; +} +/** + * @template K,V + * @param {CollisionNode<K,V>} root + * @param {K} key + * @returns {undefined | Node<K,V>} + */ +function withoutCollision(root, key) { + const idx = collisionIndexOf(root, key); + // if the key not found, no changes + if (idx < 0) { + return root; + } + // otherwise the entry was found, remove it + // if it was the only entry in this node, remove the whole node + if (root.array.length === 1) { + return undefined; + } + // otherwise just remove the entry + return { + type: COLLISION_NODE, + hash: root.hash, + array: spliceOut(root.array, idx), + }; +} +/** + * @template K,V + * @param {undefined | Node<K,V>} root + * @param {(value:V,key:K)=>void} fn + * @returns {void} + */ +function forEach(root, fn) { + if (root === undefined) { + return; + } + const items = root.array; + const size = items.length; + for (let i = 0; i < size; i++) { + const item = items[i]; + if (item === undefined) { + continue; + } + if (item.type === ENTRY) { + fn(item.v, item.k); + continue; + } + forEach(item, fn); + } +} +/** + * Extra wrapper to keep track of Dict size and clean up the API + * @template K,V + */ +export default class Dict { + /** + * @template V + * @param {Record<string,V>} o + * @returns {Dict<string,V>} + */ + static fromObject(o) { + const keys = Object.keys(o); + /** @type Dict<string,V> */ + let m = Dict.new(); + for (let i = 0; i < keys.length; i++) { + const k = keys[i]; + m = m.set(k, o[k]); + } + return m; + } + /** + * @template K,V + * @param {Map<K,V>} o + * @returns {Dict<K,V>} + */ + static fromMap(o) { + /** @type Dict<K,V> */ + let m = Dict.new(); + o.forEach((v, k) => { + m = m.set(k, v); + }); + return m; + } + static new() { + return new Dict(undefined, 0); + } + /** + * @param {undefined | Node<K,V>} root + * @param {number} size + */ + constructor(root, size) { + this.root = root; + this.size = size; + } + /** + * @template NotFound + * @param {K} key + * @param {NotFound} notFound + * @returns {NotFound | V} + */ + get(key, notFound) { + if (this.root === undefined) { + return notFound; + } + const found = find(this.root, 0, getHash(key), key); + if (found === undefined) { + return notFound; + } + return found.v; + } + /** + * @param {K} key + * @param {V} val + * @returns {Dict<K,V>} + */ + set(key, val) { + const addedLeaf = { val: false }; + const root = this.root === undefined ? EMPTY : this.root; + const newRoot = assoc(root, 0, getHash(key), key, val, addedLeaf); + if (newRoot === this.root) { + return this; + } + return new Dict(newRoot, addedLeaf.val ? this.size + 1 : this.size); + } + /** + * @param {K} key + * @returns {Dict<K,V>} + */ + delete(key) { + if (this.root === undefined) { + return this; + } + const newRoot = without(this.root, 0, getHash(key), key); + if (newRoot === this.root) { + return this; + } + if (newRoot === undefined) { + return Dict.new(); + } + return new Dict(newRoot, this.size - 1); + } + /** + * @param {K} key + * @returns {boolean} + */ + has(key) { + if (this.root === undefined) { + return false; + } + return find(this.root, 0, getHash(key), key) !== undefined; + } + /** + * @returns {[K,V][]} + */ + entries() { + if (this.root === undefined) { + return []; + } + /** @type [K,V][] */ + const result = []; + this.forEach((v, k) => result.push([k, v])); + return result; + } + /** + * + * @param {(val:V,key:K)=>void} fn + */ + forEach(fn) { + forEach(this.root, fn); + } + hashCode() { + let h = 0; + this.forEach((v, k) => { + h = (h + hashMerge(getHash(v), getHash(k))) | 0; + }); + return h; + } + /** + * @param {unknown} o + * @returns {boolean} + */ + equals(o) { + if (!(o instanceof Dict) || this.size !== o.size) { + return false; + } + let equal = true; + this.forEach((v, k) => { + equal = equal && isEqual(o.get(k, !v), v); + }); + return equal; + } +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/base.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/base.gleam new file mode 100644 index 0000000..eab2f0b --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/base.gleam @@ -0,0 +1,21 @@ +import gleam/bit_array + +@deprecated("Please use `base64_encode` in the `gleam/bit_array` module instead.") +pub fn encode64(input: BitArray, padding: Bool) -> String { + bit_array.base64_encode(input, padding) +} + +@deprecated("Please use `base64_decode` in the `gleam/bit_array` module instead.") +pub fn decode64(encoded: String) -> Result(BitArray, Nil) { + bit_array.base64_decode(encoded) +} + +@deprecated("Please use `base64_url_encode` in the `gleam/bit_array` module instead.") +pub fn url_encode64(input: BitArray, padding: Bool) -> String { + bit_array.base64_url_encode(input, padding) +} + +@deprecated("Please use `base64_url_decode` in the `gleam/bit_array` module instead.") +pub fn url_decode64(encoded: String) -> Result(BitArray, Nil) { + bit_array.base64_url_decode(encoded) +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_array.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_array.gleam new file mode 100644 index 0000000..79860e9 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_array.gleam @@ -0,0 +1,157 @@ +//// BitArrays are a sequence of binary data of any length. + +import gleam/string + +/// Converts a UTF-8 `String` type into a `BitArray`. +/// +@external(erlang, "gleam_stdlib", "identity") +@external(javascript, "../gleam_stdlib.mjs", "bit_array_from_string") +pub fn from_string(x: String) -> BitArray + +/// Returns an integer which is the number of bytes in the bit array. +/// +@external(erlang, "erlang", "byte_size") +@external(javascript, "../gleam_stdlib.mjs", "length") +pub fn byte_size(x: BitArray) -> Int + +/// Creates a new bit array by joining two bit arrays. +/// +/// ## Examples +/// +/// ```gleam +/// > append(to: from_string("butter"), suffix: from_string("fly")) +/// from_string("butterfly") +/// ``` +/// +pub fn append(to first: BitArray, suffix second: BitArray) -> BitArray { + concat([first, second]) +} + +/// Extracts a sub-section of a bit array. +/// +/// The slice will start at given position and continue up to specified +/// length. +/// A negative length can be used to extract bytes at the end of a bit array. +/// +/// This function runs in constant time. +/// +@external(erlang, "gleam_stdlib", "bit_array_slice") +@external(javascript, "../gleam_stdlib.mjs", "bit_array_slice") +pub fn slice( + from string: BitArray, + at position: Int, + take length: Int, +) -> Result(BitArray, Nil) + +/// Tests to see whether a bit array is valid UTF-8. +/// +pub fn is_utf8(bits: BitArray) -> Bool { + do_is_utf8(bits) +} + +@target(erlang) +fn do_is_utf8(bits: BitArray) -> Bool { + case bits { + <<>> -> True + <<_:utf8, rest:bytes>> -> do_is_utf8(rest) + _ -> False + } +} + +@target(javascript) +fn do_is_utf8(bits: BitArray) -> Bool { + case to_string(bits) { + Ok(_) -> True + _ -> False + } +} + +/// Converts a bit array to a string. +/// +/// Returns an error if the bit array is invalid UTF-8 data. +/// +pub fn to_string(bits: BitArray) -> Result(String, Nil) { + do_to_string(bits) +} + +@target(erlang) +@external(erlang, "gleam_stdlib", "identity") +fn unsafe_to_string(a: BitArray) -> String + +@target(erlang) +fn do_to_string(bits: BitArray) -> Result(String, Nil) { + case is_utf8(bits) { + True -> Ok(unsafe_to_string(bits)) + False -> Error(Nil) + } +} + +@target(javascript) +@external(javascript, "../gleam_stdlib.mjs", "bit_array_to_string") +fn do_to_string(a: BitArray) -> Result(String, Nil) + +/// Creates a new bit array by joining multiple binaries. +/// +/// ## Examples +/// +/// ```gleam +/// > concat([from_string("butter"), from_string("fly")]) +/// from_string("butterfly") +/// ``` +/// +@external(erlang, "gleam_stdlib", "bit_array_concat") +@external(javascript, "../gleam_stdlib.mjs", "bit_array_concat") +pub fn concat(bit_arrays: List(BitArray)) -> BitArray + +/// Encodes a BitArray into a base 64 encoded string. +/// +pub fn base64_encode(input: BitArray, padding: Bool) -> String { + let encoded = encode64(input) + case padding { + True -> encoded + False -> string.replace(encoded, "=", "") + } +} + +@external(erlang, "base64", "encode") +@external(javascript, "../gleam_stdlib.mjs", "encode64") +fn encode64(a: BitArray) -> String + +/// Decodes a base 64 encoded string into a `BitArray`. +/// +pub fn base64_decode(encoded: String) -> Result(BitArray, Nil) { + let padded = case byte_size(from_string(encoded)) % 4 { + 0 -> encoded + n -> string.append(encoded, string.repeat("=", 4 - n)) + } + decode64(padded) +} + +@external(erlang, "gleam_stdlib", "base_decode64") +@external(javascript, "../gleam_stdlib.mjs", "decode64") +fn decode64(a: String) -> Result(BitArray, Nil) + +/// Encodes a `BitArray` into a base 64 encoded string with URL and filename safe alphabet. +/// +pub fn base64_url_encode(input: BitArray, padding: Bool) -> String { + base64_encode(input, padding) + |> string.replace("+", "-") + |> string.replace("/", "_") +} + +/// Decodes a base 64 encoded string with URL and filename safe alphabet into a `BitArray`. +/// +pub fn base64_url_decode(encoded: String) -> Result(BitArray, Nil) { + encoded + |> string.replace("-", "+") + |> string.replace("_", "/") + |> base64_decode() +} + +@external(erlang, "binary", "encode_hex") +@external(javascript, "../gleam_stdlib.mjs", "base16_encode") +pub fn base16_encode(input: BitArray) -> String + +@external(erlang, "gleam_stdlib", "base16_decode") +@external(javascript, "../gleam_stdlib.mjs", "base16_decode") +pub fn base16_decode(input: String) -> Result(BitArray, Nil) diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_builder.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_builder.gleam new file mode 100644 index 0000000..ce6fe52 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_builder.gleam @@ -0,0 +1,80 @@ +//// This module has been deprecated in favour of `gleam/bytes_builder`. + +import gleam/bytes_builder +import gleam/string_builder.{type StringBuilder} + +pub type BitBuilder = + bytes_builder.BytesBuilder + +@deprecated("Please use the `gleam/bytes_builder` module instead.") +pub fn new() -> BitBuilder { + bytes_builder.new() +} + +@deprecated("Please use the `gleam/bytes_builder` module instead.") +pub fn prepend(to: BitBuilder, prefix: BitArray) -> BitBuilder { + bytes_builder.prepend(to, prefix) +} + +@deprecated("Please use the `gleam/bytes_builder` module instead.") +pub fn append(to: BitBuilder, suffix: BitArray) -> BitBuilder { + bytes_builder.append(to, suffix) +} + +@deprecated("Please use the `gleam/bytes_builder` module instead.") +pub fn prepend_builder(to: BitBuilder, prefix: BitBuilder) -> BitBuilder { + bytes_builder.prepend_builder(to, prefix) +} + +@deprecated("Please use the `gleam/bytes_builder` module instead.") +pub fn append_builder( + to first: BitBuilder, + suffix second: BitBuilder, +) -> BitBuilder { + bytes_builder.append_builder(first, second) +} + +@deprecated("Please use the `gleam/bytes_builder` module instead.") +pub fn prepend_string(to: BitBuilder, prefix: String) -> BitBuilder { + bytes_builder.prepend_string(to, prefix) +} + +@deprecated("Please use the `gleam/bytes_builder` module instead.") +pub fn append_string(to: BitBuilder, suffix: String) -> BitBuilder { + bytes_builder.append_string(to, suffix) +} + +@deprecated("Please use the `gleam/bytes_builder` module instead.") +pub fn concat(builders: List(BitBuilder)) -> BitBuilder { + bytes_builder.concat(builders) +} + +@deprecated("Please use the `gleam/bytes_builder` module instead.") +pub fn concat_bit_strings(bits: List(BitArray)) -> BitBuilder { + bytes_builder.concat_bit_arrays(bits) +} + +@deprecated("Please use the `gleam/bytes_builder` module instead.") +pub fn from_string(string: String) -> BitBuilder { + bytes_builder.from_string(string) +} + +@deprecated("Please use the `gleam/bytes_builder` module instead.") +pub fn from_string_builder(builder: StringBuilder) -> BitBuilder { + bytes_builder.from_string_builder(builder) +} + +@deprecated("Please use the `gleam/bytes_builder` module instead.") +pub fn from_bit_string(bits: BitArray) -> BitBuilder { + bytes_builder.from_bit_array(bits) +} + +@deprecated("Please use the `gleam/bytes_builder` module instead.") +pub fn to_bit_string(builder: BitBuilder) -> BitArray { + bytes_builder.to_bit_array(builder) +} + +@deprecated("Please use the `gleam/bytes_builder` module instead.") +pub fn byte_size(builder: BitBuilder) -> Int { + bytes_builder.byte_size(builder) +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_string.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_string.gleam new file mode 100644 index 0000000..b703da0 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_string.gleam @@ -0,0 +1,43 @@ +//// This module has been deprecated. Please use the `gleam/bit_array` module +//// instead. + +import gleam/bit_array + +@deprecated("Please use the `gleam/bit_array` module instead.") +pub fn from_string(x: String) -> BitArray { + bit_array.from_string(x) +} + +@deprecated("Please use the `gleam/bit_array` module instead.") +pub fn byte_size(x: BitArray) -> Int { + bit_array.byte_size(x) +} + +@deprecated("Please use the `gleam/bit_array` module instead.") +pub fn append(to first: BitArray, suffix second: BitArray) -> BitArray { + bit_array.append(first, second) +} + +@deprecated("Please use the `gleam/bit_array` module instead.") +pub fn slice( + from string: BitArray, + at position: Int, + take length: Int, +) -> Result(BitArray, Nil) { + bit_array.slice(string, position, length) +} + +@deprecated("Please use the `gleam/bit_array` module instead.") +pub fn is_utf8(bits: BitArray) -> Bool { + bit_array.is_utf8(bits) +} + +@deprecated("Please use the `gleam/bit_array` module instead.") +pub fn to_string(bits: BitArray) -> Result(String, Nil) { + bit_array.to_string(bits) +} + +@deprecated("Please use the `gleam/bit_array` module instead.") +pub fn concat(bit_strings: List(BitArray)) -> BitArray { + bit_array.concat(bit_strings) +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/bool.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/bool.gleam new file mode 100644 index 0000000..91bd6b7 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/bool.gleam @@ -0,0 +1,428 @@ +//// A type with two possible values, `True` and `False`. Used to indicate whether +//// things are... true or false! +//// +//// Often is it clearer and offers more type safety to define a custom type +//// than to use `Bool`. For example, rather than having a `is_teacher: Bool` +//// field consider having a `role: SchoolRole` field where `SchoolRole` is a custom +//// type that can be either `Student` or `Teacher`. + +import gleam/order.{type Order} + +/// Returns the and of two bools, but it evaluates both arguments. +/// +/// It's the function equivalent of the `&&` operator. +/// This function is useful in higher order functions or pipes. +/// +/// ## Examples +/// +/// ```gleam +/// > and(True, True) +/// True +/// ``` +/// +/// ```gleam +/// > and(False, True) +/// False +/// ``` +/// +/// ```gleam +/// > False |> and(True) +/// False +/// ``` +/// +pub fn and(a: Bool, b: Bool) -> Bool { + a && b +} + +/// Returns the or of two bools, but it evaluates both arguments. +/// +/// It's the function equivalent of the `||` operator. +/// This function is useful in higher order functions or pipes. +/// +/// ## Examples +/// +/// ```gleam +/// > or(True, True) +/// True +/// ``` +/// +/// ```gleam +/// > or(False, True) +/// True +/// ``` +/// +/// ```gleam +/// > False |> or(True) +/// True +/// ``` +/// +pub fn or(a: Bool, b: Bool) -> Bool { + a || b +} + +/// Returns the opposite bool value. +/// +/// This is the same as the `!` or `not` operators in some other languages. +/// +/// ## Examples +/// +/// ```gleam +/// > negate(True) +/// False +/// ``` +/// +/// ```gleam +/// > negate(False) +/// True +/// ``` +/// +pub fn negate(bool: Bool) -> Bool { + case bool { + True -> False + False -> True + } +} + +/// Returns the nor of two bools. +/// +/// ## Examples +/// +/// ```gleam +/// > nor(False, False) +/// True +/// ``` +/// +/// ```gleam +/// > nor(False, True) +/// False +/// ``` +/// +/// ```gleam +/// > nor(True, False) +/// False +/// ``` +/// +/// ```gleam +/// > nor(True, True) +/// False +/// ``` +/// +pub fn nor(a: Bool, b: Bool) -> Bool { + case a, b { + False, False -> True + False, True -> False + True, False -> False + True, True -> False + } +} + +/// Returns the nand of two bools. +/// +/// ## Examples +/// +/// ```gleam +/// > nand(False, False) +/// True +/// ``` +/// +/// ```gleam +/// > nand(False, True) +/// True +/// ``` +/// +/// ```gleam +/// > nand(True, False) +/// True +/// ``` +/// +/// ```gleam +/// > nand(True, True) +/// False +/// ``` +/// +pub fn nand(a: Bool, b: Bool) -> Bool { + case a, b { + False, False -> True + False, True -> True + True, False -> True + True, True -> False + } +} + +/// Returns the exclusive or of two bools. +/// +/// ## Examples +/// +/// ```gleam +/// > exclusive_or(False, False) +/// False +/// ``` +/// +/// ```gleam +/// > exclusive_or(False, True) +/// True +/// ``` +/// +/// ```gleam +/// > exclusive_or(True, False) +/// True +/// ``` +/// +/// ```gleam +/// > exclusive_or(True, True) +/// False +/// ``` +/// +pub fn exclusive_or(a: Bool, b: Bool) -> Bool { + case a, b { + False, False -> False + False, True -> True + True, False -> True + True, True -> False + } +} + +/// Returns the exclusive nor of two bools. +/// +/// ## Examples +/// +/// ```gleam +/// > exclusive_nor(False, False) +/// True +/// ``` +/// +/// ```gleam +/// > exclusive_nor(False, True) +/// False +/// ``` +/// +/// ```gleam +/// > exclusive_nor(True, False) +/// False +/// ``` +/// +/// ```gleam +/// > exclusive_nor(True, True) +/// True +/// ``` +/// +pub fn exclusive_nor(a: Bool, b: Bool) -> Bool { + case a, b { + False, False -> True + False, True -> False + True, False -> False + True, True -> True + } +} + +/// Compares two bools and returns the first value's `Order` to the second. +/// +/// ## Examples +/// +/// ```gleam +/// > import gleam/order +/// > compare(True, False) +/// order.Gt +/// ``` +/// +pub fn compare(a: Bool, with b: Bool) -> Order { + case a, b { + True, True -> order.Eq + True, False -> order.Gt + False, False -> order.Eq + False, True -> order.Lt + } +} + +/// Returns `True` if either argument's value is `True`. +/// +/// ## Examples +/// +/// ```gleam +/// > max(True, False) +/// True +/// ``` +/// +/// ```gleam +/// > max(False, True) +/// True +/// ``` +/// +/// ```gleam +/// > max(False, False) +/// False +/// ``` +/// +pub fn max(a: Bool, b: Bool) -> Bool { + case a { + True -> True + False -> b + } +} + +/// Returns `False` if either bool value is `False`. +/// +/// ## Examples +/// +/// ```gleam +/// > min(True, False) +/// False +/// ``` +/// +/// ```gleam +/// > min(False, True) +/// False +/// +/// > min(False, False) +/// False +/// ``` +/// +pub fn min(a: Bool, b: Bool) -> Bool { + case a { + False -> False + True -> b + } +} + +/// Returns a numeric representation of the given bool. +/// +/// ## Examples +/// +/// ```gleam +/// > to_int(True) +/// 1 +/// +/// > to_int(False) +/// 0 +/// ``` +/// +pub fn to_int(bool: Bool) -> Int { + case bool { + False -> 0 + True -> 1 + } +} + +/// Returns a string representation of the given bool. +/// +/// ## Examples +/// +/// ```gleam +/// > to_string(True) +/// "True" +/// ``` +/// +/// ```gleam +/// > to_string(False) +/// "False" +/// ``` +/// +pub fn to_string(bool: Bool) -> String { + case bool { + False -> "False" + True -> "True" + } +} + +/// Run a callback function if the given bool is `False`, otherwise return a +/// default value. +/// +/// With a `use` expression this function can simulate the early-return pattern +/// found in some other programming languages. +/// +/// In a procedural language: +/// +/// ```js +/// if (predicate) return value; +/// // ... +/// ``` +/// +/// In Gleam with a `use` expression: +/// +/// ```gleam +/// use <- guard(when: predicate, return: value) +/// // ... +/// ``` +/// +/// Like everything in Gleam `use` is an expression, so it short circuits the +/// current block, not the entire function. As a result you can assign the value +/// to a variable: +/// +/// ```gleam +/// let x = { +/// use <- guard(when: predicate, return: value) +/// // ... +/// } +/// ``` +/// +/// Note that unlike in procedural languages the `return` value is evaluated +/// even when the predicate is `False`, so it is advisable not to perform +/// expensive computation there. +/// +/// +/// ## Examples +/// +/// ```gleam +/// > let name = "" +/// > use <- guard(when: name == "", return: "Welcome!") +/// > "Hello, " <> name +/// "Welcome!" +/// ``` +/// +/// ```gleam +/// > let name = "Kamaka" +/// > use <- guard(when: name == "", return: "Welcome!") +/// > "Hello, " <> name +/// "Hello, Kamaka" +/// ``` +/// +pub fn guard( + when requirement: Bool, + return consequence: t, + otherwise alternative: fn() -> t, +) -> t { + case requirement { + True -> consequence + False -> alternative() + } +} + +/// Runs a callback function if the given bool is `True`, otherwise runs an +/// alternative callback function. +/// +/// Useful when further computation should be delayed regardless of the given +/// bool's value. +/// +/// See [`guard`](#guard) for more info. +/// +/// ## Examples +/// +/// ```gleam +/// > let name = "Kamaka" +/// > let inquiry = fn() { "How may we address you?" } +/// > use <- lazy_guard(when: name == "", return: inquiry) +/// > "Hello, " <> name +/// "Hello, Kamaka" +/// ``` +/// +/// ```gleam +/// > import gleam/int +/// > let name = "" +/// > let greeting = fn() { "Hello, " <> name } +/// > use <- lazy_guard(when: name == "", otherwise: greeting) +/// > let number = int.random(1, 99) +/// > let name = "User " <> int.to_string(number) +/// > "Welcome, " <> name +/// "Welcome, User 54" +/// ``` +/// +pub fn lazy_guard( + when requirement: Bool, + return consequence: fn() -> a, + otherwise alternative: fn() -> a, +) -> a { + case requirement { + True -> consequence() + False -> alternative() + } +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/bytes_builder.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/bytes_builder.gleam new file mode 100644 index 0000000..20c145d --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/bytes_builder.gleam @@ -0,0 +1,197 @@ +//// BytesBuilder is a type used for efficiently concatenating bytes together +//// without copying. +//// +//// If we append one bit array to another the bit arrays must be copied to a +//// new location in memory so that they can sit together. This behaviour +//// enables efficient reading of the string but copying can be expensive, +//// especially if we want to join many bit arrays together. +//// +//// BytesBuilder is different in that it can be joined together in constant +//// time using minimal memory, and then can be efficiently converted to a +//// bit array using the `to_bit_array` function. +//// +//// Byte builders are always byte aligned, so that a number of bits that is not +//// divisible by 8 will be padded with 0s. +//// +//// On Erlang this type is compatible with Erlang's iolists. + +// TODO: pad bit arrays to byte boundaries when adding to a builder. +import gleam/string_builder.{type StringBuilder} +import gleam/list +import gleam/bit_array + +pub opaque type BytesBuilder { + Bytes(BitArray) + Text(StringBuilder) + Many(List(BytesBuilder)) +} + +/// Create an empty `BytesBuilder`. Useful as the start of a pipe chaining many +/// builders together. +/// +pub fn new() -> BytesBuilder { + concat([]) +} + +/// Prepends a bit array to the start of a builder. +/// +/// Runs in constant time. +/// +pub fn prepend(to second: BytesBuilder, prefix first: BitArray) -> BytesBuilder { + append_builder(from_bit_array(first), second) +} + +/// Appends a bit array to the end of a builder. +/// +/// Runs in constant time. +/// +pub fn append(to first: BytesBuilder, suffix second: BitArray) -> BytesBuilder { + append_builder(first, from_bit_array(second)) +} + +/// Prepends a builder onto the start of another. +/// +/// Runs in constant time. +/// +pub fn prepend_builder( + to second: BytesBuilder, + prefix first: BytesBuilder, +) -> BytesBuilder { + append_builder(first, second) +} + +/// Appends a builder onto the end of another. +/// +/// Runs in constant time. +/// +@external(erlang, "gleam_stdlib", "iodata_append") +pub fn append_builder( + to first: BytesBuilder, + suffix second: BytesBuilder, +) -> BytesBuilder { + case second { + Many(builders) -> Many([first, ..builders]) + _ -> Many([first, second]) + } +} + +/// Prepends a string onto the start of a builder. +/// +/// Runs in constant time when running on Erlang. +/// Runs in linear time with the length of the string otherwise. +/// +pub fn prepend_string( + to second: BytesBuilder, + prefix first: String, +) -> BytesBuilder { + append_builder(from_string(first), second) +} + +/// Appends a string onto the end of a builder. +/// +/// Runs in constant time when running on Erlang. +/// Runs in linear time with the length of the string otherwise. +/// +pub fn append_string( + to first: BytesBuilder, + suffix second: String, +) -> BytesBuilder { + append_builder(first, from_string(second)) +} + +/// Joins a list of builders into a single builder. +/// +/// Runs in constant time. +/// +@external(erlang, "gleam_stdlib", "identity") +pub fn concat(builders: List(BytesBuilder)) -> BytesBuilder { + Many(builders) +} + +/// Joins a list of bit arrays into a single builder. +/// +/// Runs in constant time. +/// +@external(erlang, "gleam_stdlib", "identity") +pub fn concat_bit_arrays(bits: List(BitArray)) -> BytesBuilder { + bits + |> list.map(fn(b) { from_bit_array(b) }) + |> concat() +} + +/// Creates a new builder from a string. +/// +/// Runs in constant time when running on Erlang. +/// Runs in linear time otherwise. +/// +@external(erlang, "gleam_stdlib", "wrap_list") +pub fn from_string(string: String) -> BytesBuilder { + Text(string_builder.from_string(string)) +} + +/// Creates a new builder from a string builder. +/// +/// Runs in constant time when running on Erlang. +/// Runs in linear time otherwise. +/// +@external(erlang, "gleam_stdlib", "wrap_list") +pub fn from_string_builder(builder: StringBuilder) -> BytesBuilder { + Text(builder) +} + +/// Creates a new builder from a bit array. +/// +/// Runs in constant time. +/// +@external(erlang, "gleam_stdlib", "wrap_list") +pub fn from_bit_array(bits: BitArray) -> BytesBuilder { + Bytes(bits) +} + +/// Turns an builder into a bit array. +/// +/// Runs in linear time. +/// +/// When running on Erlang this function is implemented natively by the +/// virtual machine and is highly optimised. +/// +@external(erlang, "erlang", "list_to_bitstring") +pub fn to_bit_array(builder: BytesBuilder) -> BitArray { + [[builder]] + |> to_list([]) + |> list.reverse + |> bit_array.concat +} + +fn to_list( + stack: List(List(BytesBuilder)), + acc: List(BitArray), +) -> List(BitArray) { + case stack { + [] -> acc + + [[], ..remaining_stack] -> to_list(remaining_stack, acc) + + [[Bytes(bits), ..rest], ..remaining_stack] -> + to_list([rest, ..remaining_stack], [bits, ..acc]) + + [[Text(builder), ..rest], ..remaining_stack] -> { + let bits = bit_array.from_string(string_builder.to_string(builder)) + to_list([rest, ..remaining_stack], [bits, ..acc]) + } + + [[Many(builders), ..rest], ..remaining_stack] -> + to_list([builders, rest, ..remaining_stack], acc) + } +} + +/// Returns the size of the builder's content in bytes. +/// +/// Runs in linear time. +/// +@external(erlang, "erlang", "iolist_size") +pub fn byte_size(builder: BytesBuilder) -> Int { + [[builder]] + |> to_list([]) + |> list.fold(0, fn(acc, builder) { bit_array.byte_size(builder) + acc }) +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/dict.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/dict.gleam new file mode 100644 index 0000000..280bf9d --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/dict.gleam @@ -0,0 +1,544 @@ +import gleam/option.{type Option} + +/// A dictionary of keys and values. +/// +/// Any type can be used for the keys and values of a dict, but all the keys +/// must be of the same type and all the values must be of the same type. +/// +/// Each key can only be present in a dict once. +/// +/// Dicts are not ordered in any way, and any unintentional ordering is not to +/// be relied upon in your code as it may change in future versions of Erlang +/// or Gleam. +/// +/// See [the Erlang map module](https://erlang.org/doc/man/maps.html) for more +/// information. +/// +pub type Dict(key, value) + +/// Determines the number of key-value pairs in the dict. +/// This function runs in constant time and does not need to iterate the dict. +/// +/// ## Examples +/// +/// ```gleam +/// > new() |> size() +/// 0 +/// ``` +/// +/// ```gleam +/// > new() |> insert("key", "value") |> size() +/// 1 +/// ``` +/// +pub fn size(dict: Dict(k, v)) -> Int { + do_size(dict) +} + +@external(erlang, "maps", "size") +@external(javascript, "../gleam_stdlib.mjs", "map_size") +fn do_size(a: Dict(k, v)) -> Int + +/// Converts the dict to a list of 2-element tuples `#(key, value)`, one for +/// each key-value pair in the dict. +/// +/// The tuples in the list have no specific order. +/// +/// ## Examples +/// +/// ```gleam +/// > new() |> to_list() +/// [] +/// ``` +/// +/// ```gleam +/// > new() |> insert("key", 0) |> to_list() +/// [#("key", 0)] +/// ``` +/// +pub fn to_list(dict: Dict(key, value)) -> List(#(key, value)) { + do_to_list(dict) +} + +@external(erlang, "maps", "to_list") +@external(javascript, "../gleam_stdlib.mjs", "map_to_list") +fn do_to_list(a: Dict(key, value)) -> List(#(key, value)) + +/// Converts a list of 2-element tuples `#(key, value)` to a dict. +/// +/// If two tuples have the same key the last one in the list will be the one +/// that is present in the dict. +/// +pub fn from_list(list: List(#(k, v))) -> Dict(k, v) { + do_from_list(list) +} + +@target(erlang) +@external(erlang, "maps", "from_list") +fn do_from_list(a: List(#(key, value))) -> Dict(key, value) + +@target(javascript) +fn fold_list_of_pair( + over list: List(#(k, v)), + from initial: Dict(k, v), +) -> Dict(k, v) { + case list { + [] -> initial + [x, ..rest] -> fold_list_of_pair(rest, insert(initial, x.0, x.1)) + } +} + +@target(javascript) +fn do_from_list(list: List(#(k, v))) -> Dict(k, v) { + fold_list_of_pair(list, new()) +} + +/// Determines whether or not a value present in the dict for a given key. +/// +/// ## Examples +/// +/// ```gleam +/// > new() |> insert("a", 0) |> has_key("a") +/// True +/// ``` +/// +/// ```gleam +/// > new() |> insert("a", 0) |> has_key("b") +/// False +/// ``` +/// +pub fn has_key(dict: Dict(k, v), key: k) -> Bool { + do_has_key(key, dict) +} + +@target(erlang) +@external(erlang, "maps", "is_key") +fn do_has_key(a: key, b: Dict(key, v)) -> Bool + +@target(javascript) +fn do_has_key(key: k, dict: Dict(k, v)) -> Bool { + get(dict, key) != Error(Nil) +} + +/// Creates a fresh dict that contains no values. +/// +pub fn new() -> Dict(key, value) { + do_new() +} + +@external(erlang, "maps", "new") +@external(javascript, "../gleam_stdlib.mjs", "new_map") +fn do_new() -> Dict(key, value) + +/// Fetches a value from a dict for a given key. +/// +/// The dict may not have a value for the key, so the value is wrapped in a +/// `Result`. +/// +/// ## Examples +/// +/// ```gleam +/// > new() |> insert("a", 0) |> get("a") +/// Ok(0) +/// ``` +/// +/// ```gleam +/// > new() |> insert("a", 0) |> get("b") +/// Error(Nil) +/// ``` +/// +pub fn get(from: Dict(key, value), get: key) -> Result(value, Nil) { + do_get(from, get) +} + +@external(erlang, "gleam_stdlib", "map_get") +@external(javascript, "../gleam_stdlib.mjs", "map_get") +fn do_get(a: Dict(key, value), b: key) -> Result(value, Nil) + +/// Inserts a value into the dict with the given key. +/// +/// If the dict already has a value for the given key then the value is +/// replaced with the new value. +/// +/// ## Examples +/// +/// ```gleam +/// > new() |> insert("a", 0) |> to_list +/// [#("a", 0)] +/// ``` +/// +/// ```gleam +/// > new() |> insert("a", 0) |> insert("a", 5) |> to_list +/// [#("a", 5)] +/// ``` +/// +pub fn insert(into dict: Dict(k, v), for key: k, insert value: v) -> Dict(k, v) { + do_insert(key, value, dict) +} + +@external(erlang, "maps", "put") +@external(javascript, "../gleam_stdlib.mjs", "map_insert") +fn do_insert(a: key, b: value, c: Dict(key, value)) -> Dict(key, value) + +/// Updates all values in a given dict by calling a given function on each key +/// and value. +/// +/// ## Examples +/// +/// ```gleam +/// > [#(3, 3), #(2, 4)] +/// > |> from_list +/// > |> map_values(fn(key, value) { key * value }) +/// [#(3, 9), #(2, 8)] +/// ``` +/// +pub fn map_values(in dict: Dict(k, v), with fun: fn(k, v) -> w) -> Dict(k, w) { + do_map_values(fun, dict) +} + +@target(erlang) +@external(erlang, "maps", "map") +fn do_map_values(a: fn(key, value) -> b, b: Dict(key, value)) -> Dict(key, b) + +@target(javascript) +fn do_map_values(f: fn(key, value) -> b, dict: Dict(key, value)) -> Dict(key, b) { + let f = fn(dict, k, v) { insert(dict, k, f(k, v)) } + dict + |> fold(from: new(), with: f) +} + +/// Gets a list of all keys in a given dict. +/// +/// Dicts are not ordered so the keys are not returned in any specific order. Do +/// not write code that relies on the order keys are returned by this function +/// as it may change in later versions of Gleam or Erlang. +/// +/// ## Examples +/// +/// ```gleam +/// > keys([#("a", 0), #("b", 1)]) +/// ["a", "b"] +/// ``` +/// +pub fn keys(dict: Dict(keys, v)) -> List(keys) { + do_keys(dict) +} + +@target(erlang) +@external(erlang, "maps", "keys") +fn do_keys(a: Dict(keys, v)) -> List(keys) + +@target(javascript) +fn reverse_and_concat(remaining, accumulator) { + case remaining { + [] -> accumulator + [item, ..rest] -> reverse_and_concat(rest, [item, ..accumulator]) + } +} + +@target(javascript) +fn do_keys_acc(list: List(#(k, v)), acc: List(k)) -> List(k) { + case list { + [] -> reverse_and_concat(acc, []) + [x, ..xs] -> do_keys_acc(xs, [x.0, ..acc]) + } +} + +@target(javascript) +fn do_keys(dict: Dict(k, v)) -> List(k) { + let list_of_pairs = to_list(dict) + do_keys_acc(list_of_pairs, []) +} + +/// Gets a list of all values in a given dict. +/// +/// Dicts are not ordered so the values are not returned in any specific order. Do +/// not write code that relies on the order values are returned by this function +/// as it may change in later versions of Gleam or Erlang. +/// +/// ## Examples +/// +/// ```gleam +/// > values(from_list([#("a", 0), #("b", 1)])) +/// [0, 1] +/// ``` +/// +pub fn values(dict: Dict(k, values)) -> List(values) { + do_values(dict) +} + +@target(erlang) +@external(erlang, "maps", "values") +fn do_values(a: Dict(k, values)) -> List(values) + +@target(javascript) +fn do_values_acc(list: List(#(k, v)), acc: List(v)) -> List(v) { + case list { + [] -> reverse_and_concat(acc, []) + [x, ..xs] -> do_values_acc(xs, [x.1, ..acc]) + } +} + +@target(javascript) +fn do_values(dict: Dict(k, v)) -> List(v) { + let list_of_pairs = to_list(dict) + do_values_acc(list_of_pairs, []) +} + +/// Creates a new dict from a given dict, minus any entries that a given function +/// returns `False` for. +/// +/// ## Examples +/// +/// ```gleam +/// > from_list([#("a", 0), #("b", 1)]) +/// > |> filter(fn(key, value) { value != 0 }) +/// from_list([#("b", 1)]) +/// ``` +/// +/// ```gleam +/// > from_list([#("a", 0), #("b", 1)]) +/// > |> filter(fn(key, value) { True }) +/// from_list([#("a", 0), #("b", 1)]) +/// ``` +/// +pub fn filter( + in dict: Dict(k, v), + keeping predicate: fn(k, v) -> Bool, +) -> Dict(k, v) { + do_filter(predicate, dict) +} + +@target(erlang) +@external(erlang, "maps", "filter") +fn do_filter(a: fn(key, value) -> Bool, b: Dict(key, value)) -> Dict(key, value) + +@target(javascript) +fn do_filter( + f: fn(key, value) -> Bool, + dict: Dict(key, value), +) -> Dict(key, value) { + let insert = fn(dict, k, v) { + case f(k, v) { + True -> insert(dict, k, v) + _ -> dict + } + } + dict + |> fold(from: new(), with: insert) +} + +/// Creates a new dict from a given dict, only including any entries for which the +/// keys are in a given list. +/// +/// ## Examples +/// +/// ```gleam +/// > from_list([#("a", 0), #("b", 1)]) +/// > |> take(["b"]) +/// from_list([#("b", 1)]) +/// ``` +/// +/// ```gleam +/// > from_list([#("a", 0), #("b", 1)]) +/// > |> take(["a", "b", "c"]) +/// from_list([#("a", 0), #("b", 1)]) +/// ``` +/// +pub fn take(from dict: Dict(k, v), keeping desired_keys: List(k)) -> Dict(k, v) { + do_take(desired_keys, dict) +} + +@target(erlang) +@external(erlang, "maps", "with") +fn do_take(a: List(k), b: Dict(k, v)) -> Dict(k, v) + +@target(javascript) +fn insert_taken( + dict: Dict(k, v), + desired_keys: List(k), + acc: Dict(k, v), +) -> Dict(k, v) { + let insert = fn(taken, key) { + case get(dict, key) { + Ok(value) -> insert(taken, key, value) + _ -> taken + } + } + case desired_keys { + [] -> acc + [x, ..xs] -> insert_taken(dict, xs, insert(acc, x)) + } +} + +@target(javascript) +fn do_take(desired_keys: List(k), dict: Dict(k, v)) -> Dict(k, v) { + insert_taken(dict, desired_keys, new()) +} + +/// Creates a new dict from a pair of given dicts by combining their entries. +/// +/// If there are entries with the same keys in both dicts the entry from the +/// second dict takes precedence. +/// +/// ## Examples +/// +/// ```gleam +/// > let a = from_list([#("a", 0), #("b", 1)]) +/// > let b = from_list([#("b", 2), #("c", 3)]) +/// > merge(a, b) +/// from_list([#("a", 0), #("b", 2), #("c", 3)]) +/// ``` +/// +pub fn merge(into dict: Dict(k, v), from new_entries: Dict(k, v)) -> Dict(k, v) { + do_merge(dict, new_entries) +} + +@target(erlang) +@external(erlang, "maps", "merge") +fn do_merge(a: Dict(k, v), b: Dict(k, v)) -> Dict(k, v) + +@target(javascript) +fn insert_pair(dict: Dict(k, v), pair: #(k, v)) -> Dict(k, v) { + insert(dict, pair.0, pair.1) +} + +@target(javascript) +fn fold_inserts(new_entries: List(#(k, v)), dict: Dict(k, v)) -> Dict(k, v) { + case new_entries { + [] -> dict + [x, ..xs] -> fold_inserts(xs, insert_pair(dict, x)) + } +} + +@target(javascript) +fn do_merge(dict: Dict(k, v), new_entries: Dict(k, v)) -> Dict(k, v) { + new_entries + |> to_list + |> fold_inserts(dict) +} + +/// Creates a new dict from a given dict with all the same entries except for the +/// one with a given key, if it exists. +/// +/// ## Examples +/// +/// ```gleam +/// > delete([#("a", 0), #("b", 1)], "a") +/// from_list([#("b", 1)]) +/// ``` +/// +/// ```gleam +/// > delete([#("a", 0), #("b", 1)], "c") +/// from_list([#("a", 0), #("b", 1)]) +/// ``` +/// +pub fn delete(from dict: Dict(k, v), delete key: k) -> Dict(k, v) { + do_delete(key, dict) +} + +@external(erlang, "maps", "remove") +@external(javascript, "../gleam_stdlib.mjs", "map_remove") +fn do_delete(a: k, b: Dict(k, v)) -> Dict(k, v) + +/// Creates a new dict from a given dict with all the same entries except any with +/// keys found in a given list. +/// +/// ## Examples +/// +/// ```gleam +/// > drop([#("a", 0), #("b", 1)], ["a"]) +/// from_list([#("b", 2)]) +/// ``` +/// +/// ```gleam +/// > delete([#("a", 0), #("b", 1)], ["c"]) +/// from_list([#("a", 0), #("b", 1)]) +/// ``` +/// +/// ```gleam +/// > drop([#("a", 0), #("b", 1)], ["a", "b", "c"]) +/// from_list([]) +/// ``` +/// +pub fn drop(from dict: Dict(k, v), drop disallowed_keys: List(k)) -> Dict(k, v) { + case disallowed_keys { + [] -> dict + [x, ..xs] -> drop(delete(dict, x), xs) + } +} + +/// Creates a new dict with one entry updated using a given function. +/// +/// If there was not an entry in the dict for the given key then the function +/// gets `None` as its argument, otherwise it gets `Some(value)`. +/// +/// ## Example +/// +/// ```gleam +/// > let increment = fn(x) { +/// > case x { +/// > Some(i) -> i + 1 +/// > None -> 0 +/// > } +/// > } +/// > let dict = from_list([#("a", 0)]) +/// > +/// > update(dict, "a", increment) +/// from_list([#("a", 1)]) +/// ``` +/// +/// ```gleam +/// > update(dict, "b", increment) +/// from_list([#("a", 0), #("b", 0)]) +/// ``` +/// +pub fn update( + in dict: Dict(k, v), + update key: k, + with fun: fn(Option(v)) -> v, +) -> Dict(k, v) { + dict + |> get(key) + |> option.from_result + |> fun + |> insert(dict, key, _) +} + +fn do_fold(list: List(#(k, v)), initial: acc, fun: fn(acc, k, v) -> acc) -> acc { + case list { + [] -> initial + [#(k, v), ..rest] -> do_fold(rest, fun(initial, k, v), fun) + } +} + +/// Combines all entries into a single value by calling a given function on each +/// one. +/// +/// Dicts are not ordered so the values are not returned in any specific order. Do +/// not write code that relies on the order entries are used by this function +/// as it may change in later versions of Gleam or Erlang. +/// +/// # Examples +/// +/// ```gleam +/// > let dict = from_list([#("a", 1), #("b", 3), #("c", 9)]) +/// > fold(dict, 0, fn(accumulator, key, value) { accumulator + value }) +/// 13 +/// ``` +/// +/// ```gleam +/// > import gleam/string.{append} +/// > fold(dict, "", fn(accumulator, key, value) { append(accumulator, key) }) +/// "abc" +/// ``` +/// +pub fn fold( + over dict: Dict(k, v), + from initial: acc, + with fun: fn(acc, k, v) -> acc, +) -> acc { + dict + |> to_list + |> do_fold(initial, fun) +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/dynamic.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/dynamic.gleam new file mode 100644 index 0000000..c71c6f3 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/dynamic.gleam @@ -0,0 +1,1508 @@ +import gleam/int +import gleam/list +import gleam/dict.{type Dict} +import gleam/option.{type Option} +import gleam/result +import gleam/string_builder +@target(erlang) +import gleam/bit_array + +/// `Dynamic` data is data that we don't know the type of yet. +/// We likely get data like this from interop with Erlang, or from +/// IO with the outside world. +/// +pub type Dynamic + +/// Error returned when unexpected data is encountered +/// +pub type DecodeError { + DecodeError(expected: String, found: String, path: List(String)) +} + +pub type DecodeErrors = + List(DecodeError) + +pub type Decoder(t) = + fn(Dynamic) -> Result(t, DecodeErrors) + +/// Converts any Gleam data into `Dynamic` data. +/// +pub fn from(a) -> Dynamic { + do_from(a) +} + +@external(erlang, "gleam_stdlib", "identity") +@external(javascript, "../gleam_stdlib.mjs", "identity") +fn do_from(a: anything) -> Dynamic + +/// Unsafely casts a Dynamic value into any other type. +/// +/// This is an escape hatch for the type system that may be useful when wrapping +/// native Erlang APIs. It is to be used as a last measure only! +/// +/// If you can avoid using this function, do! +/// +pub fn unsafe_coerce(a: Dynamic) -> anything { + do_unsafe_coerce(a) +} + +@external(erlang, "gleam_stdlib", "identity") +@external(javascript, "../gleam_stdlib.mjs", "identity") +fn do_unsafe_coerce(a: Dynamic) -> a + +/// Decodes a `Dynamic` value from a `Dynamic` value. +/// +/// This function doesn't seem very useful at first, but it can be convenient +/// when you need to give a decoder function but you don't actually care what +/// the to-decode value is. +/// +pub fn dynamic(value: Dynamic) -> Result(Dynamic, List(DecodeError)) { + Ok(value) +} + +/// Checks to see whether a `Dynamic` value is a bit array, and returns that bit +/// array if it is. +/// +/// ## Examples +/// +/// ```gleam +/// > bit_array(from("Hello")) == bit_array.from_string("Hello") +/// True +/// ``` +/// +/// ```gleam +/// > bit_array(from(123)) +/// Error([DecodeError(expected: "BitArray", found: "Int", path: [])]) +/// ``` +/// +pub fn bit_array(from data: Dynamic) -> Result(BitArray, DecodeErrors) { + decode_bit_array(data) +} + +@deprecated("Please use `bit_array` instead") +pub fn bit_string(from data: Dynamic) -> Result(BitArray, DecodeErrors) { + bit_array(data) +} + +@external(erlang, "gleam_stdlib", "decode_bit_array") +@external(javascript, "../gleam_stdlib.mjs", "decode_bit_array") +fn decode_bit_array(a: Dynamic) -> Result(BitArray, DecodeErrors) + +/// Checks to see whether a `Dynamic` value is a string, and returns that string if +/// it is. +/// +/// ## Examples +/// +/// ```gleam +/// > string(from("Hello")) +/// Ok("Hello") +/// ``` +/// +/// ```gleam +/// > string(from(123)) +/// Error([DecodeError(expected: "String", found: "Int", path: [])]) +/// ``` +/// +pub fn string(from data: Dynamic) -> Result(String, DecodeErrors) { + decode_string(data) +} + +fn map_errors( + result: Result(t, DecodeErrors), + f: fn(DecodeError) -> DecodeError, +) -> Result(t, DecodeErrors) { + result.map_error(result, list.map(_, f)) +} + +@target(erlang) +fn decode_string(data: Dynamic) -> Result(String, DecodeErrors) { + bit_array(data) + |> map_errors(put_expected(_, "String")) + |> result.try(fn(raw) { + case bit_array.to_string(raw) { + Ok(string) -> Ok(string) + Error(Nil) -> + Error([DecodeError(expected: "String", found: "BitArray", path: [])]) + } + }) +} + +@target(erlang) +fn put_expected(error: DecodeError, expected: String) -> DecodeError { + DecodeError(..error, expected: expected) +} + +@target(javascript) +@external(javascript, "../gleam_stdlib.mjs", "decode_string") +fn decode_string(a: Dynamic) -> Result(String, DecodeErrors) + +/// Return a string indicating the type of the dynamic value. +/// +/// ```gleam +/// > classify(from("Hello")) +/// "String" +/// ``` +/// +pub fn classify(data: Dynamic) -> String { + do_classify(data) +} + +@external(erlang, "gleam_stdlib", "classify_dynamic") +@external(javascript, "../gleam_stdlib.mjs", "classify_dynamic") +fn do_classify(a: Dynamic) -> String + +/// Checks to see whether a `Dynamic` value is an int, and returns that int if it +/// is. +/// +/// ## Examples +/// +/// ```gleam +/// > int(from(123)) +/// Ok(123) +/// ``` +/// +/// ```gleam +/// > int(from("Hello")) +/// Error([DecodeError(expected: "Int", found: "String", path: [])]) +/// ``` +/// +pub fn int(from data: Dynamic) -> Result(Int, DecodeErrors) { + decode_int(data) +} + +@external(erlang, "gleam_stdlib", "decode_int") +@external(javascript, "../gleam_stdlib.mjs", "decode_int") +fn decode_int(a: Dynamic) -> Result(Int, DecodeErrors) + +/// Checks to see whether a `Dynamic` value is a float, and returns that float if +/// it is. +/// +/// ## Examples +/// +/// ```gleam +/// > float(from(2.0)) +/// Ok(2.0) +/// ``` +/// +/// ```gleam +/// > float(from(123)) +/// Error([DecodeError(expected: "Float", found: "Int", path: [])]) +/// ``` +/// +pub fn float(from data: Dynamic) -> Result(Float, DecodeErrors) { + decode_float(data) +} + +@external(erlang, "gleam_stdlib", "decode_float") +@external(javascript, "../gleam_stdlib.mjs", "decode_float") +fn decode_float(a: Dynamic) -> Result(Float, DecodeErrors) + +/// Checks to see whether a `Dynamic` value is a bool, and returns that bool if +/// it is. +/// +/// ## Examples +/// +/// ```gleam +/// > bool(from(True)) +/// Ok(True) +/// ``` +/// +/// ```gleam +/// > bool(from(123)) +/// Error([DecodeError(expected: "Bool", found: "Int", path: [])]) +/// ``` +/// +pub fn bool(from data: Dynamic) -> Result(Bool, DecodeErrors) { + decode_bool(data) +} + +@external(erlang, "gleam_stdlib", "decode_bool") +@external(javascript, "../gleam_stdlib.mjs", "decode_bool") +fn decode_bool(a: Dynamic) -> Result(Bool, DecodeErrors) + +/// Checks to see whether a `Dynamic` value is a list, and returns that list if it +/// is. The types of the elements are not checked. +/// +/// If you wish to decode all the elements in the list use the `list` function +/// instead. +/// +/// ## Examples +/// +/// ```gleam +/// > shallow_list(from(["a", "b", "c"])) +/// Ok([from("a"), from("b"), from("c")]) +/// ``` +/// +/// ```gleam +/// > shallow_list(1) +/// Error([DecodeError(expected: "List", found: "Int", path: [])]) +/// ``` +/// +pub fn shallow_list(from value: Dynamic) -> Result(List(Dynamic), DecodeErrors) { + decode_list(value) +} + +@external(erlang, "gleam_stdlib", "decode_list") +@external(javascript, "../gleam_stdlib.mjs", "decode_list") +fn decode_list(a: Dynamic) -> Result(List(Dynamic), DecodeErrors) + +@external(erlang, "gleam_stdlib", "decode_result") +@external(javascript, "../gleam_stdlib.mjs", "decode_result") +fn decode_result(a: Dynamic) -> Result(Result(a, e), DecodeErrors) + +/// Checks to see whether a `Dynamic` value is a result of a particular type, and +/// returns that result if it is. +/// +/// The `ok` and `error` arguments are decoders for decoding the `Ok` and +/// `Error` values of the result. +/// +/// ## Examples +/// +/// ```gleam +/// > from(Ok(1)) +/// > |> result(ok: int, error: string) +/// Ok(Ok(1)) +/// ``` +/// +/// ```gleam +/// > from(Error("boom")) +/// > |> result(ok: int, error: string) +/// Ok(Error("boom")) +/// ``` +/// +/// ```gleam +/// > from(123) +/// > |> result(ok: int, error: string) +/// Error([DecodeError(expected: "Result", found: "Int", path: [])]) +/// ``` +/// +pub fn result( + ok decode_ok: Decoder(a), + error decode_error: Decoder(e), +) -> Decoder(Result(a, e)) { + fn(value) { + use inner_result <- result.try(decode_result(value)) + + case inner_result { + Ok(raw) -> { + use value <- result.try( + decode_ok(raw) + |> map_errors(push_path(_, "ok")), + ) + Ok(Ok(value)) + } + Error(raw) -> { + use value <- result.try( + decode_error(raw) + |> map_errors(push_path(_, "error")), + ) + Ok(Error(value)) + } + } + } +} + +/// Checks to see whether a `Dynamic` value is a list of a particular type, and +/// returns that list if it is. +/// +/// The second argument is a decoder function used to decode the elements of +/// the list. The list is only decoded if all elements in the list can be +/// successfully decoded using this function. +/// +/// If you do not wish to decode all the elements in the list use the `shallow_list` +/// function instead. +/// +/// ## Examples +/// +/// ```gleam +/// > from(["a", "b", "c"]) +/// > |> list(of: string) +/// Ok(["a", "b", "c"]) +/// ``` +/// +/// ```gleam +/// > from([1, 2, 3]) +/// > |> list(of: string) +/// Error([DecodeError(expected: "String", found: "Int", path: ["*"])]) +/// ``` +/// +/// ```gleam +/// > from("ok") +/// > |> list(of: string) +/// Error([DecodeError(expected: "List", found: "String", path: [])]) +/// ``` +/// +pub fn list( + of decoder_type: fn(Dynamic) -> Result(inner, DecodeErrors), +) -> Decoder(List(inner)) { + fn(dynamic) { + use list <- result.try(shallow_list(dynamic)) + list + |> list.try_map(decoder_type) + |> map_errors(push_path(_, "*")) + } +} + +/// Checks to see if a `Dynamic` value is a nullable version of a particular +/// type, and returns a corresponding `Option` if it is. +/// +/// ## Examples +/// +/// ```gleam +/// > from("Hello") +/// > |> optional(string) +/// Ok(Some("Hello")) +/// ``` +/// +/// ```gleam +/// > from("Hello") +/// > |> optional(string) +/// Ok(Some("Hello")) +/// ``` +/// +/// ```gleam +/// > from(atom.from_string("null")) +/// > |> optional(string) +/// Ok(None) +/// ``` +/// +/// ```gleam +/// > from(atom.from_string("nil")) +/// > |> optional(string) +/// Ok(None) +/// ``` +/// +/// ```gleam +/// > from(atom.from_string("undefined")) +/// > |> optional(string) +/// Ok(None) +/// ``` +/// +/// ```gleam +/// > from(123) +/// > |> optional(string) +/// Error([DecodeError(expected: "String", found: "Int", path: [])]) +/// ``` +/// +pub fn optional(of decode: Decoder(inner)) -> Decoder(Option(inner)) { + fn(value) { decode_optional(value, decode) } +} + +@external(erlang, "gleam_stdlib", "decode_option") +@external(javascript, "../gleam_stdlib.mjs", "decode_option") +fn decode_optional(a: Dynamic, b: Decoder(a)) -> Result(Option(a), DecodeErrors) + +/// Checks to see if a `Dynamic` value is a map with a specific field, and returns +/// the value of that field if it is. +/// +/// This will not succeed on a record. +/// +/// ## Examples +/// +/// ```gleam +/// > import gleam/dict +/// > dict.new() +/// > |> dict.insert("Hello", "World") +/// > |> from +/// > |> field(named: "Hello", of: string) +/// Ok("World") +/// ``` +/// +/// ```gleam +/// > from(123) +/// > |> field("Hello", string) +/// Error([DecodeError(expected: "Map", found: "Int", path: [])]) +/// ``` +/// +pub fn field(named name: a, of inner_type: Decoder(t)) -> Decoder(t) { + fn(value) { + let missing_field_error = + DecodeError(expected: "field", found: "nothing", path: []) + + use maybe_inner <- result.try(decode_field(value, name)) + maybe_inner + |> option.to_result([missing_field_error]) + |> result.try(inner_type) + |> map_errors(push_path(_, name)) + } +} + +/// Checks to see if a `Dynamic` value is a map with a specific field. +/// If the map does not have the specified field, returns an `Ok(None)` instead of failing; otherwise, +/// returns the decoded field wrapped in `Some(_)`. +/// +/// ## Examples +/// +/// ```gleam +/// > import gleam/dict +/// > dict.new() +/// > |> dict.insert("Hello", "World") +/// > |> from +/// > |> field(named: "Hello", of: string) +/// Ok(Some("World")) +/// ``` +/// +/// ```gleam +/// > import gleam/dict +/// > dict.new() +/// > |> from +/// > |> field(named: "Hello", of: string) +/// Ok(None) +/// ``` +/// +/// ```gleam +/// > from(123) +/// > |> field("Hello", string) +/// Error([DecodeError(expected: "Map", found: "Int", path: [])]) +/// ``` +/// +pub fn optional_field( + named name: a, + of inner_type: Decoder(t), +) -> Decoder(Option(t)) { + fn(value) { + use maybe_inner <- result.try(decode_field(value, name)) + case maybe_inner { + option.None -> Ok(option.None) + option.Some(dynamic_inner) -> + dynamic_inner + |> decode_optional(inner_type) + |> map_errors(push_path(_, name)) + } + } +} + +@external(erlang, "gleam_stdlib", "decode_field") +@external(javascript, "../gleam_stdlib.mjs", "decode_field") +fn decode_field(a: Dynamic, b: name) -> Result(Option(Dynamic), DecodeErrors) + +/// Checks to see if a `Dynamic` value is a tuple large enough to have a certain +/// index, and returns the value of that index if it is. +/// +/// ## Examples +/// +/// ```gleam +/// > from(#(1, 2)) +/// > |> element(0, int) +/// Ok(from(1)) +/// ``` +/// +/// ```gleam +/// > from(#(1, 2)) +/// > |> element(2, int) +/// Error([ +/// DecodeError( +/// expected: "Tuple of at least 3 elements", +/// found: "Tuple of 2 elements", +/// path: [], +/// ), +/// ]) +/// ``` +/// +pub fn element(at index: Int, of inner_type: Decoder(t)) -> Decoder(t) { + fn(data: Dynamic) { + use tuple <- result.try(decode_tuple(data)) + let size = tuple_size(tuple) + use data <- result.try(case index >= 0 { + True -> + case index < size { + True -> tuple_get(tuple, index) + False -> at_least_decode_tuple_error(index + 1, data) + } + False -> + case int.absolute_value(index) <= size { + True -> tuple_get(tuple, size + index) + False -> at_least_decode_tuple_error(int.absolute_value(index), data) + } + }) + inner_type(data) + |> map_errors(push_path(_, index)) + } +} + +fn at_least_decode_tuple_error( + size: Int, + data: Dynamic, +) -> Result(a, DecodeErrors) { + let s = case size { + 1 -> "" + _ -> "s" + } + let error = + ["Tuple of at least ", int.to_string(size), " element", s] + |> string_builder.from_strings + |> string_builder.to_string + |> DecodeError(found: classify(data), path: []) + Error([error]) +} + +// A tuple of unknown size +type UnknownTuple + +@external(erlang, "gleam_stdlib", "decode_tuple") +@external(javascript, "../gleam_stdlib.mjs", "decode_tuple") +fn decode_tuple(a: Dynamic) -> Result(UnknownTuple, DecodeErrors) + +@external(erlang, "gleam_stdlib", "decode_tuple2") +@external(javascript, "../gleam_stdlib.mjs", "decode_tuple2") +fn decode_tuple2(a: Dynamic) -> Result(#(Dynamic, Dynamic), DecodeErrors) + +@external(erlang, "gleam_stdlib", "decode_tuple3") +@external(javascript, "../gleam_stdlib.mjs", "decode_tuple3") +fn decode_tuple3( + a: Dynamic, +) -> Result(#(Dynamic, Dynamic, Dynamic), DecodeErrors) + +@external(erlang, "gleam_stdlib", "decode_tuple4") +@external(javascript, "../gleam_stdlib.mjs", "decode_tuple4") +fn decode_tuple4( + a: Dynamic, +) -> Result(#(Dynamic, Dynamic, Dynamic, Dynamic), DecodeErrors) + +@external(erlang, "gleam_stdlib", "decode_tuple5") +@external(javascript, "../gleam_stdlib.mjs", "decode_tuple5") +fn decode_tuple5( + a: Dynamic, +) -> Result(#(Dynamic, Dynamic, Dynamic, Dynamic, Dynamic), DecodeErrors) + +@external(erlang, "gleam_stdlib", "decode_tuple6") +@external(javascript, "../gleam_stdlib.mjs", "decode_tuple6") +fn decode_tuple6( + a: Dynamic, +) -> Result( + #(Dynamic, Dynamic, Dynamic, Dynamic, Dynamic, Dynamic), + DecodeErrors, +) + +@external(erlang, "gleam_stdlib", "tuple_get") +@external(javascript, "../gleam_stdlib.mjs", "tuple_get") +fn tuple_get(a: UnknownTuple, b: Int) -> Result(Dynamic, DecodeErrors) + +@external(erlang, "gleam_stdlib", "size_of_tuple") +@external(javascript, "../gleam_stdlib.mjs", "length") +fn tuple_size(a: UnknownTuple) -> Int + +fn tuple_errors( + result: Result(a, List(DecodeError)), + name: String, +) -> List(DecodeError) { + case result { + Ok(_) -> [] + Error(errors) -> list.map(errors, push_path(_, name)) + } +} + +fn push_path(error: DecodeError, name: t) -> DecodeError { + let name = from(name) + let decoder = any([string, fn(x) { result.map(int(x), int.to_string) }]) + let name = case decoder(name) { + Ok(name) -> name + Error(_) -> + ["<", classify(name), ">"] + |> string_builder.from_strings + |> string_builder.to_string + } + DecodeError(..error, path: [name, ..error.path]) +} + +/// Checks to see if a `Dynamic` value is a 2-element tuple, list or array containing +/// specifically typed elements. +/// +/// ## Examples +/// +/// ```gleam +/// > from(#(1, 2)) +/// > |> tuple2(int, int) +/// Ok(#(1, 2)) +/// ``` +/// +/// ```gleam +/// > from(#(1, 2.0)) +/// > |> tuple2(int, float) +/// Ok(#(1, 2.0)) +/// ``` +/// +/// ```gleam +/// > from([1, 2]) +/// > |> tuple2(int, int) +/// Ok(#(1, 2)) +/// ``` +/// +/// ```gleam +/// > from([from(1), from(2.0)]) +/// > |> tuple2(int, float) +/// Ok(#(1, 2.0)) +/// ``` +/// +/// ```gleam +/// > from(#(1, 2, 3)) +/// > |> tuple2(int, float) +/// Error([ +/// DecodeError(expected: "Tuple of 2 elements", found: "Tuple of 3 elements", path: []), +/// ]) +/// ``` +/// +/// ```gleam +/// > from("") +/// > |> tuple2(int, float) +/// Error([DecodeError(expected: "Tuple of 2 elements", found: "String", path: [])]) +/// ``` +/// +pub fn tuple2( + first decode1: Decoder(a), + second decode2: Decoder(b), +) -> Decoder(#(a, b)) { + fn(value) { + use #(a, b) <- result.try(decode_tuple2(value)) + case decode1(a), decode2(b) { + Ok(a), Ok(b) -> Ok(#(a, b)) + a, b -> + tuple_errors(a, "0") + |> list.append(tuple_errors(b, "1")) + |> Error + } + } +} + +/// Checks to see if a `Dynamic` value is a 3-element tuple, list or array containing +/// specifically typed elements. +/// +/// ## Examples +/// +/// ```gleam +/// > from(#(1, 2, 3)) +/// > |> tuple3(int, int, int) +/// Ok(#(1, 2, 3)) +/// ``` +/// +/// ```gleam +/// > from(#(1, 2.0, "3")) +/// > |> tuple3(int, float, string) +/// Ok(#(1, 2.0, "3")) +/// ``` +/// +/// ```gleam +/// > from([1, 2, 3]) +/// > |> tuple3(int, int, int) +/// Ok(#(1, 2, 3)) +/// ``` +/// +/// ```gleam +/// > from([from(1), from(2.0), from("3")]) +/// > |> tuple3(int, float, string) +/// Ok(#(1, 2.0, "3")) +/// ``` +/// +/// ```gleam +/// > from(#(1, 2)) +/// > |> tuple3(int, float, string) +/// Error([ +/// DecodeError(expected: "Tuple of 3 elements", found: "Tuple of 2 elements", path: [])), +/// ]) +/// ``` +/// +/// ```gleam +/// > from("") +/// > |> tuple3(int, float, string) +/// Error([ +/// DecodeError(expected: "Tuple of 3 elements", found: "String", path: []), +/// ]) +/// ``` +/// +pub fn tuple3( + first decode1: Decoder(a), + second decode2: Decoder(b), + third decode3: Decoder(c), +) -> Decoder(#(a, b, c)) { + fn(value) { + use #(a, b, c) <- result.try(decode_tuple3(value)) + case decode1(a), decode2(b), decode3(c) { + Ok(a), Ok(b), Ok(c) -> Ok(#(a, b, c)) + a, b, c -> + tuple_errors(a, "0") + |> list.append(tuple_errors(b, "1")) + |> list.append(tuple_errors(c, "2")) + |> Error + } + } +} + +/// Checks to see if a `Dynamic` value is a 4-element tuple, list or array containing +/// specifically typed elements. +/// +/// ## Examples +/// +/// ```gleam +/// > from(#(1, 2, 3, 4)) +/// > |> tuple4(int, int, int, int) +/// Ok(#(1, 2, 3, 4)) +/// ``` +/// +/// ```gleam +/// > from(#(1, 2.0, "3", 4)) +/// > |> tuple4(int, float, string, int) +/// Ok(#(1, 2.0, "3", 4)) +/// ``` +/// +/// ```gleam +/// > from([1, 2, 3, 4]) +/// > |> tuple4(int, int, int, int) +/// Ok(#(1, 2, 3, 4)) +/// ``` +/// +/// ```gleam +/// > from([from(1), from(2.0), from("3"), from(4)]) +/// > |> tuple4(int, float, string, int) +/// Ok(#(1, 2.0, "3", 4)) +/// ``` +/// +/// ```gleam +/// > from(#(1, 2)) +/// > |> tuple4(int, float, string, int) +/// Error([ +/// DecodeError(expected: "Tuple of 4 elements", found: "Tuple of 2 elements", path: []), +/// ]) +/// ``` +/// +/// ```gleam +/// > from("") +/// > |> tuple4(int, float, string, int) +/// Error([ +/// DecodeError(expected: "Tuple of 4 elements", found: "String", path: []), +/// ]) +/// ``` +/// +pub fn tuple4( + first decode1: Decoder(a), + second decode2: Decoder(b), + third decode3: Decoder(c), + fourth decode4: Decoder(d), +) -> Decoder(#(a, b, c, d)) { + fn(value) { + use #(a, b, c, d) <- result.try(decode_tuple4(value)) + case decode1(a), decode2(b), decode3(c), decode4(d) { + Ok(a), Ok(b), Ok(c), Ok(d) -> Ok(#(a, b, c, d)) + a, b, c, d -> + tuple_errors(a, "0") + |> list.append(tuple_errors(b, "1")) + |> list.append(tuple_errors(c, "2")) + |> list.append(tuple_errors(d, "3")) + |> Error + } + } +} + +/// Checks to see if a `Dynamic` value is a 5-element tuple, list or array containing +/// specifically typed elements. +/// +/// ## Examples +/// +/// ```gleam +/// > from(#(1, 2, 3, 4, 5)) +/// > |> tuple5(int, int, int, int, int) +/// Ok(#(1, 2, 3, 4, 5)) +/// ``` +/// +/// ```gleam +/// > from(#(1, 2.0, "3", 4, 5)) +/// > |> tuple5(int, float, string, int, int) +/// Ok(#(1, 2.0, "3", 4, 5)) +/// ``` +/// +/// ```gleam +/// > from([1, 2, 3, 4, 5]) +/// > |> tuple5(int, int, int, int, int) +/// Ok(#(1, 2, 3, 4, 5)) +/// ``` +/// +/// ```gleam +/// > from([from(1), from(2.0), from("3"), from(4), from(True)]) +/// > |> tuple5(int, float, string, int, bool) +/// Ok(#(1, 2.0, "3", 4, True)) +/// ``` +/// +/// ```gleam +/// > from(#(1, 2)) +/// > |> tuple5(int, float, string, int, int) +/// Error([ +/// DecodeError(expected: "Tuple of 5 elements", found: "Tuple of 2 elements", path: [])), +/// ]) +/// ``` +/// +/// ```gleam +/// > from("") +/// > |> tuple5(int, float, string, int, int) +/// Error([DecodeError(expected: "Tuple of 5 elements", found: "String", path: [])]) +/// ``` +/// +pub fn tuple5( + first decode1: Decoder(a), + second decode2: Decoder(b), + third decode3: Decoder(c), + fourth decode4: Decoder(d), + fifth decode5: Decoder(e), +) -> Decoder(#(a, b, c, d, e)) { + fn(value) { + use #(a, b, c, d, e) <- result.try(decode_tuple5(value)) + case decode1(a), decode2(b), decode3(c), decode4(d), decode5(e) { + Ok(a), Ok(b), Ok(c), Ok(d), Ok(e) -> Ok(#(a, b, c, d, e)) + a, b, c, d, e -> + tuple_errors(a, "0") + |> list.append(tuple_errors(b, "1")) + |> list.append(tuple_errors(c, "2")) + |> list.append(tuple_errors(d, "3")) + |> list.append(tuple_errors(e, "4")) + |> Error + } + } +} + +/// Checks to see if a `Dynamic` value is a 6-element tuple, list or array containing +/// specifically typed elements. +/// +/// ## Examples +/// +/// ```gleam +/// > from(#(1, 2, 3, 4, 5, 6)) +/// > |> tuple6(int, int, int, int, int, int) +/// Ok(#(1, 2, 3, 4, 5, 6)) +/// ``` +/// +/// ```gleam +/// > from(#(1, 2.0, "3", 4, 5, 6)) +/// > |> tuple6(int, float, string, int, int, int) +/// Ok(#(1, 2.0, "3", 4, 5, 6)) +/// ``` +/// +/// ```gleam +/// > from([1, 2, 3, 4, 5, 6]) +/// > |> tuple6(int, int, int, int, int, int) +/// Ok(#(1, 2, 3, 4, 5, 6)) +/// ``` +/// +/// ```gleam +/// > from([from(1), from(2.0), from("3"), from(4), from(True), from(False)]) +/// > |> tuple6(int, float, string, int, bool, bool) +/// Ok(#(1, 2.0, "3", 4, True, False)) +/// ``` +/// +/// ```gleam +/// > from(#(1, 2)) +/// > |> tuple6(int, float, string, int, int, int) +/// Error([ +/// DecodeError(expected: "Tuple of 6 elements", found: "Tuple of 2 elements", path: []), +/// ]) +/// ``` +/// +/// ```gleam +/// > from("") +/// > |> tuple6(int, float, string, int, int, int) +/// Error([DecodeError(expected: "Tuple of 6 elements", found: "String", path: [])]) +/// ``` +/// +pub fn tuple6( + first decode1: Decoder(a), + second decode2: Decoder(b), + third decode3: Decoder(c), + fourth decode4: Decoder(d), + fifth decode5: Decoder(e), + sixth decode6: Decoder(f), +) -> Decoder(#(a, b, c, d, e, f)) { + fn(value) { + use #(a, b, c, d, e, f) <- result.try(decode_tuple6(value)) + case + decode1(a), + decode2(b), + decode3(c), + decode4(d), + decode5(e), + decode6(f) + { + Ok(a), Ok(b), Ok(c), Ok(d), Ok(e), Ok(f) -> Ok(#(a, b, c, d, e, f)) + a, b, c, d, e, f -> + tuple_errors(a, "0") + |> list.append(tuple_errors(b, "1")) + |> list.append(tuple_errors(c, "2")) + |> list.append(tuple_errors(d, "3")) + |> list.append(tuple_errors(e, "4")) + |> list.append(tuple_errors(f, "5")) + |> Error + } + } +} + +/// Checks to see if a `Dynamic` value is a dict. +/// +/// ## Examples +/// +/// ```gleam +/// > import gleam/dict +/// > dict.new() |> from |> map(string, int) +/// Ok(dict.new()) +/// ``` +/// +/// ```gleam +/// > from(1) |> map(string, int) +/// Error(DecodeError(expected: "Map", found: "Int", path: [])) +/// ``` +/// +/// ```gleam +/// > from("") |> map(string, int) +/// Error(DecodeError(expected: "Map", found: "String", path: [])) +/// ``` +/// +pub fn dict( + of key_type: Decoder(k), + to value_type: Decoder(v), +) -> Decoder(Dict(k, v)) { + fn(value) { + use map <- result.try(decode_map(value)) + use pairs <- result.try( + map + |> dict.to_list + |> list.try_map(fn(pair) { + let #(k, v) = pair + use k <- result.try( + key_type(k) + |> map_errors(push_path(_, "keys")), + ) + use v <- result.try( + value_type(v) + |> map_errors(push_path(_, "values")), + ) + Ok(#(k, v)) + }), + ) + Ok(dict.from_list(pairs)) + } +} + +@deprecated("Use `dict` instead") +pub fn map( + of key_type: Decoder(k), + to value_type: Decoder(v), +) -> Decoder(Dict(k, v)) { + dict(key_type, value_type) +} + +@external(erlang, "gleam_stdlib", "decode_map") +@external(javascript, "../gleam_stdlib.mjs", "decode_map") +fn decode_map(a: Dynamic) -> Result(Dict(Dynamic, Dynamic), DecodeErrors) + +/// Joins multiple decoders into one. When run they will each be tried in turn +/// until one succeeds, or they all fail. +/// +/// ## Examples +/// +/// ```gleam +/// > import gleam/result +/// > let bool_or_string = any(of: [ +/// > string, +/// > fn(x) { result.map(bool(x), fn(_) { "a bool" }) } +/// > ]) +/// > bool_or_string(from("ok")) +/// Ok("ok") +/// ``` +/// +/// ```gleam +/// > bool_or_string(from(True)) +/// Ok("a bool") +/// ``` +/// +/// ```gleam +/// > bool_or_string(from(1)) +/// Error(DecodeError(expected: "another type", found: "Int", path: [])) +/// ``` +/// +pub fn any(of decoders: List(Decoder(t))) -> Decoder(t) { + fn(data) { + case decoders { + [] -> + Error([ + DecodeError(found: classify(data), expected: "another type", path: []), + ]) + + [decoder, ..decoders] -> + case decoder(data) { + Ok(decoded) -> Ok(decoded) + Error(_) -> any(decoders)(data) + } + } + } +} + +/// Decode 1 values from a `Dynamic` value. +/// +/// ## Examples +/// +/// ```gleam +/// > from(#(1, 2.0, "3")) +/// > |> decode1(MyRecord, element(0, int)) +/// Ok(MyRecord(1)) +/// ``` +/// +/// ```gleam +/// > from(#("", "", "")) +/// > |> decode1(MyRecord, element(0, int)) +/// Error([ +/// DecodeError(expected: "Int", found: "String", path: ["0"]), +/// ]) +/// ``` +/// +pub fn decode1(constructor: fn(t1) -> t, t1: Decoder(t1)) -> Decoder(t) { + fn(value) { + case t1(value) { + Ok(a) -> Ok(constructor(a)) + a -> Error(all_errors(a)) + } + } +} + +/// Decode 2 values from a `Dynamic` value. +/// +/// ## Examples +/// +/// ```gleam +/// > from(#(1, 2.0, "3")) +/// > |> decode2(MyRecord, element(0, int), element(1, float)) +/// Ok(MyRecord(1, 2.0)) +/// ``` +/// +/// ```gleam +/// > from(#("", "", "")) +/// > |> decode2(MyRecord, element(0, int), element(1, float)) +/// Error([ +/// DecodeError(expected: "Int", found: "String", path: ["0"]), +/// DecodeError(expected: "Float", found: "String", path: ["1"]), +/// ]) +/// ``` +/// +pub fn decode2( + constructor: fn(t1, t2) -> t, + t1: Decoder(t1), + t2: Decoder(t2), +) -> Decoder(t) { + fn(value) { + case t1(value), t2(value) { + Ok(a), Ok(b) -> Ok(constructor(a, b)) + a, b -> Error(list.concat([all_errors(a), all_errors(b)])) + } + } +} + +/// Decode 3 values from a `Dynamic` value. +/// +/// ## Examples +/// +/// ```gleam +/// > from(#(1, 2.0, "3")) +/// > |> decode3(MyRecord, element(0, int), element(1, float), element(2, string)) +/// Ok(MyRecord(1, 2.0, "3")) +/// ``` +/// +/// ```gleam +/// > from(#("", "", "")) +/// > |> decode3(MyRecord, element(0, int), element(1, float), element(2, string)) +/// Error([ +/// DecodeError(expected: "Int", found: "String", path: ["0"]), +/// DecodeError(expected: "Float", found: "String", path: ["1"]), +/// ]) +/// ``` +/// +pub fn decode3( + constructor: fn(t1, t2, t3) -> t, + t1: Decoder(t1), + t2: Decoder(t2), + t3: Decoder(t3), +) -> Decoder(t) { + fn(value) { + case t1(value), t2(value), t3(value) { + Ok(a), Ok(b), Ok(c) -> Ok(constructor(a, b, c)) + a, b, c -> + Error(list.concat([all_errors(a), all_errors(b), all_errors(c)])) + } + } +} + +/// Decode 4 values from a `Dynamic` value. +/// +/// ## Examples +/// +/// ```gleam +/// > from(#(1, 2.1, "3", "4")) +/// > |> decode4( +/// > MyRecord, +/// > element(0, int), +/// > element(1, float), +/// > element(2, string), +/// > element(3, string), +/// > ) +/// Ok(MyRecord(1, 2.1, "3", "4")) +/// ``` +/// +/// ```gleam +/// > from(#("", "", "", "")) +/// > |> decode4( +/// > MyRecord, +/// > element(0, int), +/// > element(1, float), +/// > element(2, string), +/// > element(3, string), +/// > ) +/// Error([ +/// DecodeError(expected: "Int", found: "String", path: ["0"]), +/// DecodeError(expected: "Float", found: "String", path: ["1"]), +/// ]) +/// ``` +/// +pub fn decode4( + constructor: fn(t1, t2, t3, t4) -> t, + t1: Decoder(t1), + t2: Decoder(t2), + t3: Decoder(t3), + t4: Decoder(t4), +) -> Decoder(t) { + fn(x: Dynamic) { + case t1(x), t2(x), t3(x), t4(x) { + Ok(a), Ok(b), Ok(c), Ok(d) -> Ok(constructor(a, b, c, d)) + a, b, c, d -> + Error(list.concat([ + all_errors(a), + all_errors(b), + all_errors(c), + all_errors(d), + ])) + } + } +} + +/// Decode 5 values from a `Dynamic` value. +/// +/// ## Examples +/// +/// ```gleam +/// > from(#(1, 2.1, "3", "4", "5")) +/// > |> decode5( +/// > MyRecord, +/// > element(0, int), +/// > element(1, float), +/// > element(2, string), +/// > element(3, string), +/// > element(4, string), +/// > ) +/// Ok(MyRecord(1, 2.1, "3", "4", "5")) +/// ``` +/// +/// ```gleam +/// > from(#("", "", "", "", "")) +/// > |> decode5( +/// > MyRecord, +/// > element(0, int), +/// > element(1, float), +/// > element(2, string), +/// > element(3, string), +/// > element(4, string), +/// > ) +/// Error([ +/// DecodeError(expected: "Int", found: "String", path: ["0"]), +/// DecodeError(expected: "Float", found: "String", path: ["1"]), +/// ]) +/// ``` +/// +pub fn decode5( + constructor: fn(t1, t2, t3, t4, t5) -> t, + t1: Decoder(t1), + t2: Decoder(t2), + t3: Decoder(t3), + t4: Decoder(t4), + t5: Decoder(t5), +) -> Decoder(t) { + fn(x: Dynamic) { + case t1(x), t2(x), t3(x), t4(x), t5(x) { + Ok(a), Ok(b), Ok(c), Ok(d), Ok(e) -> Ok(constructor(a, b, c, d, e)) + a, b, c, d, e -> + Error(list.concat([ + all_errors(a), + all_errors(b), + all_errors(c), + all_errors(d), + all_errors(e), + ])) + } + } +} + +/// Decode 6 values from a `Dynamic` value. +/// +/// ## Examples +/// +/// ```gleam +/// > from(#(1, 2.1, "3", "4", "5", "6")) +/// > |> decode6( +/// > MyRecord, +/// > element(0, int), +/// > element(1, float), +/// > element(2, string), +/// > element(3, string), +/// > element(4, string), +/// > element(5, string), +/// > ) +/// Ok(MyRecord(1, 2.1, "3", "4", "5", "6")) +/// ``` +/// +/// ```gleam +/// > from(#("", "", "", "", "", "")) +/// > |> decode6( +/// > MyRecord, +/// > element(0, int), +/// > element(1, float), +/// > element(2, string), +/// > element(3, string), +/// > element(4, string), +/// > element(5, string), +/// > ) +/// Error([ +/// DecodeError(expected: "Int", found: "String", path: ["0"]), +/// DecodeError(expected: "Float", found: "String", path: ["1"]), +/// ]) +/// ``` +/// +pub fn decode6( + constructor: fn(t1, t2, t3, t4, t5, t6) -> t, + t1: Decoder(t1), + t2: Decoder(t2), + t3: Decoder(t3), + t4: Decoder(t4), + t5: Decoder(t5), + t6: Decoder(t6), +) -> Decoder(t) { + fn(x: Dynamic) { + case t1(x), t2(x), t3(x), t4(x), t5(x), t6(x) { + Ok(a), Ok(b), Ok(c), Ok(d), Ok(e), Ok(f) -> + Ok(constructor(a, b, c, d, e, f)) + a, b, c, d, e, f -> + Error(list.concat([ + all_errors(a), + all_errors(b), + all_errors(c), + all_errors(d), + all_errors(e), + all_errors(f), + ])) + } + } +} + +/// Decode 7 values from a `Dynamic` value. +/// +/// ## Examples +/// +/// ```gleam +/// > from(#(1, 2.1, "3", "4", "5", "6")) +/// > |> decode7( +/// > MyRecord, +/// > element(0, int), +/// > element(1, float), +/// > element(2, string), +/// > element(3, string), +/// > element(4, string), +/// > element(5, string), +/// > element(6, string), +/// > ) +/// Ok(MyRecord(1, 2.1, "3", "4", "5", "6", "7")) +/// ``` +/// +/// ```gleam +/// > from(#("", "", "", "", "", "", "")) +/// > |> decode7( +/// > MyRecord, +/// > element(0, int), +/// > element(1, float), +/// > element(2, string), +/// > element(3, string), +/// > element(4, string), +/// > element(5, string), +/// > element(6, string), +/// > ) +/// Error([ +/// DecodeError(expected: "Int", found: "String", path: ["0"]), +/// DecodeError(expected: "Float", found: "String", path: ["1"]), +/// ]) +/// ``` +/// +pub fn decode7( + constructor: fn(t1, t2, t3, t4, t5, t6, t7) -> t, + t1: Decoder(t1), + t2: Decoder(t2), + t3: Decoder(t3), + t4: Decoder(t4), + t5: Decoder(t5), + t6: Decoder(t6), + t7: Decoder(t7), +) -> Decoder(t) { + fn(x: Dynamic) { + case t1(x), t2(x), t3(x), t4(x), t5(x), t6(x), t7(x) { + Ok(a), Ok(b), Ok(c), Ok(d), Ok(e), Ok(f), Ok(g) -> + Ok(constructor(a, b, c, d, e, f, g)) + a, b, c, d, e, f, g -> + Error(list.concat([ + all_errors(a), + all_errors(b), + all_errors(c), + all_errors(d), + all_errors(e), + all_errors(f), + all_errors(g), + ])) + } + } +} + +/// Decode 8 values from a `Dynamic` value. +/// +/// ## Examples +/// +/// ```gleam +/// > from(#(1, 2.1, "3", "4", "5", "6", "7", "8")) +/// > |> decode8( +/// > MyRecord, +/// > element(0, int), +/// > element(1, float), +/// > element(2, string), +/// > element(3, string), +/// > element(4, string), +/// > element(5, string), +/// > element(6, string), +/// > element(7, string), +/// > ) +/// Ok(MyRecord(1, 2.1, "3", "4", "5", "6", "7", "8")) +/// ``` +/// +/// ```gleam +/// > from(#("", "", "", "", "", "", "", "")) +/// > |> decode8( +/// > MyRecord, +/// > element(0, int), +/// > element(1, float), +/// > element(2, string), +/// > element(3, string), +/// > element(4, string), +/// > element(5, string), +/// > element(6, string), +/// > element(7, string), +/// > ) +/// Error([ +/// DecodeError(expected: "Int", found: "String", path: ["0"]), +/// DecodeError(expected: "Float", found: "String", path: ["1"]), +/// ]) +/// ``` +/// +pub fn decode8( + constructor: fn(t1, t2, t3, t4, t5, t6, t7, t8) -> t, + t1: Decoder(t1), + t2: Decoder(t2), + t3: Decoder(t3), + t4: Decoder(t4), + t5: Decoder(t5), + t6: Decoder(t6), + t7: Decoder(t7), + t8: Decoder(t8), +) -> Decoder(t) { + fn(x: Dynamic) { + case t1(x), t2(x), t3(x), t4(x), t5(x), t6(x), t7(x), t8(x) { + Ok(a), Ok(b), Ok(c), Ok(d), Ok(e), Ok(f), Ok(g), Ok(h) -> + Ok(constructor(a, b, c, d, e, f, g, h)) + a, b, c, d, e, f, g, h -> + Error(list.concat([ + all_errors(a), + all_errors(b), + all_errors(c), + all_errors(d), + all_errors(e), + all_errors(f), + all_errors(g), + all_errors(h), + ])) + } + } +} + +/// Decode 9 values from a `Dynamic` value. +/// +/// ## Examples +/// +/// ```gleam +/// > from(#(1, 2.1, "3", "4", "5", "6", "7", "8", "9")) +/// > |> decode9( +/// > MyRecord, +/// > element(0, int), +/// > element(1, float), +/// > element(2, string), +/// > element(3, string), +/// > element(4, string), +/// > element(5, string), +/// > element(6, string), +/// > element(7, string), +/// > element(8, string), +/// > ) +/// Ok(MyRecord(1, 2.1, "3", "4", "5", "6", "7", "8", "9")) +/// ``` +/// +/// ```gleam +/// > from(#("", "", "", "", "", "", "", "", "")) +/// > |> decode9( +/// > MyRecord, +/// > element(0, int), +/// > element(1, float), +/// > element(2, string), +/// > element(3, string), +/// > element(4, string), +/// > element(5, string), +/// > element(6, string), +/// > element(7, string), +/// > element(8, string), +/// > ) +/// Error([ +/// DecodeError(expected: "Int", found: "String", path: ["0"]), +/// DecodeError(expected: "Float", found: "String", path: ["1"]), +/// ]) +/// ``` +/// +pub fn decode9( + constructor: fn(t1, t2, t3, t4, t5, t6, t7, t8, t9) -> t, + t1: Decoder(t1), + t2: Decoder(t2), + t3: Decoder(t3), + t4: Decoder(t4), + t5: Decoder(t5), + t6: Decoder(t6), + t7: Decoder(t7), + t8: Decoder(t8), + t9: Decoder(t9), +) -> Decoder(t) { + fn(x: Dynamic) { + case t1(x), t2(x), t3(x), t4(x), t5(x), t6(x), t7(x), t8(x), t9(x) { + Ok(a), Ok(b), Ok(c), Ok(d), Ok(e), Ok(f), Ok(g), Ok(h), Ok(i) -> + Ok(constructor(a, b, c, d, e, f, g, h, i)) + a, b, c, d, e, f, g, h, i -> + Error(list.concat([ + all_errors(a), + all_errors(b), + all_errors(c), + all_errors(d), + all_errors(e), + all_errors(f), + all_errors(g), + all_errors(h), + all_errors(i), + ])) + } + } +} + +fn all_errors(result: Result(a, List(DecodeError))) -> List(DecodeError) { + case result { + Ok(_) -> [] + Error(errors) -> errors + } +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/float.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/float.gleam new file mode 100644 index 0000000..5d62419 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/float.gleam @@ -0,0 +1,546 @@ +//// Functions for working with floats. +//// +//// ## Division by zero +//// +//// Gleam runs on the Erlang virtual machine, which does not follow the IEEE +//// 754 standard for floating point arithmetic and does not have an `Infinity` +//// value. In Erlang division by zero results in a crash, however Gleam does +//// not have partial functions and operators in core so instead division by zero +//// returns zero, a behaviour taken from Pony, Coq, and Lean. +//// +//// This may seem unexpected at first, but it is no less mathematically valid +//// than crashing or returning a special value. Division by zero is undefined +//// in mathematics. + +import gleam/order.{type Order} + +/// Attempts to parse a string as a `Float`, returning `Error(Nil)` if it was +/// not possible. +/// +/// ## Examples +/// +/// ```gleam +/// > parse("2.3") +/// Ok(2.3) +/// ``` +/// +/// ```gleam +/// > parse("ABC") +/// Error(Nil) +/// ``` +/// +pub fn parse(string: String) -> Result(Float, Nil) { + do_parse(string) +} + +@external(erlang, "gleam_stdlib", "parse_float") +@external(javascript, "../gleam_stdlib.mjs", "parse_float") +fn do_parse(a: String) -> Result(Float, Nil) + +/// Returns the string representation of the provided `Float`. +/// +/// ## Examples +/// +/// ```gleam +/// > to_string(2.3) +/// "2.3" +/// ``` +/// +pub fn to_string(x: Float) -> String { + do_to_string(x) +} + +@external(erlang, "gleam_stdlib", "float_to_string") +@external(javascript, "../gleam_stdlib.mjs", "float_to_string") +fn do_to_string(a: Float) -> String + +/// Restricts a `Float` between a lower and upper bound. +/// +/// ## Examples +/// +/// ```gleam +/// > clamp(1.2, min: 1.4, max: 1.6) +/// 1.4 +/// ``` +/// +pub fn clamp(x: Float, min min_bound: Float, max max_bound: Float) -> Float { + x + |> min(max_bound) + |> max(min_bound) +} + +/// Compares two `Float`s, returning an `Order`: +/// `Lt` for lower than, `Eq` for equals, or `Gt` for greater than. +/// +/// ## Examples +/// +/// ```gleam +/// > compare(2.0, 2.3) +/// Lt +/// ``` +/// +/// To handle +/// [Floating Point Imprecision](https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accuracy_problems) +/// you may use [`loosely_compare`](#loosely_compare) instead. +/// +pub fn compare(a: Float, with b: Float) -> Order { + case a == b { + True -> order.Eq + False -> + case a <. b { + True -> order.Lt + False -> order.Gt + } + } +} + +/// Compares two `Float`s within a tolerance, returning an `Order`: +/// `Lt` for lower than, `Eq` for equals, or `Gt` for greater than. +/// +/// This function allows Float comparison while handling +/// [Floating Point Imprecision](https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accuracy_problems). +/// +/// Notice: For `Float`s the tolerance won't be exact: +/// `5.3 - 5.0` is not exactly `0.3`. +/// +/// ## Examples +/// +/// ```gleam +/// > loosely_compare(5.0, with: 5.3, tolerating: 0.5) +/// Eq +/// ``` +/// +/// If you want to check only for equality you may use +/// [`loosely_equals`](#loosely_equals) instead. +/// +pub fn loosely_compare( + a: Float, + with b: Float, + tolerating tolerance: Float, +) -> Order { + let difference = absolute_value(a -. b) + case difference <=. tolerance { + True -> order.Eq + False -> compare(a, b) + } +} + +/// Checks for equality of two `Float`s within a tolerance, +/// returning an `Bool`. +/// +/// This function allows Float comparison while handling +/// [Floating Point Imprecision](https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accuracy_problems). +/// +/// Notice: For `Float`s the tolerance won't be exact: +/// `5.3 - 5.0` is not exactly `0.3`. +/// +/// ## Examples +/// +/// ```gleam +/// > loosely_equals(5.0, with: 5.3, tolerating: 0.5) +/// True +/// ``` +/// +/// ```gleam +/// > loosely_equals(5.0, with: 5.1, tolerating: 0.1) +/// False +/// ``` +/// +pub fn loosely_equals( + a: Float, + with b: Float, + tolerating tolerance: Float, +) -> Bool { + let difference = absolute_value(a -. b) + difference <=. tolerance +} + +/// Compares two `Float`s, returning the smaller of the two. +/// +/// ## Examples +/// +/// ```gleam +/// > min(2.0, 2.3) +/// 2.0 +/// ``` +/// +pub fn min(a: Float, b: Float) -> Float { + case a <. b { + True -> a + False -> b + } +} + +/// Compares two `Float`s, returning the larger of the two. +/// +/// ## Examples +/// +/// ```gleam +/// > max(2.0, 2.3) +/// 2.3 +/// ``` +/// +pub fn max(a: Float, b: Float) -> Float { + case a >. b { + True -> a + False -> b + } +} + +/// Rounds the value to the next highest whole number as a `Float`. +/// +/// ## Examples +/// +/// ```gleam +/// > ceiling(2.3) +/// 3.0 +/// ``` +/// +pub fn ceiling(x: Float) -> Float { + do_ceiling(x) +} + +@external(erlang, "math", "ceil") +@external(javascript, "../gleam_stdlib.mjs", "ceiling") +fn do_ceiling(a: Float) -> Float + +/// Rounds the value to the next lowest whole number as a `Float`. +/// +/// ## Examples +/// +/// ```gleam +/// > floor(2.3) +/// 2.0 +/// ``` +/// +pub fn floor(x: Float) -> Float { + do_floor(x) +} + +@external(erlang, "math", "floor") +@external(javascript, "../gleam_stdlib.mjs", "floor") +fn do_floor(a: Float) -> Float + +/// Rounds the value to the nearest whole number as an `Int`. +/// +/// ## Examples +/// +/// ```gleam +/// > round(2.3) +/// 2 +/// ``` +/// +/// ```gleam +/// > round(2.5) +/// 3 +/// ``` +/// +pub fn round(x: Float) -> Int { + do_round(x) +} + +@target(erlang) +@external(erlang, "erlang", "round") +fn do_round(a: Float) -> Int + +@target(javascript) +fn do_round(x: Float) -> Int { + case x >=. 0.0 { + True -> js_round(x) + _ -> 0 - js_round(negate(x)) + } +} + +@target(javascript) +@external(javascript, "../gleam_stdlib.mjs", "round") +fn js_round(a: Float) -> Int + +/// Returns the value as an `Int`, truncating all decimal digits. +/// +/// ## Examples +/// +/// ```gleam +/// > truncate(2.4343434847383438) +/// 2 +/// ``` +/// +pub fn truncate(x: Float) -> Int { + do_truncate(x) +} + +@external(erlang, "erlang", "trunc") +@external(javascript, "../gleam_stdlib.mjs", "truncate") +fn do_truncate(a: Float) -> Int + +/// Returns the absolute value of the input as a `Float`. +/// +/// ## Examples +/// +/// ```gleam +/// > absolute_value(-12.5) +/// 12.5 +/// ``` +/// +/// ```gleam +/// > absolute_value(10.2) +/// 10.2 +/// ``` +/// +pub fn absolute_value(x: Float) -> Float { + case x >=. 0.0 { + True -> x + _ -> 0.0 -. x + } +} + +/// Returns the results of the base being raised to the power of the +/// exponent, as a `Float`. +/// +/// ## Examples +/// +/// ```gleam +/// > power(2.0, -1.0) +/// Ok(0.5) +/// ``` +/// +/// ```gleam +/// > power(2.0, 2.0) +/// Ok(4.0) +/// ``` +/// +/// ```gleam +/// > power(8.0, 1.5) +/// Ok(22.627416997969522) +/// ``` +/// +/// ```gleam +/// > 4.0 |> power(of: 2.0) +/// Ok(16.0) +/// ``` +/// +/// ```gleam +/// > power(-1.0, 0.5) +/// Error(Nil) +/// ``` +/// +pub fn power(base: Float, of exponent: Float) -> Result(Float, Nil) { + let fractional: Bool = ceiling(exponent) -. exponent >. 0.0 + // In the following check: + // 1. If the base is negative and the exponent is fractional then + // return an error as it will otherwise be an imaginary number + // 2. If the base is 0 and the exponent is negative then the expression + // is equivalent to the exponent divided by 0 and an error should be + // returned + case base <. 0.0 && fractional || base == 0.0 && exponent <. 0.0 { + True -> Error(Nil) + False -> Ok(do_power(base, exponent)) + } +} + +@external(erlang, "math", "pow") +@external(javascript, "../gleam_stdlib.mjs", "power") +fn do_power(a: Float, b: Float) -> Float + +/// Returns the square root of the input as a `Float`. +/// +/// ## Examples +/// +/// ```gleam +/// > square_root(4.0) +/// Ok(2.0) +/// ``` +/// +/// ```gleam +/// > square_root(-16.0) +/// Error(Nil) +/// ``` +/// +pub fn square_root(x: Float) -> Result(Float, Nil) { + power(x, 0.5) +} + +/// Returns the negative of the value provided. +/// +/// ## Examples +/// +/// ```gleam +/// > negate(1.0) +/// -1.0 +/// ``` +/// +pub fn negate(x: Float) -> Float { + -1.0 *. x +} + +/// Sums a list of `Float`s. +/// +/// ## Example +/// +/// ```gleam +/// > sum([1.0, 2.2, 3.3]) +/// 6.5 +/// ``` +/// +pub fn sum(numbers: List(Float)) -> Float { + numbers + |> do_sum(0.0) +} + +fn do_sum(numbers: List(Float), initial: Float) -> Float { + case numbers { + [] -> initial + [x, ..rest] -> do_sum(rest, x +. initial) + } +} + +/// Multiplies a list of `Float`s and returns the product. +/// +/// ## Example +/// +/// ```gleam +/// > product([2.5, 3.2, 4.2]) +/// 33.6 +/// ``` +/// +pub fn product(numbers: List(Float)) -> Float { + case numbers { + [] -> 1.0 + _ -> do_product(numbers, 1.0) + } +} + +fn do_product(numbers: List(Float), initial: Float) -> Float { + case numbers { + [] -> initial + [x, ..rest] -> do_product(rest, x *. initial) + } +} + +/// Generates a random float between the given minimum and maximum values. +/// +/// +/// ## Examples +/// +/// ```gleam +/// > random(1.0, 5.0) +/// 2.646355926896028 +/// ``` +/// +pub fn random(min: Float, max: Float) -> Float { + do_random_uniform() *. { max -. min } +. min +} + +/// Returns a random float uniformly distributed in the value range +/// 0.0 =< X < 1.0 and updates the state in the process dictionary. +/// See: <https://www.erlang.org/doc/man/rand.html#uniform-0> +/// +@external(erlang, "rand", "uniform") +@external(javascript, "../gleam_stdlib.mjs", "random_uniform") +fn do_random_uniform() -> Float + +/// Returns division of the inputs as a `Result`. +/// +/// ## Examples +/// +/// ```gleam +/// > divide(0.0, 1.0) +/// Ok(1.0) +/// ``` +/// +/// ```gleam +/// > divide(1.0, 0.0) +/// Error(Nil) +/// ``` +/// +pub fn divide(a: Float, by b: Float) -> Result(Float, Nil) { + case b { + 0.0 -> Error(Nil) + b -> Ok(a /. b) + } +} + +/// Adds two floats together. +/// +/// It's the function equivalent of the `+.` operator. +/// This function is useful in higher order functions or pipes. +/// +/// ## Examples +/// +/// ```gleam +/// > add(1.0, 2.0) +/// 3.0 +/// ``` +/// +/// ```gleam +/// > import gleam/list +/// > list.fold([1.0, 2.0, 3.0], 0.0, add) +/// 6.0 +/// ``` +/// +/// ```gleam +/// > 3.0 |> add(2.0) +/// 5.0 +/// ``` +/// +pub fn add(a: Float, b: Float) -> Float { + a +. b +} + +/// Multiplies two floats together. +/// +/// It's the function equivalent of the `*.` operator. +/// This function is useful in higher order functions or pipes. +/// +/// ## Examples +/// +/// ```gleam +/// > multiply(2.0, 4.0) +/// 8.0 +/// ``` +/// +/// ```gleam +/// import gleam/list +/// > list.fold([2.0, 3.0, 4.0], 1.0, multiply) +/// 24.0 +/// ``` +/// +/// ```gleam +/// > 3.0 |> multiply(2.0) +/// 6.0 +/// ``` +/// +pub fn multiply(a: Float, b: Float) -> Float { + a *. b +} + +/// Subtracts one float from another. +/// +/// It's the function equivalent of the `-.` operator. +/// This function is useful in higher order functions or pipes. +/// +/// ## Examples +/// +/// ```gleam +/// > subtract(3.0, 1.0) +/// 2.0 +/// ``` +/// +/// ```gleam +/// > import gleam/list +/// > list.fold([1.0, 2.0, 3.0], 10.0, subtract) +/// 4.0 +/// ``` +/// +/// ```gleam +/// > 3.0 |> subtract(_, 2.0) +/// 1.0 +/// ``` +/// +/// ```gleam +/// > 3.0 |> subtract(2.0, _) +/// -1.0 +/// ``` +/// +pub fn subtract(a: Float, b: Float) -> Float { + a -. b +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/function.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/function.gleam new file mode 100644 index 0000000..daa997d --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/function.gleam @@ -0,0 +1,162 @@ +/// Takes two functions and chains them together to form one function that +/// takes the input from the first and returns the output of the second. +/// +pub fn compose(fun1: fn(a) -> b, fun2: fn(b) -> c) -> fn(a) -> c { + fn(a) { fun2(fun1(a)) } +} + +/// Takes a function with `2` arguments (an arity of `2`), and returns the +/// curried equivalent. +/// +/// `fn(a, b) -> c` becomes `fn(a) -> fn(b) -> c`. +/// +/// ## Examples +/// +/// *Currying* creates a new function that is identical to the given function +/// except that arguments must now be supplied one by one over several function +/// calls. It thus is the process of taking a function with `n` arguments +/// and producing a sequence of `n` single-argument functions. Given: +/// +/// ```gleam +/// > fn my_fun(i: Int, s: String) -> String { ... } +/// ``` +/// +/// …calling `curry2(my_fun)` would return the curried equivalent, like so: +/// +/// ```gleam +/// > curry2(my_fun) +/// fn(Int) -> fn(String) -> String +/// ``` +/// +/// Currying is useful when you want to partially apply a function with +/// some arguments and then pass it somewhere else, for example: +/// +/// ```gleam +/// > import gleam/list +/// > let multiply = curry2(fn(x, y) { x * y }) +/// > let doubles = list.map([1, 2, 3], multiply(2)) +/// [2, 4, 6] +/// ``` +/// +pub fn curry2(fun: fn(a, b) -> value) { + fn(a) { fn(b) { fun(a, b) } } +} + +/// Takes a function with `3` arguments (an arity of `3`), and returns the +/// curried equivalent. +/// +/// `fn(a, b, c) -> d` becomes `fn(a) -> fn(b) -> fn(c) -> d`. +/// +/// See [`curry2`](#curry2) for a detailed explanation. +/// +pub fn curry3(fun: fn(a, b, c) -> value) { + fn(a) { fn(b) { fn(c) { fun(a, b, c) } } } +} + +/// Takes a function with `4` arguments (an arity of `4`), and returns the +/// curried equivalent. +/// +/// `fn(a, b, c, d) -> e` becomes `fn(a) -> fn(b) -> fn(c) -> fn(d) -> e`. +/// +/// See [`curry2`](#curry2) for a detailed explanation. +/// +pub fn curry4(fun: fn(a, b, c, d) -> value) { + fn(a) { fn(b) { fn(c) { fn(d) { fun(a, b, c, d) } } } } +} + +/// Takes a function with `5` arguments (an arity of `5`), and returns the +/// curried equivalent. +/// +/// `fn(a, b, c, d, e) -> f` becomes +/// `fn(a) -> fn(b) -> fn(c) -> fn(d) -> fn(e) -> f`. +/// +/// See [`curry2`](#curry2) for a detailed explanation. +/// +pub fn curry5(fun: fn(a, b, c, d, e) -> value) { + fn(a) { fn(b) { fn(c) { fn(d) { fn(e) { fun(a, b, c, d, e) } } } } } +} + +/// Takes a function with `6` arguments (an arity of `6`), and returns the +/// curried equivalent. +/// +/// `fn(a, b, c, d, e, f) -> g` becomes +/// `fn(a) -> fn(b) -> fn(c) -> fn(d) -> fn(e) -> fn(f) -> g`. +/// +/// See [`curry2`](#curry2) for a detailed explanation. +/// +pub fn curry6(fun: fn(a, b, c, d, e, f) -> value) { + fn(a) { + fn(b) { fn(c) { fn(d) { fn(e) { fn(f) { fun(a, b, c, d, e, f) } } } } } + } +} + +/// Takes a function that takes two arguments and returns a new function that +/// takes the same two arguments, but in reverse order. +/// +pub fn flip(fun: fn(a, b) -> c) -> fn(b, a) -> c { + fn(b, a) { fun(a, b) } +} + +/// Takes a single argument and always returns its input value. +/// +pub fn identity(x: a) -> a { + x +} + +/// Takes a single argument and returns a new function that +/// ignores its argument and always returns the input value. +/// +pub fn constant(value: a) -> fn(b) -> a { + fn(_) { value } +} + +/// Takes an argument and a single function, +/// calls that function with that argument +/// and returns that argument instead of the function return value. +/// Useful for running synchronous side effects in a pipeline. +/// +pub fn tap(arg: a, effect: fn(a) -> b) -> a { + effect(arg) + arg +} + +/// Takes a function with arity one and an argument, +/// calls that function with the argument and returns the function return value. +/// +/// Useful for concisely calling functions returned as a part of a pipeline. +/// +/// ## Example +/// +/// ```gleam +/// > let doubler = fn() { +/// > fn(x: Int) { x * 2 } +/// > } +/// > +/// > doubler() +/// > |> apply1(2) +/// 4 +/// ``` +/// +pub fn apply1(fun: fn(a) -> value, arg1: a) -> value { + fun(arg1) +} + +/// Takes a function with arity two and two arguments, +/// calls that function with the arguments +/// and returns the function return value. +/// +/// See [`apply1`](#apply1) for more details. +/// +pub fn apply2(fun: fn(a, b) -> value, arg1: a, arg2: b) -> value { + fun(arg1, arg2) +} + +/// Takes a function with arity three and three arguments, +/// calls that function with the arguments +/// and returns the function return value. +/// +/// See [`apply1`](#apply1) for more details. +/// +pub fn apply3(fun: fn(a, b, c) -> value, arg1: a, arg2: b, arg3: c) -> value { + fun(arg1, arg2, arg3) +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/int.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/int.gleam new file mode 100644 index 0000000..d93c16a --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/int.gleam @@ -0,0 +1,874 @@ +//// Functions for working with integers. +//// +//// ## Division by zero +//// +//// In Erlang division by zero results in a crash, however Gleam does not have +//// partial functions and operators in core so instead division by zero returns +//// zero, a behaviour taken from Pony, Coq, and Lean. +//// +//// This may seem unexpected at first, but it is no less mathematically valid +//// than crashing or returning a special value. Division by zero is undefined +//// in mathematics. + +import gleam/float +import gleam/order.{type Order} + +/// Returns the absolute value of the input. +/// +/// ## Examples +/// +/// ```gleam +/// > absolute_value(-12) +/// 12 +/// ``` +/// +/// ```gleam +/// > absolute_value(10) +/// 10 +/// ``` +/// +pub fn absolute_value(x: Int) -> Int { + case x >= 0 { + True -> x + False -> x * -1 + } +} + +/// Returns the results of the base being raised to the power of the +/// exponent, as a `Float`. +/// +/// ## Examples +/// +/// ```gleam +/// > power(2, -1.0) +/// Ok(0.5) +/// ``` +/// +/// ```gleam +/// > power(2, 2.0) +/// Ok(4.0) +/// ``` +/// +/// ```gleam +/// > power(8, 1.5) +/// Ok(22.627416997969522) +/// ``` +/// +/// ```gleam +/// > 4 |> power(of: 2.0) +/// Ok(16.0) +/// ``` +/// +/// ```gleam +/// > power(-1, 0.5) +/// Error(Nil) +/// ``` +/// +pub fn power(base: Int, of exponent: Float) -> Result(Float, Nil) { + base + |> to_float() + |> float.power(exponent) +} + +/// Returns the square root of the input as a `Float`. +/// +/// ## Examples +/// +/// ```gleam +/// > square_root(4) +/// Ok(2.0) +/// ``` +/// +/// ```gleam +/// > square_root(-16) +/// Error(Nil) +/// ``` +/// +pub fn square_root(x: Int) -> Result(Float, Nil) { + x + |> to_float() + |> float.square_root() +} + +/// Parses a given string as an int if possible. +/// +/// ## Examples +/// +/// ```gleam +/// > parse("2") +/// Ok(2) +/// ``` +/// +/// ```gleam +/// > parse("ABC") +/// Error(Nil) +/// ``` +/// +pub fn parse(string: String) -> Result(Int, Nil) { + do_parse(string) +} + +@external(erlang, "gleam_stdlib", "parse_int") +@external(javascript, "../gleam_stdlib.mjs", "parse_int") +fn do_parse(a: String) -> Result(Int, Nil) + +/// Parses a given string as an int in a given base if possible. +/// Supports only bases 2 to 36, for values outside of which this function returns an `Error(Nil)`. +/// +/// ## Examples +/// +/// ```gleam +/// > base_parse("10", 2) +/// Ok(2) +/// +/// > base_parse("30", 16) +/// Ok(48) +/// +/// > base_parse("1C", 36) +/// Ok(48) +/// +/// > base_parse("48", 1) +/// Error(Nil) +/// +/// > base_parse("48", 37) +/// Error(Nil) +/// ``` +/// +pub fn base_parse(string: String, base: Int) -> Result(Int, Nil) { + case base >= 2 && base <= 36 { + True -> do_base_parse(string, base) + False -> Error(Nil) + } +} + +@external(erlang, "gleam_stdlib", "int_from_base_string") +@external(javascript, "../gleam_stdlib.mjs", "int_from_base_string") +fn do_base_parse(a: String, b: Int) -> Result(Int, Nil) + +/// Prints a given int to a string. +/// +/// ## Examples +/// +/// ```gleam +/// > to_string(2) +/// "2" +/// ``` +/// +pub fn to_string(x: Int) { + do_to_string(x) +} + +@external(erlang, "erlang", "integer_to_binary") +@external(javascript, "../gleam_stdlib.mjs", "to_string") +fn do_to_string(a: Int) -> String + +/// Error value when trying to operate with a base out of the allowed range. +/// +pub type InvalidBase { + InvalidBase +} + +/// Prints a given int to a string using the base number provided. +/// Supports only bases 2 to 36, for values outside of which this function returns an `Error(InvalidBase)`. +/// For common bases (2, 8, 16, 36), use the `to_baseN` functions. +/// +/// ## Examples +/// +/// ```gleam +/// > to_base_string(2, 2) +/// Ok("10") +/// ``` +/// +/// ```gleam +/// > to_base_string(48, 16) +/// Ok("30") +/// ``` +/// +/// ```gleam +/// > to_base_string(48, 36) +/// Ok("1C") +/// ``` +/// +/// ```gleam +/// > to_base_string(48, 1) +/// Error(InvalidBase) +/// ``` +/// +/// ```gleam +/// > to_base_string(48, 37) +/// Error(InvalidBase) +/// ``` +/// +pub fn to_base_string(x: Int, base: Int) -> Result(String, InvalidBase) { + case base >= 2 && base <= 36 { + True -> Ok(do_to_base_string(x, base)) + False -> Error(InvalidBase) + } +} + +@external(erlang, "erlang", "integer_to_binary") +@external(javascript, "../gleam_stdlib.mjs", "int_to_base_string") +fn do_to_base_string(a: Int, b: Int) -> String + +/// Prints a given int to a string using base-2. +/// +/// ## Examples +/// +/// ```gleam +/// > to_base2(2) +/// "10" +/// ``` +/// +pub fn to_base2(x: Int) -> String { + do_to_base_string(x, 2) +} + +/// Prints a given int to a string using base-8. +/// +/// ## Examples +/// +/// ```gleam +/// > to_base8(15) +/// "17" +/// ``` +/// +pub fn to_base8(x: Int) -> String { + do_to_base_string(x, 8) +} + +/// Prints a given int to a string using base-16. +/// +/// ## Examples +/// +/// ```gleam +/// > to_base16(48) +/// "30" +/// ``` +/// +pub fn to_base16(x: Int) -> String { + do_to_base_string(x, 16) +} + +/// Prints a given int to a string using base-36. +/// +/// ## Examples +/// +/// ```gleam +/// > to_base36(48) +/// "1C" +/// ``` +/// +pub fn to_base36(x: Int) -> String { + do_to_base_string(x, 36) +} + +/// Takes an int and returns its value as a float. +/// +/// ## Examples +/// +/// ```gleam +/// > to_float(5) +/// 5.0 +/// ``` +/// +/// ```gleam +/// > to_float(0) +/// 0.0 +/// ``` +/// +/// ```gleam +/// > to_float(-3) +/// -3.0 +/// ``` +/// +pub fn to_float(x: Int) -> Float { + do_to_float(x) +} + +@external(erlang, "erlang", "float") +@external(javascript, "../gleam_stdlib.mjs", "identity") +fn do_to_float(a: Int) -> Float + +/// Restricts an int between a lower and upper bound. +/// +/// ## Examples +/// +/// ```gleam +/// > clamp(40, min: 50, max: 60) +/// 50 +/// ``` +/// +pub fn clamp(x: Int, min min_bound: Int, max max_bound: Int) -> Int { + x + |> min(max_bound) + |> max(min_bound) +} + +/// Compares two ints, returning an order. +/// +/// ## Examples +/// +/// ```gleam +/// > compare(2, 3) +/// Lt +/// ``` +/// +/// ```gleam +/// > compare(4, 3) +/// Gt +/// ``` +/// +/// ```gleam +/// > compare(3, 3) +/// Eq +/// ``` +/// +pub fn compare(a: Int, with b: Int) -> Order { + case a == b { + True -> order.Eq + False -> + case a < b { + True -> order.Lt + False -> order.Gt + } + } +} + +/// Compares two ints, returning the smaller of the two. +/// +/// ## Examples +/// +/// ```gleam +/// > min(2, 3) +/// 2 +/// ``` +/// +pub fn min(a: Int, b: Int) -> Int { + case a < b { + True -> a + False -> b + } +} + +/// Compares two ints, returning the larger of the two. +/// +/// ## Examples +/// +/// ```gleam +/// > max(2, 3) +/// 3 +/// ``` +/// +pub fn max(a: Int, b: Int) -> Int { + case a > b { + True -> a + False -> b + } +} + +/// Returns whether the value provided is even. +/// +/// ## Examples +/// +/// ```gleam +/// > is_even(2) +/// True +/// ``` +/// +/// ```gleam +/// > is_even(3) +/// False +/// ``` +/// +pub fn is_even(x: Int) -> Bool { + x % 2 == 0 +} + +/// Returns whether the value provided is odd. +/// +/// ## Examples +/// +/// ```gleam +/// > is_odd(3) +/// True +/// ``` +/// +/// ```gleam +/// > is_odd(2) +/// False +/// ``` +/// +pub fn is_odd(x: Int) -> Bool { + x % 2 != 0 +} + +/// Returns the negative of the value provided. +/// +/// ## Examples +/// +/// ```gleam +/// > negate(1) +/// -1 +/// ``` +/// +pub fn negate(x: Int) -> Int { + -1 * x +} + +/// Sums a list of ints. +/// +/// ## Example +/// +/// ```gleam +/// > sum([1, 2, 3]) +/// 6 +/// ``` +/// +pub fn sum(numbers: List(Int)) -> Int { + numbers + |> do_sum(0) +} + +fn do_sum(numbers: List(Int), initial: Int) -> Int { + case numbers { + [] -> initial + [x, ..rest] -> do_sum(rest, x + initial) + } +} + +/// Multiplies a list of ints and returns the product. +/// +/// ## Example +/// +/// ```gleam +/// > product([2, 3, 4]) +/// 24 +/// ``` +/// +pub fn product(numbers: List(Int)) -> Int { + case numbers { + [] -> 1 + _ -> do_product(numbers, 1) + } +} + +fn do_product(numbers: List(Int), initial: Int) -> Int { + case numbers { + [] -> initial + [x, ..rest] -> do_product(rest, x * initial) + } +} + +/// Splits an integer into its digit representation in the specified base +/// +/// ## Examples +/// +/// ```gleam +/// > digits(234, 10) +/// Ok([2,3,4]) +/// ``` +/// +/// ```gleam +/// > digits(234, 1) +/// Error(InvalidBase) +/// ``` +/// +pub fn digits(x: Int, base: Int) -> Result(List(Int), InvalidBase) { + case base < 2 { + True -> Error(InvalidBase) + False -> Ok(do_digits(x, base, [])) + } +} + +fn do_digits(x: Int, base: Int, acc: List(Int)) -> List(Int) { + case absolute_value(x) < base { + True -> [x, ..acc] + False -> do_digits(x / base, base, [x % base, ..acc]) + } +} + +/// Joins a list of digits into a single value. +/// Returns an error if the base is less than 2 or if the list contains a digit greater than or equal to the specified base. +/// +/// ## Examples +/// +/// ```gleam +/// > undigits([2,3,4], 10) +/// Ok(234) +/// ``` +/// +/// ```gleam +/// > undigits([2,3,4], 1) +/// Error(InvalidBase) +/// ``` +/// +/// ```gleam +/// > undigits([2,3,4], 2) +/// Error(InvalidBase) +/// ``` +/// +pub fn undigits(numbers: List(Int), base: Int) -> Result(Int, InvalidBase) { + case base < 2 { + True -> Error(InvalidBase) + False -> do_undigits(numbers, base, 0) + } +} + +fn do_undigits( + numbers: List(Int), + base: Int, + acc: Int, +) -> Result(Int, InvalidBase) { + case numbers { + [] -> Ok(acc) + [digit, ..] if digit >= base -> Error(InvalidBase) + [digit, ..rest] -> do_undigits(rest, base, acc * base + digit) + } +} + +/// Generates a random int between the given minimum and maximum values. +/// +/// ## Examples +/// +/// ```gleam +/// > random(1, 5) +/// 2 +/// ``` +/// +pub fn random(min: Int, max: Int) -> Int { + float.random(to_float(min), to_float(max)) + |> float.floor() + |> float.round() +} + +/// Performs a truncated integer division. +/// +/// Returns division of the inputs as a `Result`: If the given divisor equals +/// `0`, this function returns an `Error`. +/// +/// ## Examples +/// +/// ```gleam +/// > divide(0, 1) +/// Ok(1) +/// ``` +/// +/// ```gleam +/// > divide(1, 0) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > divide(5, 2) +/// Ok(2) +/// ``` +/// +/// ```gleam +/// > divide(-99, 2) +/// Ok(-49) +/// ``` +/// +pub fn divide(dividend: Int, by divisor: Int) -> Result(Int, Nil) { + case divisor { + 0 -> Error(Nil) + divisor -> Ok(dividend / divisor) + } +} + +/// Computes the remainder of an integer division of inputs as a `Result`. +/// +/// Returns division of the inputs as a `Result`: If the given divisor equals +/// `0`, this function returns an `Error`. +/// +/// Most the time you will want to use the `%` operator instead of this +/// function. +/// +/// ## Examples +/// +/// ```gleam +/// > remainder(3, 2) +/// Ok(1) +/// ``` +/// +/// ```gleam +/// > remainder(1, 0) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > remainder(10, -1) +/// Ok(0) +/// ``` +/// +/// ```gleam +/// > remainder(13, by: 3) +/// Ok(1) +/// ``` +/// +/// ```gleam +/// > remainder(-13, by: 3) +/// Ok(-1) +/// ``` +/// +/// ```gleam +/// > remainder(13, by: -3) +/// Ok(1) +/// ``` +/// +/// ```gleam +/// > remainder(-13, by: -3) +/// Ok(-1) +/// ``` +/// +pub fn remainder(dividend: Int, by divisor: Int) -> Result(Int, Nil) { + case divisor { + 0 -> Error(Nil) + divisor -> Ok(dividend % divisor) + } +} + +/// Computes the modulo of an integer division of inputs as a `Result`. +/// +/// Returns division of the inputs as a `Result`: If the given divisor equals +/// `0`, this function returns an `Error`. +/// +/// Most the time you will want to use the `%` operator instead of this +/// function. +/// +/// ## Examples +/// +/// ```gleam +/// > modulo(3, 2) +/// Ok(1) +/// ``` +/// +/// ```gleam +/// > modulo(1, 0) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > modulo(10, -1) +/// Ok(0) +/// ``` +/// +/// ```gleam +/// > modulo(13, by: 3) +/// Ok(1) +/// ``` +/// +/// ```gleam +/// > modulo(-13, by: 3) +/// Ok(2) +/// ``` +/// +/// ```gleam +/// > modulo(13, by: -3) +/// Ok(-2) +/// ``` +/// +/// ```gleam +/// > modulo(-13, by: -3) +/// Ok(-1) +/// ``` +/// +pub fn modulo(dividend: Int, by divisor: Int) -> Result(Int, Nil) { + case divisor { + 0 -> Error(Nil) + _ -> { + let remainder = dividend % divisor + case remainder * divisor < 0 { + True -> Ok(remainder + divisor) + False -> Ok(remainder) + } + } + } +} + +/// Performs a *floored* integer division, which means that the result will +/// always be rounded towards negative infinity. +/// +/// If you want to perform truncated integer division (rounding towards zero), +/// use `int.divide()` or the `/` operator instead. +/// +/// Returns division of the inputs as a `Result`: If the given divisor equals +/// `0`, this function returns an `Error`. +/// +/// ## Examples +/// +/// ```gleam +/// > floor_divide(1, 0) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > floor_divide(5, 2) +/// Ok(2) +/// ``` +/// +/// ```gleam +/// > floor_divide(6, -4) +/// Ok(-2) +/// ``` +/// +/// ```gleam +/// > floor_divide(-99, 2) +/// Ok(-50) +/// ``` +/// +pub fn floor_divide(dividend: Int, by divisor: Int) -> Result(Int, Nil) { + case divisor { + 0 -> Error(Nil) + divisor -> + case dividend * divisor < 0 && dividend % divisor != 0 { + True -> Ok(dividend / divisor - 1) + False -> Ok(dividend / divisor) + } + } +} + +/// Adds two integers together. +/// +/// It's the function equivalent of the `+` operator. +/// This function is useful in higher order functions or pipes. +/// +/// ## Examples +/// +/// ```gleam +/// > add(1, 2) +/// 3 +/// ``` +/// +/// ```gleam +/// import gleam/list +/// > list.fold([1, 2, 3], 0, add) +/// 6 +/// ``` +/// +/// ```gleam +/// > 3 |> add(2) +/// 5 +/// ``` +/// +pub fn add(a: Int, b: Int) -> Int { + a + b +} + +/// Multiplies two integers together. +/// +/// It's the function equivalent of the `*` operator. +/// This function is useful in higher order functions or pipes. +/// +/// ## Examples +/// +/// ```gleam +/// > multiply(2, 4) +/// 8 +/// ``` +/// +/// ```gleam +/// import gleam/list +/// > list.fold([2, 3, 4], 1, multiply) +/// 24 +/// ``` +/// +/// ```gleam +/// > 3 |> multiply(2) +/// 6 +/// ``` +/// +pub fn multiply(a: Int, b: Int) -> Int { + a * b +} + +/// Subtracts one int from another. +/// +/// It's the function equivalent of the `-` operator. +/// This function is useful in higher order functions or pipes. +/// +/// ## Examples +/// +/// ```gleam +/// > subtract(3, 1) +/// 2.0 +/// ``` +/// +/// ```gleam +/// import gleam/list +/// > list.fold([1, 2, 3], 10, subtract) +/// 4 +/// ``` +/// +/// ```gleam +/// > 3 |> subtract(2) +/// 1 +/// ``` +/// +/// ```gleam +/// > 3 |> subtract(2, _) +/// -1 +/// ``` +/// +pub fn subtract(a: Int, b: Int) -> Int { + a - b +} + +/// Calculates the bitwise AND of its arguments. +/// +/// The exact behaviour of this function depends on the target platform. +/// On Erlang it is equivalent to bitwise operations on ints, on JavaScript it +/// is equivalent to bitwise operations on big-ints. +/// +@external(erlang, "erlang", "band") +@external(javascript, "../gleam_stdlib.mjs", "bitwise_and") +pub fn bitwise_and(x: Int, y: Int) -> Int + +/// Calculates the bitwise NOT of its argument. +/// +/// The exact behaviour of this function depends on the target platform. +/// On Erlang it is equivalent to bitwise operations on ints, on JavaScript it +/// is equivalent to bitwise operations on big-ints. +/// +@external(erlang, "erlang", "bnot") +@external(javascript, "../gleam_stdlib.mjs", "bitwise_not") +pub fn bitwise_not(x: Int) -> Int + +/// Calculates the bitwise OR of its arguments. +/// +/// The exact behaviour of this function depends on the target platform. +/// On Erlang it is equivalent to bitwise operations on ints, on JavaScript it +/// is equivalent to bitwise operations on big-ints. +/// +@external(erlang, "erlang", "bor") +@external(javascript, "../gleam_stdlib.mjs", "bitwise_or") +pub fn bitwise_or(x: Int, y: Int) -> Int + +/// Calculates the bitwise XOR of its arguments. +/// +/// The exact behaviour of this function depends on the target platform. +/// On Erlang it is equivalent to bitwise operations on ints, on JavaScript it +/// is equivalent to bitwise operations on big-ints. +/// +@external(erlang, "erlang", "bxor") +@external(javascript, "../gleam_stdlib.mjs", "bitwise_exclusive_or") +pub fn bitwise_exclusive_or(x: Int, y: Int) -> Int + +/// Calculates the result of an arithmetic left bitshift. +/// +/// The exact behaviour of this function depends on the target platform. +/// On Erlang it is equivalent to bitwise operations on ints, on JavaScript it +/// is equivalent to bitwise operations on big-ints. +/// +@external(erlang, "erlang", "bsl") +@external(javascript, "../gleam_stdlib.mjs", "bitwise_shift_left") +pub fn bitwise_shift_left(x: Int, y: Int) -> Int + +/// Calculates the result of an arithmetic right bitshift. +/// +/// The exact behaviour of this function depends on the target platform. +/// On Erlang it is equivalent to bitwise operations on ints, on JavaScript it +/// is equivalent to bitwise operations on big-ints. +/// +@external(erlang, "erlang", "bsr") +@external(javascript, "../gleam_stdlib.mjs", "bitwise_shift_right") +pub fn bitwise_shift_right(x: Int, y: Int) -> Int diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/io.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/io.gleam new file mode 100644 index 0000000..0c0a3ee --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/io.gleam @@ -0,0 +1,117 @@ +import gleam/string + +/// Writes a string to standard output. +/// +/// If you want your output to be printed on its own line see `println`. +/// +/// ## Example +/// +/// ```gleam +/// > io.print("Hi mum") +/// // -> Hi mum +/// Nil +/// ``` +/// +pub fn print(string: String) -> Nil { + do_print(string) +} + +@external(erlang, "gleam_stdlib", "print") +@external(javascript, "../gleam_stdlib.mjs", "print") +fn do_print(string string: String) -> Nil + +/// Writes a string to standard error. +/// +/// If you want your output to be printed on its own line see `println_error`. +/// +/// ## Example +/// +/// ``` +/// > io.print_error("Hi pop") +/// // -> Hi pop +/// Nil +/// ``` +/// +pub fn print_error(string: String) -> Nil { + do_print_error(string) +} + +@external(erlang, "gleam_stdlib", "print_error") +@external(javascript, "../gleam_stdlib.mjs", "print_error") +fn do_print_error(string string: String) -> Nil + +/// Writes a string to standard output, appending a newline to the end. +/// +/// ## Example +/// +/// ```gleam +/// > io.println("Hi mum") +/// // -> Hi mum +/// Nil +/// ``` +/// +pub fn println(string: String) -> Nil { + do_println(string) +} + +@external(erlang, "gleam_stdlib", "println") +@external(javascript, "../gleam_stdlib.mjs", "console_log") +fn do_println(string string: String) -> Nil + +/// Writes a string to standard error, appending a newline to the end. +/// +/// ## Example +/// +/// ```gleam +/// > io.println_error("Hi pop") +/// // -> Hi mum +/// Nil +/// ``` +/// +pub fn println_error(string: String) -> Nil { + do_println_error(string) +} + +@external(erlang, "gleam_stdlib", "println_error") +@external(javascript, "../gleam_stdlib.mjs", "console_error") +fn do_println_error(string string: String) -> Nil + +/// Prints a value to standard error (stderr) yielding Gleam syntax. +/// +/// The value is returned after being printed so it can be used in pipelines. +/// +/// ## Example +/// +/// ```gleam +/// > debug("Hi mum") +/// // -> <<"Hi mum">> +/// "Hi mum" +/// ``` +/// +/// ```gleam +/// > debug(Ok(1)) +/// // -> {ok, 1} +/// Ok(1) +/// ``` +/// +/// ```gleam +/// > import list +/// > [1, 2] +/// > |> list.map(fn(x) { x + 1 }) +/// > |> debug +/// > |> list.map(fn(x) { x * 2 }) +/// // -> [2, 3] +/// [4, 6] +/// ``` +/// +pub fn debug(term: anything) -> anything { + term + |> string.inspect + |> do_debug_println + + term +} + +@external(erlang, "gleam_stdlib", "println_error") +@external(javascript, "../gleam_stdlib.mjs", "print_debug") +fn do_debug_println(string string: String) -> Nil diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/iterator.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/iterator.gleam new file mode 100644 index 0000000..c57e7fd --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/iterator.gleam @@ -0,0 +1,1530 @@ +import gleam/result +import gleam/int +import gleam/list +import gleam/dict.{type Dict} +import gleam/option.{type Option, None, Some} +import gleam/order + +// Internal private representation of an Iterator +type Action(element) { + // Dedicated to Electric Six + // https://youtu.be/_30t2dzEgiw?t=162 + Stop + Continue(element, fn() -> Action(element)) +} + +/// An iterator is a lazily evaluated sequence of element. +/// +/// Iterators are useful when working with collections that are too large to +/// fit in memory (or those that are infinite in size) as they only require the +/// elements currently being processed to be in memory. +/// +/// As a lazy data structure no work is done when an iterator is filters, +/// mapped, etc, instead a new iterator is returned with these transformations +/// applied to the stream. Once the stream has all the required transformations +/// applied it can be evaluated using functions such as `fold` and `to_list`. +/// +pub opaque type Iterator(element) { + Iterator(continuation: fn() -> Action(element)) +} + +// Public API for iteration +pub type Step(element, accumulator) { + Next(element: element, accumulator: accumulator) + Done +} + +// Shortcut for an empty iterator. +fn stop() -> Action(element) { + Stop +} + +// Creating Iterators +fn do_unfold( + initial: acc, + f: fn(acc) -> Step(element, acc), +) -> fn() -> Action(element) { + fn() { + case f(initial) { + Next(x, acc) -> Continue(x, do_unfold(acc, f)) + Done -> Stop + } + } +} + +/// Creates an iterator from a given function and accumulator. +/// +/// The function is called on the accumulator and returns either `Done`, +/// indicating the iterator has no more elements, or `Next` which contains a +/// new element and accumulator. The element is yielded by the iterator and the +/// new accumulator is used with the function to compute the next element in +/// the sequence. +/// +/// ## Examples +/// +/// ```gleam +/// > unfold(from: 5, with: fn(n) { +/// > case n { +/// > 0 -> Done +/// > n -> Next(element: n, accumulator: n - 1) +/// > } +/// > }) +/// > |> to_list +/// [5, 4, 3, 2, 1] +/// ``` +/// +pub fn unfold( + from initial: acc, + with f: fn(acc) -> Step(element, acc), +) -> Iterator(element) { + initial + |> do_unfold(f) + |> Iterator +} + +// TODO: test +/// Creates an iterator that yields values created by calling a given function +/// repeatedly. +/// +pub fn repeatedly(f: fn() -> element) -> Iterator(element) { + unfold(Nil, fn(_) { Next(f(), Nil) }) +} + +/// Creates an iterator that returns the same value infinitely. +/// +/// ## Examples +/// +/// ```gleam +/// > repeat(10) +/// > |> take(4) +/// > |> to_list +/// [10, 10, 10, 10] +/// ``` +/// +pub fn repeat(x: element) -> Iterator(element) { + repeatedly(fn() { x }) +} + +/// Creates an iterator that yields each element from the given list. +/// +/// ## Examples +/// +/// ```gleam +/// > from_list([1, 2, 3, 4]) +/// > |> to_list +/// [1, 2, 3, 4] +/// ``` +/// +pub fn from_list(list: List(element)) -> Iterator(element) { + let yield = fn(acc) { + case acc { + [] -> Done + [head, ..tail] -> Next(head, tail) + } + } + unfold(list, yield) +} + +// Consuming Iterators +fn do_transform( + continuation: fn() -> Action(a), + state: acc, + f: fn(acc, a) -> Step(b, acc), +) -> fn() -> Action(b) { + fn() { + case continuation() { + Stop -> Stop + Continue(el, next) -> + case f(state, el) { + Done -> Stop + Next(yield, next_state) -> + Continue(yield, do_transform(next, next_state, f)) + } + } + } +} + +/// Creates an iterator from an existing iterator +/// and a stateful function that may short-circuit. +/// +/// `f` takes arguments `acc` for current state and `el` for current element from underlying iterator, +/// and returns either `Next` with yielded element and new state value, or `Done` to halt the iterator. +/// +/// ## Examples +/// +/// Approximate implementation of `index` in terms of `transform`: +/// +/// ```gleam +/// > from_list(["a", "b", "c"]) +/// > |> transform(0, fn(i, el) { Next(#(i, el), i + 1) }) +/// > |> to_list +/// [#(0, "a"), #(1, "b"), #(2, "c")] +/// ``` +pub fn transform( + over iterator: Iterator(a), + from initial: acc, + with f: fn(acc, a) -> Step(b, acc), +) -> Iterator(b) { + do_transform(iterator.continuation, initial, f) + |> Iterator +} + +fn do_fold( + continuation: fn() -> Action(e), + f: fn(acc, e) -> acc, + accumulator: acc, +) -> acc { + case continuation() { + Continue(elem, next) -> do_fold(next, f, f(accumulator, elem)) + Stop -> accumulator + } +} + +/// Reduces an iterator of elements into a single value by calling a given +/// function on each element in turn. +/// +/// If called on an iterator of infinite length then this function will never +/// return. +/// +/// If you do not care about the end value and only wish to evaluate the +/// iterator for side effects consider using the `run` function instead. +/// +/// ## Examples +/// +/// ```gleam +/// > [1, 2, 3, 4] +/// > |> from_list +/// > |> fold(from: 0, with: fn(acc, element) { element + acc }) +/// 10 +/// ``` +/// +pub fn fold( + over iterator: Iterator(e), + from initial: acc, + with f: fn(acc, e) -> acc, +) -> acc { + iterator.continuation + |> do_fold(f, initial) +} + +// TODO: test +/// Evaluates all elements emitted by the given iterator. This function is useful for when +/// you wish to trigger any side effects that would occur when evaluating +/// the iterator. +/// +pub fn run(iterator: Iterator(e)) -> Nil { + fold(iterator, Nil, fn(_, _) { Nil }) +} + +/// Evaluates an iterator and returns all the elements as a list. +/// +/// If called on an iterator of infinite length then this function will never +/// return. +/// +/// ## Examples +/// +/// ```gleam +/// > [1, 2, 3] +/// > |> from_list +/// > |> map(fn(x) { x * 2 }) +/// > |> to_list +/// [2, 4, 6] +/// ``` +/// +pub fn to_list(iterator: Iterator(element)) -> List(element) { + iterator + |> fold([], fn(acc, e) { [e, ..acc] }) + |> list.reverse +} + +/// Eagerly accesses the first value of an iterator, returning a `Next` +/// that contains the first value and the rest of the iterator. +/// +/// If called on an empty iterator, `Done` is returned. +/// +/// ## Examples +/// +/// ```gleam +/// > let assert Next(first, rest) = [1, 2, 3, 4] +/// > |> from_list +/// > |> step +/// > first +/// 1 +/// ``` +/// +/// ```gleam +/// > rest |> to_list +/// [2, 3, 4] +/// ``` +/// +/// ```gleam +/// > empty() |> step +/// Done +/// ``` +/// +pub fn step(iterator: Iterator(e)) -> Step(e, Iterator(e)) { + case iterator.continuation() { + Stop -> Done + Continue(e, a) -> Next(e, Iterator(a)) + } +} + +fn do_take(continuation: fn() -> Action(e), desired: Int) -> fn() -> Action(e) { + fn() { + case desired > 0 { + False -> Stop + True -> + case continuation() { + Stop -> Stop + Continue(e, next) -> Continue(e, do_take(next, desired - 1)) + } + } + } +} + +/// Creates an iterator that only yields the first `desired` elements. +/// +/// If the iterator does not have enough elements all of them are yielded. +/// +/// ## Examples +/// +/// ```gleam +/// > [1, 2, 3, 4, 5] +/// > |> from_list +/// > |> take(up_to: 3) +/// > |> to_list +/// [1, 2, 3] +/// ``` +/// +/// ```gleam +/// > [1, 2] +/// > |> from_list +/// > |> take(up_to: 3) +/// > |> to_list +/// [1, 2] +/// ``` +/// +pub fn take(from iterator: Iterator(e), up_to desired: Int) -> Iterator(e) { + iterator.continuation + |> do_take(desired) + |> Iterator +} + +fn do_drop(continuation: fn() -> Action(e), desired: Int) -> Action(e) { + case continuation() { + Stop -> Stop + Continue(e, next) -> + case desired > 0 { + True -> do_drop(next, desired - 1) + False -> Continue(e, next) + } + } +} + +/// Evaluates and discards the first N elements in an iterator, returning a new +/// iterator. +/// +/// If the iterator does not have enough elements an empty iterator is +/// returned. +/// +/// This function does not evaluate the elements of the iterator, the +/// computation is performed when the iterator is later run. +/// +/// ## Examples +/// +/// ```gleam +/// > [1, 2, 3, 4, 5] +/// > |> from_list +/// > |> drop(up_to: 3) +/// > |> to_list +/// [4, 5] +/// ``` +/// +/// ```gleam +/// > [1, 2] +/// > |> from_list +/// > |> drop(up_to: 3) +/// > |> to_list +/// [] +/// ``` +/// +pub fn drop(from iterator: Iterator(e), up_to desired: Int) -> Iterator(e) { + fn() { do_drop(iterator.continuation, desired) } + |> Iterator +} + +fn do_map(continuation: fn() -> Action(a), f: fn(a) -> b) -> fn() -> Action(b) { + fn() { + case continuation() { + Stop -> Stop + Continue(e, continuation) -> Continue(f(e), do_map(continuation, f)) + } + } +} + +/// Creates an iterator from an existing iterator and a transformation function. +/// +/// Each element in the new iterator will be the result of calling the given +/// function on the elements in the given iterator. +/// +/// This function does not evaluate the elements of the iterator, the +/// computation is performed when the iterator is later run. +/// +/// ## Examples +/// +/// ```gleam +/// > [1, 2, 3] +/// > |> from_list +/// > |> map(fn(x) { x * 2 }) +/// > |> to_list +/// [2, 4, 6] +/// ``` +/// +pub fn map(over iterator: Iterator(a), with f: fn(a) -> b) -> Iterator(b) { + iterator.continuation + |> do_map(f) + |> Iterator +} + +fn do_map2( + continuation1: fn() -> Action(a), + continuation2: fn() -> Action(b), + with fun: fn(a, b) -> c, +) -> fn() -> Action(c) { + fn() { + case continuation1() { + Stop -> Stop + Continue(a, next_a) -> + case continuation2() { + Stop -> Stop + Continue(b, next_b) -> + Continue(fun(a, b), do_map2(next_a, next_b, fun)) + } + } + } +} + +/// Combines two interators into a single one using the given function. +/// +/// If an iterator is longer than the other the extra elements are dropped. +/// +/// This function does not evaluate the elements of the two iterators, the +/// computation is performed when the resulting iterator is later run. +/// +/// ## Examples +/// +/// ```gleam +/// let first = from_list([1, 2, 3]) +/// let second = from_list([4, 5, 6]) +/// map2(first, second, fn(x, y) { x + y }) |> to_list +/// // -> [5, 7, 9] +/// ``` +/// +/// ```gleam +/// let first = from_list([1, 2]) +/// let second = from_list(["a", "b", "c"]) +/// map2(first, second, fn(i, x) { #(i, x) }) |> to_list +/// // -> [#(1, "a"), #(2, "b")] +/// ``` +/// +pub fn map2( + iterator1: Iterator(a), + iterator2: Iterator(b), + with fun: fn(a, b) -> c, +) -> Iterator(c) { + do_map2(iterator1.continuation, iterator2.continuation, fun) + |> Iterator +} + +fn do_append(first: fn() -> Action(a), second: fn() -> Action(a)) -> Action(a) { + case first() { + Continue(e, first) -> Continue(e, fn() { do_append(first, second) }) + Stop -> second() + } +} + +/// Appends two iterators, producing a new iterator. +/// +/// This function does not evaluate the elements of the iterators, the +/// computation is performed when the resulting iterator is later run. +/// +/// ## Examples +/// +/// ```gleam +/// > [1, 2] +/// > |> from_list +/// > |> append([3, 4] |> from_list) +/// > |> to_list +/// [1, 2, 3, 4] +/// ``` +/// +pub fn append(to first: Iterator(a), suffix second: Iterator(a)) -> Iterator(a) { + fn() { do_append(first.continuation, second.continuation) } + |> Iterator +} + +fn do_flatten(flattened: fn() -> Action(Iterator(a))) -> Action(a) { + case flattened() { + Stop -> Stop + Continue(it, next_iterator) -> + do_append(it.continuation, fn() { do_flatten(next_iterator) }) + } +} + +/// Flattens an iterator of iterators, creating a new iterator. +/// +/// This function does not evaluate the elements of the iterator, the +/// computation is performed when the iterator is later run. +/// +/// ## Examples +/// +/// ```gleam +/// > from_list([[1, 2], [3, 4]]) +/// > |> map(from_list) +/// > |> flatten +/// > |> to_list +/// [1, 2, 3, 4] +/// ``` +/// +pub fn flatten(iterator: Iterator(Iterator(a))) -> Iterator(a) { + fn() { do_flatten(iterator.continuation) } + |> Iterator +} + +/// Joins a list of iterators into a single iterator. +/// +/// This function does not evaluate the elements of the iterator, the +/// computation is performed when the iterator is later run. +/// +/// ## Examples +/// +/// ```gleam +/// > [[1, 2], [3, 4]] +/// > |> map(from_list) +/// > |> concat +/// > |> to_list +/// [1, 2, 3, 4] +/// ``` +/// +pub fn concat(iterators: List(Iterator(a))) -> Iterator(a) { + flatten(from_list(iterators)) +} + +/// Creates an iterator from an existing iterator and a transformation function. +/// +/// Each element in the new iterator will be the result of calling the given +/// function on the elements in the given iterator and then flattening the +/// results. +/// +/// This function does not evaluate the elements of the iterator, the +/// computation is performed when the iterator is later run. +/// +/// ## Examples +/// +/// ```gleam +/// > [1, 2] +/// > |> from_list +/// > |> flat_map(fn(x) { from_list([x, x + 1]) }) +/// > |> to_list +/// [1, 2, 2, 3] +/// ``` +/// +pub fn flat_map( + over iterator: Iterator(a), + with f: fn(a) -> Iterator(b), +) -> Iterator(b) { + iterator + |> map(f) + |> flatten +} + +fn do_filter( + continuation: fn() -> Action(e), + predicate: fn(e) -> Bool, +) -> Action(e) { + case continuation() { + Stop -> Stop + Continue(e, iterator) -> + case predicate(e) { + True -> Continue(e, fn() { do_filter(iterator, predicate) }) + False -> do_filter(iterator, predicate) + } + } +} + +/// Creates an iterator from an existing iterator and a predicate function. +/// +/// The new iterator will contain elements from the first iterator for which +/// the given function returns `True`. +/// +/// This function does not evaluate the elements of the iterator, the +/// computation is performed when the iterator is later run. +/// +/// ## Examples +/// +/// ```gleam +/// > import gleam/int +/// > [1, 2, 3, 4] +/// > |> from_list +/// > |> filter(int.is_even) +/// > |> to_list +/// [2, 4] +/// ``` +/// +pub fn filter( + iterator: Iterator(a), + keeping predicate: fn(a) -> Bool, +) -> Iterator(a) { + fn() { do_filter(iterator.continuation, predicate) } + |> Iterator +} + +/// Creates an iterator that repeats a given iterator infinitely. +/// +/// ## Examples +/// +/// ```gleam +/// > [1, 2] +/// > |> from_list +/// > |> cycle +/// > |> take(6) +/// > |> to_list +/// [1, 2, 1, 2, 1, 2] +/// ``` +/// +pub fn cycle(iterator: Iterator(a)) -> Iterator(a) { + repeat(iterator) + |> flatten +} + +/// Creates an iterator of ints, starting at a given start int and stepping by +/// one to a given end int. +/// +/// ## Examples +/// +/// ```gleam +/// > range(from: 1, to: 5) |> to_list +/// [1, 2, 3, 4, 5] +/// ``` +/// +/// ```gleam +/// > range(from: 1, to: -2) |> to_list +/// [1, 0, -1, -2] +/// ``` +/// +/// ```gleam +/// > range(from: 0, to: 0) |> to_list +/// [0] +/// ``` +/// +pub fn range(from start: Int, to stop: Int) -> Iterator(Int) { + case int.compare(start, stop) { + order.Eq -> once(fn() { start }) + order.Gt -> + unfold( + from: start, + with: fn(current) { + case current < stop { + False -> Next(current, current - 1) + True -> Done + } + }, + ) + + order.Lt -> + unfold( + from: start, + with: fn(current) { + case current > stop { + False -> Next(current, current + 1) + True -> Done + } + }, + ) + } +} + +fn do_find(continuation: fn() -> Action(a), f: fn(a) -> Bool) -> Result(a, Nil) { + case continuation() { + Stop -> Error(Nil) + Continue(e, next) -> + case f(e) { + True -> Ok(e) + False -> do_find(next, f) + } + } +} + +/// Finds the first element in a given iterator for which the given function returns +/// `True`. +/// +/// Returns `Error(Nil)` if the function does not return `True` for any of the +/// elements. +/// +/// ## Examples +/// +/// ```gleam +/// > find(from_list([1, 2, 3]), fn(x) { x > 2 }) +/// Ok(3) +/// ``` +/// +/// ```gleam +/// > find(from_list([1, 2, 3]), fn(x) { x > 4 }) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > find(empty(), fn(_) { True }) +/// Error(Nil) +/// ``` +/// +pub fn find( + in haystack: Iterator(a), + one_that is_desired: fn(a) -> Bool, +) -> Result(a, Nil) { + haystack.continuation + |> do_find(is_desired) +} + +fn do_index( + continuation: fn() -> Action(element), + next: Int, +) -> fn() -> Action(#(Int, element)) { + fn() { + case continuation() { + Stop -> Stop + Continue(e, continuation) -> + Continue(#(next, e), do_index(continuation, next + 1)) + } + } +} + +/// Wraps values yielded from an iterator with indices, starting from 0. +/// +/// ## Examples +/// +/// ```gleam +/// > from_list(["a", "b", "c"]) |> index |> to_list +/// [#(0, "a"), #(1, "b"), #(2, "c")] +/// ``` +/// +pub fn index(over iterator: Iterator(element)) -> Iterator(#(Int, element)) { + iterator.continuation + |> do_index(0) + |> Iterator +} + +/// Creates an iterator that inifinitely applies a function to a value. +/// +/// ## Examples +/// +/// ```gleam +/// > iterate(1, fn(n) { n * 3 }) |> take(5) |> to_list +/// [1, 3, 9, 27, 81] +/// ``` +/// +pub fn iterate( + from initial: element, + with f: fn(element) -> element, +) -> Iterator(element) { + unfold(initial, fn(element) { Next(element, f(element)) }) +} + +fn do_take_while( + continuation: fn() -> Action(element), + predicate: fn(element) -> Bool, +) -> fn() -> Action(element) { + fn() { + case continuation() { + Stop -> Stop + Continue(e, next) -> + case predicate(e) { + False -> Stop + True -> Continue(e, do_take_while(next, predicate)) + } + } + } +} + +/// Creates an iterator that yields elements while the predicate returns `True`. +/// +/// ## Examples +/// +/// ```gleam +/// > from_list([1, 2, 3, 2, 4]) +/// > |> take_while(satisfying: fn(x) { x < 3 }) +/// > |> to_list +/// [1, 2] +/// ``` +/// +pub fn take_while( + in iterator: Iterator(element), + satisfying predicate: fn(element) -> Bool, +) -> Iterator(element) { + iterator.continuation + |> do_take_while(predicate) + |> Iterator +} + +fn do_drop_while( + continuation: fn() -> Action(element), + predicate: fn(element) -> Bool, +) -> Action(element) { + case continuation() { + Stop -> Stop + Continue(e, next) -> + case predicate(e) { + False -> Continue(e, next) + True -> do_drop_while(next, predicate) + } + } +} + +/// Creates an iterator that drops elements while the predicate returns `True`, +/// and then yields the remaining elements. +/// +/// ## Examples +/// +/// ```gleam +/// > from_list([1, 2, 3, 4, 2, 5]) +/// > |> drop_while(satisfying: fn(x) { x < 4 }) +/// > |> to_list +/// [4, 2, 5] +/// ``` +/// +pub fn drop_while( + in iterator: Iterator(element), + satisfying predicate: fn(element) -> Bool, +) -> Iterator(element) { + fn() { do_drop_while(iterator.continuation, predicate) } + |> Iterator +} + +fn do_scan( + continuation: fn() -> Action(element), + f: fn(acc, element) -> acc, + accumulator: acc, +) -> fn() -> Action(acc) { + fn() { + case continuation() { + Stop -> Stop + Continue(el, next) -> { + let accumulated = f(accumulator, el) + Continue(accumulated, do_scan(next, f, accumulated)) + } + } + } +} + +/// Creates an iterator from an existing iterator and a stateful function. +/// +/// Specifically, this behaves like `fold`, but yields intermediate results. +/// +/// ## Examples +/// +/// ```gleam +/// // Generate a sequence of partial sums +/// > from_list([1, 2, 3, 4, 5]) +/// > |> scan(from: 0, with: fn(acc, el) { acc + el }) +/// > |> to_list +/// [1, 3, 6, 10, 15] +/// ``` +/// +pub fn scan( + over iterator: Iterator(element), + from initial: acc, + with f: fn(acc, element) -> acc, +) -> Iterator(acc) { + iterator.continuation + |> do_scan(f, initial) + |> Iterator +} + +fn do_zip( + left: fn() -> Action(a), + right: fn() -> Action(b), +) -> fn() -> Action(#(a, b)) { + fn() { + case left() { + Stop -> Stop + Continue(el_left, next_left) -> + case right() { + Stop -> Stop + Continue(el_right, next_right) -> + Continue(#(el_left, el_right), do_zip(next_left, next_right)) + } + } + } +} + +/// Zips two iterators together, emitting values from both +/// until the shorter one runs out. +/// +/// ## Examples +/// +/// ```gleam +/// > from_list(["a", "b", "c"]) +/// > |> zip(range(20, 30)) +/// > |> to_list +/// [#("a", 20), #("b", 21), #("c", 22)] +/// ``` +/// +pub fn zip(left: Iterator(a), right: Iterator(b)) -> Iterator(#(a, b)) { + do_zip(left.continuation, right.continuation) + |> Iterator +} + +// Result of collecting a single chunk by key +type Chunk(element, key) { + AnotherBy(List(element), key, element, fn() -> Action(element)) + LastBy(List(element)) +} + +fn next_chunk( + continuation: fn() -> Action(element), + f: fn(element) -> key, + previous_key: key, + current_chunk: List(element), +) -> Chunk(element, key) { + case continuation() { + Stop -> LastBy(list.reverse(current_chunk)) + Continue(e, next) -> { + let key = f(e) + case key == previous_key { + True -> next_chunk(next, f, key, [e, ..current_chunk]) + False -> AnotherBy(list.reverse(current_chunk), key, e, next) + } + } + } +} + +fn do_chunk( + continuation: fn() -> Action(element), + f: fn(element) -> key, + previous_key: key, + previous_element: element, +) -> Action(List(element)) { + case next_chunk(continuation, f, previous_key, [previous_element]) { + LastBy(chunk) -> Continue(chunk, stop) + AnotherBy(chunk, key, el, next) -> + Continue(chunk, fn() { do_chunk(next, f, key, el) }) + } +} + +/// Creates an iterator that emits chunks of elements +/// for which `f` returns the same value. +/// +/// ## Examples +/// +/// ```gleam +/// > from_list([1, 2, 2, 3, 4, 4, 6, 7, 7]) +/// > |> chunk(by: fn(n) { n % 2 }) +/// > |> to_list +/// [[1], [2, 2], [3], [4, 4, 6], [7, 7]] +/// ``` +/// +pub fn chunk( + over iterator: Iterator(element), + by f: fn(element) -> key, +) -> Iterator(List(element)) { + fn() { + case iterator.continuation() { + Stop -> Stop + Continue(e, next) -> do_chunk(next, f, f(e), e) + } + } + |> Iterator +} + +// Result of collecting a single sized chunk +type SizedChunk(element) { + Another(List(element), fn() -> Action(element)) + Last(List(element)) + NoMore +} + +fn next_sized_chunk( + continuation: fn() -> Action(element), + left: Int, + current_chunk: List(element), +) -> SizedChunk(element) { + case continuation() { + Stop -> + case current_chunk { + [] -> NoMore + remaining -> Last(list.reverse(remaining)) + } + Continue(e, next) -> { + let chunk = [e, ..current_chunk] + case left > 1 { + False -> Another(list.reverse(chunk), next) + True -> next_sized_chunk(next, left - 1, chunk) + } + } + } +} + +fn do_sized_chunk( + continuation: fn() -> Action(element), + count: Int, +) -> fn() -> Action(List(element)) { + fn() { + case next_sized_chunk(continuation, count, []) { + NoMore -> Stop + Last(chunk) -> Continue(chunk, stop) + Another(chunk, next_element) -> + Continue(chunk, do_sized_chunk(next_element, count)) + } + } +} + +/// Creates an iterator that emits chunks of given size. +/// +/// If the last chunk does not have `count` elements, it is yielded +/// as a partial chunk, with less than `count` elements. +/// +/// For any `count` less than 1 this function behaves as if it was set to 1. +/// +/// ## Examples +/// +/// ```gleam +/// > from_list([1, 2, 3, 4, 5, 6]) +/// > |> sized_chunk(into: 2) +/// > |> to_list +/// [[1, 2], [3, 4], [5, 6]] +/// ``` +/// +/// ```gleam +/// > from_list([1, 2, 3, 4, 5, 6, 7, 8]) +/// > |> sized_chunk(into: 3) +/// > |> to_list +/// [[1, 2, 3], [4, 5, 6], [7, 8]] +/// ``` +/// +pub fn sized_chunk( + over iterator: Iterator(element), + into count: Int, +) -> Iterator(List(element)) { + iterator.continuation + |> do_sized_chunk(count) + |> Iterator +} + +fn do_intersperse( + continuation: fn() -> Action(element), + separator: element, +) -> Action(element) { + case continuation() { + Stop -> Stop + Continue(e, next) -> { + let next_interspersed = fn() { do_intersperse(next, separator) } + Continue(separator, fn() { Continue(e, next_interspersed) }) + } + } +} + +/// Creates an iterator that yields the given `elem` element +/// between elements emitted by the underlying iterator. +/// +/// ## Examples +/// +/// ```gleam +/// > empty() +/// > |> intersperse(with: 0) +/// > |> to_list +/// [] +/// +/// > from_list([1]) +/// > |> intersperse(with: 0) +/// > |> to_list +/// [1] +/// +/// > from_list([1, 2, 3, 4, 5]) +/// > |> intersperse(with: 0) +/// > |> to_list +/// [1, 0, 2, 0, 3, 0, 4, 0, 5] +/// ``` +/// +pub fn intersperse( + over iterator: Iterator(element), + with elem: element, +) -> Iterator(element) { + fn() { + case iterator.continuation() { + Stop -> Stop + Continue(e, next) -> Continue(e, fn() { do_intersperse(next, elem) }) + } + } + |> Iterator +} + +fn do_any( + continuation: fn() -> Action(element), + predicate: fn(element) -> Bool, +) -> Bool { + case continuation() { + Stop -> False + Continue(e, next) -> + case predicate(e) { + True -> True + False -> do_any(next, predicate) + } + } +} + +/// Returns `True` if any element emitted by the iterator satisfies the given predicate, +/// `False` otherwise. +/// +/// This function short-circuits once it finds a satisfying element. +/// +/// An empty iterator results in `False`. +/// +/// ## Examples +/// +/// ```gleam +/// > empty() |> any(fn(n) { n % 2 == 0 }) +/// False +/// ``` +/// +/// ```gleam +/// > from_list([1, 2, 5, 7, 9]) |> any(fn(n) { n % 2 == 0 }) +/// True +/// ``` +/// +/// ```gleam +/// > from_list([1, 3, 5, 7, 9]) |> any(fn(n) { n % 2 == 0 }) +/// False +/// ``` +/// +pub fn any( + in iterator: Iterator(element), + satisfying predicate: fn(element) -> Bool, +) -> Bool { + iterator.continuation + |> do_any(predicate) +} + +fn do_all( + continuation: fn() -> Action(element), + predicate: fn(element) -> Bool, +) -> Bool { + case continuation() { + Stop -> True + Continue(e, next) -> + case predicate(e) { + True -> do_all(next, predicate) + False -> False + } + } +} + +/// Returns `True` if all elements emitted by the iterator satisfy the given predicate, +/// `False` otherwise. +/// +/// This function short-circuits once it finds a non-satisfying element. +/// +/// An empty iterator results in `True`. +/// +/// ## Examples +/// +/// ```gleam +/// > empty() |> all(fn(n) { n % 2 == 0 }) +/// True +/// ``` +/// +/// ```gleam +/// > from_list([2, 4, 6, 8]) |> all(fn(n) { n % 2 == 0 }) +/// True +/// ``` +/// +/// ```gleam +/// > from_list([2, 4, 5, 8]) |> all(fn(n) { n % 2 == 0 }) +/// False +/// ``` +/// +pub fn all( + in iterator: Iterator(element), + satisfying predicate: fn(element) -> Bool, +) -> Bool { + iterator.continuation + |> do_all(predicate) +} + +fn update_group_with(el: element) -> fn(Option(List(element))) -> List(element) { + fn(maybe_group) { + case maybe_group { + Some(group) -> [el, ..group] + None -> [el] + } + } +} + +fn group_updater( + f: fn(element) -> key, +) -> fn(Dict(key, List(element)), element) -> Dict(key, List(element)) { + fn(groups, elem) { + groups + |> dict.update(f(elem), update_group_with(elem)) + } +} + +/// Returns a `Dict(k, List(element))` of elements from the given iterator +/// grouped with the given key function. +/// +/// The order within each group is preserved from the iterator. +/// +/// ## Examples +/// +/// ```gleam +/// > from_list([1, 2, 3, 4, 5, 6]) |> group(by: fn(n) { n % 3 }) +/// dict.from_list([#(0, [3, 6]), #(1, [1, 4]), #(2, [2, 5])]) +/// ``` +/// +pub fn group( + in iterator: Iterator(element), + by key: fn(element) -> key, +) -> Dict(key, List(element)) { + iterator + |> fold(dict.new(), group_updater(key)) + |> dict.map_values(fn(_, group) { list.reverse(group) }) +} + +/// This function acts similar to fold, but does not take an initial state. +/// Instead, it starts from the first yielded element +/// and combines it with each subsequent element in turn using the given function. +/// The function is called as `f(accumulator, current_element)`. +/// +/// Returns `Ok` to indicate a successful run, and `Error` if called on an empty iterator. +/// +/// ## Examples +/// +/// ```gleam +/// > from_list([]) |> reduce(fn(acc, x) { acc + x }) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > from_list([1, 2, 3, 4, 5]) |> reduce(fn(acc, x) { acc + x }) +/// Ok(15) +/// ``` +/// +pub fn reduce( + over iterator: Iterator(e), + with f: fn(e, e) -> e, +) -> Result(e, Nil) { + case iterator.continuation() { + Stop -> Error(Nil) + Continue(e, next) -> + do_fold(next, f, e) + |> Ok + } +} + +/// Returns the last element in the given iterator. +/// +/// Returns `Error(Nil)` if the iterator is empty. +/// +/// This function runs in linear time. +/// +/// ## Examples +/// +/// ```gleam +/// > empty() |> last +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > range(1, 10) |> last +/// Ok(9) +/// ``` +/// +pub fn last(iterator: Iterator(element)) -> Result(element, Nil) { + iterator + |> reduce(fn(_, elem) { elem }) +} + +/// Creates an iterator that yields no elements. +/// +/// ## Examples +/// +/// ```gleam +/// > empty() |> to_list +/// [] +/// ``` +/// +pub fn empty() -> Iterator(element) { + Iterator(stop) +} + +/// Creates an iterator that yields exactly one element provided by calling the given function. +/// +/// ## Examples +/// +/// ```gleam +/// > once(fn() { 1 }) |> to_list +/// [1] +/// ``` +/// +pub fn once(f: fn() -> element) -> Iterator(element) { + fn() { Continue(f(), stop) } + |> Iterator +} + +/// Creates an iterator that yields the given element exactly once. +/// +/// ## Examples +/// +/// ```gleam +/// > single(1) |> to_list +/// [1] +/// ``` +/// +pub fn single(elem: element) -> Iterator(element) { + once(fn() { elem }) +} + +fn do_interleave( + current: fn() -> Action(element), + next: fn() -> Action(element), +) -> Action(element) { + case current() { + Stop -> next() + Continue(e, next_other) -> + Continue(e, fn() { do_interleave(next, next_other) }) + } +} + +/// Creates an iterator that alternates between the two given iterators +/// until both have run out. +/// +/// ## Examples +/// +/// ```gleam +/// > from_list([1, 2, 3, 4]) |> interleave(from_list([11, 12, 13, 14])) |> to_list +/// [1, 11, 2, 12, 3, 13, 4, 14] +/// ``` +/// +/// ```gleam +/// > from_list([1, 2, 3, 4]) |> interleave(from_list([100])) |> to_list +/// [1, 100, 2, 3, 4] +/// ``` +/// +pub fn interleave( + left: Iterator(element), + with right: Iterator(element), +) -> Iterator(element) { + fn() { do_interleave(left.continuation, right.continuation) } + |> Iterator +} + +fn do_fold_until( + continuation: fn() -> Action(e), + f: fn(acc, e) -> list.ContinueOrStop(acc), + accumulator: acc, +) -> acc { + case continuation() { + Stop -> accumulator + Continue(elem, next) -> + case f(accumulator, elem) { + list.Continue(accumulator) -> do_fold_until(next, f, accumulator) + list.Stop(accumulator) -> accumulator + } + } +} + +/// Like `fold`, `fold_until` reduces an iterator of elements into a single value by calling a given +/// function on each element in turn, but uses `list.ContinueOrStop` to determine +/// whether or not to keep iterating. +/// +/// If called on an iterator of infinite length then this function will only ever +/// return if the function returns `list.Stop`. +/// +/// ## Examples +/// +/// ```gleam +/// > import gleam/list +/// > let f = fn(acc, e) { +/// > case e { +/// > _ if e < 4 -> list.Continue(e + acc) +/// > _ -> list.Stop(acc) +/// > } +/// > } +/// > +/// > [1, 2, 3, 4] +/// > |> from_list +/// > |> fold_until(from: acc, with: f) +/// 6 +/// ``` +/// +pub fn fold_until( + over iterator: Iterator(e), + from initial: acc, + with f: fn(acc, e) -> list.ContinueOrStop(acc), +) -> acc { + iterator.continuation + |> do_fold_until(f, initial) +} + +fn do_try_fold( + over continuation: fn() -> Action(a), + with f: fn(acc, a) -> Result(acc, err), + from accumulator: acc, +) -> Result(acc, err) { + case continuation() { + Stop -> Ok(accumulator) + Continue(elem, next) -> { + use accumulator <- result.try(f(accumulator, elem)) + do_try_fold(next, f, accumulator) + } + } +} + +/// A variant of fold that might fail. +/// +/// The folding function should return `Result(accumulator, error)`. +/// If the returned value is `Ok(accumulator)` try_fold will try the next value in the iterator. +/// If the returned value is `Error(error)` try_fold will stop and return that error. +/// +/// ## Examples +/// +/// ```gleam +/// > [1, 2, 3, 4] +/// > |> iterator.from_list() +/// > |> try_fold(0, fn(acc, i) { +/// > case i < 3 { +/// > True -> Ok(acc + i) +/// > False -> Error(Nil) +/// > } +/// > }) +/// Error(Nil) +/// ``` +/// +pub fn try_fold( + over iterator: Iterator(e), + from initial: acc, + with f: fn(acc, e) -> Result(acc, err), +) -> Result(acc, err) { + iterator.continuation + |> do_try_fold(f, initial) +} + +/// Returns the first element yielded by the given iterator, if it exists, +/// or `Error(Nil)` otherwise. +/// +/// ## Examples +/// +/// ```gleam +/// > from_list([1, 2, 3]) |> first +/// Ok(1) +/// ``` +/// +/// ```gleam +/// > empty() |> first +/// Error(Nil) +/// ``` +pub fn first(from iterator: Iterator(e)) -> Result(e, Nil) { + case iterator.continuation() { + Stop -> Error(Nil) + Continue(e, _) -> Ok(e) + } +} + +/// Returns nth element yielded by the given iterator, where `0` means the first element. +/// +/// If there are not enough elements in the iterator, `Error(Nil)` is returned. +/// +/// For any `index` less than `0` this function behaves as if it was set to `0`. +/// +/// ## Examples +/// +/// ```gleam +/// > from_list([1, 2, 3, 4]) |> at(2) +/// Ok(3) +/// ``` +/// +/// ```gleam +/// > from_list([1, 2, 3, 4]) |> at(4) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > empty() |> at(0) +/// Error(Nil) +/// ``` +/// +pub fn at(in iterator: Iterator(e), get index: Int) -> Result(e, Nil) { + iterator + |> drop(index) + |> first +} + +fn do_length(over continuation: fn() -> Action(e), with length: Int) -> Int { + case continuation() { + Stop -> length + Continue(_, next) -> do_length(next, length + 1) + } +} + +/// Counts the number of elements in the given iterator. +/// +/// This function has to traverse the entire iterator to count its elements, +/// so it runs in linear time. +/// +/// ## Examples +/// +/// ```gleam +/// > empty() |> length +/// 0 +/// ``` +/// +/// ```gleam +/// > from_list([1, 2, 3, 4]) |> length +/// 4 +/// ``` +/// +pub fn length(over iterator: Iterator(e)) -> Int { + iterator.continuation + |> do_length(0) +} + +/// Traverse an iterator, calling a function on each element. +/// +/// ## Examples +/// +/// ```gleam +/// > empty() |> each(io.println) +/// Nil +/// ``` +/// +/// ```gleam +/// > from_list(["Tom", "Malory", "Louis"]) |> each(io.println) +/// // -> Tom +/// // -> Malory +/// // -> Louis +/// Nil +/// ``` +/// +pub fn each(over iterator: Iterator(a), with f: fn(a) -> b) -> Nil { + iterator + |> map(f) + |> run +} + +/// Add a new element to the start of an iterator. +/// +/// This function is for use with `use` expressions, to replicate the behaviour +/// of the `yield` keyword found in other languages. +/// +/// ## Examples +/// +/// ```gleam +/// > use <- iterator.yield(1) +/// > use <- iterator.yield(2) +/// > use <- iterator.yield(3) +/// > iterator.empty() +/// iterator.from_list([1, 2, 3]) +/// ``` +/// +pub fn yield(element: a, next: fn() -> Iterator(a)) -> Iterator(a) { + Iterator(fn() { Continue(element, next().continuation) }) +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/list.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/list.gleam new file mode 100644 index 0000000..a5cffa9 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/list.gleam @@ -0,0 +1,2154 @@ +//// Lists are an ordered sequence of elements and are one of the most common +//// data types in Gleam. +//// +//// New elements can be added and removed from the front of a list in +//// constant time, while adding and removing from the end requires traversing +//// the copying the whole list, so keep this in mind when designing your +//// programs. +//// +//// There is a dedicated syntax for prefixing to a list: +//// +//// ```gleam +//// let new_list = [1, 2, ..existing_list] +//// ``` +//// +//// And a matching syntax for getting the first elements of a list: +//// +//// ```gleam +//// case list { +//// [first_element, ..rest] -> first_element +//// _ -> "this pattern matches when the list is empty" +//// } +//// ``` +//// + +import gleam/int +import gleam/float +import gleam/order.{type Order} +import gleam/pair +import gleam/dict.{type Dict} + +/// An error value returned by the `strict_zip` function. +/// +pub type LengthMismatch { + LengthMismatch +} + +/// Counts the number of elements in a given list. +/// +/// This function has to traverse the list to determine the number of elements, +/// so it runs in linear time. +/// +/// This function is natively implemented by the virtual machine and is highly +/// optimised. +/// +/// ## Examples +/// +/// ```gleam +/// > length([]) +/// 0 +/// ``` +/// +/// ```gleam +/// > length([1]) +/// 1 +/// ``` +/// +/// ```gleam +/// > length([1, 2]) +/// 2 +/// ``` +/// +pub fn length(of list: List(a)) -> Int { + do_length(list) +} + +@target(erlang) +@external(erlang, "erlang", "length") +fn do_length(a: List(a)) -> Int + +@target(javascript) +fn do_length(list: List(a)) -> Int { + do_length_acc(list, 0) +} + +@target(javascript) +fn do_length_acc(list: List(a), count: Int) -> Int { + case list { + [_, ..list] -> do_length_acc(list, count + 1) + _ -> count + } +} + +/// Creates a new list from a given list containing the same elements but in the +/// opposite order. +/// +/// This function has to traverse the list to create the new reversed list, so +/// it runs in linear time. +/// +/// This function is natively implemented by the virtual machine and is highly +/// optimised. +/// +/// ## Examples +/// +/// ```gleam +/// > reverse([]) +/// [] +/// ``` +/// +/// ```gleam +/// > reverse([1]) +/// [1] +/// ``` +/// +/// ```gleam +/// > reverse([1, 2]) +/// [2, 1] +/// ``` +/// +pub fn reverse(xs: List(a)) -> List(a) { + do_reverse(xs) +} + +@target(erlang) +@external(erlang, "lists", "reverse") +fn do_reverse(a: List(a)) -> List(a) + +@target(javascript) +fn do_reverse(list) { + do_reverse_acc(list, []) +} + +@target(javascript) +fn do_reverse_acc(remaining, accumulator) { + case remaining { + [] -> accumulator + [item, ..rest] -> do_reverse_acc(rest, [item, ..accumulator]) + } +} + +/// Determines whether or not the list is empty. +/// +/// This function runs in constant time. +/// +/// ## Examples +/// +/// ```gleam +/// > is_empty([]) +/// True +/// ``` +/// +/// ```gleam +/// > is_empty([1]) +/// False +/// ``` +/// +/// ```gleam +/// > is_empty([1, 1]) +/// False +/// ``` +/// +pub fn is_empty(list: List(a)) -> Bool { + list == [] +} + +/// Determines whether or not a given element exists within a given list. +/// +/// This function traverses the list to find the element, so it runs in linear +/// time. +/// +/// ## Examples +/// +/// ```gleam +/// > [] |> contains(any: 0) +/// False +/// ``` +/// +/// ```gleam +/// > [0] |> contains(any: 0) +/// True +/// ``` +/// +/// ```gleam +/// > [1] |> contains(any: 0) +/// False +/// ``` +/// +/// ```gleam +/// > [1, 1] |> contains(any: 0) +/// False +/// ``` +/// +/// ```gleam +/// > [1, 0] |> contains(any: 0) +/// True +/// ``` +/// +pub fn contains(list: List(a), any elem: a) -> Bool { + case list { + [] -> False + [first, ..] if first == elem -> True + [_, ..rest] -> contains(rest, elem) + } +} + +/// Gets the first element from the start of the list, if there is one. +/// +/// ## Examples +/// +/// ```gleam +/// > first([]) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > first([0]) +/// Ok(0) +/// ``` +/// +/// ```gleam +/// > first([1, 2]) +/// Ok(1) +/// ``` +/// +pub fn first(list: List(a)) -> Result(a, Nil) { + case list { + [] -> Error(Nil) + [x, ..] -> Ok(x) + } +} + +/// Returns the list minus the first element. If the list is empty, `Error(Nil)` is +/// returned. +/// +/// This function runs in constant time and does not make a copy of the list. +/// +/// ## Examples +/// +/// ```gleam +/// > rest([]) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > rest([0]) +/// Ok([]) +/// ``` +/// +/// ```gleam +/// > rest([1, 2]) +/// Ok([2]) +/// ``` +/// +pub fn rest(list: List(a)) -> Result(List(a), Nil) { + case list { + [] -> Error(Nil) + [_, ..xs] -> Ok(xs) + } +} + +fn update_group( + f: fn(element) -> key, +) -> fn(Dict(key, List(element)), element) -> Dict(key, List(element)) { + fn(groups, elem) { + case dict.get(groups, f(elem)) { + Ok(existing) -> dict.insert(groups, f(elem), [elem, ..existing]) + Error(_) -> dict.insert(groups, f(elem), [elem]) + } + } +} + +/// Takes a list and groups the values by a key +/// which is built from a key function. +/// +/// Does not preserve the initial value order. +/// +/// ## Examples +/// +/// ```gleam +/// > [Ok(3), Error("Wrong"), Ok(200), Ok(73)] +/// |> group(by: fn(i) { +/// case i { +/// Ok(_) -> "Successful" +/// Error(_) -> "Failed" +/// } +/// }) +/// |> dict.to_list +/// +/// [ +/// #("Failed", [Error("Wrong")]), +/// #("Successful", [Ok(73), Ok(200), Ok(3)]) +/// ] +/// +/// > group([1,2,3,4,5], by: fn(i) { i - i / 3 * 3 }) +/// |> dict.to_list +/// [#(0, [3]), #(1, [4, 1]), #(2, [5, 2])] +/// ``` +/// +pub fn group(list: List(v), by key: fn(v) -> k) -> Dict(k, List(v)) { + fold(list, dict.new(), update_group(key)) +} + +fn do_filter(list: List(a), fun: fn(a) -> Bool, acc: List(a)) -> List(a) { + case list { + [] -> reverse(acc) + [x, ..xs] -> { + let new_acc = case fun(x) { + True -> [x, ..acc] + False -> acc + } + do_filter(xs, fun, new_acc) + } + } +} + +/// Returns a new list containing only the elements from the first list for +/// which the given functions returns `True`. +/// +/// ## Examples +/// +/// ```gleam +/// > filter([2, 4, 6, 1], fn(x) { x > 2 }) +/// [4, 6] +/// ``` +/// +/// ```gleam +/// > filter([2, 4, 6, 1], fn(x) { x > 6 }) +/// [] +/// ``` +/// +pub fn filter(list: List(a), keeping predicate: fn(a) -> Bool) -> List(a) { + do_filter(list, predicate, []) +} + +fn do_filter_map( + list: List(a), + fun: fn(a) -> Result(b, e), + acc: List(b), +) -> List(b) { + case list { + [] -> reverse(acc) + [x, ..xs] -> { + let new_acc = case fun(x) { + Ok(x) -> [x, ..acc] + Error(_) -> acc + } + do_filter_map(xs, fun, new_acc) + } + } +} + +/// Returns a new list containing only the elements from the first list for +/// which the given functions returns `Ok(_)`. +/// +/// ## Examples +/// +/// ```gleam +/// > filter_map([2, 4, 6, 1], Error) +/// [] +/// ``` +/// +/// ```gleam +/// > filter_map([2, 4, 6, 1], fn(x) { Ok(x + 1) }) +/// [3, 5, 7, 2] +/// ``` +/// +pub fn filter_map(list: List(a), with fun: fn(a) -> Result(b, e)) -> List(b) { + do_filter_map(list, fun, []) +} + +fn do_map(list: List(a), fun: fn(a) -> b, acc: List(b)) -> List(b) { + case list { + [] -> reverse(acc) + [x, ..xs] -> do_map(xs, fun, [fun(x), ..acc]) + } +} + +/// Returns a new list containing only the elements of the first list after the +/// function has been applied to each one. +/// +/// ## Examples +/// +/// ```gleam +/// > map([2, 4, 6], fn(x) { x * 2 }) +/// [4, 8, 12] +/// ``` +/// +pub fn map(list: List(a), with fun: fn(a) -> b) -> List(b) { + do_map(list, fun, []) +} + +/// Combines two lists into a single list using the given function. +/// +/// If a list is longer than the other the extra elements are dropped. +/// +/// ## Examples +/// +/// ```gleam +/// > map2([1, 2, 3], [4, 5, 6], fn(x, y) { x + y }) +/// [5, 7, 9] +/// ``` +/// +/// ```gleam +/// > map2([1, 2], ["a", "b", "c"], fn(i, x) { #(i, x) }) +/// [#(1, "a"), #(2, "b")] +/// ``` +/// +pub fn map2(list1: List(a), list2: List(b), with fun: fn(a, b) -> c) -> List(c) { + do_map2(list1, list2, fun, []) +} + +fn do_map2( + list1: List(a), + list2: List(b), + fun: fn(a, b) -> c, + acc: List(c), +) -> List(c) { + case list1, list2 { + [], _ | _, [] -> reverse(acc) + [a, ..as_], [b, ..bs] -> do_map2(as_, bs, fun, [fun(a, b), ..acc]) + } +} + +/// Similar to `map` but also lets you pass around an accumulated value. +/// +/// ## Examples +/// +/// ```gleam +/// > map_fold( +/// over: [1, 2, 3], +/// from: 100, +/// with: fn(memo, i) { #(memo + i, i * 2) } +/// ) +/// #(106, [2, 4, 6]) +/// ``` +/// +pub fn map_fold( + over list: List(a), + from acc: acc, + with fun: fn(acc, a) -> #(acc, b), +) -> #(acc, List(b)) { + fold( + over: list, + from: #(acc, []), + with: fn(acc, item) { + let #(current_acc, items) = acc + let #(next_acc, next_item) = fun(current_acc, item) + #(next_acc, [next_item, ..items]) + }, + ) + |> pair.map_second(reverse) +} + +fn do_index_map( + list: List(a), + fun: fn(Int, a) -> b, + index: Int, + acc: List(b), +) -> List(b) { + case list { + [] -> reverse(acc) + [x, ..xs] -> { + let acc = [fun(index, x), ..acc] + do_index_map(xs, fun, index + 1, acc) + } + } +} + +/// Returns a new list containing only the elements of the first list after the +/// function has been applied to each one and their index. +/// +/// The index starts at 0, so the first element is 0, the second is 1, and so +/// on. +/// +/// ## Examples +/// +/// ```gleam +/// > index_map(["a", "b"], fn(i, x) { #(i, x) }) +/// [#(0, "a"), #(1, "b")] +/// ``` +/// +pub fn index_map(list: List(a), with fun: fn(Int, a) -> b) -> List(b) { + do_index_map(list, fun, 0, []) +} + +fn do_try_map( + list: List(a), + fun: fn(a) -> Result(b, e), + acc: List(b), +) -> Result(List(b), e) { + case list { + [] -> Ok(reverse(acc)) + [x, ..xs] -> + case fun(x) { + Ok(y) -> do_try_map(xs, fun, [y, ..acc]) + Error(error) -> Error(error) + } + } +} + +/// Takes a function that returns a `Result` and applies it to each element in a +/// given list in turn. +/// +/// If the function returns `Ok(new_value)` for all elements in the list then a +/// list of the new values is returned. +/// +/// If the function returns `Error(reason)` for any of the elements then it is +/// returned immediately. None of the elements in the list are processed after +/// one returns an `Error`. +/// +/// ## Examples +/// +/// ```gleam +/// > try_map([1, 2, 3], fn(x) { Ok(x + 2) }) +/// Ok([3, 4, 5]) +/// ``` +/// +/// ```gleam +/// > try_map([1, 2, 3], fn(_) { Error(0) }) +/// Error(0) +/// ``` +/// +/// ```gleam +/// > try_map([[1], [2, 3]], first) +/// Ok([1, 2]) +/// ``` +/// +/// ```gleam +/// > try_map([[1], [], [2]], first) +/// Error(Nil) +/// ``` +/// +pub fn try_map( + over list: List(a), + with fun: fn(a) -> Result(b, e), +) -> Result(List(b), e) { + do_try_map(list, fun, []) +} + +/// Returns a list that is the given list with up to the given number of +/// elements removed from the front of the list. +/// +/// If the element has less than the number of elements an empty list is +/// returned. +/// +/// This function runs in linear time but does not copy the list. +/// +/// ## Examples +/// +/// ```gleam +/// > drop([1, 2, 3, 4], 2) +/// [3, 4] +/// ``` +/// +/// ```gleam +/// > drop([1, 2, 3, 4], 9) +/// [] +/// ``` +/// +pub fn drop(from list: List(a), up_to n: Int) -> List(a) { + case n <= 0 { + True -> list + False -> + case list { + [] -> [] + [_, ..xs] -> drop(xs, n - 1) + } + } +} + +fn do_take(list: List(a), n: Int, acc: List(a)) -> List(a) { + case n <= 0 { + True -> reverse(acc) + False -> + case list { + [] -> reverse(acc) + [x, ..xs] -> do_take(xs, n - 1, [x, ..acc]) + } + } +} + +/// Returns a list containing the first given number of elements from the given +/// list. +/// +/// If the element has less than the number of elements then the full list is +/// returned. +/// +/// This function runs in linear time but does not copy the list. +/// +/// ## Examples +/// +/// ```gleam +/// > take([1, 2, 3, 4], 2) +/// [1, 2] +/// ``` +/// +/// ```gleam +/// > take([1, 2, 3, 4], 9) +/// [1, 2, 3, 4] +/// ``` +/// +pub fn take(from list: List(a), up_to n: Int) -> List(a) { + do_take(list, n, []) +} + +/// Returns a new empty list. +/// +/// ## Examples +/// +/// ```gleam +/// > new() +/// [] +/// ``` +/// +pub fn new() -> List(a) { + [] +} + +/// Joins one list onto the end of another. +/// +/// This function runs in linear time, and it traverses and copies the first +/// list. +/// +/// ## Examples +/// +/// ```gleam +/// > append([1, 2], [3]) +/// [1, 2, 3] +/// ``` +/// +pub fn append(first: List(a), second: List(a)) -> List(a) { + do_append(first, second) +} + +@target(erlang) +@external(erlang, "lists", "append") +fn do_append(a: List(a), b: List(a)) -> List(a) + +@target(javascript) +fn do_append(first: List(a), second: List(a)) -> List(a) { + do_append_acc(reverse(first), second) +} + +@target(javascript) +fn do_append_acc(first: List(a), second: List(a)) -> List(a) { + case first { + [] -> second + [item, ..rest] -> do_append_acc(rest, [item, ..second]) + } +} + +/// Prefixes an item to a list. This can also be done using the dedicated +/// syntax instead +/// +/// ```gleam +/// let new_list = [1, ..existing_list] +/// ``` +/// +pub fn prepend(to list: List(a), this item: a) -> List(a) { + [item, ..list] +} + +// Reverses a list and prepends it to another list +fn reverse_and_prepend(list prefix: List(a), to suffix: List(a)) -> List(a) { + case prefix { + [] -> suffix + [first, ..rest] -> reverse_and_prepend(list: rest, to: [first, ..suffix]) + } +} + +fn do_concat(lists: List(List(a)), acc: List(a)) -> List(a) { + case lists { + [] -> reverse(acc) + [list, ..further_lists] -> + do_concat(further_lists, reverse_and_prepend(list: list, to: acc)) + } +} + +/// Joins a list of lists into a single list. +/// +/// This function traverses all elements twice. +/// +/// ## Examples +/// +/// ```gleam +/// > concat([[1], [2, 3], []]) +/// [1, 2, 3] +/// ``` +/// +pub fn concat(lists: List(List(a))) -> List(a) { + do_concat(lists, []) +} + +/// This is the same as `concat`: it joins a list of lists into a single +/// list. +/// +/// This function traverses all elements twice. +/// +/// ## Examples +/// +/// ```gleam +/// > flatten([[1], [2, 3], []]) +/// [1, 2, 3] +/// ``` +/// +pub fn flatten(lists: List(List(a))) -> List(a) { + do_concat(lists, []) +} + +/// Maps the list with the given function into a list of lists, and then flattens it. +/// +/// ## Examples +/// +/// ```gleam +/// > flat_map([2, 4, 6], fn(x) { [x, x + 1] }) +/// [2, 3, 4, 5, 6, 7] +/// ``` +/// +pub fn flat_map(over list: List(a), with fun: fn(a) -> List(b)) -> List(b) { + map(list, fun) + |> concat +} + +/// Reduces a list of elements into a single value by calling a given function +/// on each element, going from left to right. +/// +/// `fold([1, 2, 3], 0, add)` is the equivalent of +/// `add(add(add(0, 1), 2), 3)`. +/// +/// This function runs in linear time. +/// +pub fn fold( + over list: List(a), + from initial: acc, + with fun: fn(acc, a) -> acc, +) -> acc { + case list { + [] -> initial + [x, ..rest] -> fold(rest, fun(initial, x), fun) + } +} + +/// Reduces a list of elements into a single value by calling a given function +/// on each element, going from right to left. +/// +/// `fold_right([1, 2, 3], 0, add)` is the equivalent of +/// `add(add(add(0, 3), 2), 1)`. +/// +/// This function runs in linear time. +/// +/// Unlike `fold` this function is not tail recursive. Where possible use +/// `fold` instead as it will use less memory. +/// +pub fn fold_right( + over list: List(a), + from initial: acc, + with fun: fn(acc, a) -> acc, +) -> acc { + case list { + [] -> initial + [x, ..rest] -> fun(fold_right(rest, initial, fun), x) + } +} + +fn do_index_fold( + over: List(a), + acc: acc, + with: fn(acc, a, Int) -> acc, + index: Int, +) -> acc { + case over { + [] -> acc + [first, ..rest] -> + do_index_fold(rest, with(acc, first, index), with, index + 1) + } +} + +/// Like fold but the folding function also receives the index of the current element. +/// +/// ## Examples +/// +/// ```gleam +/// ["a", "b", "c"] +/// |> index_fold([], fn(acc, item, index) { ... }) +/// ``` +/// +pub fn index_fold( + over over: List(a), + from initial: acc, + with fun: fn(acc, a, Int) -> acc, +) -> acc { + do_index_fold(over, initial, fun, 0) +} + +/// A variant of fold that might fail. +/// +/// The folding function should return `Result(accumulator, error)`. +/// If the returned value is `Ok(accumulator)` try_fold will try the next value in the list. +/// If the returned value is `Error(error)` try_fold will stop and return that error. +/// +/// ## Examples +/// +/// ```gleam +/// [1, 2, 3, 4] +/// |> try_fold(0, fn(acc, i) { +/// case i < 3 { +/// True -> Ok(acc + i) +/// False -> Error(Nil) +/// } +/// }) +/// ``` +/// +pub fn try_fold( + over collection: List(a), + from accumulator: acc, + with fun: fn(acc, a) -> Result(acc, e), +) -> Result(acc, e) { + case collection { + [] -> Ok(accumulator) + [first, ..rest] -> + case fun(accumulator, first) { + Ok(result) -> try_fold(rest, result, fun) + Error(_) as error -> error + } + } +} + +pub type ContinueOrStop(a) { + Continue(a) + Stop(a) +} + +/// A variant of fold that allows to stop folding earlier. +/// +/// The folding function should return `ContinueOrStop(accumulator)`. +/// If the returned value is `Continue(accumulator)` fold_until will try the next value in the list. +/// If the returned value is `Stop(accumulator)` fold_until will stop and return that accumulator. +/// +/// ## Examples +/// +/// ```gleam +/// [1, 2, 3, 4] +/// |> fold_until(0, fn(acc, i) { +/// case i < 3 { +/// True -> Continue(acc + i) +/// False -> Stop(acc) +/// } +/// }) +/// ``` +/// +pub fn fold_until( + over collection: List(a), + from accumulator: acc, + with fun: fn(acc, a) -> ContinueOrStop(acc), +) -> acc { + case collection { + [] -> accumulator + [first, ..rest] -> + case fun(accumulator, first) { + Continue(next_accumulator) -> fold_until(rest, next_accumulator, fun) + Stop(b) -> b + } + } +} + +/// Finds the first element in a given list for which the given function returns +/// `True`. +/// +/// Returns `Error(Nil)` if no such element is found. +/// +/// ## Examples +/// +/// ```gleam +/// > find([1, 2, 3], fn(x) { x > 2 }) +/// Ok(3) +/// ``` +/// +/// ```gleam +/// > find([1, 2, 3], fn(x) { x > 4 }) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > find([], fn(_) { True }) +/// Error(Nil) +/// ``` +/// +pub fn find( + in haystack: List(a), + one_that is_desired: fn(a) -> Bool, +) -> Result(a, Nil) { + case haystack { + [] -> Error(Nil) + [x, ..rest] -> + case is_desired(x) { + True -> Ok(x) + _ -> find(in: rest, one_that: is_desired) + } + } +} + +/// Finds the first element in a given list for which the given function returns +/// `Ok(new_value)`, then returns the wrapped `new_value`. +/// +/// Returns `Error(Nil)` if no such element is found. +/// +/// ## Examples +/// +/// ```gleam +/// > find_map([[], [2], [3]], first) +/// Ok(2) +/// ``` +/// +/// ```gleam +/// > find_map([[], []], first) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > find_map([], first) +/// Error(Nil) +/// ``` +/// +pub fn find_map( + in haystack: List(a), + with fun: fn(a) -> Result(b, c), +) -> Result(b, Nil) { + case haystack { + [] -> Error(Nil) + [x, ..rest] -> + case fun(x) { + Ok(x) -> Ok(x) + _ -> find_map(in: rest, with: fun) + } + } +} + +/// Returns `True` if the given function returns `True` for all the elements in +/// the given list. If the function returns `False` for any of the elements it +/// immediately returns `False` without checking the rest of the list. +/// +/// ## Examples +/// +/// ```gleam +/// > all([], fn(x) { x > 3 }) +/// True +/// ``` +/// +/// ```gleam +/// > all([4, 5], fn(x) { x > 3 }) +/// True +/// ``` +/// +/// ```gleam +/// > all([4, 3], fn(x) { x > 3 }) +/// False +/// ``` +/// +pub fn all(in list: List(a), satisfying predicate: fn(a) -> Bool) -> Bool { + case list { + [] -> True + [first, ..rest] -> + case predicate(first) { + True -> all(rest, predicate) + False -> False + } + } +} + +/// Returns `True` if the given function returns `True` for any the elements in +/// the given list. If the function returns `True` for any of the elements it +/// immediately returns `True` without checking the rest of the list. +/// +/// ## Examples +/// +/// ```gleam +/// > any([], fn(x) { x > 3 }) +/// False +/// ``` +/// +/// ```gleam +/// > any([4, 5], fn(x) { x > 3 }) +/// True +/// ``` +/// +/// ```gleam +/// > any([4, 3], fn(x) { x > 4 }) +/// False +/// ``` +/// +/// ```gleam +/// > any([3, 4], fn(x) { x > 3 }) +/// True +/// ``` +/// +pub fn any(in list: List(a), satisfying predicate: fn(a) -> Bool) -> Bool { + case list { + [] -> False + [first, ..rest] -> + case predicate(first) { + True -> True + False -> any(rest, predicate) + } + } +} + +fn do_zip(xs: List(a), ys: List(b), acc: List(#(a, b))) -> List(#(a, b)) { + case xs, ys { + [x, ..xs], [y, ..ys] -> do_zip(xs, ys, [#(x, y), ..acc]) + _, _ -> reverse(acc) + } +} + +/// Takes two lists and returns a single list of 2-element tuples. +/// +/// If one of the lists is longer than the other, the remaining elements from +/// the longer list are not used. +/// +/// ## Examples +/// +/// ```gleam +/// > zip([], []) +/// [] +/// ``` +/// +/// ```gleam +/// > zip([1, 2], [3]) +/// [#(1, 3)] +/// ``` +/// +/// ```gleam +/// > zip([1], [3, 4]) +/// [#(1, 3)] +/// ``` +/// +/// ```gleam +/// > zip([1, 2], [3, 4]) +/// [#(1, 3), #(2, 4)] +/// ``` +/// +pub fn zip(list: List(a), with other: List(b)) -> List(#(a, b)) { + do_zip(list, other, []) +} + +/// Takes two lists and returns a single list of 2-element tuples. +/// +/// If one of the lists is longer than the other, an `Error` is returned. +/// +/// ## Examples +/// +/// ```gleam +/// > strict_zip([], []) +/// Ok([]) +/// ``` +/// +/// ```gleam +/// > strict_zip([1, 2], [3]) +/// Error(LengthMismatch) +/// ``` +/// +/// ```gleam +/// > strict_zip([1], [3, 4]) +/// Error(LengthMismatch) +/// ``` +/// +/// ```gleam +/// > strict_zip([1, 2], [3, 4]) +/// Ok([#(1, 3), #(2, 4)]) +/// ``` +/// +pub fn strict_zip( + list: List(a), + with other: List(b), +) -> Result(List(#(a, b)), LengthMismatch) { + case length(of: list) == length(of: other) { + True -> Ok(zip(list, other)) + False -> Error(LengthMismatch) + } +} + +fn do_unzip(input, xs, ys) { + case input { + [] -> #(reverse(xs), reverse(ys)) + [#(x, y), ..rest] -> do_unzip(rest, [x, ..xs], [y, ..ys]) + } +} + +/// Takes a single list of 2-element tuples and returns two lists. +/// +/// ## Examples +/// +/// ```gleam +/// > unzip([#(1, 2), #(3, 4)]) +/// #([1, 3], [2, 4]) +/// ``` +/// +/// ```gleam +/// > unzip([]) +/// #([], []) +/// ``` +/// +pub fn unzip(input: List(#(a, b))) -> #(List(a), List(b)) { + do_unzip(input, [], []) +} + +fn do_intersperse(list: List(a), separator: a, acc: List(a)) -> List(a) { + case list { + [] -> reverse(acc) + [x, ..rest] -> do_intersperse(rest, separator, [x, separator, ..acc]) + } +} + +/// Inserts a given value between each existing element in a given list. +/// +/// This function runs in linear time and copies the list. +/// +/// ## Examples +/// +/// ```gleam +/// > intersperse([1, 1, 1], 2) +/// [1, 2, 1, 2, 1] +/// ``` +/// +/// ```gleam +/// > intersperse([], 2) +/// [] +/// ``` +/// +pub fn intersperse(list: List(a), with elem: a) -> List(a) { + case list { + [] | [_] -> list + [x, ..rest] -> do_intersperse(rest, elem, [x]) + } +} + +/// Returns the element in the Nth position in the list, with 0 being the first +/// position. +/// +/// `Error(Nil)` is returned if the list is not long enough for the given index +/// or if the index is less than 0. +/// +/// ## Examples +/// +/// ```gleam +/// > at([1, 2, 3], 1) +/// Ok(2) +/// ``` +/// +/// ```gleam +/// > at([1, 2, 3], 5) +/// Error(Nil) +/// ``` +/// +pub fn at(in list: List(a), get index: Int) -> Result(a, Nil) { + case index >= 0 { + True -> + list + |> drop(index) + |> first + False -> Error(Nil) + } +} + +/// Removes any duplicate elements from a given list. +/// +/// This function returns in loglinear time. +/// +/// ## Examples +/// +/// ```gleam +/// > unique([1, 1, 1, 4, 7, 3, 3, 4]) +/// [1, 4, 7, 3] +/// ``` +/// +pub fn unique(list: List(a)) -> List(a) { + case list { + [] -> [] + [x, ..rest] -> [x, ..unique(filter(rest, fn(y) { y != x }))] + } +} + +/// Merge lists `a` and `b` in ascending order +/// but only up to `na` and `nb` number of items respectively. +/// +fn merge_up( + na: Int, + nb: Int, + a: List(a), + b: List(a), + acc: List(a), + compare: fn(a, a) -> Order, +) { + case na, nb, a, b { + 0, 0, _, _ -> acc + _, 0, [ax, ..ar], _ -> merge_up(na - 1, nb, ar, b, [ax, ..acc], compare) + 0, _, _, [bx, ..br] -> merge_up(na, nb - 1, a, br, [bx, ..acc], compare) + _, _, [ax, ..ar], [bx, ..br] -> + case compare(ax, bx) { + order.Gt -> merge_up(na, nb - 1, a, br, [bx, ..acc], compare) + _ -> merge_up(na - 1, nb, ar, b, [ax, ..acc], compare) + } + _, _, _, _ -> acc + } +} + +/// Merge lists `a` and `b` in descending order +/// but only up to `na` and `nb` number of items respectively. +/// +fn merge_down( + na: Int, + nb: Int, + a: List(a), + b: List(a), + acc: List(a), + compare: fn(a, a) -> Order, +) { + case na, nb, a, b { + 0, 0, _, _ -> acc + _, 0, [ax, ..ar], _ -> merge_down(na - 1, nb, ar, b, [ax, ..acc], compare) + 0, _, _, [bx, ..br] -> merge_down(na, nb - 1, a, br, [bx, ..acc], compare) + _, _, [ax, ..ar], [bx, ..br] -> + case compare(bx, ax) { + order.Lt -> merge_down(na - 1, nb, ar, b, [ax, ..acc], compare) + _ -> merge_down(na, nb - 1, a, br, [bx, ..acc], compare) + } + _, _, _, _ -> acc + } +} + +/// Merge sort that alternates merging in ascending and descending order +/// because the merge process also reverses the list. +/// +/// Some copying is avoided by merging only a subset of the lists +/// instead of creating and merging new smaller lists. +/// +fn merge_sort( + l: List(a), + ln: Int, + compare: fn(a, a) -> Order, + down: Bool, +) -> List(a) { + let n = ln / 2 + let a = l + let b = drop(l, n) + case ln < 3 { + True -> + case down { + True -> merge_down(n, ln - n, a, b, [], compare) + False -> merge_up(n, ln - n, a, b, [], compare) + } + False -> + case down { + True -> + merge_down( + n, + ln - n, + merge_sort(a, n, compare, False), + merge_sort(b, ln - n, compare, False), + [], + compare, + ) + False -> + merge_up( + n, + ln - n, + merge_sort(a, n, compare, True), + merge_sort(b, ln - n, compare, True), + [], + compare, + ) + } + } +} + +/// Sorts from smallest to largest based upon the ordering specified by a given +/// function. +/// +/// ## Examples +/// +/// ```gleam +/// > import gleam/int +/// > list.sort([4, 3, 6, 5, 4, 1, 2], by: int.compare) +/// [1, 2, 3, 4, 4, 5, 6] +/// ``` +/// +pub fn sort(list: List(a), by compare: fn(a, a) -> Order) -> List(a) { + merge_sort(list, length(list), compare, True) +} + +/// Creates a list of ints ranging from a given start and finish. +/// +/// ## Examples +/// +/// ```gleam +/// > range(0, 0) +/// [0] +/// ``` +/// +/// ```gleam +/// > range(0, 5) +/// [0, 1, 2, 3, 4, 5] +/// ``` +/// +/// ```gleam +/// > range(1, -5) +/// [1, 0, -1, -2, -3, -4, -5] +/// ``` +/// +pub fn range(from start: Int, to stop: Int) -> List(Int) { + tail_recursive_range(start, stop, []) +} + +fn tail_recursive_range(start: Int, stop: Int, acc: List(Int)) -> List(Int) { + case int.compare(start, stop) { + order.Eq -> [stop, ..acc] + order.Gt -> tail_recursive_range(start, stop + 1, [stop, ..acc]) + order.Lt -> tail_recursive_range(start, stop - 1, [stop, ..acc]) + } +} + +fn do_repeat(a: a, times: Int, acc: List(a)) -> List(a) { + case times <= 0 { + True -> acc + False -> do_repeat(a, times - 1, [a, ..acc]) + } +} + +/// Builds a list of a given value a given number of times. +/// +/// ## Examples +/// +/// ```gleam +/// > repeat("a", times: 0) +/// [] +/// ``` +/// +/// ```gleam +/// > repeat("a", times: 5) +/// ["a", "a", "a", "a", "a"] +/// ``` +/// +pub fn repeat(item a: a, times times: Int) -> List(a) { + do_repeat(a, times, []) +} + +fn do_split(list: List(a), n: Int, taken: List(a)) -> #(List(a), List(a)) { + case n <= 0 { + True -> #(reverse(taken), list) + False -> + case list { + [] -> #(reverse(taken), []) + [x, ..xs] -> do_split(xs, n - 1, [x, ..taken]) + } + } +} + +/// Splits a list in two before the given index. +/// +/// If the list is not long enough to have the given index the before list will +/// be the input list, and the after list will be empty. +/// +/// ## Examples +/// +/// ```gleam +/// > split([6, 7, 8, 9], 0) +/// #([], [6, 7, 8, 9]) +/// ``` +/// +/// ```gleam +/// > split([6, 7, 8, 9], 2) +/// #([6, 7], [8, 9]) +/// ``` +/// +/// ```gleam +/// > split([6, 7, 8, 9], 4) +/// #([6, 7, 8, 9], []) +/// ``` +/// +pub fn split(list list: List(a), at index: Int) -> #(List(a), List(a)) { + do_split(list, index, []) +} + +fn do_split_while( + list: List(a), + f: fn(a) -> Bool, + acc: List(a), +) -> #(List(a), List(a)) { + case list { + [] -> #(reverse(acc), []) + [x, ..xs] -> + case f(x) { + False -> #(reverse(acc), list) + _ -> do_split_while(xs, f, [x, ..acc]) + } + } +} + +/// Splits a list in two before the first element that a given function returns +/// `False` for. +/// +/// If the function returns `True` for all elements the first list will be the +/// input list, and the second list will be empty. +/// +/// ## Examples +/// +/// ```gleam +/// > split_while([1, 2, 3, 4, 5], fn(x) { x <= 3 }) +/// #([1, 2, 3], [4, 5]) +/// ``` +/// +/// ```gleam +/// > split_while([1, 2, 3, 4, 5], fn(x) { x <= 5 }) +/// #([1, 2, 3, 4, 5], []) +/// ``` +/// +pub fn split_while( + list list: List(a), + satisfying predicate: fn(a) -> Bool, +) -> #(List(a), List(a)) { + do_split_while(list, predicate, []) +} + +/// Given a list of 2-element tuples, finds the first tuple that has a given +/// key as the first element and returns the second element. +/// +/// If no tuple is found with the given key then `Error(Nil)` is returned. +/// +/// This function may be useful for interacting with Erlang code where lists of +/// tuples are common. +/// +/// ## Examples +/// +/// ```gleam +/// > key_find([#("a", 0), #("b", 1)], "a") +/// Ok(0) +/// ``` +/// +/// ```gleam +/// > key_find([#("a", 0), #("b", 1)], "b") +/// Ok(1) +/// ``` +/// +/// ```gleam +/// > key_find([#("a", 0), #("b", 1)], "c") +/// Error(Nil) +/// ``` +/// +pub fn key_find( + in keyword_list: List(#(k, v)), + find desired_key: k, +) -> Result(v, Nil) { + find_map( + keyword_list, + fn(keyword) { + let #(key, value) = keyword + case key == desired_key { + True -> Ok(value) + False -> Error(Nil) + } + }, + ) +} + +/// Given a list of 2-element tuples, finds all tuples that have a given +/// key as the first element and returns the second element. +/// +/// This function may be useful for interacting with Erlang code where lists of +/// tuples are common. +/// +/// ## Examples +/// +/// ```gleam +/// > key_filter([#("a", 0), #("b", 1), #("a", 2)], "a") +/// [0, 2] +/// ``` +/// +/// ```gleam +/// > key_filter([#("a", 0), #("b", 1)], "c") +/// [] +/// ``` +/// +pub fn key_filter( + in keyword_list: List(#(k, v)), + find desired_key: k, +) -> List(v) { + filter_map( + keyword_list, + fn(keyword) { + let #(key, value) = keyword + case key == desired_key { + True -> Ok(value) + False -> Error(Nil) + } + }, + ) +} + +fn do_pop(haystack, predicate, checked) { + case haystack { + [] -> Error(Nil) + [x, ..rest] -> + case predicate(x) { + True -> Ok(#(x, append(reverse(checked), rest))) + False -> do_pop(rest, predicate, [x, ..checked]) + } + } +} + +/// Removes the first element in a given list for which the predicate function returns `True`. +/// +/// Returns `Error(Nil)` if no such element is found. +/// +/// ## Examples +/// +/// ```gleam +/// > pop([1, 2, 3], fn(x) { x > 2 }) +/// Ok(#(3, [1, 2])) +/// ``` +/// +/// ```gleam +/// > pop([1, 2, 3], fn(x) { x > 4 }) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > pop([], fn(_) { True }) +/// Error(Nil) +/// ``` +/// +pub fn pop( + in haystack: List(a), + one_that is_desired: fn(a) -> Bool, +) -> Result(#(a, List(a)), Nil) { + do_pop(haystack, is_desired, []) +} + +fn do_pop_map(haystack, mapper, checked) { + case haystack { + [] -> Error(Nil) + [x, ..rest] -> + case mapper(x) { + Ok(y) -> Ok(#(y, append(reverse(checked), rest))) + Error(_) -> do_pop_map(rest, mapper, [x, ..checked]) + } + } +} + +/// Removes the first element in a given list for which the given function returns +/// `Ok(new_value)`, then returns the wrapped `new_value` as well as list with the value removed. +/// +/// Returns `Error(Nil)` if no such element is found. +/// +/// ## Examples +/// +/// ```gleam +/// > pop_map([[], [2], [3]], first) +/// Ok(#(2, [[], [3]])) +/// ``` +/// +/// ```gleam +/// > pop_map([[], []], first) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > pop_map([], first) +/// Error(Nil) +/// ``` +/// +pub fn pop_map( + in haystack: List(a), + one_that is_desired: fn(a) -> Result(b, c), +) -> Result(#(b, List(a)), Nil) { + do_pop_map(haystack, is_desired, []) +} + +/// Given a list of 2-element tuples, finds the first tuple that has a given +/// key as the first element. This function will return the second element +/// of the found tuple and list with tuple removed. +/// +/// If no tuple is found with the given key then `Error(Nil)` is returned. +/// +/// ## Examples +/// +/// ```gleam +/// > key_pop([#("a", 0), #("b", 1)], "a") +/// Ok(#(0, [#("b", 1)])) +/// ``` +/// +/// ```gleam +/// > key_pop([#("a", 0), #("b", 1)], "b") +/// Ok(#(1, [#("a", 0)])) +/// ``` +/// +/// ```gleam +/// > key_pop([#("a", 0), #("b", 1)], "c") +/// Error(Nil) +/// ``` +/// +pub fn key_pop( + haystack: List(#(k, v)), + key: k, +) -> Result(#(v, List(#(k, v))), Nil) { + pop_map( + haystack, + fn(entry) { + let #(k, v) = entry + case k { + k if k == key -> Ok(v) + _ -> Error(Nil) + } + }, + ) +} + +/// Given a list of 2-element tuples, inserts a key and value into the list. +/// +/// If there was already a tuple with the key then it is replaced, otherwise it +/// is added to the end of the list. +/// +/// ## Examples +/// +/// ```gleam +/// > key_set([#(5, 0), #(4, 1)], 4, 100) +/// [#(5, 0), #(4, 100)] +/// ``` +/// +/// ```gleam +/// > key_set([#(5, 0), #(4, 1)], 1, 100) +/// [#(5, 0), #(4, 1), #(1, 100)] +/// ``` +/// +pub fn key_set(list: List(#(a, b)), key: a, value: b) -> List(#(a, b)) { + case list { + [] -> [#(key, value)] + [#(k, _), ..rest] if k == key -> [#(key, value), ..rest] + [first, ..rest] -> [first, ..key_set(rest, key, value)] + } +} + +/// Calls a function for each element in a list, discarding the return value. +/// +/// Useful for calling a side effect for every item of a list. +/// +/// ```gleam +/// > list.each([1, 2, 3], io.println) +/// Nil +/// ``` +/// +pub fn each(list: List(a), f: fn(a) -> b) -> Nil { + case list { + [] -> Nil + [x, ..xs] -> { + f(x) + each(xs, f) + } + } +} + +/// Calls a `Result` returning function for each element in a list, discarding +/// the return value. If the function returns `Error` then the iteration is +/// stopped and the error is returned. +/// +/// Useful for calling a side effect for every item of a list. +/// +/// ## Examples +/// +/// ```gleam +/// > try_each( +/// > over: [1, 2, 3], +/// > with: function_that_might_fail, +/// > ) +/// Ok(Nil) +/// ``` +/// +pub fn try_each( + over list: List(a), + with fun: fn(a) -> Result(b, e), +) -> Result(Nil, e) { + case list { + [] -> Ok(Nil) + [x, ..xs] -> + case fun(x) { + Ok(_) -> try_each(over: xs, with: fun) + Error(e) -> Error(e) + } + } +} + +fn do_partition(list, categorise, trues, falses) { + case list { + [] -> #(reverse(trues), reverse(falses)) + [x, ..xs] -> + case categorise(x) { + True -> do_partition(xs, categorise, [x, ..trues], falses) + False -> do_partition(xs, categorise, trues, [x, ..falses]) + } + } +} + +/// Partitions a list into a tuple/pair of lists +/// by a given categorisation function. +/// +/// ## Examples +/// +/// ```gleam +/// > [1, 2, 3, 4, 5] |> list.partition(int.is_odd) +/// #([1, 3, 5], [2, 4]) +/// ``` +/// +pub fn partition( + list: List(a), + with categorise: fn(a) -> Bool, +) -> #(List(a), List(a)) { + do_partition(list, categorise, [], []) +} + +/// Returns all the permutations of a list. +/// +/// ## Examples +/// +/// ```gleam +/// > permutations([1, 2]) +/// [[1, 2], [2, 1]] +/// ``` +/// +pub fn permutations(l: List(a)) -> List(List(a)) { + case l { + [] -> [[]] + _ -> + l + |> index_map(fn(i_idx, i) { + l + |> index_fold( + [], + fn(acc, j, j_idx) { + case i_idx == j_idx { + True -> acc + False -> [j, ..acc] + } + }, + ) + |> reverse + |> permutations + |> map(fn(permutation) { [i, ..permutation] }) + }) + |> concat + } +} + +fn do_window(acc: List(List(a)), l: List(a), n: Int) -> List(List(a)) { + let window = take(l, n) + + case length(window) == n { + True -> do_window([window, ..acc], drop(l, 1), n) + False -> acc + } +} + +/// Returns a list of sliding windows. +/// +/// ## Examples +/// +/// ```gleam +/// > window([1,2,3,4,5], 3) +/// [[1, 2, 3], [2, 3, 4], [3, 4, 5]] +/// ``` +/// +/// ```gleam +/// > window([1, 2], 4) +/// [] +/// ``` +/// +pub fn window(l: List(a), by n: Int) -> List(List(a)) { + do_window([], l, n) + |> reverse +} + +/// Returns a list of tuples containing two contiguous elements. +/// +/// ## Examples +/// +/// ```gleam +/// > window_by_2([1,2,3,4]) +/// [#(1, 2), #(2, 3), #(3, 4)] +/// ``` +/// +/// ```gleam +/// > window_by_2([1]) +/// [] +/// ``` +/// +pub fn window_by_2(l: List(a)) -> List(#(a, a)) { + zip(l, drop(l, 1)) +} + +/// Drops the first elements in a given list for which the predicate function returns `True`. +/// +/// ## Examples +/// +/// ```gleam +/// > drop_while([1, 2, 3, 4], fn (x) { x < 3 }) +/// [3, 4] +/// ``` +/// +pub fn drop_while( + in list: List(a), + satisfying predicate: fn(a) -> Bool, +) -> List(a) { + case list { + [] -> [] + [x, ..xs] -> + case predicate(x) { + True -> drop_while(xs, predicate) + False -> [x, ..xs] + } + } +} + +fn do_take_while( + list: List(a), + predicate: fn(a) -> Bool, + acc: List(a), +) -> List(a) { + case list { + [] -> reverse(acc) + [first, ..rest] -> + case predicate(first) { + True -> do_take_while(rest, predicate, [first, ..acc]) + False -> reverse(acc) + } + } +} + +/// Takes the first elements in a given list for which the predicate function returns `True`. +/// +/// ## Examples +/// +/// ```gleam +/// > take_while([1, 2, 3, 2, 4], fn (x) { x < 3 }) +/// [1, 2] +/// ``` +/// +pub fn take_while( + in list: List(a), + satisfying predicate: fn(a) -> Bool, +) -> List(a) { + do_take_while(list, predicate, []) +} + +fn do_chunk( + list: List(a), + f: fn(a) -> key, + previous_key: key, + current_chunk: List(a), + acc: List(List(a)), +) -> List(List(a)) { + case list { + [first, ..rest] -> { + let key = f(first) + case key == previous_key { + False -> { + let new_acc = [reverse(current_chunk), ..acc] + do_chunk(rest, f, key, [first], new_acc) + } + _true -> do_chunk(rest, f, key, [first, ..current_chunk], acc) + } + } + _empty -> reverse([reverse(current_chunk), ..acc]) + } +} + +/// Returns a list of chunks in which +/// the return value of calling `f` on each element is the same. +/// +/// ## Examples +/// +/// ```gleam +/// > [1, 2, 2, 3, 4, 4, 6, 7, 7] |> chunk(by: fn(n) { n % 2 }) +/// [[1], [2, 2], [3], [4, 4, 6], [7, 7]] +/// ``` +/// +pub fn chunk(in list: List(a), by f: fn(a) -> key) -> List(List(a)) { + case list { + [] -> [] + [first, ..rest] -> do_chunk(rest, f, f(first), [first], []) + } +} + +fn do_sized_chunk( + list: List(a), + count: Int, + left: Int, + current_chunk: List(a), + acc: List(List(a)), +) -> List(List(a)) { + case list { + [] -> + case current_chunk { + [] -> reverse(acc) + remaining -> reverse([reverse(remaining), ..acc]) + } + [first, ..rest] -> { + let chunk = [first, ..current_chunk] + case left > 1 { + False -> do_sized_chunk(rest, count, count, [], [reverse(chunk), ..acc]) + True -> do_sized_chunk(rest, count, left - 1, chunk, acc) + } + } + } +} + +/// Returns a list of chunks containing `count` elements each. +/// +/// If the last chunk does not have `count` elements, it is instead +/// a partial chunk, with less than `count` elements. +/// +/// For any `count` less than 1 this function behaves as if it was set to 1. +/// +/// ## Examples +/// +/// ```gleam +/// > [1, 2, 3, 4, 5, 6] |> sized_chunk(into: 2) +/// [[1, 2], [3, 4], [5, 6]] +/// ``` +/// +/// ```gleam +/// > [1, 2, 3, 4, 5, 6, 7, 8] |> sized_chunk(into: 3) +/// [[1, 2, 3], [4, 5, 6], [7, 8]] +/// ``` +/// +pub fn sized_chunk(in list: List(a), into count: Int) -> List(List(a)) { + do_sized_chunk(list, count, count, [], []) +} + +/// This function acts similar to fold, but does not take an initial state. +/// Instead, it starts from the first element in the list +/// and combines it with each subsequent element in turn using the given +/// function. The function is called as `fun(accumulator, current_element)`. +/// +/// Returns `Ok` to indicate a successful run, and `Error` if called on an +/// empty list. +/// +/// ## Examples +/// +/// ```gleam +/// > [] |> reduce(fn(acc, x) { acc + x }) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > [1, 2, 3, 4, 5] |> reduce(fn(acc, x) { acc + x }) +/// Ok(15) +/// ``` +/// +pub fn reduce(over list: List(a), with fun: fn(a, a) -> a) -> Result(a, Nil) { + case list { + [] -> Error(Nil) + [first, ..rest] -> Ok(fold(rest, first, fun)) + } +} + +fn do_scan( + list: List(a), + accumulator: acc, + accumulated: List(acc), + fun: fn(acc, a) -> acc, +) -> List(acc) { + case list { + [] -> reverse(accumulated) + [x, ..xs] -> { + let next = fun(accumulator, x) + do_scan(xs, next, [next, ..accumulated], fun) + } + } +} + +/// Similar to `fold`, but yields the state of the accumulator at each stage. +/// +/// ## Examples +/// +/// ```gleam +/// > scan(over: [1, 2, 3], from: 100, with: fn(acc, i) { acc + i }) +/// [101, 103, 106] +/// ``` +/// +pub fn scan( + over list: List(a), + from initial: acc, + with fun: fn(acc, a) -> acc, +) -> List(acc) { + do_scan(list, initial, [], fun) +} + +/// Returns the last element in the given list. +/// +/// Returns `Error(Nil)` if the list is empty. +/// +/// This function runs in linear time. +/// For a collection oriented around performant access at either end, +/// see `gleam/queue.Queue`. +/// +/// ## Examples +/// +/// ```gleam +/// > last([]) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > last([1, 2, 3, 4, 5]) +/// Ok(5) +/// ``` +/// +pub fn last(list: List(a)) -> Result(a, Nil) { + list + |> reduce(fn(_, elem) { elem }) +} + +/// Return unique combinations of elements in the list. +/// +/// ## Examples +/// +/// ```gleam +/// > combinations([1, 2, 3], 2) +/// [[1, 2], [1, 3], [2, 3]] +/// ``` +/// +/// ```gleam +/// > combinations([1, 2, 3, 4], 3) +/// [[1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]] +/// ``` +/// +pub fn combinations(items: List(a), by n: Int) -> List(List(a)) { + case n { + 0 -> [[]] + _ -> + case items { + [] -> [] + [x, ..xs] -> { + let first_combinations = + map(combinations(xs, n - 1), with: fn(com) { [x, ..com] }) + |> reverse + fold( + first_combinations, + combinations(xs, n), + fn(acc, c) { [c, ..acc] }, + ) + } + } + } +} + +fn do_combination_pairs(items: List(a)) -> List(List(#(a, a))) { + case items { + [] -> [] + [x, ..xs] -> { + let first_combinations = map(xs, with: fn(other) { #(x, other) }) + [first_combinations, ..do_combination_pairs(xs)] + } + } +} + +/// Return unique pair combinations of elements in the list +/// +/// ## Examples +/// +/// ```gleam +/// > combination_pairs([1, 2, 3]) +/// [#(1, 2), #(1, 3), #(2, 3)] +/// ``` +/// +pub fn combination_pairs(items: List(a)) -> List(#(a, a)) { + do_combination_pairs(items) + |> concat +} + +/// Make a list alternating the elements from the given lists +/// +/// ## Examples +/// +/// ```gleam +/// > list.interleave([[1, 2], [101, 102], [201, 202]]) +/// [1, 101, 201, 2, 102, 202] +/// ``` +/// +pub fn interleave(list: List(List(a))) -> List(a) { + transpose(list) + |> concat +} + +/// Transpose rows and columns of the list of lists. +/// +/// Notice: This function is not tail recursive, +/// and thus may exceed stack size if called, +/// with large lists (on target JavaScript). +/// +/// ## Examples +/// +/// ```gleam +/// > transpose([[1, 2, 3], [101, 102, 103]]) +/// [[1, 101], [2, 102], [3, 103]] +/// ``` +/// +pub fn transpose(list_of_list: List(List(a))) -> List(List(a)) { + let take_first = fn(list) { + case list { + [] -> [] + [f] -> [f] + [f, ..] -> [f] + } + } + + case list_of_list { + [] -> [] + [[], ..xss] -> transpose(xss) + rows -> { + let firsts = + rows + |> map(take_first) + |> concat + let rest = transpose(map(rows, drop(_, 1))) + [firsts, ..rest] + } + } +} + +fn do_shuffle_pair_unwrap(list: List(#(Float, a)), acc: List(a)) -> List(a) { + case list { + [] -> acc + [elem_pair, ..enumerable] -> + do_shuffle_pair_unwrap(enumerable, [elem_pair.1, ..acc]) + } +} + +fn do_shuffle_by_pair_indexes( + list_of_pairs: List(#(Float, a)), +) -> List(#(Float, a)) { + sort( + list_of_pairs, + fn(a_pair: #(Float, a), b_pair: #(Float, a)) -> Order { + float.compare(a_pair.0, b_pair.0) + }, + ) +} + +/// Takes a list, randomly sorts all items and returns the shuffled list. +/// +/// This function uses Erlang's `:rand` module or Javascript's +/// `Math.random()` to calculate the index shuffling. +/// +/// ## Example +/// +/// ```gleam +/// > range(1, 10) +/// > |> shuffle() +/// [1, 6, 9, 10, 3, 8, 4, 2, 7, 5] +/// ``` +/// +pub fn shuffle(list: List(a)) -> List(a) { + list + |> fold(from: [], with: fn(acc, a) { [#(float.random(0.0, 1.0), a), ..acc] }) + |> do_shuffle_by_pair_indexes() + |> do_shuffle_pair_unwrap([]) +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/map.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/map.gleam new file mode 100644 index 0000000..1f8b228 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/map.gleam @@ -0,0 +1,127 @@ +import gleam/option.{type Option} +import gleam/dict + +@deprecated("Please use the `gleam/dict` module instead") +pub type Map(key, value) = + dict.Dict(key, value) + +@deprecated("Please use the `gleam/dict` module instead") +pub fn size(map) -> Int { + dict.size(map) +} + +@deprecated("Please use the `gleam/dict` module instead") +pub fn to_list(map) -> List(#(key, value)) { + dict.to_list(map) +} + +@deprecated("Please use the `gleam/dict` module instead") +pub fn from_list(list: List(#(k, v))) { + dict.from_list(list) +} + +@deprecated("Please use the `gleam/dict` module instead") +pub fn has_key(map, key: k) -> Bool { + dict.has_key(map, key) +} + +@deprecated("Please use the `gleam/dict` module instead") +pub fn new() { + dict.new() +} + +@deprecated("Please use the `gleam/dict` module instead") +pub fn get(from, get: key) -> Result(value, Nil) { + dict.get(from, get) +} + +@deprecated("Please use the `gleam/dict` module instead") +pub fn insert(into map, for key: k, insert value: v) { + dict.insert(map, key, value) +} + +@deprecated("Please use the `gleam/dict` module instead") +pub fn map_values(in map, with fun: fn(k, v) -> w) { + dict.map_values(map, fun) +} + +@deprecated("Please use the `gleam/dict` module instead") +pub fn keys(map) -> List(keys) { + dict.keys(map) +} + +@target(javascript) +fn reverse_and_concat(remaining, accumulator) { + case remaining { + [] -> accumulator + [item, ..rest] -> reverse_and_concat(rest, [item, ..accumulator]) + } +} + +@target(javascript) +fn do_keys_acc(list: List(#(k, v)), acc: List(k)) -> List(k) { + case list { + [] -> reverse_and_concat(acc, []) + [x, ..xs] -> do_keys_acc(xs, [x.0, ..acc]) + } +} + +@target(javascript) +fn do_keys(map) -> List(k) { + let list_of_pairs = + map + |> to_list + do_keys_acc(list_of_pairs, []) +} + +@deprecated("Please use the `gleam/dict` module instead") +pub fn values(map) -> List(values) { + dict.values(map) +} + +@deprecated("Please use the `gleam/dict` module instead") +pub fn filter(in map, keeping predicate: fn(k, v) -> Bool) { + dict.filter(map, predicate) +} + +@target(javascript) +fn do_filter(f: fn(key, value) -> Bool, map) { + let insert = fn(map, k, v) { + case f(k, v) { + True -> insert(map, k, v) + _ -> map + } + } + map + |> fold(from: new(), with: insert) +} + +@deprecated("Please use the `gleam/dict` module instead") +pub fn take(from map, keeping desired_keys: List(k)) { + dict.take(map, desired_keys) +} + +@deprecated("Please use the `gleam/dict` module instead") +pub fn merge(into map, from new_entries) { + dict.merge(map, new_entries) +} + +@deprecated("Please use the `gleam/dict` module instead") +pub fn delete(from map, delete key: k) { + dict.delete(map, key) +} + +@deprecated("Please use the `gleam/dict` module instead") +pub fn drop(from map, drop disallowed_keys: List(k)) { + dict.drop(map, disallowed_keys) +} + +@deprecated("Please use the `gleam/dict` module instead") +pub fn update(in map, update key: k, with fun: fn(Option(v)) -> v) { + dict.update(map, key, fun) +} + +@deprecated("Please use the `gleam/dict` module instead") +pub fn fold(over map, from initial: acc, with fun: fn(acc, k, v) -> acc) -> acc { + dict.fold(map, initial, fun) +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/option.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/option.gleam new file mode 100644 index 0000000..6015c0f --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/option.gleam @@ -0,0 +1,346 @@ +/// `Option` represents a value that may be present or not. `Some` means the value is +/// present, `None` means the value is not. +/// +/// This is Gleam's alternative to having a value that could be Null, as is +/// possible in some other languages. +/// +pub type Option(a) { + Some(a) + None +} + +fn do_all(list: List(Option(a)), acc: List(a)) -> Option(List(a)) { + case list { + [] -> Some(acc) + [x, ..rest] -> { + let accumulate = fn(acc, item) { + case acc, item { + Some(values), Some(value) -> Some([value, ..values]) + _, _ -> None + } + } + accumulate(do_all(rest, acc), x) + } + } +} + +/// Combines a list of `Option`s into a single `Option`. +/// If all elements in the list are `Some` then returns a `Some` holding the list of values. +/// If any element is `None` then returns`None`. +/// +/// ## Examples +/// +/// ```gleam +/// > all([Some(1), Some(2)]) +/// Some([1, 2]) +/// ``` +/// +/// ```gleam +/// > all([Some(1), None]) +/// None +/// ``` +/// +pub fn all(list: List(Option(a))) -> Option(List(a)) { + do_all(list, []) +} + +/// Checks whether the `Option` is a `Some` value. +/// +/// ## Examples +/// +/// ```gleam +/// > is_some(Some(1)) +/// True +/// ``` +/// +/// ```gleam +/// > is_some(None) +/// False +/// ``` +/// +pub fn is_some(option: Option(a)) -> Bool { + option != None +} + +/// Checks whether the `Option` is a `None` value. +/// +/// ## Examples +/// +/// ```gleam +/// > is_none(Some(1)) +/// False +/// ``` +/// +/// ```gleam +/// > is_none(None) +/// True +/// ``` +/// +pub fn is_none(option: Option(a)) -> Bool { + option == None +} + +/// Converts an `Option` type to a `Result` type. +/// +/// ## Examples +/// +/// ```gleam +/// > to_result(Some(1), "some_error") +/// Ok(1) +/// ``` +/// +/// ```gleam +/// > to_result(None, "some_error") +/// Error("some_error") +/// ``` +/// +pub fn to_result(option: Option(a), e) -> Result(a, e) { + case option { + Some(a) -> Ok(a) + _ -> Error(e) + } +} + +/// Converts a `Result` type to an `Option` type. +/// +/// ## Examples +/// +/// ```gleam +/// > from_result(Ok(1)) +/// Some(1) +/// ``` +/// +/// ```gleam +/// > from_result(Error("some_error")) +/// None +/// ``` +/// +pub fn from_result(result: Result(a, e)) -> Option(a) { + case result { + Ok(a) -> Some(a) + _ -> None + } +} + +/// Extracts the value from an `Option`, returning a default value if there is none. +/// +/// ## Examples +/// +/// ```gleam +/// > unwrap(Some(1), 0) +/// 1 +/// ``` +/// +/// ```gleam +/// > unwrap(None, 0) +/// 0 +/// ``` +/// +pub fn unwrap(option: Option(a), or default: a) -> a { + case option { + Some(x) -> x + None -> default + } +} + +/// Extracts the value from an `Option`, evaluating the default function if the option is `None`. +/// +/// ## Examples +/// +/// ```gleam +/// > lazy_unwrap(Some(1), fn() { 0 }) +/// 1 +/// ``` +/// +/// ```gleam +/// > lazy_unwrap(None, fn() { 0 }) +/// 0 +/// ``` +/// +pub fn lazy_unwrap(option: Option(a), or default: fn() -> a) -> a { + case option { + Some(x) -> x + None -> default() + } +} + +/// Updates a value held within the `Some` of an `Option` by calling a given function +/// on it. +/// +/// If the `Option` is a `None` rather than `Some`, the function is not called and the +/// `Option` stays the same. +/// +/// ## Examples +/// +/// ```gleam +/// > map(over: Some(1), with: fn(x) { x + 1 }) +/// Some(2) +/// ``` +/// +/// ```gleam +/// > map(over: None, with: fn(x) { x + 1 }) +/// None +/// ``` +/// +pub fn map(over option: Option(a), with fun: fn(a) -> b) -> Option(b) { + case option { + Some(x) -> Some(fun(x)) + None -> None + } +} + +/// Merges a nested `Option` into a single layer. +/// +/// ## Examples +/// +/// ```gleam +/// > flatten(Some(Some(1))) +/// Some(1) +/// ``` +/// +/// ```gleam +/// > flatten(Some(None)) +/// None +/// ``` +/// +/// ```gleam +/// > flatten(None) +/// None +/// ``` +/// +pub fn flatten(option: Option(Option(a))) -> Option(a) { + case option { + Some(x) -> x + None -> None + } +} + +/// Updates a value held within the `Some` of an `Option` by calling a given function +/// on it, where the given function also returns an `Option`. The two options are +/// then merged together into one `Option`. +/// +/// If the `Option` is a `None` rather than `Some` the function is not called and the +/// option stays the same. +/// +/// This function is the equivalent of calling `map` followed by `flatten`, and +/// it is useful for chaining together multiple functions that return `Option`. +/// +/// ## Examples +/// +/// ```gleam +/// > then(Some(1), fn(x) { Some(x + 1) }) +/// Some(2) +/// ``` +/// +/// ```gleam +/// > then(Some(1), fn(x) { Some(#("a", x)) }) +/// Some(#("a", 1)) +/// ``` +/// +/// ```gleam +/// > then(Some(1), fn(_) { None }) +/// None +/// ``` +/// +/// ```gleam +/// > then(None, fn(x) { Some(x + 1) }) +/// None +/// ``` +/// +pub fn then(option: Option(a), apply fun: fn(a) -> Option(b)) -> Option(b) { + case option { + Some(x) -> fun(x) + None -> None + } +} + +/// Returns the first value if it is `Some`, otherwise returns the second value. +/// +/// ## Examples +/// +/// ```gleam +/// > or(Some(1), Some(2)) +/// Some(1) +/// ``` +/// +/// ```gleam +/// > or(Some(1), None) +/// Some(1) +/// ``` +/// +/// ```gleam +/// > or(None, Some(2)) +/// Some(2) +/// ``` +/// +/// ```gleam +/// > or(None, None) +/// None +/// ``` +/// +pub fn or(first: Option(a), second: Option(a)) -> Option(a) { + case first { + Some(_) -> first + None -> second + } +} + +/// Returns the first value if it is `Some`, otherwise evaluates the given function for a fallback value. +/// +/// ## Examples +/// +/// ```gleam +/// > lazy_or(Some(1), fn() { Some(2) }) +/// Some(1) +/// ``` +/// +/// ```gleam +/// > lazy_or(Some(1), fn() { None }) +/// Some(1) +/// ``` +/// +/// ```gleam +/// > lazy_or(None, fn() { Some(2) }) +/// Some(2) +/// ``` +/// +/// ```gleam +/// > lazy_or(None, fn() { None }) +/// None +/// ``` +/// +pub fn lazy_or(first: Option(a), second: fn() -> Option(a)) -> Option(a) { + case first { + Some(_) -> first + None -> second() + } +} + +fn do_values(list: List(Option(a)), acc: List(a)) -> List(a) { + case list { + [] -> acc + [x, ..xs] -> { + let accumulate = fn(acc, item) { + case item { + Some(value) -> [value, ..acc] + None -> acc + } + } + accumulate(do_values(xs, acc), x) + } + } +} + +/// Given a list of `Option`s, +/// returns only the values inside `Some`. +/// +/// ## Examples +/// +/// ```gleam +/// > values([Some(1), None, Some(3)]) +/// [1, 3] +/// ``` +/// +pub fn values(options: List(Option(a))) -> List(a) { + do_values(options, []) +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/order.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/order.gleam new file mode 100644 index 0000000..12ce011 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/order.gleam @@ -0,0 +1,133 @@ +/// Represents the result of a single comparison to determine the precise +/// ordering of two values. +/// +pub type Order { + /// Less-than + Lt + + /// Equal + Eq + + /// Greater than + Gt +} + +/// Inverts an order, so less-than becomes greater-than and greater-than +/// becomes less-than. +/// +/// ## Examples +/// +/// ```gleam +/// > negate(Lt) +/// Gt +/// ``` +/// +/// ```gleam +/// > negate(Eq) +/// Eq +/// ``` +/// +/// ```gleam +/// > negate(Lt) +/// Gt +/// ``` +/// +pub fn negate(order: Order) -> Order { + case order { + Lt -> Gt + Eq -> Eq + Gt -> Lt + } +} + +/// Produces a numeric representation of the order. +/// +/// ## Examples +/// +/// ```gleam +/// > to_int(Lt) +/// -1 +/// ``` +/// +/// ```gleam +/// > to_int(Eq) +/// 0 +/// ``` +/// +/// ```gleam +/// > to_int(Gt) +/// 1 +/// ``` +/// +pub fn to_int(order: Order) -> Int { + case order { + Lt -> -1 + Eq -> 0 + Gt -> 1 + } +} + +/// Compares two `Order` values to one another, producing a new `Order`. +/// +/// ## Examples +/// +/// ```gleam +/// > compare(Eq, with: Lt) +/// Gt +/// ``` +/// +pub fn compare(a: Order, with b: Order) -> Order { + case a, b { + x, y if x == y -> Eq + Lt, _ | Eq, Gt -> Lt + _, _ -> Gt + } +} + +/// Returns the largest of two orders given that `Gt > Eq > Lt`. +/// +/// ## Examples +/// +/// ```gleam +/// > max(Eq, Lt) +/// Eq +/// ``` +/// +pub fn max(a: Order, b: Order) -> Order { + case a, b { + Gt, _ -> Gt + Eq, Lt -> Eq + _, _ -> b + } +} + +/// Returns the smallest of two orders given that `Gt > Eq > Lt`. +/// +/// ## Examples +/// +/// ```gleam +/// > min(Eq, Lt) +/// Lt +/// ``` +/// +pub fn min(a: Order, b: Order) -> Order { + case a, b { + Lt, _ -> Lt + Eq, Gt -> Eq + _, _ -> b + } +} + +/// Inverts an ordering function, so less-than becomes greater-than and greater-than +/// becomes less-than. +/// +/// ## Examples +/// +/// ```gleam +/// > list.sort([1, 5, 4], by: reverse(int.compare)) +/// [5, 4, 1] +/// ``` +/// +pub fn reverse(orderer: fn(a, a) -> Order) -> fn(a, a) -> Order { + fn(a, b) { orderer(b, a) } +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/pair.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/pair.gleam new file mode 100644 index 0000000..894e6a8 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/pair.gleam @@ -0,0 +1,85 @@ +/// Returns the first element in a pair. +/// +/// ## Examples +/// +/// ```gleam +/// > first(#(1, 2)) +/// 1 +/// ``` +/// +pub fn first(pair: #(a, b)) -> a { + let #(a, _) = pair + a +} + +/// Returns the second element in a pair. +/// +/// ## Examples +/// +/// ```gleam +/// > second(#(1, 2)) +/// 2 +/// ``` +/// +pub fn second(pair: #(a, b)) -> b { + let #(_, a) = pair + a +} + +/// Returns a new pair with the elements swapped. +/// +/// ## Examples +/// +/// ```gleam +/// > swap(#(1, 2)) +/// #(2, 1) +/// ``` +/// +pub fn swap(pair: #(a, b)) -> #(b, a) { + let #(a, b) = pair + #(b, a) +} + +/// Returns a new pair with the first element having had `with` applied to +/// it. +/// +/// ## Examples +/// +/// ```gleam +/// > #(1, 2) |> map_first(fn(n) { n * 2 }) +/// #(2, 2) +/// ``` +/// +pub fn map_first(of pair: #(a, b), with fun: fn(a) -> c) -> #(c, b) { + let #(a, b) = pair + #(fun(a), b) +} + +/// Returns a new pair with the second element having had `with` applied to +/// it. +/// +/// ## Examples +/// +/// ```gleam +/// > #(1, 2) |> map_second(fn(n) { n * 2 }) +/// #(1, 4) +/// ``` +/// +pub fn map_second(of pair: #(a, b), with fun: fn(b) -> c) -> #(a, c) { + let #(a, b) = pair + #(a, fun(b)) +} + +/// Returns a new pair with the given elements. This can also be done using the dedicated +/// syntax instead: `new(1, 2) == #(1, 2)`. +/// +/// ## Examples +/// +/// ```gleam +/// > new(1, 2) +/// #(1, 2) +/// ``` +/// +pub fn new(first: a, second: b) -> #(a, b) { + #(first, second) +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/queue.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/queue.gleam new file mode 100644 index 0000000..5bf60c8 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/queue.gleam @@ -0,0 +1,292 @@ +import gleam/list + +/// A queue is an ordered collection of elements. It is similar to a list, but +/// unlike a list elements can be added to or removed from either the front or +/// the back in a performant fashion. +/// +/// The internal representation may be different for two queues with the same +/// elements in the same order if the queues were constructed in different +/// ways. This is the price paid for a queue's fast access at both the front +/// and the back. +/// +/// Because of unpredictable internal representation the equality operator `==` +/// may return surprising results, and the `is_equal` and `is_logically_equal` +/// functions are the recommended way to test queues for equality. +/// +pub opaque type Queue(element) { + Queue(in: List(element), out: List(element)) +} + +/// Creates a fresh queue that contains no values. +/// +pub fn new() -> Queue(a) { + Queue(in: [], out: []) +} + +/// Converts a list of elements into a queue of the same elements in the same +/// order. The first element in the list becomes the front element in the queue. +/// +/// This function runs in constant time. +/// +/// # Examples +/// +/// ```gleam +/// > [1, 2, 3] |> from_list |> length +/// 3 +/// ``` +/// +pub fn from_list(list: List(a)) -> Queue(a) { + Queue(in: [], out: list) +} + +/// Converts a queue of elements into a list of the same elements in the same +/// order. The front element in the queue becomes the first element in the list. +/// +/// This function runs in linear time. +/// +/// # Examples +/// +/// ```gleam +/// > new() |> push_back(1) |> push_back(2) |> to_list +/// [1, 2] +/// ``` +/// +pub fn to_list(queue: Queue(a)) -> List(a) { + queue.out + |> list.append(list.reverse(queue.in)) +} + +/// Determines whether or not the queue is empty. +/// +/// This function runs in constant time. +/// +/// ## Examples +/// +/// ```gleam +/// > [] |> from_list |> is_empty +/// True +/// ``` +/// +/// ```gleam +/// > [1] |> from_list |> is_empty +/// False +/// ``` +/// +/// ```gleam +/// > [1, 2] |> from_list |> is_empty +/// False +/// ``` +/// +pub fn is_empty(queue: Queue(a)) -> Bool { + queue.in == [] && queue.out == [] +} + +/// Counts the number of elements in a given queue. +/// +/// This function has to traverse the queue to determine the number of elements, +/// so it runs in linear time. +/// +/// ## Examples +/// +/// ```gleam +/// > length(from_list([])) +/// 0 +/// ``` +/// +/// ```gleam +/// > length(from_list([1])) +/// 1 +/// ``` +/// +/// ```gleam +/// > length(from_list([1, 2])) +/// 2 +/// ``` +/// +pub fn length(queue: Queue(a)) -> Int { + list.length(queue.in) + list.length(queue.out) +} + +/// Pushes an element onto the back of the queue. +/// +/// # Examples +/// +/// ```gleam +/// > [1, 2] |> from_list |> push_back(3) |> to_list +/// [1, 2, 3] +/// ``` +/// +pub fn push_back(onto queue: Queue(a), this item: a) -> Queue(a) { + Queue(in: [item, ..queue.in], out: queue.out) +} + +/// Pushes an element onto the front of the queue. +/// +/// # Examples +/// +/// ```gleam +/// > [0, 0] |> from_list |> push_front(1) |> to_list +/// [1, 0, 0] +/// ``` +/// +pub fn push_front(onto queue: Queue(a), this item: a) -> Queue(a) { + Queue(in: queue.in, out: [item, ..queue.out]) +} + +/// Gets the last element from the queue, returning the +/// element and a new queue without that element. +/// +/// This function typically runs in constant time, but will occasionally run in +/// linear time. +/// +/// # Examples +/// +/// ```gleam +/// > new() +/// > |> push_back(0) +/// > |> push_back(1) +/// > |> pop_back() +/// Ok(#(1, push_front(new(), 0))) +/// ``` +/// +/// ```gleam +/// > new() +/// > |> push_front(0) +/// > |> pop_back() +/// Ok(#(0, new())) +/// ``` +/// +/// ```gleam +/// > new() +/// > |> pop_back() +/// Error(Nil) +/// ``` +/// +pub fn pop_back(from queue: Queue(a)) -> Result(#(a, Queue(a)), Nil) { + case queue { + Queue(in: [], out: []) -> Error(Nil) + Queue(in: [], out: out) -> pop_back(Queue(in: list.reverse(out), out: [])) + Queue(in: [first, ..rest], out: out) -> { + let queue = Queue(in: rest, out: out) + Ok(#(first, queue)) + } + } +} + +/// Gets the first element from the queue, returning the +/// element and a new queue without that element. +/// +/// This function typically runs in constant time, but will occasionally run in +/// linear time. +/// +/// # Examples +/// +/// ```gleam +/// > queue.new() +/// > |> queue.push_front(1) +/// > |> queue.push_front(0) +/// > |> queue.pop_front() +/// Ok(#(0, queue.push_back(queue.new(), 1))) +/// ``` +/// +/// ```gleam +/// > queue.new() +/// > |> queue.push_back(0) +/// > |> queue.pop_front() +/// Ok(#(0, queue.new())) +/// ``` +/// +/// ```gleam +/// > queue.new() +/// > |> queue.pop_back() +/// Error(Nil) +/// ``` +/// +pub fn pop_front(from queue: Queue(a)) -> Result(#(a, Queue(a)), Nil) { + case queue { + Queue(in: [], out: []) -> Error(Nil) + Queue(in: in, out: []) -> pop_front(Queue(in: [], out: list.reverse(in))) + Queue(in: in, out: [first, ..rest]) -> { + let queue = Queue(in: in, out: rest) + Ok(#(first, queue)) + } + } +} + +/// Creates a new queue from a given queue containing the same elements, but in +/// the opposite order. +/// +/// This function runs in constant time. +/// +/// ## Examples +/// +/// ```gleam +/// > [] |> from_list |> reverse |> to_list +/// [] +/// ``` +/// +/// ```gleam +/// > [1] |> from_list |> reverse |> to_list +/// [1] +/// ``` +/// +/// ```gleam +/// > [1, 2] |> from_list |> reverse |> to_list +/// [2, 1] +/// ``` +/// +pub fn reverse(queue: Queue(a)) -> Queue(a) { + Queue(in: queue.out, out: queue.in) +} + +fn check_equal( + xs: List(t), + x_tail: List(t), + ys: List(t), + y_tail: List(t), + eq: fn(t, t) -> Bool, +) -> Bool { + case xs, x_tail, ys, y_tail { + [], [], [], [] -> True + [x, ..xs], _, [y, ..ys], _ -> + case eq(x, y) { + False -> False + True -> check_equal(xs, x_tail, ys, y_tail, eq) + } + [], [_, ..], _, _ -> check_equal(list.reverse(x_tail), [], ys, y_tail, eq) + _, _, [], [_, ..] -> check_equal(xs, x_tail, list.reverse(y_tail), [], eq) + _, _, _, _ -> False + } +} + +/// Checks whether two queues have equal elements in the same order, where the +/// equality of elements is determined by a given equality checking function. +/// +/// This function is useful as the internal representation may be different for +/// two queues with the same elements in the same order depending on how they +/// were constructed, so the equality operator `==` may return surprising +/// results. +/// +/// This function runs in linear time multiplied by the time taken by the +/// element equality checking function. +/// +pub fn is_logically_equal( + a: Queue(t), + to b: Queue(t), + checking element_is_equal: fn(t, t) -> Bool, +) -> Bool { + check_equal(a.out, a.in, b.out, b.in, element_is_equal) +} + +/// Checks whether two queues have the same elements in the same order. +/// +/// This function is useful as the internal representation may be different for +/// two queues with the same elements in the same order depending on how they +/// were constructed, so the equality operator `==` may return surprising +/// results. +/// +/// This function runs in linear time. +/// +pub fn is_equal(a: Queue(t), to b: Queue(t)) -> Bool { + check_equal(a.out, a.in, b.out, b.in, fn(a, b) { a == b }) +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/regex.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/regex.gleam new file mode 100644 index 0000000..9ffda78 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/regex.gleam @@ -0,0 +1,214 @@ +//// This module contains regular expression matching functions for strings. +//// The matching algorithms of the library are based on the PCRE library, but not +//// all of the PCRE library is interfaced and some parts of the library go beyond +//// what PCRE offers. Currently PCRE version 8.40 (release date 2017-01-11) is used. + +import gleam/option.{type Option} + +pub type Regex + +/// The details about a particular match: +/// +pub type Match { + Match( + /// The full string of the match. + content: String, + /// A `Regex` can have subpatterns, sup-parts that are in parentheses. + submatches: List(Option(String)), + ) +} + +/// When a regular expression fails to compile: +/// +pub type CompileError { + CompileError( + /// The problem encountered that caused the compilation to fail + error: String, + /// The byte index into the string to where the problem was found + /// This value may not be correct in JavaScript environments. + byte_index: Int, + ) +} + +pub type Options { + Options(case_insensitive: Bool, multi_line: Bool) +} + +/// Creates a `Regex` with some additional options. +/// +/// ## Examples +/// +/// ```gleam +/// > let options = Options(case_insensitive: False, multi_line: True) +/// > let assert Ok(re) = compile("^[0-9]", with: options) +/// > check(re, "abc\n123") +/// True +/// ``` +/// +/// ```gleam +/// > let options = Options(case_insensitive: True, multi_line: False) +/// > let assert Ok(re) = compile("[A-Z]", with: options) +/// > check(re, "abc123") +/// True +/// ``` +/// +pub fn compile( + pattern: String, + with options: Options, +) -> Result(Regex, CompileError) { + do_compile(pattern, options) +} + +@external(erlang, "gleam_stdlib", "compile_regex") +@external(javascript, "../gleam_stdlib.mjs", "compile_regex") +fn do_compile(a: String, with with: Options) -> Result(Regex, CompileError) + +/// Creates a new `Regex`. +/// +/// ## Examples +/// +/// ```gleam +/// > let assert Ok(re) = from_string("[0-9]") +/// > check(re, "abc123") +/// True +/// ``` +/// +/// ```gleam +/// > check(re, "abcxyz") +/// False +/// ``` +/// +/// ```gleam +/// > from_string("[0-9") +/// Error( +/// CompileError( +/// error: "missing terminating ] for character class", +/// byte_index: 4 +/// ) +/// ) +/// ``` +/// +pub fn from_string(pattern: String) -> Result(Regex, CompileError) { + compile(pattern, Options(case_insensitive: False, multi_line: False)) +} + +/// Returns a boolean indicating whether there was a match or not. +/// +/// ## Examples +/// +/// ```gleam +/// > let assert Ok(re) = from_string("^f.o.?") +/// > check(with: re, content: "foo") +/// True +/// ``` +/// +/// ```gleam +/// > check(with: re, content: "boo") +/// False +/// ``` +/// +pub fn check(with regex: Regex, content content: String) -> Bool { + do_check(regex, content) +} + +@external(erlang, "gleam_stdlib", "regex_check") +@external(javascript, "../gleam_stdlib.mjs", "regex_check") +fn do_check(a: Regex, b: String) -> Bool + +/// Splits a string. +/// +/// ## Examples +/// +/// ```gleam +/// > let assert Ok(re) = from_string(" *, *") +/// > split(with: re, content: "foo,32, 4, 9 ,0") +/// ["foo", "32", "4", "9", "0"] +/// ``` +/// +pub fn split(with regex: Regex, content string: String) -> List(String) { + do_split(regex, string) +} + +@target(erlang) +@external(erlang, "gleam_stdlib", "regex_split") +fn do_split(a: Regex, b: String) -> List(String) + +@target(javascript) +fn do_split(regex, string) -> List(String) { + js_split(string, regex) +} + +@target(javascript) +@external(javascript, "../gleam_stdlib.mjs", "split") +fn js_split(a: String, b: Regex) -> List(String) + +/// Collects all matches of the regular expression. +/// +/// ## Examples +/// +/// ```gleam +/// > let assert Ok(re) = from_string("[oi]n a (\\w+)") +/// > scan(with: re, content: "I am on a boat in a lake.") +/// [ +/// Match( +/// content: "on a boat", +/// submatches: [Some("boat")] +/// ), +/// Match( +/// content: "in a lake", +/// submatches: [Some("lake")] +/// ) +/// ] +/// ``` +/// +/// ```gleam +/// > let assert Ok(re) = regex.from_string("([+|\\-])?(\\d+)(\\w+)?") +/// > scan(with: re, content: "-36") +/// [ +/// Match( +/// content: "-36", +/// submatches: [Some("-"), Some("36")] +/// ) +/// ] +/// +/// > scan(with: re, content: "36") +/// [ +/// Match( +/// content: "36", +/// submatches: [None, Some("36")] +/// ) +/// ] +/// ``` +/// +/// ```gleam +/// > let assert Ok(re) = regex.from_string("var\\s*(\\w+)\\s*(int|string)?\\s*=\\s*(.*)") +/// > scan(with: re, content: "var age = 32") +/// [ +/// Match( +/// content: "var age = 32", +/// submatches: [Some("age"), None, Some("32")] +/// ) +/// ] +/// ``` +/// +/// ```gleam +/// > let assert Ok(re) = regex.from_string("let (\\w+) = (\\w+)") +/// > scan(with: re, content: "let age = 32") +/// [ +/// Match( +/// content: "let age = 32", +/// submatches: [Some("age"), Some("32")] +/// ) +/// ] +/// +/// > scan(with: re, content: "const age = 32") +/// [] +/// ``` +/// +pub fn scan(with regex: Regex, content string: String) -> List(Match) { + do_scan(regex, string) +} + +@external(erlang, "gleam_stdlib", "regex_scan") +@external(javascript, "../gleam_stdlib.mjs", "regex_scan") +fn do_scan(a: Regex, b: String) -> List(Match) diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/result.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/result.gleam new file mode 100644 index 0000000..fb6dddb --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/result.gleam @@ -0,0 +1,482 @@ +//// Result represents the result of something that may succeed or not. +//// `Ok` means it was successful, `Error` means it was not successful. + +import gleam/list + +/// Checks whether the result is an `Ok` value. +/// +/// ## Examples +/// +/// ```gleam +/// > is_ok(Ok(1)) +/// True +/// ``` +/// +/// ```gleam +/// > is_ok(Error(Nil)) +/// False +/// ``` +/// +pub fn is_ok(result: Result(a, e)) -> Bool { + case result { + Error(_) -> False + Ok(_) -> True + } +} + +/// Checks whether the result is an `Error` value. +/// +/// ## Examples +/// +/// ```gleam +/// > is_error(Ok(1)) +/// False +/// ``` +/// +/// ```gleam +/// > is_error(Error(Nil)) +/// True +/// ``` +/// +pub fn is_error(result: Result(a, e)) -> Bool { + case result { + Ok(_) -> False + Error(_) -> True + } +} + +/// Updates a value held within the `Ok` of a result by calling a given function +/// on it. +/// +/// If the result is an `Error` rather than `Ok` the function is not called and the +/// result stays the same. +/// +/// ## Examples +/// +/// ```gleam +/// > map(over: Ok(1), with: fn(x) { x + 1 }) +/// Ok(2) +/// ``` +/// +/// ```gleam +/// > map(over: Error(1), with: fn(x) { x + 1 }) +/// Error(1) +/// ``` +/// +pub fn map(over result: Result(a, e), with fun: fn(a) -> b) -> Result(b, e) { + case result { + Ok(x) -> Ok(fun(x)) + Error(e) -> Error(e) + } +} + +/// Updates a value held within the `Error` of a result by calling a given function +/// on it. +/// +/// If the result is `Ok` rather than `Error` the function is not called and the +/// result stays the same. +/// +/// ## Examples +/// +/// ```gleam +/// > map_error(over: Error(1), with: fn(x) { x + 1 }) +/// Error(2) +/// ``` +/// +/// ```gleam +/// > map_error(over: Ok(1), with: fn(x) { x + 1 }) +/// Ok(1) +/// ``` +/// +pub fn map_error( + over result: Result(a, e), + with fun: fn(e) -> f, +) -> Result(a, f) { + case result { + Ok(x) -> Ok(x) + Error(error) -> Error(fun(error)) + } +} + +/// Merges a nested `Result` into a single layer. +/// +/// ## Examples +/// +/// ```gleam +/// > flatten(Ok(Ok(1))) +/// Ok(1) +/// ``` +/// +/// ```gleam +/// > flatten(Ok(Error(""))) +/// Error("") +/// ``` +/// +/// ```gleam +/// > flatten(Error(Nil)) +/// Error(Nil) +/// ``` +/// +pub fn flatten(result: Result(Result(a, e), e)) -> Result(a, e) { + case result { + Ok(x) -> x + Error(error) -> Error(error) + } +} + +/// "Updates" an `Ok` result by passing its value to a function that yields a result, +/// and returning the yielded result. (This may "replace" the `Ok` with an `Error`.) +/// +/// If the input is an `Error` rather than an `Ok`, the function is not called and +/// the original `Error` is returned. +/// +/// This function is the equivalent of calling `map` followed by `flatten`, and +/// it is useful for chaining together multiple functions that may fail. +/// +/// ## Examples +/// +/// ```gleam +/// > try(Ok(1), fn(x) { Ok(x + 1) }) +/// Ok(2) +/// ``` +/// +/// ```gleam +/// > try(Ok(1), fn(x) { Ok(#("a", x)) }) +/// Ok(#("a", 1)) +/// ``` +/// +/// ```gleam +/// > try(Ok(1), fn(_) { Error("Oh no") }) +/// Error("Oh no") +/// ``` +/// +/// ```gleam +/// > try(Error(Nil), fn(x) { Ok(x + 1) }) +/// Error(Nil) +/// ``` +/// +pub fn try( + result: Result(a, e), + apply fun: fn(a) -> Result(b, e), +) -> Result(b, e) { + case result { + Ok(x) -> fun(x) + Error(e) -> Error(e) + } +} + +/// An alias for `try`. See the documentation for that function for more information. +/// +pub fn then( + result: Result(a, e), + apply fun: fn(a) -> Result(b, e), +) -> Result(b, e) { + try(result, fun) +} + +/// Extracts the `Ok` value from a result, returning a default value if the result +/// is an `Error`. +/// +/// ## Examples +/// +/// ```gleam +/// > unwrap(Ok(1), 0) +/// 1 +/// ``` +/// +/// ```gleam +/// > unwrap(Error(""), 0) +/// 0 +/// ``` +/// +pub fn unwrap(result: Result(a, e), or default: a) -> a { + case result { + Ok(v) -> v + Error(_) -> default + } +} + +/// Extracts the `Ok` value from a result, evaluating the default function if the result +/// is an `Error`. +/// +/// ## Examples +/// +/// ```gleam +/// > lazy_unwrap(Ok(1), fn() { 0 }) +/// 1 +/// ``` +/// +/// ```gleam +/// > lazy_unwrap(Error(""), fn() { 0 }) +/// 0 +/// ``` +/// +pub fn lazy_unwrap(result: Result(a, e), or default: fn() -> a) -> a { + case result { + Ok(v) -> v + Error(_) -> default() + } +} + +/// Extracts the `Error` value from a result, returning a default value if the result +/// is an `Ok`. +/// +/// ## Examples +/// +/// ```gleam +/// > unwrap_error(Error(1), 0) +/// 1 +/// ``` +/// +/// ```gleam +/// > unwrap_error(Ok(""), 0) +/// 0 +/// ``` +/// +pub fn unwrap_error(result: Result(a, e), or default: e) -> e { + case result { + Ok(_) -> default + Error(e) -> e + } +} + +/// Extracts the inner value from a result. Both the value and error must be of +/// the same type. +/// +/// ## Examples +/// +/// ```gleam +/// > unwrap_both(Error(1)) +/// 1 +/// ``` +/// +/// ```gleam +/// > unwrap_both(Ok(2)) +/// 2 +/// ``` +/// +pub fn unwrap_both(result: Result(a, a)) -> a { + case result { + Ok(a) -> a + Error(a) -> a + } +} + +/// Transforms any error into `Error(Nil)`. +/// +/// ## Examples +/// +/// ```gleam +/// > nil_error(Error(1)) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > nil_error(Ok(1)) +/// Ok(1) +/// ``` +/// +pub fn nil_error(result: Result(a, e)) -> Result(a, Nil) { + map_error(result, fn(_) { Nil }) +} + +/// Returns the first value if it is `Ok`, otherwise returns the second value. +/// +/// ## Examples +/// +/// ```gleam +/// > or(Ok(1), Ok(2)) +/// Ok(1) +/// ``` +/// +/// ```gleam +/// > or(Ok(1), Error("Error 2")) +/// Ok(1) +/// ``` +/// +/// ```gleam +/// > or(Error("Error 1"), Ok(2)) +/// Ok(2) +/// ``` +/// +/// ```gleam +/// > or(Error("Error 1"), Error("Error 2")) +/// Error("Error 2") +/// ``` +/// +pub fn or(first: Result(a, e), second: Result(a, e)) -> Result(a, e) { + case first { + Ok(_) -> first + Error(_) -> second + } +} + +/// Returns the first value if it is `Ok`, otherwise evaluates the given function for a fallback value. +/// +/// ## Examples +/// +/// ```gleam +/// > lazy_or(Ok(1), fn() { Ok(2) }) +/// Ok(1) +/// ``` +/// +/// ```gleam +/// > lazy_or(Ok(1), fn() { Error("Error 2") }) +/// Ok(1) +/// ``` +/// +/// ```gleam +/// > lazy_or(Error("Error 1"), fn() { Ok(2) }) +/// Ok(2) +/// ``` +/// +/// ```gleam +/// > lazy_or(Error("Error 1"), fn() { Error("Error 2") }) +/// Error("Error 2") +/// ``` +/// +pub fn lazy_or( + first: Result(a, e), + second: fn() -> Result(a, e), +) -> Result(a, e) { + case first { + Ok(_) -> first + Error(_) -> second() + } +} + +/// Combines a list of results into a single result. +/// If all elements in the list are `Ok` then returns an `Ok` holding the list of values. +/// If any element is `Error` then returns the first error. +/// +/// ## Examples +/// +/// ```gleam +/// > all([Ok(1), Ok(2)]) +/// Ok([1, 2]) +/// ``` +/// +/// ```gleam +/// > all([Ok(1), Error("e")]) +/// Error("e") +/// ``` +/// +pub fn all(results: List(Result(a, e))) -> Result(List(a), e) { + list.try_map(results, fn(x) { x }) +} + +/// Given a list of results, returns a pair where the first element is a list +/// of all the values inside `Ok` and the second element is a list with all the +/// values inside `Error`. The values in both lists appear in reverse order with +/// respect to their position in the original list of results. +/// +/// ## Examples +/// +/// ```gleam +/// > partition([Ok(1), Error("a"), Error("b"), Ok(2)]) +/// #([2, 1], ["b", "a"]) +/// ``` +/// +pub fn partition(results: List(Result(a, e))) -> #(List(a), List(e)) { + do_partition(results, [], []) +} + +fn do_partition(results: List(Result(a, e)), oks: List(a), errors: List(e)) { + case results { + [] -> #(oks, errors) + [Ok(a), ..rest] -> do_partition(rest, [a, ..oks], errors) + [Error(e), ..rest] -> do_partition(rest, oks, [e, ..errors]) + } +} + +/// Replace the value within a result +/// +/// ## Examples +/// +/// ```gleam +/// > replace(Ok(1), Nil) +/// Ok(Nil) +/// ``` +/// +/// ```gleam +/// > replace(Error(1), Nil) +/// Error(1) +/// ``` +/// +pub fn replace(result: Result(a, e), value: b) -> Result(b, e) { + case result { + Ok(_) -> Ok(value) + Error(error) -> Error(error) + } +} + +/// Replace the error within a result +/// +/// ## Examples +/// +/// ```gleam +/// > replace_error(Error(1), Nil) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > replace_error(Ok(1), Nil) +/// Ok(1) +/// ``` +/// +pub fn replace_error(result: Result(a, e1), error: e2) -> Result(a, e2) { + case result { + Ok(x) -> Ok(x) + Error(_) -> Error(error) + } +} + +/// Given a list of results, returns only the values inside `Ok`. +/// +/// ## Examples +/// +/// ```gleam +/// > values([Ok(1), Error("a"), Ok(3)]) +/// [1, 3] +/// ``` +/// +pub fn values(results: List(Result(a, e))) -> List(a) { + list.filter_map(results, fn(r) { r }) +} + +/// Updates a value held within the `Error` of a result by calling a given function +/// on it, where the given function also returns a result. The two results are +/// then merged together into one result. +/// +/// If the result is an `Ok` rather than `Error` the function is not called and the +/// result stays the same. +/// +/// This function is useful for chaining together computations that may fail +/// and trying to recover from possible errors. +/// +/// ## Examples +/// +/// ```gleam +/// > Ok(1) |> try_recover(with: fn(_) { Error("failed to recover") }) +/// Ok(1) +/// ``` +/// +/// ```gleam +/// > Error(1) |> try_recover(with: fn(error) { Ok(error + 1) }) +/// Ok(2) +/// ``` +/// +/// ```gleam +/// > Error(1) |> try_recover(with: fn(error) { Error("failed to recover") }) +/// Error("failed to recover") +/// ``` +/// +pub fn try_recover( + result: Result(a, e), + with fun: fn(e) -> Result(a, f), +) -> Result(a, f) { + case result { + Ok(value) -> Ok(value) + Error(error) -> fun(error) + } +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/set.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/set.gleam new file mode 100644 index 0000000..df8d500 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/set.gleam @@ -0,0 +1,264 @@ +import gleam/list +import gleam/dict.{type Dict} +import gleam/result + +// A list is used as the map value as an empty list has the smallest +// representation in Erlang's binary format +@target(erlang) +type Token = + List(Nil) + +@target(erlang) +const token = [] + +@target(javascript) +type Token = + Nil + +@target(javascript) +const token = Nil + +/// A set is a collection of unique members of the same type. +/// +/// It is implemented using the `gleam/map` module, so inserts and lookups have +/// logarithmic time complexity. +/// +pub opaque type Set(member) { + Set(map: Dict(member, Token)) +} + +/// Creates a new empty set. +/// +pub fn new() -> Set(member) { + Set(dict.new()) +} + +/// Gets the number of members in a set. +/// +/// This function runs in constant time. +/// +/// ## Examples +/// +/// ```gleam +/// > new() +/// > |> insert(1) +/// > |> insert(2) +/// > |> size +/// 2 +/// ``` +/// +pub fn size(set: Set(member)) -> Int { + dict.size(set.map) +} + +/// Inserts an member into the set. +/// +/// This function runs in logarithmic time. +/// +/// ## Examples +/// +/// ```gleam +/// > new() +/// > |> insert(1) +/// > |> insert(2) +/// > |> size +/// 2 +/// ``` +/// +pub fn insert(into set: Set(member), this member: member) -> Set(member) { + Set(map: dict.insert(set.map, member, token)) +} + +/// Checks whether a set contains a given member. +/// +/// This function runs in logarithmic time. +/// +/// ## Examples +/// +/// ```gleam +/// > new() +/// > |> insert(2) +/// > |> contains(2) +/// True +/// ``` +/// +/// ```gleam +/// > new() +/// > |> insert(2) +/// > |> contains(1) +/// False +/// ``` +/// +pub fn contains(in set: Set(member), this member: member) -> Bool { + set.map + |> dict.get(member) + |> result.is_ok +} + +/// Removes a member from a set. If the set does not contain the member then +/// the set is returned unchanged. +/// +/// This function runs in logarithmic time. +/// +/// ## Examples +/// +/// ```gleam +/// > new() +/// > |> insert(2) +/// > |> delete(2) +/// > |> contains(1) +/// False +/// ``` +/// +pub fn delete(from set: Set(member), this member: member) -> Set(member) { + Set(map: dict.delete(set.map, member)) +} + +/// Converts the set into a list of the contained members. +/// +/// The list has no specific ordering, any unintentional ordering may change in +/// future versions of Gleam or Erlang. +/// +/// This function runs in linear time. +/// +/// ## Examples +/// +/// ```gleam +/// > new() |> insert(2) |> to_list +/// [2] +/// ``` +/// +pub fn to_list(set: Set(member)) -> List(member) { + dict.keys(set.map) +} + +/// Creates a new set of the members in a given list. +/// +/// This function runs in loglinear time. +/// +/// ## Examples +/// +/// ```gleam +/// > import gleam/list +/// > [1, 1, 2, 4, 3, 2] |> from_list |> to_list |> list.sort +/// [1, 3, 3, 4] +/// ``` +/// +pub fn from_list(members: List(member)) -> Set(member) { + let map = + list.fold( + over: members, + from: dict.new(), + with: fn(m, k) { dict.insert(m, k, token) }, + ) + Set(map) +} + +/// Combines all entries into a single value by calling a given function on each +/// one. +/// +/// Sets are not ordered so the values are not returned in any specific order. +/// Do not write code that relies on the order entries are used by this +/// function as it may change in later versions of Gleam or Erlang. +/// +/// # Examples +/// +/// ```gleam +/// > from_list([1, 3, 9]) +/// > |> fold(0, fn(member, accumulator) { accumulator + member }) +/// 13 +/// ``` +/// +pub fn fold( + over set: Set(member), + from initial: acc, + with reducer: fn(acc, member) -> acc, +) -> acc { + dict.fold(over: set.map, from: initial, with: fn(a, k, _) { reducer(a, k) }) +} + +/// Creates a new set from an existing set, minus any members that a given +/// function returns `False` for. +/// +/// This function runs in loglinear time. +/// +/// ## Examples +/// +/// ```gleam +/// > import gleam/int +/// > from_list([1, 4, 6, 3, 675, 44, 67]) +/// > |> filter(for: int.is_even) +/// > |> to_list +/// [4, 6, 44] +/// ``` +/// +pub fn filter( + in set: Set(member), + keeping predicate: fn(member) -> Bool, +) -> Set(member) { + Set(dict.filter(in: set.map, keeping: fn(m, _) { predicate(m) })) +} + +pub fn drop(from set: Set(member), drop disallowed: List(member)) -> Set(member) { + list.fold(over: disallowed, from: set, with: delete) +} + +/// Creates a new map from a given map, only including any members which are in +/// a given list. +/// +/// This function runs in loglinear time. +/// +/// ## Examples +/// +/// ```gleam +/// > from_list([1, 2, 3]) +/// > |> take([1, 3, 5]) +/// > |> to_list +/// [1, 3] +/// ``` +/// +pub fn take(from set: Set(member), keeping desired: List(member)) -> Set(member) { + Set(dict.take(from: set.map, keeping: desired)) +} + +fn order(first: Set(member), second: Set(member)) -> #(Set(member), Set(member)) { + case dict.size(first.map) > dict.size(second.map) { + True -> #(first, second) + False -> #(second, first) + } +} + +/// Creates a new set that contains all members of both given sets. +/// +/// This function runs in loglinear time. +/// +/// ## Examples +/// +/// ```gleam +/// > union(from_list([1, 2]), from_list([2, 3])) |> to_list +/// [1, 2, 3] +/// ``` +/// +pub fn union(of first: Set(member), and second: Set(member)) -> Set(member) { + let #(larger, smaller) = order(first, second) + fold(over: smaller, from: larger, with: insert) +} + +/// Creates a new set that contains members that are present in both given sets. +/// +/// This function runs in loglinear time. +/// +/// ## Examples +/// +/// ```gleam +/// > intersection(from_list([1, 2]), from_list([2, 3])) |> to_list +/// [2] +/// ``` +/// +pub fn intersection( + of first: Set(member), + and second: Set(member), +) -> Set(member) { + let #(larger, smaller) = order(first, second) + take(from: larger, keeping: to_list(smaller)) +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/string.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/string.gleam new file mode 100644 index 0000000..d4496f3 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/string.gleam @@ -0,0 +1,906 @@ +//// Strings in Gleam are UTF-8 binaries. They can be written in your code as +//// text surrounded by `"double quotes"`. + +import gleam/iterator.{type Iterator} +import gleam/list +import gleam/option.{type Option, None, Some} +import gleam/order +import gleam/string_builder.{type StringBuilder} + +/// Determines if a `String` is empty. +/// +/// ## Examples +/// +/// ```gleam +/// > is_empty("") +/// True +/// ``` +/// +/// ```gleam +/// > is_empty("the world") +/// False +/// ``` +/// +pub fn is_empty(str: String) -> Bool { + str == "" +} + +/// Gets the number of grapheme clusters in a given `String`. +/// +/// This function has to iterate across the whole string to count the number of +/// graphemes, so it runs in linear time. +/// +/// ## Examples +/// +/// ```gleam +/// > length("Gleam") +/// 5 +/// ``` +/// +/// ```gleam +/// > length("ß↑e̊") +/// 3 +/// ``` +/// +/// ```gleam +/// > length("") +/// 0 +/// ``` +/// +pub fn length(string: String) -> Int { + do_length(string) +} + +@external(erlang, "string", "length") +@external(javascript, "../gleam_stdlib.mjs", "string_length") +fn do_length(a: String) -> Int + +/// Reverses a `String`. +/// +/// This function has to iterate across the whole `String` so it runs in linear +/// time. +/// +/// ## Examples +/// +/// ```gleam +/// > reverse("stressed") +/// "desserts" +/// ``` +/// +pub fn reverse(string: String) -> String { + do_reverse(string) +} + +@target(erlang) +fn do_reverse(string: String) -> String { + string + |> string_builder.from_string + |> string_builder.reverse + |> string_builder.to_string +} + +@target(javascript) +fn do_reverse(string: String) -> String { + string + |> to_graphemes + |> list.reverse + |> concat +} + +/// Creates a new `String` by replacing all occurrences of a given substring. +/// +/// ## Examples +/// +/// ```gleam +/// > replace("www.example.com", each: ".", with: "-") +/// "www-example-com" +/// ``` +/// +/// ```gleam +/// > replace("a,b,c,d,e", each: ",", with: "/") +/// "a/b/c/d/e" +/// ``` +/// +pub fn replace( + in string: String, + each pattern: String, + with substitute: String, +) -> String { + string + |> string_builder.from_string + |> string_builder.replace(each: pattern, with: substitute) + |> string_builder.to_string +} + +/// Creates a new `String` with all the graphemes in the input `String` converted to +/// lowercase. +/// +/// Useful for case-insensitive comparisons. +/// +/// ## Examples +/// +/// ```gleam +/// > lowercase("X-FILES") +/// "x-files" +/// ``` +/// +pub fn lowercase(string: String) -> String { + do_lowercase(string) +} + +@external(erlang, "string", "lowercase") +@external(javascript, "../gleam_stdlib.mjs", "lowercase") +fn do_lowercase(a: String) -> String + +/// Creates a new `String` with all the graphemes in the input `String` converted to +/// uppercase. +/// +/// Useful for case-insensitive comparisons and VIRTUAL YELLING. +/// +/// ## Examples +/// +/// ```gleam +/// > uppercase("skinner") +/// "SKINNER" +/// ``` +/// +pub fn uppercase(string: String) -> String { + do_uppercase(string) +} + +@external(erlang, "string", "uppercase") +@external(javascript, "../gleam_stdlib.mjs", "uppercase") +fn do_uppercase(a: String) -> String + +/// Compares two `String`s to see which is "larger" by comparing their graphemes. +/// +/// This does not compare the size or length of the given `String`s. +/// +/// ## Examples +/// +/// ```gleam +/// > compare("Anthony", "Anthony") +/// order.Eq +/// ``` +/// +/// ```gleam +/// > compare("A", "B") +/// order.Lt +/// ``` +/// +pub fn compare(a: String, b: String) -> order.Order { + case a == b { + True -> order.Eq + _ -> + case less_than(a, b) { + True -> order.Lt + _ -> order.Gt + } + } +} + +@external(erlang, "gleam_stdlib", "less_than") +@external(javascript, "../gleam_stdlib.mjs", "less_than") +fn less_than(a: String, b: String) -> Bool + +/// Takes a substring given a start grapheme index and a length. Negative indexes +/// are taken starting from the *end* of the list. +/// +/// ## Examples +/// +/// ```gleam +/// > slice(from: "gleam", at_index: 1, length: 2) +/// "le" +/// ``` +/// +/// ```gleam +/// > slice(from: "gleam", at_index: 1, length: 10) +/// "leam" +/// ``` +/// +/// ```gleam +/// > slice(from: "gleam", at_index: 10, length: 3) +/// "" +/// ``` +/// +/// ```gleam +/// > slice(from: "gleam", at_index: -2, length: 2) +/// "am" +/// ``` +/// +/// ```gleam +/// > slice(from: "gleam", at_index: -12, length: 2) +/// "" +/// ``` +/// +pub fn slice(from string: String, at_index idx: Int, length len: Int) -> String { + case len < 0 { + True -> "" + False -> + case idx < 0 { + True -> { + let translated_idx = length(string) + idx + case translated_idx < 0 { + True -> "" + False -> do_slice(string, translated_idx, len) + } + } + False -> do_slice(string, idx, len) + } + } +} + +@target(erlang) +@external(erlang, "string", "slice") +fn do_slice(a: String, b: Int, c: Int) -> String + +@target(javascript) +fn do_slice(string: String, idx: Int, len: Int) -> String { + string + |> to_graphemes + |> list.drop(idx) + |> list.take(len) + |> concat +} + +/// Drops contents of the first `String` that occur before the second `String`. +/// If the `from` string does not contain the `before` string, `from` is returned unchanged. +/// +/// ## Examples +/// +/// ```gleam +/// > crop(from: "The Lone Gunmen", before: "Lone") +/// "Lone Gunmen" +/// ``` +/// +@external(erlang, "gleam_stdlib", "crop_string") +@external(javascript, "../gleam_stdlib.mjs", "crop_string") +pub fn crop(from string: String, before substring: String) -> String + +/// Drops *n* graphemes from the left side of a `String`. +/// +/// ## Examples +/// +/// ```gleam +/// > drop_left(from: "The Lone Gunmen", up_to: 2) +/// "e Lone Gunmen" +/// ``` +/// +pub fn drop_left(from string: String, up_to num_graphemes: Int) -> String { + case num_graphemes < 0 { + True -> string + False -> slice(string, num_graphemes, length(string) - num_graphemes) + } +} + +/// Drops *n* graphemes from the right side of a `String`. +/// +/// ## Examples +/// +/// ```gleam +/// > drop_right(from: "Cigarette Smoking Man", up_to: 2) +/// "Cigarette Smoking M" +/// ``` +/// +pub fn drop_right(from string: String, up_to num_graphemes: Int) -> String { + case num_graphemes < 0 { + True -> string + False -> slice(string, 0, length(string) - num_graphemes) + } +} + +/// Checks if the first `String` contains the second. +/// +/// ## Examples +/// +/// ```gleam +/// > contains(does: "theory", contain: "ory") +/// True +/// ``` +/// +/// ```gleam +/// > contains(does: "theory", contain: "the") +/// True +/// ``` +/// +/// ```gleam +/// > contains(does: "theory", contain: "THE") +/// False +/// ``` +/// +@external(erlang, "gleam_stdlib", "contains_string") +@external(javascript, "../gleam_stdlib.mjs", "contains_string") +pub fn contains(does haystack: String, contain needle: String) -> Bool + +/// Checks whether the first `String` starts with the second one. +/// +/// ## Examples +/// +/// ```gleam +/// > starts_with("theory", "ory") +/// False +/// ``` +/// +pub fn starts_with(string: String, prefix: String) -> Bool { + do_starts_with(string, prefix) +} + +@external(erlang, "gleam_stdlib", "string_starts_with") +@external(javascript, "../gleam_stdlib.mjs", "starts_with") +fn do_starts_with(a: String, b: String) -> Bool + +/// Checks whether the first `String` ends with the second one. +/// +/// ## Examples +/// +/// ```gleam +/// > ends_with("theory", "ory") +/// True +/// ``` +/// +pub fn ends_with(string: String, suffix: String) -> Bool { + do_ends_with(string, suffix) +} + +@external(erlang, "gleam_stdlib", "string_ends_with") +@external(javascript, "../gleam_stdlib.mjs", "ends_with") +fn do_ends_with(a: String, b: String) -> Bool + +/// Creates a list of `String`s by splitting a given string on a given substring. +/// +/// ## Examples +/// +/// ```gleam +/// > split("home/gleam/desktop/", on: "/") +/// ["home", "gleam", "desktop", ""] +/// ``` +/// +pub fn split(x: String, on substring: String) -> List(String) { + case substring { + "" -> to_graphemes(x) + _ -> + x + |> string_builder.from_string + |> string_builder.split(on: substring) + |> list.map(with: string_builder.to_string) + } +} + +/// Splits a `String` a single time on the given substring. +/// +/// Returns an `Error` if substring not present. +/// +/// ## Examples +/// +/// ```gleam +/// > split_once("home/gleam/desktop/", on: "/") +/// Ok(#("home", "gleam/desktop/")) +/// ``` +/// +/// ```gleam +/// > split_once("home/gleam/desktop/", on: "?") +/// Error(Nil) +/// ``` +/// +pub fn split_once( + x: String, + on substring: String, +) -> Result(#(String, String), Nil) { + do_split_once(x, substring) +} + +@target(erlang) +@external(erlang, "string", "split") +fn erl_split(a: String, b: String) -> List(String) + +@target(erlang) +fn do_split_once(x: String, substring: String) -> Result(#(String, String), Nil) { + case erl_split(x, substring) { + [first, rest] -> Ok(#(first, rest)) + _ -> Error(Nil) + } +} + +@target(javascript) +@external(javascript, "../gleam_stdlib.mjs", "split_once") +fn do_split_once( + x x: String, + substring substring: String, +) -> Result(#(String, String), Nil) + +/// Creates a new `String` by joining two `String`s together. +/// +/// This function copies both `String`s and runs in linear time. If you find +/// yourself joining `String`s frequently consider using the [`string_builder`](../gleam/string_builder.html) +/// module as it can append `String`s much faster! +/// +/// ## Examples +/// +/// ```gleam +/// > append(to: "butter", suffix: "fly") +/// "butterfly" +/// ``` +/// +pub fn append(to first: String, suffix second: String) -> String { + first + |> string_builder.from_string + |> string_builder.append(second) + |> string_builder.to_string +} + +/// Creates a new `String` by joining many `String`s together. +/// +/// This function copies both `String`s and runs in linear time. If you find +/// yourself joining `String`s frequently consider using the [`string_builder`](../gleam/string_builder.html) +/// module as it can append `String`s much faster! +/// +/// ## Examples +/// +/// ```gleam +/// > concat(["never", "the", "less"]) +/// "nevertheless" +/// ``` +/// +pub fn concat(strings: List(String)) -> String { + strings + |> string_builder.from_strings + |> string_builder.to_string +} + +/// Creates a new `String` by repeating a `String` a given number of times. +/// +/// This function runs in linear time. +/// +/// ## Examples +/// +/// ```gleam +/// > repeat("ha", times: 3) +/// "hahaha" +/// ``` +/// +pub fn repeat(string: String, times times: Int) -> String { + iterator.repeat(string) + |> iterator.take(times) + |> iterator.to_list + |> concat +} + +/// Joins many `String`s together with a given separator. +/// +/// This function runs in linear time. +/// +/// ## Examples +/// +/// ```gleam +/// > join(["home","evan","Desktop"], with: "/") +/// "home/evan/Desktop" +/// ``` +/// +pub fn join(strings: List(String), with separator: String) -> String { + do_join(strings, separator) +} + +@target(erlang) +fn do_join(strings: List(String), separator: String) -> String { + strings + |> list.intersperse(with: separator) + |> concat +} + +@target(javascript) +@external(javascript, "../gleam_stdlib.mjs", "join") +fn do_join(strings strings: List(String), string string: String) -> String + +/// Pads a `String` on the left until it has at least given number of graphemes. +/// +/// ## Examples +/// +/// ```gleam +/// > pad_left("121", to: 5, with: ".") +/// "..121" +/// ``` +/// +/// ```gleam +/// > pad_left("121", to: 3, with: ".") +/// "121" +/// ``` +/// +/// ```gleam +/// > pad_left("121", to: 2, with: ".") +/// "121" +/// ``` +/// +pub fn pad_left(string: String, to desired_length: Int, with pad_string: String) { + let current_length = length(string) + let to_pad_length = desired_length - current_length + padding(to_pad_length, pad_string) + |> iterator.append(iterator.single(string)) + |> iterator.to_list + |> concat +} + +/// Pads a `String` on the right until it has a given length. +/// +/// ## Examples +/// +/// ```gleam +/// > pad_right("123", to: 5, with: ".") +/// "123.." +/// ``` +/// +/// ```gleam +/// > pad_right("123", to: 3, with: ".") +/// "123" +/// ``` +/// +/// ```gleam +/// > pad_right("123", to: 2, with: ".") +/// "123" +/// ``` +/// +pub fn pad_right( + string: String, + to desired_length: Int, + with pad_string: String, +) { + let current_length = length(string) + let to_pad_length = desired_length - current_length + iterator.single(string) + |> iterator.append(padding(to_pad_length, pad_string)) + |> iterator.to_list + |> concat +} + +fn padding(size: Int, pad_string: String) -> Iterator(String) { + let pad_length = length(pad_string) + let num_pads = size / pad_length + let extra = size % pad_length + iterator.repeat(pad_string) + |> iterator.take(num_pads) + |> iterator.append(iterator.single(slice(pad_string, 0, extra))) +} + +/// Removes whitespace on both sides of a `String`. +/// +/// ## Examples +/// +/// ```gleam +/// > trim(" hats \n") +/// "hats" +/// ``` +/// +pub fn trim(string: String) -> String { + do_trim(string) +} + +@target(erlang) +fn do_trim(string: String) -> String { + erl_trim(string, Both) +} + +@target(erlang) +type Direction { + Leading + Trailing + Both +} + +@target(erlang) +@external(erlang, "string", "trim") +fn erl_trim(a: String, b: Direction) -> String + +@target(javascript) +@external(javascript, "../gleam_stdlib.mjs", "trim") +fn do_trim(string string: String) -> String + +/// Removes whitespace on the left of a `String`. +/// +/// ## Examples +/// +/// ```gleam +/// > trim_left(" hats \n") +/// "hats \n" +/// ``` +/// +pub fn trim_left(string: String) -> String { + do_trim_left(string) +} + +@target(erlang) +fn do_trim_left(string: String) -> String { + erl_trim(string, Leading) +} + +@target(javascript) +@external(javascript, "../gleam_stdlib.mjs", "trim_left") +fn do_trim_left(string string: String) -> String + +/// Removes whitespace on the right of a `String`. +/// +/// ## Examples +/// +/// ```gleam +/// > trim_right(" hats \n") +/// " hats" +/// ``` +/// +pub fn trim_right(string: String) -> String { + do_trim_right(string) +} + +@target(erlang) +fn do_trim_right(string: String) -> String { + erl_trim(string, Trailing) +} + +@target(javascript) +@external(javascript, "../gleam_stdlib.mjs", "trim_right") +fn do_trim_right(string string: String) -> String + +/// Splits a non-empty `String` into its first element (head) and rest (tail). +/// This lets you pattern match on `String`s exactly as you would with lists. +/// +/// Note on JavaScript using the function to iterate over a string will likely +/// be slower than using `to_graphemes` due to string slicing being more +/// expensive on JavaScript than Erlang. +/// +/// ## Examples +/// +/// ```gleam +/// > pop_grapheme("gleam") +/// Ok(#("g", "leam")) +/// ``` +/// +/// ```gleam +/// > pop_grapheme("") +/// Error(Nil) +/// ``` +/// +pub fn pop_grapheme(string: String) -> Result(#(String, String), Nil) { + do_pop_grapheme(string) +} + +@external(erlang, "gleam_stdlib", "string_pop_grapheme") +@external(javascript, "../gleam_stdlib.mjs", "pop_grapheme") +fn do_pop_grapheme(string string: String) -> Result(#(String, String), Nil) + +/// Converts a `String` to a list of +/// [graphemes](https://en.wikipedia.org/wiki/Grapheme). +/// +/// ```gleam +/// > to_graphemes("abc") +/// ["a", "b", "c"] +/// ``` +/// +@external(javascript, "../gleam_stdlib.mjs", "graphemes") +pub fn to_graphemes(string: String) -> List(String) { + do_to_graphemes(string, []) + |> list.reverse +} + +fn do_to_graphemes(string: String, acc: List(String)) -> List(String) { + case pop_grapheme(string) { + Ok(#(grapheme, rest)) -> do_to_graphemes(rest, [grapheme, ..acc]) + _ -> acc + } +} + +@external(erlang, "gleam_stdlib", "identity") +@external(javascript, "../gleam_stdlib.mjs", "codepoint") +fn unsafe_int_to_utf_codepoint(a: Int) -> UtfCodepoint + +/// Converts a `String` to a `List` of `UtfCodepoint`. +/// +/// See <https://en.wikipedia.org/wiki/Code_point> and +/// <https://en.wikipedia.org/wiki/Unicode#Codespace_and_Code_Points> for an +/// explanation on code points. +/// +/// ## Examples +/// +/// ```gleam +/// > "a" |> to_utf_codepoints +/// [UtfCodepoint(97)] +/// ``` +/// +/// ```gleam +/// // Semantically the same as: +/// // ["🏳", "️", "", "🌈"] or: +/// // [waving_white_flag, variant_selector_16, zero_width_joiner, rainbow] +/// > "🏳️🌈" |> to_utf_codepoints +/// [UtfCodepoint(127987), UtfCodepoint(65039), UtfCodepoint(8205), UtfCodepoint(127752)] +/// ``` +/// +pub fn to_utf_codepoints(string: String) -> List(UtfCodepoint) { + do_to_utf_codepoints(string) +} + +@target(erlang) +fn do_to_utf_codepoints(string: String) -> List(UtfCodepoint) { + do_to_utf_codepoints_impl(<<string:utf8>>, []) + |> list.reverse +} + +@target(erlang) +fn do_to_utf_codepoints_impl( + bit_array: BitArray, + acc: List(UtfCodepoint), +) -> List(UtfCodepoint) { + case bit_array { + <<first:utf8_codepoint, rest:bytes>> -> + do_to_utf_codepoints_impl(rest, [first, ..acc]) + _ -> acc + } +} + +@target(javascript) +fn do_to_utf_codepoints(string: String) -> List(UtfCodepoint) { + string + |> string_to_codepoint_integer_list + |> list.map(unsafe_int_to_utf_codepoint) +} + +@target(javascript) +@external(javascript, "../gleam_stdlib.mjs", "string_to_codepoint_integer_list") +fn string_to_codepoint_integer_list(a: String) -> List(Int) + +/// Converts a `List` of `UtfCodepoint`s to a `String`. +/// +/// See <https://en.wikipedia.org/wiki/Code_point> and +/// <https://en.wikipedia.org/wiki/Unicode#Codespace_and_Code_Points> for an +/// explanation on code points. +/// +/// ## Examples +/// +/// ```gleam +/// > { +/// > let assert #(Ok(a), Ok(b), Ok(c)) = #( +/// > utf_codepoint(97), +/// > utf_codepoint(98), +/// > utf_codepoint(99), +/// > ) +/// > [a, b, c] +/// > } +/// > |> from_utf_codepoints +/// "abc" +/// ``` +/// +@external(erlang, "gleam_stdlib", "utf_codepoint_list_to_string") +@external(javascript, "../gleam_stdlib.mjs", "utf_codepoint_list_to_string") +pub fn from_utf_codepoints(utf_codepoints: List(UtfCodepoint)) -> String + +/// Converts an integer to a `UtfCodepoint`. +/// +/// Returns an `Error` if the integer does not represent a valid UTF codepoint. +/// +pub fn utf_codepoint(value: Int) -> Result(UtfCodepoint, Nil) { + case value { + i if i > 1_114_111 -> Error(Nil) + 65_534 | 65_535 -> Error(Nil) + i if i >= 55_296 && i <= 57_343 -> Error(Nil) + i -> Ok(unsafe_int_to_utf_codepoint(i)) + } +} + +/// Converts an UtfCodepoint to its ordinal code point value. +/// +/// ## Examples +/// +/// ```gleam +/// > let assert [utf_codepoint, ..] = to_utf_codepoints("💜") +/// > utf_codepoint_to_int(utf_codepoint) +/// 128156 +/// ``` +/// +pub fn utf_codepoint_to_int(cp: UtfCodepoint) -> Int { + do_utf_codepoint_to_int(cp) +} + +@external(erlang, "gleam_stdlib", "identity") +@external(javascript, "../gleam_stdlib.mjs", "utf_codepoint_to_int") +fn do_utf_codepoint_to_int(cp cp: UtfCodepoint) -> Int + +/// Converts a `String` into `Option(String)` where an empty `String` becomes +/// `None`. +/// +/// ## Examples +/// +/// ```gleam +/// > to_option("") +/// None +/// ``` +/// +/// ```gleam +/// > to_option("hats") +/// Some("hats") +/// ``` +/// +pub fn to_option(s: String) -> Option(String) { + case s { + "" -> None + _ -> Some(s) + } +} + +/// Returns the first grapheme cluster in a given `String` and wraps it in a +/// `Result(String, Nil)`. If the `String` is empty, it returns `Error(Nil)`. +/// Otherwise, it returns `Ok(String)`. +/// +/// ## Examples +/// +/// ```gleam +/// > first("") +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > first("icecream") +/// Ok("i") +/// ``` +/// +pub fn first(s: String) -> Result(String, Nil) { + case pop_grapheme(s) { + Ok(#(first, _)) -> Ok(first) + Error(e) -> Error(e) + } +} + +/// Returns the last grapheme cluster in a given `String` and wraps it in a +/// `Result(String, Nil)`. If the `String` is empty, it returns `Error(Nil)`. +/// Otherwise, it returns `Ok(String)`. +/// +/// ## Examples +/// +/// ```gleam +/// > last("") +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > last("icecream") +/// Ok("m") +/// ``` +/// +pub fn last(s: String) -> Result(String, Nil) { + case pop_grapheme(s) { + Ok(#(first, "")) -> Ok(first) + Ok(#(_, rest)) -> Ok(slice(rest, -1, 1)) + Error(e) -> Error(e) + } +} + +/// Creates a new `String` with the first grapheme in the input `String` +/// converted to uppercase and the remaining graphemes to lowercase. +/// +/// ## Examples +/// +/// ```gleam +/// > capitalise("mamouna") +/// "Mamouna" +/// ``` +/// +pub fn capitalise(s: String) -> String { + case pop_grapheme(s) { + Ok(#(first, rest)) -> append(to: uppercase(first), suffix: lowercase(rest)) + _ -> "" + } +} + +/// Returns a `String` representation of a term in Gleam syntax. +/// +pub fn inspect(term: anything) -> String { + do_inspect(term) + |> string_builder.to_string +} + +@external(erlang, "gleam_stdlib", "inspect") +@external(javascript, "../gleam_stdlib.mjs", "inspect") +fn do_inspect(term term: anything) -> StringBuilder + +/// Returns the number of bytes in a `String`. +/// +/// This function runs in constant time on Erlang and in linear time on +/// JavaScript. +/// +@external(erlang, "erlang", "byte_size") +@external(javascript, "../gleam_stdlib.mjs", "byte_size") +pub fn byte_size(string: String) -> Int diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/string_builder.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/string_builder.gleam new file mode 100644 index 0000000..5792ca8 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/string_builder.gleam @@ -0,0 +1,298 @@ +import gleam/list + +/// `StringBuilder` is a type used for efficiently building strings. +/// +/// When we append one string to another the strings must be copied to a +/// new location in memory so that they can sit together. This behaviour +/// enables efficient reading of the string but copying can be expensive, +/// especially if we want to join many strings together. +/// +/// `StringBuilder` is different in that it can be joined together in constant time +/// using minimal memory, and then can be efficiently converted to a string +/// using the `to_string` function. +/// +/// On Erlang this type is compatible with Erlang's iodata. On JavaScript this +/// type is compatible with normal strings. +/// +pub type StringBuilder + +/// Create an empty `StringBuilder`. Useful as the start of a pipe chaining many +/// builders together. +/// +pub fn new() -> StringBuilder { + do_from_strings([]) +} + +/// Prepends a `String` onto the start of some `StringBuilder`. +/// +/// Runs in constant time. +/// +pub fn prepend( + to builder: StringBuilder, + prefix prefix: String, +) -> StringBuilder { + append_builder(from_string(prefix), builder) +} + +/// Appends a `String` onto the end of some `StringBuilder`. +/// +/// Runs in constant time. +/// +pub fn append(to builder: StringBuilder, suffix second: String) -> StringBuilder { + append_builder(builder, from_string(second)) +} + +/// Prepends some `StringBuilder` onto the start of another. +/// +/// Runs in constant time. +/// +pub fn prepend_builder( + to builder: StringBuilder, + prefix prefix: StringBuilder, +) -> StringBuilder { + do_append(prefix, builder) +} + +/// Appends some `StringBuilder` onto the end of another. +/// +/// Runs in constant time. +/// +pub fn append_builder( + to builder: StringBuilder, + suffix suffix: StringBuilder, +) -> StringBuilder { + do_append(builder, suffix) +} + +@external(erlang, "gleam_stdlib", "iodata_append") +@external(javascript, "../gleam_stdlib.mjs", "add") +fn do_append(a: StringBuilder, b: StringBuilder) -> StringBuilder + +/// Converts a list of strings into a builder. +/// +/// Runs in constant time. +/// +pub fn from_strings(strings: List(String)) -> StringBuilder { + do_from_strings(strings) +} + +@external(erlang, "gleam_stdlib", "identity") +@external(javascript, "../gleam_stdlib.mjs", "concat") +fn do_from_strings(a: List(String)) -> StringBuilder + +/// Joins a list of builders into a single builder. +/// +/// Runs in constant time. +/// +pub fn concat(builders: List(StringBuilder)) -> StringBuilder { + do_concat(builders) +} + +@external(erlang, "gleam_stdlib", "identity") +@external(javascript, "../gleam_stdlib.mjs", "concat") +fn do_concat(a: List(StringBuilder)) -> StringBuilder + +/// Converts a string into a builder. +/// +/// Runs in constant time. +/// +pub fn from_string(string: String) -> StringBuilder { + do_from_string(string) +} + +@external(erlang, "gleam_stdlib", "identity") +@external(javascript, "../gleam_stdlib.mjs", "identity") +fn do_from_string(a: String) -> StringBuilder + +/// Turns an `StringBuilder` into a `String` +/// +/// This function is implemented natively by the virtual machine and is highly +/// optimised. +/// +pub fn to_string(builder: StringBuilder) -> String { + do_to_string(builder) +} + +@external(erlang, "unicode", "characters_to_binary") +@external(javascript, "../gleam_stdlib.mjs", "identity") +fn do_to_string(a: StringBuilder) -> String + +/// Returns the size of the `StringBuilder` in bytes. +/// +pub fn byte_size(builder: StringBuilder) -> Int { + do_byte_size(builder) +} + +@external(erlang, "erlang", "iolist_size") +@external(javascript, "../gleam_stdlib.mjs", "length") +fn do_byte_size(a: StringBuilder) -> Int + +/// Joins the given builders into a new builder separated with the given string +/// +pub fn join(builders: List(StringBuilder), with sep: String) -> StringBuilder { + builders + |> list.intersperse(from_string(sep)) + |> concat +} + +/// Converts a builder to a new builder where the contents have been +/// lowercased. +/// +pub fn lowercase(builder: StringBuilder) -> StringBuilder { + do_lowercase(builder) +} + +@external(erlang, "string", "lowercase") +@external(javascript, "../gleam_stdlib.mjs", "lowercase") +fn do_lowercase(a: StringBuilder) -> StringBuilder + +/// Converts a builder to a new builder where the contents have been +/// uppercased. +/// +pub fn uppercase(builder: StringBuilder) -> StringBuilder { + do_uppercase(builder) +} + +@external(erlang, "string", "uppercase") +@external(javascript, "../gleam_stdlib.mjs", "uppercase") +fn do_uppercase(a: StringBuilder) -> StringBuilder + +/// Converts a builder to a new builder with the contents reversed. +/// +pub fn reverse(builder: StringBuilder) -> StringBuilder { + do_reverse(builder) +} + +@target(erlang) +@external(erlang, "string", "reverse") +fn do_reverse(a: StringBuilder) -> StringBuilder + +@target(javascript) +fn do_reverse(builder: StringBuilder) -> StringBuilder { + builder + |> to_string + |> do_to_graphemes + |> list.reverse + |> from_strings +} + +@target(javascript) +@external(javascript, "../gleam_stdlib.mjs", "graphemes") +fn do_to_graphemes(string string: String) -> List(String) + +/// Splits a builder on a given pattern into a list of builders. +/// +pub fn split(iodata: StringBuilder, on pattern: String) -> List(StringBuilder) { + do_split(iodata, pattern) +} + +@target(erlang) +type Direction { + All +} + +@target(erlang) +@external(erlang, "string", "split") +fn erl_split(a: StringBuilder, b: String, c: Direction) -> List(StringBuilder) + +@target(erlang) +fn do_split(iodata: StringBuilder, pattern: String) -> List(StringBuilder) { + erl_split(iodata, pattern, All) +} + +@target(javascript) +@external(javascript, "../gleam_stdlib.mjs", "split") +fn do_split( + builder builder: StringBuilder, + pattern pattern: String, +) -> List(StringBuilder) + +/// Replaces all instances of a pattern with a given string substitute. +/// +pub fn replace( + in builder: StringBuilder, + each pattern: String, + with substitute: String, +) -> StringBuilder { + do_replace(builder, pattern, substitute) +} + +@target(erlang) +fn do_replace( + iodata: StringBuilder, + pattern: String, + substitute: String, +) -> StringBuilder { + erl_replace(iodata, pattern, substitute, All) +} + +@target(erlang) +@external(erlang, "string", "replace") +fn erl_replace( + a: StringBuilder, + b: String, + c: String, + d: Direction, +) -> StringBuilder + +@target(javascript) +@external(javascript, "../gleam_stdlib.mjs", "string_replace") +fn do_replace(a: StringBuilder, b: String, c: String) -> StringBuilder + +/// Compares two builders to determine if they have the same textual content. +/// +/// Comparing two iodata using the `==` operator may return `False` even if they +/// have the same content as they may have been build in different ways, so +/// using this function is often preferred. +/// +/// ## Examples +/// +/// ```gleam +/// > from_strings(["a", "b"]) == from_string("ab") +/// False +/// ``` +/// +/// ```gleam +/// > is_equal(from_strings(["a", "b"]), from_string("ab")) +/// True +/// ``` +/// +pub fn is_equal(a: StringBuilder, b: StringBuilder) -> Bool { + do_is_equal(a, b) +} + +@external(erlang, "string", "equal") +@external(javascript, "../gleam_stdlib.mjs", "equal") +fn do_is_equal(a: StringBuilder, b: StringBuilder) -> Bool + +/// Inspects a builder to determine if it is equivalent to an empty string. +/// +/// ## Examples +/// +/// ```gleam +/// > from_string("ok") |> is_empty +/// False +/// ``` +/// +/// ```gleam +/// > from_string("") |> is_empty +/// True +/// ``` +/// +/// ```gleam +/// > from_strings([]) |> is_empty +/// True +/// ``` +/// +pub fn is_empty(builder: StringBuilder) -> Bool { + do_is_empty(builder) +} + +@target(erlang) +@external(erlang, "string", "is_empty") +fn do_is_empty(a: StringBuilder) -> Bool + +@target(javascript) +fn do_is_empty(builder: StringBuilder) -> Bool { + from_string("") == builder +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/uri.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/uri.gleam new file mode 100644 index 0000000..11f6ea6 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/uri.gleam @@ -0,0 +1,462 @@ +//// Utilities for working with URIs +//// +//// This module provides functions for working with URIs (for example, parsing +//// URIs or encoding query strings). The functions in this module are implemented +//// according to [RFC 3986](https://tools.ietf.org/html/rfc3986). +//// +//// Query encoding (Form encoding) is defined in the +//// [W3C specification](https://www.w3.org/TR/html52/sec-forms.html#urlencoded-form-data). + +import gleam/int +import gleam/list +import gleam/option.{type Option, None, Some} +import gleam/string +import gleam/string_builder.{type StringBuilder} +@target(javascript) +import gleam/pair +@target(javascript) +import gleam/regex +@target(javascript) +import gleam/result + +/// Type representing holding the parsed components of an URI. +/// All components of a URI are optional, except the path. +/// +pub type Uri { + Uri( + scheme: Option(String), + userinfo: Option(String), + host: Option(String), + port: Option(Int), + path: String, + query: Option(String), + fragment: Option(String), + ) +} + +/// Parses a compliant URI string into the `Uri` Type. +/// If the string is not a valid URI string then an error is returned. +/// +/// The opposite operation is `uri.to_string`. +/// +/// ## Examples +/// +/// ```gleam +/// > parse("https://example.com:1234/a/b?query=true#fragment") +/// Ok( +/// Uri( +/// scheme: Some("https"), +/// userinfo: None, +/// host: Some("example.com"), +/// port: Some(1234), +/// path: "/a/b", +/// query: Some("query=true"), +/// fragment: Some("fragment") +/// ) +/// ) +/// ``` +/// +pub fn parse(uri_string: String) -> Result(Uri, Nil) { + do_parse(uri_string) +} + +@target(erlang) +@external(erlang, "gleam_stdlib", "uri_parse") +fn do_parse(a: String) -> Result(Uri, Nil) + +@target(javascript) +fn do_parse(uri_string: String) -> Result(Uri, Nil) { + // From https://tools.ietf.org/html/rfc3986#appendix-B + let pattern = + // 12 3 4 5 6 7 8 + "^(([a-z][a-z0-9\\+\\-\\.]*):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#.*)?" + let matches = + pattern + |> regex_submatches(uri_string) + |> pad_list(8) + + let #(scheme, authority, path, query, fragment) = case matches { + [ + _scheme_with_colon, + scheme, + authority_with_slashes, + _authority, + path, + query_with_question_mark, + _query, + fragment, + ] -> #( + scheme, + authority_with_slashes, + path, + query_with_question_mark, + fragment, + ) + _ -> #(None, None, None, None, None) + } + + let scheme = noneify_empty_string(scheme) + let path = option.unwrap(path, "") + let query = noneify_query(query) + let #(userinfo, host, port) = split_authority(authority) + let fragment = + fragment + |> option.to_result(Nil) + |> result.try(string.pop_grapheme) + |> result.map(pair.second) + |> option.from_result + let scheme = + scheme + |> noneify_empty_string + |> option.map(string.lowercase) + Ok(Uri( + scheme: scheme, + userinfo: userinfo, + host: host, + port: port, + path: path, + query: query, + fragment: fragment, + )) +} + +@target(javascript) +fn regex_submatches(pattern: String, string: String) -> List(Option(String)) { + pattern + |> regex.compile(regex.Options(case_insensitive: True, multi_line: False)) + |> result.nil_error + |> result.map(regex.scan(_, string)) + |> result.try(list.first) + |> result.map(fn(m: regex.Match) { m.submatches }) + |> result.unwrap([]) +} + +@target(javascript) +fn noneify_query(x: Option(String)) -> Option(String) { + case x { + None -> None + Some(x) -> + case string.pop_grapheme(x) { + Ok(#("?", query)) -> Some(query) + _ -> None + } + } +} + +@target(javascript) +fn noneify_empty_string(x: Option(String)) -> Option(String) { + case x { + Some("") | None -> None + Some(_) -> x + } +} + +// Split an authority into its userinfo, host and port parts. +@target(javascript) +fn split_authority( + authority: Option(String), +) -> #(Option(String), Option(String), Option(Int)) { + case option.unwrap(authority, "") { + "" -> #(None, None, None) + "//" -> #(None, Some(""), None) + authority -> { + let matches = + "^(//)?((.*)@)?(\\[[a-zA-Z0-9:.]*\\]|[^:]*)(:(\\d*))?" + |> regex_submatches(authority) + |> pad_list(6) + case matches { + [_, _, userinfo, host, _, port] -> { + let userinfo = noneify_empty_string(userinfo) + let host = noneify_empty_string(host) + let port = + port + |> option.unwrap("") + |> int.parse + |> option.from_result + #(userinfo, host, port) + } + _ -> #(None, None, None) + } + } + } +} + +@target(javascript) +fn pad_list(list: List(Option(a)), size: Int) -> List(Option(a)) { + list + |> list.append(list.repeat(None, extra_required(list, size))) +} + +@target(javascript) +fn extra_required(list: List(a), remaining: Int) -> Int { + case list { + _ if remaining == 0 -> 0 + [] -> remaining + [_, ..xs] -> extra_required(xs, remaining - 1) + } +} + +/// Parses an urlencoded query string into a list of key value pairs. +/// Returns an error for invalid encoding. +/// +/// The opposite operation is `uri.query_to_string`. +/// +/// ## Examples +/// +/// ```gleam +/// > parse_query("a=1&b=2") +/// Ok([#("a", "1"), #("b", "2")]) +/// ``` +/// +pub fn parse_query(query: String) -> Result(List(#(String, String)), Nil) { + do_parse_query(query) +} + +@external(erlang, "gleam_stdlib", "parse_query") +@external(javascript, "../gleam_stdlib.mjs", "parse_query") +fn do_parse_query(a: String) -> Result(List(#(String, String)), Nil) + +/// Encodes a list of key value pairs as a URI query string. +/// +/// The opposite operation is `uri.parse_query`. +/// +/// ## Examples +/// +/// ```gleam +/// > query_to_string([#("a", "1"), #("b", "2")]) +/// "a=1&b=2" +/// ``` +/// +pub fn query_to_string(query: List(#(String, String))) -> String { + query + |> list.map(query_pair) + |> list.intersperse(string_builder.from_string("&")) + |> string_builder.concat + |> string_builder.to_string +} + +fn query_pair(pair: #(String, String)) -> StringBuilder { + string_builder.from_strings([ + percent_encode(pair.0), + "=", + percent_encode(pair.1), + ]) +} + +/// Encodes a string into a percent encoded representation. +/// +/// ## Examples +/// +/// ```gleam +/// > percent_encode("100% great") +/// "100%25%20great" +/// ``` +/// +pub fn percent_encode(value: String) -> String { + do_percent_encode(value) +} + +@external(erlang, "gleam_stdlib", "percent_encode") +@external(javascript, "../gleam_stdlib.mjs", "percent_encode") +fn do_percent_encode(a: String) -> String + +/// Decodes a percent encoded string. +/// +/// ## Examples +/// +/// ```gleam +/// > percent_decode("100%25+great") +/// Ok("100% great") +/// ``` +/// +pub fn percent_decode(value: String) -> Result(String, Nil) { + do_percent_decode(value) +} + +@external(erlang, "gleam_stdlib", "percent_decode") +@external(javascript, "../gleam_stdlib.mjs", "percent_decode") +fn do_percent_decode(a: String) -> Result(String, Nil) + +fn do_remove_dot_segments( + input: List(String), + accumulator: List(String), +) -> List(String) { + case input { + [] -> list.reverse(accumulator) + [segment, ..rest] -> { + let accumulator = case segment, accumulator { + "", accumulator -> accumulator + ".", accumulator -> accumulator + "..", [] -> [] + "..", [_, ..accumulator] -> accumulator + segment, accumulator -> [segment, ..accumulator] + } + do_remove_dot_segments(rest, accumulator) + } + } +} + +fn remove_dot_segments(input: List(String)) -> List(String) { + do_remove_dot_segments(input, []) +} + +/// Splits the path section of a URI into it's constituent segments. +/// +/// Removes empty segments and resolves dot-segments as specified in +/// [section 5.2](https://www.ietf.org/rfc/rfc3986.html#section-5.2) of the RFC. +/// +/// ## Examples +/// +/// ```gleam +/// > path_segments("/users/1") +/// ["users" ,"1"] +/// ``` +/// +pub fn path_segments(path: String) -> List(String) { + remove_dot_segments(string.split(path, "/")) +} + +/// Encodes a `Uri` value as a URI string. +/// +/// The opposite operation is `uri.parse`. +/// +/// ## Examples +/// +/// ```gleam +/// > let uri = Uri(Some("http"), None, Some("example.com"), ...) +/// > to_string(uri) +/// "http://example.com" +/// ``` +/// +pub fn to_string(uri: Uri) -> String { + let parts = case uri.fragment { + Some(fragment) -> ["#", fragment] + _ -> [] + } + let parts = case uri.query { + Some(query) -> ["?", query, ..parts] + _ -> parts + } + let parts = [uri.path, ..parts] + let parts = case uri.host, string.starts_with(uri.path, "/") { + Some(host), False if host != "" -> ["/", ..parts] + _, _ -> parts + } + let parts = case uri.host, uri.port { + Some(_), Some(port) -> [":", int.to_string(port), ..parts] + _, _ -> parts + } + let parts = case uri.scheme, uri.userinfo, uri.host { + Some(s), Some(u), Some(h) -> [s, "://", u, "@", h, ..parts] + Some(s), None, Some(h) -> [s, "://", h, ..parts] + Some(s), Some(_), None | Some(s), None, None -> [s, ":", ..parts] + None, None, Some(h) -> ["//", h, ..parts] + _, _, _ -> parts + } + string.concat(parts) +} + +/// Fetches the origin of a URI. +/// +/// Returns the origin of a uri as defined in +/// [RFC 6454](https://tools.ietf.org/html/rfc6454) +/// +/// The supported URI schemes are `http` and `https`. +/// URLs without a scheme will return `Error`. +/// +/// ## Examples +/// +/// ```gleam +/// > let assert Ok(uri) = parse("http://example.com/path?foo#bar") +/// > origin(uri) +/// Ok("http://example.com") +/// ``` +/// +pub fn origin(uri: Uri) -> Result(String, Nil) { + let Uri(scheme: scheme, host: host, port: port, ..) = uri + case scheme { + Some("https") if port == Some(443) -> { + let origin = Uri(scheme, None, host, None, "", None, None) + Ok(to_string(origin)) + } + Some("http") if port == Some(80) -> { + let origin = Uri(scheme, None, host, None, "", None, None) + Ok(to_string(origin)) + } + Some(s) if s == "http" || s == "https" -> { + let origin = Uri(scheme, None, host, port, "", None, None) + Ok(to_string(origin)) + } + _ -> Error(Nil) + } +} + +fn drop_last(elements: List(a)) -> List(a) { + list.take(from: elements, up_to: list.length(elements) - 1) +} + +fn join_segments(segments: List(String)) -> String { + string.join(["", ..segments], "/") +} + +/// Resolves a URI with respect to the given base URI. +/// +/// The base URI must be an absolute URI or this function will return an error. +/// The algorithm for merging uris is described in +/// [RFC 3986](https://tools.ietf.org/html/rfc3986#section-5.2). +/// +pub fn merge(base: Uri, relative: Uri) -> Result(Uri, Nil) { + case base { + Uri(scheme: Some(_), host: Some(_), ..) -> + case relative { + Uri(host: Some(_), ..) -> { + let path = + string.split(relative.path, "/") + |> remove_dot_segments() + |> join_segments() + let resolved = + Uri( + option.or(relative.scheme, base.scheme), + None, + relative.host, + option.or(relative.port, base.port), + path, + relative.query, + relative.fragment, + ) + Ok(resolved) + } + _ -> { + let #(new_path, new_query) = case relative.path { + "" -> #(base.path, option.or(relative.query, base.query)) + _ -> { + let path_segments = case string.starts_with(relative.path, "/") { + True -> string.split(relative.path, "/") + False -> + string.split(base.path, "/") + |> drop_last() + |> list.append(string.split(relative.path, "/")) + } + let path = + path_segments + |> remove_dot_segments() + |> join_segments() + #(path, relative.query) + } + } + let resolved = + Uri( + base.scheme, + None, + base.host, + base.port, + new_path, + new_query, + relative.fragment, + ) + Ok(resolved) + } + } + _ -> Error(Nil) + } +} diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@base.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@base.erl new file mode 100644 index 0000000..65bc3f6 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@base.erl @@ -0,0 +1,20 @@ +-module(gleam@base). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([encode64/2, decode64/1, url_encode64/2, url_decode64/1]). + +-spec encode64(bitstring(), boolean()) -> binary(). +encode64(Input, Padding) -> + gleam@bit_array:base64_encode(Input, Padding). + +-spec decode64(binary()) -> {ok, bitstring()} | {error, nil}. +decode64(Encoded) -> + gleam@bit_array:base64_decode(Encoded). + +-spec url_encode64(bitstring(), boolean()) -> binary(). +url_encode64(Input, Padding) -> + gleam@bit_array:base64_url_encode(Input, Padding). + +-spec url_decode64(binary()) -> {ok, bitstring()} | {error, nil}. +url_decode64(Encoded) -> + gleam@bit_array:base64_url_decode(Encoded). diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_array.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_array.erl new file mode 100644 index 0000000..ba18dfa --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_array.erl @@ -0,0 +1,102 @@ +-module(gleam@bit_array). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([from_string/1, byte_size/1, slice/3, is_utf8/1, to_string/1, concat/1, append/2, base64_encode/2, base64_decode/1, base64_url_encode/2, base64_url_decode/1, base16_encode/1, base16_decode/1]). + +-spec from_string(binary()) -> bitstring(). +from_string(X) -> + gleam_stdlib:identity(X). + +-spec byte_size(bitstring()) -> integer(). +byte_size(X) -> + erlang:byte_size(X). + +-spec slice(bitstring(), integer(), integer()) -> {ok, bitstring()} | + {error, nil}. +slice(String, Position, Length) -> + gleam_stdlib:bit_array_slice(String, Position, Length). + +-spec do_is_utf8(bitstring()) -> boolean(). +do_is_utf8(Bits) -> + case Bits of + <<>> -> + true; + + <<_/utf8, Rest/binary>> -> + do_is_utf8(Rest); + + _ -> + false + end. + +-spec is_utf8(bitstring()) -> boolean(). +is_utf8(Bits) -> + do_is_utf8(Bits). + +-spec do_to_string(bitstring()) -> {ok, binary()} | {error, nil}. +do_to_string(Bits) -> + case is_utf8(Bits) of + true -> + {ok, gleam_stdlib:identity(Bits)}; + + false -> + {error, nil} + end. + +-spec to_string(bitstring()) -> {ok, binary()} | {error, nil}. +to_string(Bits) -> + do_to_string(Bits). + +-spec concat(list(bitstring())) -> bitstring(). +concat(Bit_arrays) -> + gleam_stdlib:bit_array_concat(Bit_arrays). + +-spec append(bitstring(), bitstring()) -> bitstring(). +append(First, Second) -> + gleam_stdlib:bit_array_concat([First, Second]). + +-spec base64_encode(bitstring(), boolean()) -> binary(). +base64_encode(Input, Padding) -> + Encoded = base64:encode(Input), + case Padding of + true -> + Encoded; + + false -> + gleam@string:replace(Encoded, <<"="/utf8>>, <<""/utf8>>) + end. + +-spec base64_decode(binary()) -> {ok, bitstring()} | {error, nil}. +base64_decode(Encoded) -> + Padded = case erlang:byte_size(gleam_stdlib:identity(Encoded)) rem 4 of + 0 -> + Encoded; + + N -> + gleam@string:append( + Encoded, + gleam@string:repeat(<<"="/utf8>>, 4 - N) + ) + end, + gleam_stdlib:base_decode64(Padded). + +-spec base64_url_encode(bitstring(), boolean()) -> binary(). +base64_url_encode(Input, Padding) -> + _pipe = base64_encode(Input, Padding), + _pipe@1 = gleam@string:replace(_pipe, <<"+"/utf8>>, <<"-"/utf8>>), + gleam@string:replace(_pipe@1, <<"/"/utf8>>, <<"_"/utf8>>). + +-spec base64_url_decode(binary()) -> {ok, bitstring()} | {error, nil}. +base64_url_decode(Encoded) -> + _pipe = Encoded, + _pipe@1 = gleam@string:replace(_pipe, <<"-"/utf8>>, <<"+"/utf8>>), + _pipe@2 = gleam@string:replace(_pipe@1, <<"_"/utf8>>, <<"/"/utf8>>), + base64_decode(_pipe@2). + +-spec base16_encode(bitstring()) -> binary(). +base16_encode(Input) -> + binary:encode_hex(Input). + +-spec base16_decode(binary()) -> {ok, bitstring()} | {error, nil}. +base16_decode(Input) -> + gleam_stdlib:base16_decode(Input). diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_builder.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_builder.erl new file mode 100644 index 0000000..284c6d4 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_builder.erl @@ -0,0 +1,66 @@ +-module(gleam@bit_builder). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([new/0, prepend/2, append/2, prepend_builder/2, append_builder/2, prepend_string/2, append_string/2, concat/1, concat_bit_strings/1, from_string/1, from_string_builder/1, from_bit_string/1, to_bit_string/1, byte_size/1]). + +-spec new() -> gleam@bytes_builder:bytes_builder(). +new() -> + gleam@bytes_builder:new(). + +-spec prepend(gleam@bytes_builder:bytes_builder(), bitstring()) -> gleam@bytes_builder:bytes_builder(). +prepend(To, Prefix) -> + gleam@bytes_builder:prepend(To, Prefix). + +-spec append(gleam@bytes_builder:bytes_builder(), bitstring()) -> gleam@bytes_builder:bytes_builder(). +append(To, Suffix) -> + gleam@bytes_builder:append(To, Suffix). + +-spec prepend_builder( + gleam@bytes_builder:bytes_builder(), + gleam@bytes_builder:bytes_builder() +) -> gleam@bytes_builder:bytes_builder(). +prepend_builder(To, Prefix) -> + gleam@bytes_builder:prepend_builder(To, Prefix). + +-spec append_builder( + gleam@bytes_builder:bytes_builder(), + gleam@bytes_builder:bytes_builder() +) -> gleam@bytes_builder:bytes_builder(). +append_builder(First, Second) -> + gleam_stdlib:iodata_append(First, Second). + +-spec prepend_string(gleam@bytes_builder:bytes_builder(), binary()) -> gleam@bytes_builder:bytes_builder(). +prepend_string(To, Prefix) -> + gleam@bytes_builder:prepend_string(To, Prefix). + +-spec append_string(gleam@bytes_builder:bytes_builder(), binary()) -> gleam@bytes_builder:bytes_builder(). +append_string(To, Suffix) -> + gleam@bytes_builder:append_string(To, Suffix). + +-spec concat(list(gleam@bytes_builder:bytes_builder())) -> gleam@bytes_builder:bytes_builder(). +concat(Builders) -> + gleam_stdlib:identity(Builders). + +-spec concat_bit_strings(list(bitstring())) -> gleam@bytes_builder:bytes_builder(). +concat_bit_strings(Bits) -> + gleam_stdlib:identity(Bits). + +-spec from_string(binary()) -> gleam@bytes_builder:bytes_builder(). +from_string(String) -> + gleam_stdlib:wrap_list(String). + +-spec from_string_builder(gleam@string_builder:string_builder()) -> gleam@bytes_builder:bytes_builder(). +from_string_builder(Builder) -> + gleam_stdlib:wrap_list(Builder). + +-spec from_bit_string(bitstring()) -> gleam@bytes_builder:bytes_builder(). +from_bit_string(Bits) -> + gleam_stdlib:wrap_list(Bits). + +-spec to_bit_string(gleam@bytes_builder:bytes_builder()) -> bitstring(). +to_bit_string(Builder) -> + erlang:list_to_bitstring(Builder). + +-spec byte_size(gleam@bytes_builder:bytes_builder()) -> integer(). +byte_size(Builder) -> + erlang:iolist_size(Builder). diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_string.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_string.erl new file mode 100644 index 0000000..7dabaa3 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_string.erl @@ -0,0 +1,33 @@ +-module(gleam@bit_string). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([from_string/1, byte_size/1, append/2, slice/3, is_utf8/1, to_string/1, concat/1]). + +-spec from_string(binary()) -> bitstring(). +from_string(X) -> + gleam_stdlib:identity(X). + +-spec byte_size(bitstring()) -> integer(). +byte_size(X) -> + erlang:byte_size(X). + +-spec append(bitstring(), bitstring()) -> bitstring(). +append(First, Second) -> + gleam@bit_array:append(First, Second). + +-spec slice(bitstring(), integer(), integer()) -> {ok, bitstring()} | + {error, nil}. +slice(String, Position, Length) -> + gleam_stdlib:bit_array_slice(String, Position, Length). + +-spec is_utf8(bitstring()) -> boolean(). +is_utf8(Bits) -> + gleam@bit_array:is_utf8(Bits). + +-spec to_string(bitstring()) -> {ok, binary()} | {error, nil}. +to_string(Bits) -> + gleam@bit_array:to_string(Bits). + +-spec concat(list(bitstring())) -> bitstring(). +concat(Bit_strings) -> + gleam_stdlib:bit_array_concat(Bit_strings). diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@bool.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@bool.erl new file mode 100644 index 0000000..cd55358 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@bool.erl @@ -0,0 +1,162 @@ +-module(gleam@bool). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export(['and'/2, 'or'/2, negate/1, nor/2, nand/2, exclusive_or/2, exclusive_nor/2, compare/2, max/2, min/2, to_int/1, to_string/1, guard/3, lazy_guard/3]). + +-spec 'and'(boolean(), boolean()) -> boolean(). +'and'(A, B) -> + A andalso B. + +-spec 'or'(boolean(), boolean()) -> boolean(). +'or'(A, B) -> + A orelse B. + +-spec negate(boolean()) -> boolean(). +negate(Bool) -> + case Bool of + true -> + false; + + false -> + true + end. + +-spec nor(boolean(), boolean()) -> boolean(). +nor(A, B) -> + case {A, B} of + {false, false} -> + true; + + {false, true} -> + false; + + {true, false} -> + false; + + {true, true} -> + false + end. + +-spec nand(boolean(), boolean()) -> boolean(). +nand(A, B) -> + case {A, B} of + {false, false} -> + true; + + {false, true} -> + true; + + {true, false} -> + true; + + {true, true} -> + false + end. + +-spec exclusive_or(boolean(), boolean()) -> boolean(). +exclusive_or(A, B) -> + case {A, B} of + {false, false} -> + false; + + {false, true} -> + true; + + {true, false} -> + true; + + {true, true} -> + false + end. + +-spec exclusive_nor(boolean(), boolean()) -> boolean(). +exclusive_nor(A, B) -> + case {A, B} of + {false, false} -> + true; + + {false, true} -> + false; + + {true, false} -> + false; + + {true, true} -> + true + end. + +-spec compare(boolean(), boolean()) -> gleam@order:order(). +compare(A, B) -> + case {A, B} of + {true, true} -> + eq; + + {true, false} -> + gt; + + {false, false} -> + eq; + + {false, true} -> + lt + end. + +-spec max(boolean(), boolean()) -> boolean(). +max(A, B) -> + case A of + true -> + true; + + false -> + B + end. + +-spec min(boolean(), boolean()) -> boolean(). +min(A, B) -> + case A of + false -> + false; + + true -> + B + end. + +-spec to_int(boolean()) -> integer(). +to_int(Bool) -> + case Bool of + false -> + 0; + + true -> + 1 + end. + +-spec to_string(boolean()) -> binary(). +to_string(Bool) -> + case Bool of + false -> + <<"False"/utf8>>; + + true -> + <<"True"/utf8>> + end. + +-spec guard(boolean(), DDZ, fun(() -> DDZ)) -> DDZ. +guard(Requirement, Consequence, Alternative) -> + case Requirement of + true -> + Consequence; + + false -> + Alternative() + end. + +-spec lazy_guard(boolean(), fun(() -> DEA), fun(() -> DEA)) -> DEA. +lazy_guard(Requirement, Consequence, Alternative) -> + case Requirement of + true -> + Consequence(); + + false -> + Alternative() + end. diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@bytes_builder.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@bytes_builder.erl new file mode 100644 index 0000000..2f6dd93 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@bytes_builder.erl @@ -0,0 +1,87 @@ +-module(gleam@bytes_builder). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([append_builder/2, prepend_builder/2, concat/1, new/0, from_string/1, prepend_string/2, append_string/2, from_string_builder/1, from_bit_array/1, prepend/2, append/2, concat_bit_arrays/1, to_bit_array/1, byte_size/1]). +-export_type([bytes_builder/0]). + +-opaque bytes_builder() :: {bytes, bitstring()} | + {text, gleam@string_builder:string_builder()} | + {many, list(bytes_builder())}. + +-spec append_builder(bytes_builder(), bytes_builder()) -> bytes_builder(). +append_builder(First, Second) -> + gleam_stdlib:iodata_append(First, Second). + +-spec prepend_builder(bytes_builder(), bytes_builder()) -> bytes_builder(). +prepend_builder(Second, First) -> + gleam_stdlib:iodata_append(First, Second). + +-spec concat(list(bytes_builder())) -> bytes_builder(). +concat(Builders) -> + gleam_stdlib:identity(Builders). + +-spec new() -> bytes_builder(). +new() -> + gleam_stdlib:identity([]). + +-spec from_string(binary()) -> bytes_builder(). +from_string(String) -> + gleam_stdlib:wrap_list(String). + +-spec prepend_string(bytes_builder(), binary()) -> bytes_builder(). +prepend_string(Second, First) -> + gleam_stdlib:iodata_append(gleam_stdlib:wrap_list(First), Second). + +-spec append_string(bytes_builder(), binary()) -> bytes_builder(). +append_string(First, Second) -> + gleam_stdlib:iodata_append(First, gleam_stdlib:wrap_list(Second)). + +-spec from_string_builder(gleam@string_builder:string_builder()) -> bytes_builder(). +from_string_builder(Builder) -> + gleam_stdlib:wrap_list(Builder). + +-spec from_bit_array(bitstring()) -> bytes_builder(). +from_bit_array(Bits) -> + gleam_stdlib:wrap_list(Bits). + +-spec prepend(bytes_builder(), bitstring()) -> bytes_builder(). +prepend(Second, First) -> + gleam_stdlib:iodata_append(gleam_stdlib:wrap_list(First), Second). + +-spec append(bytes_builder(), bitstring()) -> bytes_builder(). +append(First, Second) -> + gleam_stdlib:iodata_append(First, gleam_stdlib:wrap_list(Second)). + +-spec concat_bit_arrays(list(bitstring())) -> bytes_builder(). +concat_bit_arrays(Bits) -> + gleam_stdlib:identity(Bits). + +-spec to_list(list(list(bytes_builder())), list(bitstring())) -> list(bitstring()). +to_list(Stack, Acc) -> + case Stack of + [] -> + Acc; + + [[] | Remaining_stack] -> + to_list(Remaining_stack, Acc); + + [[{bytes, Bits} | Rest] | Remaining_stack@1] -> + to_list([Rest | Remaining_stack@1], [Bits | Acc]); + + [[{text, Builder} | Rest@1] | Remaining_stack@2] -> + Bits@1 = gleam_stdlib:identity( + gleam@string_builder:to_string(Builder) + ), + to_list([Rest@1 | Remaining_stack@2], [Bits@1 | Acc]); + + [[{many, Builders} | Rest@2] | Remaining_stack@3] -> + to_list([Builders, Rest@2 | Remaining_stack@3], Acc) + end. + +-spec to_bit_array(bytes_builder()) -> bitstring(). +to_bit_array(Builder) -> + erlang:list_to_bitstring(Builder). + +-spec byte_size(bytes_builder()) -> integer(). +byte_size(Builder) -> + erlang:iolist_size(Builder). diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@dict.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@dict.erl new file mode 100644 index 0000000..44b89ea --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@dict.erl @@ -0,0 +1,97 @@ +-module(gleam@dict). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([size/1, to_list/1, from_list/1, has_key/2, new/0, get/2, insert/3, map_values/2, keys/1, values/1, filter/2, take/2, merge/2, delete/2, drop/2, update/3, fold/3]). +-export_type([dict/2]). + +-type dict(KS, KT) :: any() | {gleam_phantom, KS, KT}. + +-spec size(dict(any(), any())) -> integer(). +size(Dict) -> + maps:size(Dict). + +-spec to_list(dict(LC, LD)) -> list({LC, LD}). +to_list(Dict) -> + maps:to_list(Dict). + +-spec from_list(list({LM, LN})) -> dict(LM, LN). +from_list(List) -> + maps:from_list(List). + +-spec has_key(dict(LW, any()), LW) -> boolean(). +has_key(Dict, Key) -> + maps:is_key(Key, Dict). + +-spec new() -> dict(any(), any()). +new() -> + maps:new(). + +-spec get(dict(MM, MN), MM) -> {ok, MN} | {error, nil}. +get(From, Get) -> + gleam_stdlib:map_get(From, Get). + +-spec insert(dict(MY, MZ), MY, MZ) -> dict(MY, MZ). +insert(Dict, Key, Value) -> + maps:put(Key, Value, Dict). + +-spec map_values(dict(NK, NL), fun((NK, NL) -> NO)) -> dict(NK, NO). +map_values(Dict, Fun) -> + maps:map(Fun, Dict). + +-spec keys(dict(NY, any())) -> list(NY). +keys(Dict) -> + maps:keys(Dict). + +-spec values(dict(any(), OJ)) -> list(OJ). +values(Dict) -> + maps:values(Dict). + +-spec filter(dict(OS, OT), fun((OS, OT) -> boolean())) -> dict(OS, OT). +filter(Dict, Predicate) -> + maps:filter(Predicate, Dict). + +-spec take(dict(PE, PF), list(PE)) -> dict(PE, PF). +take(Dict, Desired_keys) -> + maps:with(Desired_keys, Dict). + +-spec merge(dict(PS, PT), dict(PS, PT)) -> dict(PS, PT). +merge(Dict, New_entries) -> + maps:merge(Dict, New_entries). + +-spec delete(dict(QI, QJ), QI) -> dict(QI, QJ). +delete(Dict, Key) -> + maps:remove(Key, Dict). + +-spec drop(dict(QU, QV), list(QU)) -> dict(QU, QV). +drop(Dict, Disallowed_keys) -> + case Disallowed_keys of + [] -> + Dict; + + [X | Xs] -> + drop(delete(Dict, X), Xs) + end. + +-spec update(dict(RB, RC), RB, fun((gleam@option:option(RC)) -> RC)) -> dict(RB, RC). +update(Dict, Key, Fun) -> + _pipe = Dict, + _pipe@1 = get(_pipe, Key), + _pipe@2 = gleam@option:from_result(_pipe@1), + _pipe@3 = Fun(_pipe@2), + insert(Dict, Key, _pipe@3). + +-spec do_fold(list({RI, RJ}), RL, fun((RL, RI, RJ) -> RL)) -> RL. +do_fold(List, Initial, Fun) -> + case List of + [] -> + Initial; + + [{K, V} | Rest] -> + do_fold(Rest, Fun(Initial, K, V), Fun) + end. + +-spec fold(dict(RM, RN), RQ, fun((RQ, RM, RN) -> RQ)) -> RQ. +fold(Dict, Initial, Fun) -> + _pipe = Dict, + _pipe@1 = to_list(_pipe), + do_fold(_pipe@1, Initial, Fun). diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@dynamic.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@dynamic.erl new file mode 100644 index 0000000..38f4b4e --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@dynamic.erl @@ -0,0 +1,808 @@ +-module(gleam@dynamic). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([from/1, unsafe_coerce/1, dynamic/1, bit_array/1, bit_string/1, classify/1, int/1, float/1, bool/1, shallow_list/1, optional/1, any/1, decode1/2, result/2, list/1, string/1, field/2, optional_field/2, element/2, tuple2/2, tuple3/3, tuple4/4, tuple5/5, tuple6/6, dict/2, map/2, decode2/3, decode3/4, decode4/5, decode5/6, decode6/7, decode7/8, decode8/9, decode9/10]). +-export_type([dynamic_/0, decode_error/0, unknown_tuple/0]). + +-type dynamic_() :: any(). + +-type decode_error() :: {decode_error, binary(), binary(), list(binary())}. + +-type unknown_tuple() :: any(). + +-spec from(any()) -> dynamic_(). +from(A) -> + gleam_stdlib:identity(A). + +-spec unsafe_coerce(dynamic_()) -> any(). +unsafe_coerce(A) -> + gleam_stdlib:identity(A). + +-spec dynamic(dynamic_()) -> {ok, dynamic_()} | {error, list(decode_error())}. +dynamic(Value) -> + {ok, Value}. + +-spec bit_array(dynamic_()) -> {ok, bitstring()} | {error, list(decode_error())}. +bit_array(Data) -> + gleam_stdlib:decode_bit_array(Data). + +-spec bit_string(dynamic_()) -> {ok, bitstring()} | + {error, list(decode_error())}. +bit_string(Data) -> + bit_array(Data). + +-spec put_expected(decode_error(), binary()) -> decode_error(). +put_expected(Error, Expected) -> + erlang:setelement(2, Error, Expected). + +-spec classify(dynamic_()) -> binary(). +classify(Data) -> + gleam_stdlib:classify_dynamic(Data). + +-spec int(dynamic_()) -> {ok, integer()} | {error, list(decode_error())}. +int(Data) -> + gleam_stdlib:decode_int(Data). + +-spec float(dynamic_()) -> {ok, float()} | {error, list(decode_error())}. +float(Data) -> + gleam_stdlib:decode_float(Data). + +-spec bool(dynamic_()) -> {ok, boolean()} | {error, list(decode_error())}. +bool(Data) -> + gleam_stdlib:decode_bool(Data). + +-spec shallow_list(dynamic_()) -> {ok, list(dynamic_())} | + {error, list(decode_error())}. +shallow_list(Value) -> + gleam_stdlib:decode_list(Value). + +-spec optional(fun((dynamic_()) -> {ok, DZX} | {error, list(decode_error())})) -> fun((dynamic_()) -> {ok, + gleam@option:option(DZX)} | + {error, list(decode_error())}). +optional(Decode) -> + fun(Value) -> gleam_stdlib:decode_option(Value, Decode) end. + +-spec at_least_decode_tuple_error(integer(), dynamic_()) -> {ok, any()} | + {error, list(decode_error())}. +at_least_decode_tuple_error(Size, Data) -> + S = case Size of + 1 -> + <<""/utf8>>; + + _ -> + <<"s"/utf8>> + end, + Error = begin + _pipe = [<<"Tuple of at least "/utf8>>, + gleam@int:to_string(Size), + <<" element"/utf8>>, + S], + _pipe@1 = gleam@string_builder:from_strings(_pipe), + _pipe@2 = gleam@string_builder:to_string(_pipe@1), + {decode_error, _pipe@2, classify(Data), []} + end, + {error, [Error]}. + +-spec any(list(fun((dynamic_()) -> {ok, EEE} | {error, list(decode_error())}))) -> fun((dynamic_()) -> {ok, + EEE} | + {error, list(decode_error())}). +any(Decoders) -> + fun(Data) -> case Decoders of + [] -> + {error, + [{decode_error, <<"another type"/utf8>>, classify(Data), []}]}; + + [Decoder | Decoders@1] -> + case Decoder(Data) of + {ok, Decoded} -> + {ok, Decoded}; + + {error, _} -> + (any(Decoders@1))(Data) + end + end end. + +-spec all_errors({ok, any()} | {error, list(decode_error())}) -> list(decode_error()). +all_errors(Result) -> + case Result of + {ok, _} -> + []; + + {error, Errors} -> + Errors + end. + +-spec decode1( + fun((EEI) -> EEJ), + fun((dynamic_()) -> {ok, EEI} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, EEJ} | {error, list(decode_error())}). +decode1(Constructor, T1) -> + fun(Value) -> case T1(Value) of + {ok, A} -> + {ok, Constructor(A)}; + + A@1 -> + {error, all_errors(A@1)} + end end. + +-spec push_path(decode_error(), any()) -> decode_error(). +push_path(Error, Name) -> + Name@1 = from(Name), + Decoder = any( + [fun string/1, + fun(X) -> gleam@result:map(int(X), fun gleam@int:to_string/1) end] + ), + Name@3 = case Decoder(Name@1) of + {ok, Name@2} -> + Name@2; + + {error, _} -> + _pipe = [<<"<"/utf8>>, classify(Name@1), <<">"/utf8>>], + _pipe@1 = gleam@string_builder:from_strings(_pipe), + gleam@string_builder:to_string(_pipe@1) + end, + erlang:setelement(4, Error, [Name@3 | erlang:element(4, Error)]). + +-spec result( + fun((dynamic_()) -> {ok, DZL} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, DZN} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, {ok, DZL} | {error, DZN}} | + {error, list(decode_error())}). +result(Decode_ok, Decode_error) -> + fun(Value) -> + gleam@result:'try'( + gleam_stdlib:decode_result(Value), + fun(Inner_result) -> case Inner_result of + {ok, Raw} -> + gleam@result:'try'( + begin + _pipe = Decode_ok(Raw), + map_errors( + _pipe, + fun(_capture) -> + push_path(_capture, <<"ok"/utf8>>) + end + ) + end, + fun(Value@1) -> {ok, {ok, Value@1}} end + ); + + {error, Raw@1} -> + gleam@result:'try'( + begin + _pipe@1 = Decode_error(Raw@1), + map_errors( + _pipe@1, + fun(_capture@1) -> + push_path(_capture@1, <<"error"/utf8>>) + end + ) + end, + fun(Value@2) -> {ok, {error, Value@2}} end + ) + end end + ) + end. + +-spec list(fun((dynamic_()) -> {ok, DZS} | {error, list(decode_error())})) -> fun((dynamic_()) -> {ok, + list(DZS)} | + {error, list(decode_error())}). +list(Decoder_type) -> + fun(Dynamic) -> + gleam@result:'try'(shallow_list(Dynamic), fun(List) -> _pipe = List, + _pipe@1 = gleam@list:try_map(_pipe, Decoder_type), + map_errors( + _pipe@1, + fun(_capture) -> push_path(_capture, <<"*"/utf8>>) end + ) end) + end. + +-spec map_errors( + {ok, DYG} | {error, list(decode_error())}, + fun((decode_error()) -> decode_error()) +) -> {ok, DYG} | {error, list(decode_error())}. +map_errors(Result, F) -> + gleam@result:map_error( + Result, + fun(_capture) -> gleam@list:map(_capture, F) end + ). + +-spec decode_string(dynamic_()) -> {ok, binary()} | + {error, list(decode_error())}. +decode_string(Data) -> + _pipe = bit_array(Data), + _pipe@1 = map_errors( + _pipe, + fun(_capture) -> put_expected(_capture, <<"String"/utf8>>) end + ), + gleam@result:'try'( + _pipe@1, + fun(Raw) -> case gleam@bit_array:to_string(Raw) of + {ok, String} -> + {ok, String}; + + {error, nil} -> + {error, + [{decode_error, + <<"String"/utf8>>, + <<"BitArray"/utf8>>, + []}]} + end end + ). + +-spec string(dynamic_()) -> {ok, binary()} | {error, list(decode_error())}. +string(Data) -> + decode_string(Data). + +-spec field( + any(), + fun((dynamic_()) -> {ok, EAH} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, EAH} | {error, list(decode_error())}). +field(Name, Inner_type) -> + fun(Value) -> + Missing_field_error = {decode_error, + <<"field"/utf8>>, + <<"nothing"/utf8>>, + []}, + gleam@result:'try'( + gleam_stdlib:decode_field(Value, Name), + fun(Maybe_inner) -> _pipe = Maybe_inner, + _pipe@1 = gleam@option:to_result(_pipe, [Missing_field_error]), + _pipe@2 = gleam@result:'try'(_pipe@1, Inner_type), + map_errors( + _pipe@2, + fun(_capture) -> push_path(_capture, Name) end + ) end + ) + end. + +-spec optional_field( + any(), + fun((dynamic_()) -> {ok, EAL} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, gleam@option:option(EAL)} | + {error, list(decode_error())}). +optional_field(Name, Inner_type) -> + fun(Value) -> + gleam@result:'try'( + gleam_stdlib:decode_field(Value, Name), + fun(Maybe_inner) -> case Maybe_inner of + none -> + {ok, none}; + + {some, Dynamic_inner} -> + _pipe = Dynamic_inner, + _pipe@1 = gleam_stdlib:decode_option(_pipe, Inner_type), + map_errors( + _pipe@1, + fun(_capture) -> push_path(_capture, Name) end + ) + end end + ) + end. + +-spec element( + integer(), + fun((dynamic_()) -> {ok, EAT} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, EAT} | {error, list(decode_error())}). +element(Index, Inner_type) -> + fun(Data) -> + gleam@result:'try'( + gleam_stdlib:decode_tuple(Data), + fun(Tuple) -> + Size = gleam_stdlib:size_of_tuple(Tuple), + gleam@result:'try'(case Index >= 0 of + true -> + case Index < Size of + true -> + gleam_stdlib:tuple_get(Tuple, Index); + + false -> + at_least_decode_tuple_error(Index + 1, Data) + end; + + false -> + case gleam@int:absolute_value(Index) =< Size of + true -> + gleam_stdlib:tuple_get(Tuple, Size + Index); + + false -> + at_least_decode_tuple_error( + gleam@int:absolute_value(Index), + Data + ) + end + end, fun(Data@1) -> _pipe = Inner_type(Data@1), + map_errors( + _pipe, + fun(_capture) -> push_path(_capture, Index) end + ) end) + end + ) + end. + +-spec tuple_errors({ok, any()} | {error, list(decode_error())}, binary()) -> list(decode_error()). +tuple_errors(Result, Name) -> + case Result of + {ok, _} -> + []; + + {error, Errors} -> + gleam@list:map( + Errors, + fun(_capture) -> push_path(_capture, Name) end + ) + end. + +-spec tuple2( + fun((dynamic_()) -> {ok, EBT} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EBV} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, {EBT, EBV}} | {error, list(decode_error())}). +tuple2(Decode1, Decode2) -> + fun(Value) -> + gleam@result:'try'( + gleam_stdlib:decode_tuple2(Value), + fun(_use0) -> + {A, B} = _use0, + case {Decode1(A), Decode2(B)} of + {{ok, A@1}, {ok, B@1}} -> + {ok, {A@1, B@1}}; + + {A@2, B@2} -> + _pipe = tuple_errors(A@2, <<"0"/utf8>>), + _pipe@1 = gleam@list:append( + _pipe, + tuple_errors(B@2, <<"1"/utf8>>) + ), + {error, _pipe@1} + end + end + ) + end. + +-spec tuple3( + fun((dynamic_()) -> {ok, EBY} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, ECA} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, ECC} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, {EBY, ECA, ECC}} | {error, list(decode_error())}). +tuple3(Decode1, Decode2, Decode3) -> + fun(Value) -> + gleam@result:'try'( + gleam_stdlib:decode_tuple3(Value), + fun(_use0) -> + {A, B, C} = _use0, + case {Decode1(A), Decode2(B), Decode3(C)} of + {{ok, A@1}, {ok, B@1}, {ok, C@1}} -> + {ok, {A@1, B@1, C@1}}; + + {A@2, B@2, C@2} -> + _pipe = tuple_errors(A@2, <<"0"/utf8>>), + _pipe@1 = gleam@list:append( + _pipe, + tuple_errors(B@2, <<"1"/utf8>>) + ), + _pipe@2 = gleam@list:append( + _pipe@1, + tuple_errors(C@2, <<"2"/utf8>>) + ), + {error, _pipe@2} + end + end + ) + end. + +-spec tuple4( + fun((dynamic_()) -> {ok, ECF} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, ECH} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, ECJ} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, ECL} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, {ECF, ECH, ECJ, ECL}} | + {error, list(decode_error())}). +tuple4(Decode1, Decode2, Decode3, Decode4) -> + fun(Value) -> + gleam@result:'try'( + gleam_stdlib:decode_tuple4(Value), + fun(_use0) -> + {A, B, C, D} = _use0, + case {Decode1(A), Decode2(B), Decode3(C), Decode4(D)} of + {{ok, A@1}, {ok, B@1}, {ok, C@1}, {ok, D@1}} -> + {ok, {A@1, B@1, C@1, D@1}}; + + {A@2, B@2, C@2, D@2} -> + _pipe = tuple_errors(A@2, <<"0"/utf8>>), + _pipe@1 = gleam@list:append( + _pipe, + tuple_errors(B@2, <<"1"/utf8>>) + ), + _pipe@2 = gleam@list:append( + _pipe@1, + tuple_errors(C@2, <<"2"/utf8>>) + ), + _pipe@3 = gleam@list:append( + _pipe@2, + tuple_errors(D@2, <<"3"/utf8>>) + ), + {error, _pipe@3} + end + end + ) + end. + +-spec tuple5( + fun((dynamic_()) -> {ok, ECO} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, ECQ} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, ECS} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, ECU} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, ECW} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, {ECO, ECQ, ECS, ECU, ECW}} | + {error, list(decode_error())}). +tuple5(Decode1, Decode2, Decode3, Decode4, Decode5) -> + fun(Value) -> + gleam@result:'try'( + gleam_stdlib:decode_tuple5(Value), + fun(_use0) -> + {A, B, C, D, E} = _use0, + case {Decode1(A), + Decode2(B), + Decode3(C), + Decode4(D), + Decode5(E)} of + {{ok, A@1}, {ok, B@1}, {ok, C@1}, {ok, D@1}, {ok, E@1}} -> + {ok, {A@1, B@1, C@1, D@1, E@1}}; + + {A@2, B@2, C@2, D@2, E@2} -> + _pipe = tuple_errors(A@2, <<"0"/utf8>>), + _pipe@1 = gleam@list:append( + _pipe, + tuple_errors(B@2, <<"1"/utf8>>) + ), + _pipe@2 = gleam@list:append( + _pipe@1, + tuple_errors(C@2, <<"2"/utf8>>) + ), + _pipe@3 = gleam@list:append( + _pipe@2, + tuple_errors(D@2, <<"3"/utf8>>) + ), + _pipe@4 = gleam@list:append( + _pipe@3, + tuple_errors(E@2, <<"4"/utf8>>) + ), + {error, _pipe@4} + end + end + ) + end. + +-spec tuple6( + fun((dynamic_()) -> {ok, ECZ} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EDB} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EDD} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EDF} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EDH} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EDJ} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, {ECZ, EDB, EDD, EDF, EDH, EDJ}} | + {error, list(decode_error())}). +tuple6(Decode1, Decode2, Decode3, Decode4, Decode5, Decode6) -> + fun(Value) -> + gleam@result:'try'( + gleam_stdlib:decode_tuple6(Value), + fun(_use0) -> + {A, B, C, D, E, F} = _use0, + case {Decode1(A), + Decode2(B), + Decode3(C), + Decode4(D), + Decode5(E), + Decode6(F)} of + {{ok, A@1}, + {ok, B@1}, + {ok, C@1}, + {ok, D@1}, + {ok, E@1}, + {ok, F@1}} -> + {ok, {A@1, B@1, C@1, D@1, E@1, F@1}}; + + {A@2, B@2, C@2, D@2, E@2, F@2} -> + _pipe = tuple_errors(A@2, <<"0"/utf8>>), + _pipe@1 = gleam@list:append( + _pipe, + tuple_errors(B@2, <<"1"/utf8>>) + ), + _pipe@2 = gleam@list:append( + _pipe@1, + tuple_errors(C@2, <<"2"/utf8>>) + ), + _pipe@3 = gleam@list:append( + _pipe@2, + tuple_errors(D@2, <<"3"/utf8>>) + ), + _pipe@4 = gleam@list:append( + _pipe@3, + tuple_errors(E@2, <<"4"/utf8>>) + ), + _pipe@5 = gleam@list:append( + _pipe@4, + tuple_errors(F@2, <<"5"/utf8>>) + ), + {error, _pipe@5} + end + end + ) + end. + +-spec dict( + fun((dynamic_()) -> {ok, EDM} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EDO} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, gleam@dict:dict(EDM, EDO)} | + {error, list(decode_error())}). +dict(Key_type, Value_type) -> + fun(Value) -> + gleam@result:'try'( + gleam_stdlib:decode_map(Value), + fun(Map) -> + gleam@result:'try'( + begin + _pipe = Map, + _pipe@1 = gleam@dict:to_list(_pipe), + gleam@list:try_map( + _pipe@1, + fun(Pair) -> + {K, V} = Pair, + gleam@result:'try'( + begin + _pipe@2 = Key_type(K), + map_errors( + _pipe@2, + fun(_capture) -> + push_path( + _capture, + <<"keys"/utf8>> + ) + end + ) + end, + fun(K@1) -> + gleam@result:'try'( + begin + _pipe@3 = Value_type(V), + map_errors( + _pipe@3, + fun(_capture@1) -> + push_path( + _capture@1, + <<"values"/utf8>> + ) + end + ) + end, + fun(V@1) -> {ok, {K@1, V@1}} end + ) + end + ) + end + ) + end, + fun(Pairs) -> {ok, gleam@dict:from_list(Pairs)} end + ) + end + ) + end. + +-spec map( + fun((dynamic_()) -> {ok, EDT} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EDV} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, gleam@dict:dict(EDT, EDV)} | + {error, list(decode_error())}). +map(Key_type, Value_type) -> + dict(Key_type, Value_type). + +-spec decode2( + fun((EEM, EEN) -> EEO), + fun((dynamic_()) -> {ok, EEM} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EEN} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, EEO} | {error, list(decode_error())}). +decode2(Constructor, T1, T2) -> + fun(Value) -> case {T1(Value), T2(Value)} of + {{ok, A}, {ok, B}} -> + {ok, Constructor(A, B)}; + + {A@1, B@1} -> + {error, gleam@list:concat([all_errors(A@1), all_errors(B@1)])} + end end. + +-spec decode3( + fun((EES, EET, EEU) -> EEV), + fun((dynamic_()) -> {ok, EES} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EET} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EEU} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, EEV} | {error, list(decode_error())}). +decode3(Constructor, T1, T2, T3) -> + fun(Value) -> case {T1(Value), T2(Value), T3(Value)} of + {{ok, A}, {ok, B}, {ok, C}} -> + {ok, Constructor(A, B, C)}; + + {A@1, B@1, C@1} -> + {error, + gleam@list:concat( + [all_errors(A@1), all_errors(B@1), all_errors(C@1)] + )} + end end. + +-spec decode4( + fun((EFA, EFB, EFC, EFD) -> EFE), + fun((dynamic_()) -> {ok, EFA} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EFB} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EFC} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EFD} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, EFE} | {error, list(decode_error())}). +decode4(Constructor, T1, T2, T3, T4) -> + fun(X) -> case {T1(X), T2(X), T3(X), T4(X)} of + {{ok, A}, {ok, B}, {ok, C}, {ok, D}} -> + {ok, Constructor(A, B, C, D)}; + + {A@1, B@1, C@1, D@1} -> + {error, + gleam@list:concat( + [all_errors(A@1), + all_errors(B@1), + all_errors(C@1), + all_errors(D@1)] + )} + end end. + +-spec decode5( + fun((EFK, EFL, EFM, EFN, EFO) -> EFP), + fun((dynamic_()) -> {ok, EFK} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EFL} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EFM} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EFN} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EFO} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, EFP} | {error, list(decode_error())}). +decode5(Constructor, T1, T2, T3, T4, T5) -> + fun(X) -> case {T1(X), T2(X), T3(X), T4(X), T5(X)} of + {{ok, A}, {ok, B}, {ok, C}, {ok, D}, {ok, E}} -> + {ok, Constructor(A, B, C, D, E)}; + + {A@1, B@1, C@1, D@1, E@1} -> + {error, + gleam@list:concat( + [all_errors(A@1), + all_errors(B@1), + all_errors(C@1), + all_errors(D@1), + all_errors(E@1)] + )} + end end. + +-spec decode6( + fun((EFW, EFX, EFY, EFZ, EGA, EGB) -> EGC), + fun((dynamic_()) -> {ok, EFW} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EFX} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EFY} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EFZ} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EGA} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EGB} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, EGC} | {error, list(decode_error())}). +decode6(Constructor, T1, T2, T3, T4, T5, T6) -> + fun(X) -> case {T1(X), T2(X), T3(X), T4(X), T5(X), T6(X)} of + {{ok, A}, {ok, B}, {ok, C}, {ok, D}, {ok, E}, {ok, F}} -> + {ok, Constructor(A, B, C, D, E, F)}; + + {A@1, B@1, C@1, D@1, E@1, F@1} -> + {error, + gleam@list:concat( + [all_errors(A@1), + all_errors(B@1), + all_errors(C@1), + all_errors(D@1), + all_errors(E@1), + all_errors(F@1)] + )} + end end. + +-spec decode7( + fun((EGK, EGL, EGM, EGN, EGO, EGP, EGQ) -> EGR), + fun((dynamic_()) -> {ok, EGK} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EGL} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EGM} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EGN} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EGO} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EGP} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EGQ} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, EGR} | {error, list(decode_error())}). +decode7(Constructor, T1, T2, T3, T4, T5, T6, T7) -> + fun(X) -> case {T1(X), T2(X), T3(X), T4(X), T5(X), T6(X), T7(X)} of + {{ok, A}, {ok, B}, {ok, C}, {ok, D}, {ok, E}, {ok, F}, {ok, G}} -> + {ok, Constructor(A, B, C, D, E, F, G)}; + + {A@1, B@1, C@1, D@1, E@1, F@1, G@1} -> + {error, + gleam@list:concat( + [all_errors(A@1), + all_errors(B@1), + all_errors(C@1), + all_errors(D@1), + all_errors(E@1), + all_errors(F@1), + all_errors(G@1)] + )} + end end. + +-spec decode8( + fun((EHA, EHB, EHC, EHD, EHE, EHF, EHG, EHH) -> EHI), + fun((dynamic_()) -> {ok, EHA} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EHB} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EHC} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EHD} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EHE} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EHF} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EHG} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EHH} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, EHI} | {error, list(decode_error())}). +decode8(Constructor, T1, T2, T3, T4, T5, T6, T7, T8) -> + fun(X) -> case {T1(X), T2(X), T3(X), T4(X), T5(X), T6(X), T7(X), T8(X)} of + {{ok, A}, + {ok, B}, + {ok, C}, + {ok, D}, + {ok, E}, + {ok, F}, + {ok, G}, + {ok, H}} -> + {ok, Constructor(A, B, C, D, E, F, G, H)}; + + {A@1, B@1, C@1, D@1, E@1, F@1, G@1, H@1} -> + {error, + gleam@list:concat( + [all_errors(A@1), + all_errors(B@1), + all_errors(C@1), + all_errors(D@1), + all_errors(E@1), + all_errors(F@1), + all_errors(G@1), + all_errors(H@1)] + )} + end end. + +-spec decode9( + fun((EHS, EHT, EHU, EHV, EHW, EHX, EHY, EHZ, EIA) -> EIB), + fun((dynamic_()) -> {ok, EHS} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EHT} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EHU} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EHV} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EHW} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EHX} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EHY} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EHZ} | {error, list(decode_error())}), + fun((dynamic_()) -> {ok, EIA} | {error, list(decode_error())}) +) -> fun((dynamic_()) -> {ok, EIB} | {error, list(decode_error())}). +decode9(Constructor, T1, T2, T3, T4, T5, T6, T7, T8, T9) -> + fun(X) -> + case {T1(X), T2(X), T3(X), T4(X), T5(X), T6(X), T7(X), T8(X), T9(X)} of + {{ok, A}, + {ok, B}, + {ok, C}, + {ok, D}, + {ok, E}, + {ok, F}, + {ok, G}, + {ok, H}, + {ok, I}} -> + {ok, Constructor(A, B, C, D, E, F, G, H, I)}; + + {A@1, B@1, C@1, D@1, E@1, F@1, G@1, H@1, I@1} -> + {error, + gleam@list:concat( + [all_errors(A@1), + all_errors(B@1), + all_errors(C@1), + all_errors(D@1), + all_errors(E@1), + all_errors(F@1), + all_errors(G@1), + all_errors(H@1), + all_errors(I@1)] + )} + end + end. diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@float.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@float.erl new file mode 100644 index 0000000..33b3d4a --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@float.erl @@ -0,0 +1,181 @@ +-module(gleam@float). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([parse/1, to_string/1, compare/2, min/2, max/2, clamp/3, ceiling/1, floor/1, round/1, truncate/1, absolute_value/1, loosely_compare/3, loosely_equals/3, power/2, square_root/1, negate/1, sum/1, product/1, random/2, divide/2, add/2, multiply/2, subtract/2]). + +-spec parse(binary()) -> {ok, float()} | {error, nil}. +parse(String) -> + gleam_stdlib:parse_float(String). + +-spec to_string(float()) -> binary(). +to_string(X) -> + gleam_stdlib:float_to_string(X). + +-spec compare(float(), float()) -> gleam@order:order(). +compare(A, B) -> + case A =:= B of + true -> + eq; + + false -> + case A < B of + true -> + lt; + + false -> + gt + end + end. + +-spec min(float(), float()) -> float(). +min(A, B) -> + case A < B of + true -> + A; + + false -> + B + end. + +-spec max(float(), float()) -> float(). +max(A, B) -> + case A > B of + true -> + A; + + false -> + B + end. + +-spec clamp(float(), float(), float()) -> float(). +clamp(X, Min_bound, Max_bound) -> + _pipe = X, + _pipe@1 = min(_pipe, Max_bound), + max(_pipe@1, Min_bound). + +-spec ceiling(float()) -> float(). +ceiling(X) -> + math:ceil(X). + +-spec floor(float()) -> float(). +floor(X) -> + math:floor(X). + +-spec round(float()) -> integer(). +round(X) -> + erlang:round(X). + +-spec truncate(float()) -> integer(). +truncate(X) -> + erlang:trunc(X). + +-spec absolute_value(float()) -> float(). +absolute_value(X) -> + case X >= +0.0 of + true -> + X; + + _ -> + +0.0 - X + end. + +-spec loosely_compare(float(), float(), float()) -> gleam@order:order(). +loosely_compare(A, B, Tolerance) -> + Difference = absolute_value(A - B), + case Difference =< Tolerance of + true -> + eq; + + false -> + compare(A, B) + end. + +-spec loosely_equals(float(), float(), float()) -> boolean(). +loosely_equals(A, B, Tolerance) -> + Difference = absolute_value(A - B), + Difference =< Tolerance. + +-spec power(float(), float()) -> {ok, float()} | {error, nil}. +power(Base, Exponent) -> + Fractional = (ceiling(Exponent) - Exponent) > +0.0, + case ((Base < +0.0) andalso Fractional) orelse ((Base =:= +0.0) andalso (Exponent + < +0.0)) of + true -> + {error, nil}; + + false -> + {ok, math:pow(Base, Exponent)} + end. + +-spec square_root(float()) -> {ok, float()} | {error, nil}. +square_root(X) -> + power(X, 0.5). + +-spec negate(float()) -> float(). +negate(X) -> + -1.0 * X. + +-spec do_sum(list(float()), float()) -> float(). +do_sum(Numbers, Initial) -> + case Numbers of + [] -> + Initial; + + [X | Rest] -> + do_sum(Rest, X + Initial) + end. + +-spec sum(list(float())) -> float(). +sum(Numbers) -> + _pipe = Numbers, + do_sum(_pipe, +0.0). + +-spec do_product(list(float()), float()) -> float(). +do_product(Numbers, Initial) -> + case Numbers of + [] -> + Initial; + + [X | Rest] -> + do_product(Rest, X * Initial) + end. + +-spec product(list(float())) -> float(). +product(Numbers) -> + case Numbers of + [] -> + 1.0; + + _ -> + do_product(Numbers, 1.0) + end. + +-spec random(float(), float()) -> float(). +random(Min, Max) -> + (rand:uniform() * (Max - Min)) + Min. + +-spec divide(float(), float()) -> {ok, float()} | {error, nil}. +divide(A, B) -> + case B of + +0.0 -> + {error, nil}; + + B@1 -> + {ok, case B@1 of + +0.0 -> +0.0; + -0.0 -> -0.0; + Gleam@denominator -> A / Gleam@denominator + end} + end. + +-spec add(float(), float()) -> float(). +add(A, B) -> + A + B. + +-spec multiply(float(), float()) -> float(). +multiply(A, B) -> + A * B. + +-spec subtract(float(), float()) -> float(). +subtract(A, B) -> + A - B. diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@function.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@function.erl new file mode 100644 index 0000000..3496318 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@function.erl @@ -0,0 +1,67 @@ +-module(gleam@function). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([compose/2, curry2/1, curry3/1, curry4/1, curry5/1, curry6/1, flip/1, identity/1, constant/1, tap/2, apply1/2, apply2/3, apply3/4]). + +-spec compose(fun((DOO) -> DOP), fun((DOP) -> DOQ)) -> fun((DOO) -> DOQ). +compose(Fun1, Fun2) -> + fun(A) -> Fun2(Fun1(A)) end. + +-spec curry2(fun((DOR, DOS) -> DOT)) -> fun((DOR) -> fun((DOS) -> DOT)). +curry2(Fun) -> + fun(A) -> fun(B) -> Fun(A, B) end end. + +-spec curry3(fun((DOV, DOW, DOX) -> DOY)) -> fun((DOV) -> fun((DOW) -> fun((DOX) -> DOY))). +curry3(Fun) -> + fun(A) -> fun(B) -> fun(C) -> Fun(A, B, C) end end end. + +-spec curry4(fun((DPA, DPB, DPC, DPD) -> DPE)) -> fun((DPA) -> fun((DPB) -> fun((DPC) -> fun((DPD) -> DPE)))). +curry4(Fun) -> + fun(A) -> fun(B) -> fun(C) -> fun(D) -> Fun(A, B, C, D) end end end end. + +-spec curry5(fun((DPG, DPH, DPI, DPJ, DPK) -> DPL)) -> fun((DPG) -> fun((DPH) -> fun((DPI) -> fun((DPJ) -> fun((DPK) -> DPL))))). +curry5(Fun) -> + fun(A) -> + fun(B) -> + fun(C) -> fun(D) -> fun(E) -> Fun(A, B, C, D, E) end end end + end + end. + +-spec curry6(fun((DPN, DPO, DPP, DPQ, DPR, DPS) -> DPT)) -> fun((DPN) -> fun((DPO) -> fun((DPP) -> fun((DPQ) -> fun((DPR) -> fun((DPS) -> DPT)))))). +curry6(Fun) -> + fun(A) -> + fun(B) -> + fun(C) -> + fun(D) -> fun(E) -> fun(F) -> Fun(A, B, C, D, E, F) end end end + end + end + end. + +-spec flip(fun((DPV, DPW) -> DPX)) -> fun((DPW, DPV) -> DPX). +flip(Fun) -> + fun(B, A) -> Fun(A, B) end. + +-spec identity(DPY) -> DPY. +identity(X) -> + X. + +-spec constant(DPZ) -> fun((any()) -> DPZ). +constant(Value) -> + fun(_) -> Value end. + +-spec tap(DQB, fun((DQB) -> any())) -> DQB. +tap(Arg, Effect) -> + Effect(Arg), + Arg. + +-spec apply1(fun((DQD) -> DQE), DQD) -> DQE. +apply1(Fun, Arg1) -> + Fun(Arg1). + +-spec apply2(fun((DQF, DQG) -> DQH), DQF, DQG) -> DQH. +apply2(Fun, Arg1, Arg2) -> + Fun(Arg1, Arg2). + +-spec apply3(fun((DQI, DQJ, DQK) -> DQL), DQI, DQJ, DQK) -> DQL. +apply3(Fun, Arg1, Arg2, Arg3) -> + Fun(Arg1, Arg2, Arg3). diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@int.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@int.erl new file mode 100644 index 0000000..2a5dd2c --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@int.erl @@ -0,0 +1,332 @@ +-module(gleam@int). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([absolute_value/1, parse/1, base_parse/2, to_string/1, to_base_string/2, to_base2/1, to_base8/1, to_base16/1, to_base36/1, to_float/1, power/2, square_root/1, compare/2, min/2, max/2, clamp/3, is_even/1, is_odd/1, negate/1, sum/1, product/1, digits/2, undigits/2, random/2, divide/2, remainder/2, modulo/2, floor_divide/2, add/2, multiply/2, subtract/2, bitwise_and/2, bitwise_not/1, bitwise_or/2, bitwise_exclusive_or/2, bitwise_shift_left/2, bitwise_shift_right/2]). +-export_type([invalid_base/0]). + +-type invalid_base() :: invalid_base. + +-spec absolute_value(integer()) -> integer(). +absolute_value(X) -> + case X >= 0 of + true -> + X; + + false -> + X * -1 + end. + +-spec parse(binary()) -> {ok, integer()} | {error, nil}. +parse(String) -> + gleam_stdlib:parse_int(String). + +-spec base_parse(binary(), integer()) -> {ok, integer()} | {error, nil}. +base_parse(String, Base) -> + case (Base >= 2) andalso (Base =< 36) of + true -> + gleam_stdlib:int_from_base_string(String, Base); + + false -> + {error, nil} + end. + +-spec to_string(integer()) -> binary(). +to_string(X) -> + erlang:integer_to_binary(X). + +-spec to_base_string(integer(), integer()) -> {ok, binary()} | + {error, invalid_base()}. +to_base_string(X, Base) -> + case (Base >= 2) andalso (Base =< 36) of + true -> + {ok, erlang:integer_to_binary(X, Base)}; + + false -> + {error, invalid_base} + end. + +-spec to_base2(integer()) -> binary(). +to_base2(X) -> + erlang:integer_to_binary(X, 2). + +-spec to_base8(integer()) -> binary(). +to_base8(X) -> + erlang:integer_to_binary(X, 8). + +-spec to_base16(integer()) -> binary(). +to_base16(X) -> + erlang:integer_to_binary(X, 16). + +-spec to_base36(integer()) -> binary(). +to_base36(X) -> + erlang:integer_to_binary(X, 36). + +-spec to_float(integer()) -> float(). +to_float(X) -> + erlang:float(X). + +-spec power(integer(), float()) -> {ok, float()} | {error, nil}. +power(Base, Exponent) -> + _pipe = Base, + _pipe@1 = to_float(_pipe), + gleam@float:power(_pipe@1, Exponent). + +-spec square_root(integer()) -> {ok, float()} | {error, nil}. +square_root(X) -> + _pipe = X, + _pipe@1 = to_float(_pipe), + gleam@float:square_root(_pipe@1). + +-spec compare(integer(), integer()) -> gleam@order:order(). +compare(A, B) -> + case A =:= B of + true -> + eq; + + false -> + case A < B of + true -> + lt; + + false -> + gt + end + end. + +-spec min(integer(), integer()) -> integer(). +min(A, B) -> + case A < B of + true -> + A; + + false -> + B + end. + +-spec max(integer(), integer()) -> integer(). +max(A, B) -> + case A > B of + true -> + A; + + false -> + B + end. + +-spec clamp(integer(), integer(), integer()) -> integer(). +clamp(X, Min_bound, Max_bound) -> + _pipe = X, + _pipe@1 = min(_pipe, Max_bound), + max(_pipe@1, Min_bound). + +-spec is_even(integer()) -> boolean(). +is_even(X) -> + (X rem 2) =:= 0. + +-spec is_odd(integer()) -> boolean(). +is_odd(X) -> + (X rem 2) /= 0. + +-spec negate(integer()) -> integer(). +negate(X) -> + -1 * X. + +-spec do_sum(list(integer()), integer()) -> integer(). +do_sum(Numbers, Initial) -> + case Numbers of + [] -> + Initial; + + [X | Rest] -> + do_sum(Rest, X + Initial) + end. + +-spec sum(list(integer())) -> integer(). +sum(Numbers) -> + _pipe = Numbers, + do_sum(_pipe, 0). + +-spec do_product(list(integer()), integer()) -> integer(). +do_product(Numbers, Initial) -> + case Numbers of + [] -> + Initial; + + [X | Rest] -> + do_product(Rest, X * Initial) + end. + +-spec product(list(integer())) -> integer(). +product(Numbers) -> + case Numbers of + [] -> + 1; + + _ -> + do_product(Numbers, 1) + end. + +-spec do_digits(integer(), integer(), list(integer())) -> list(integer()). +do_digits(X, Base, Acc) -> + case absolute_value(X) < Base of + true -> + [X | Acc]; + + false -> + do_digits(case Base of + 0 -> 0; + Gleam@denominator -> X div Gleam@denominator + end, Base, [case Base of + 0 -> 0; + Gleam@denominator@1 -> X rem Gleam@denominator@1 + end | Acc]) + end. + +-spec digits(integer(), integer()) -> {ok, list(integer())} | + {error, invalid_base()}. +digits(X, Base) -> + case Base < 2 of + true -> + {error, invalid_base}; + + false -> + {ok, do_digits(X, Base, [])} + end. + +-spec do_undigits(list(integer()), integer(), integer()) -> {ok, integer()} | + {error, invalid_base()}. +do_undigits(Numbers, Base, Acc) -> + case Numbers of + [] -> + {ok, Acc}; + + [Digit | _] when Digit >= Base -> + {error, invalid_base}; + + [Digit@1 | Rest] -> + do_undigits(Rest, Base, (Acc * Base) + Digit@1) + end. + +-spec undigits(list(integer()), integer()) -> {ok, integer()} | + {error, invalid_base()}. +undigits(Numbers, Base) -> + case Base < 2 of + true -> + {error, invalid_base}; + + false -> + do_undigits(Numbers, Base, 0) + end. + +-spec random(integer(), integer()) -> integer(). +random(Min, Max) -> + _pipe = gleam@float:random(to_float(Min), to_float(Max)), + _pipe@1 = gleam@float:floor(_pipe), + gleam@float:round(_pipe@1). + +-spec divide(integer(), integer()) -> {ok, integer()} | {error, nil}. +divide(Dividend, Divisor) -> + case Divisor of + 0 -> + {error, nil}; + + Divisor@1 -> + {ok, case Divisor@1 of + 0 -> 0; + Gleam@denominator -> Dividend div Gleam@denominator + end} + end. + +-spec remainder(integer(), integer()) -> {ok, integer()} | {error, nil}. +remainder(Dividend, Divisor) -> + case Divisor of + 0 -> + {error, nil}; + + Divisor@1 -> + {ok, case Divisor@1 of + 0 -> 0; + Gleam@denominator -> Dividend rem Gleam@denominator + end} + end. + +-spec modulo(integer(), integer()) -> {ok, integer()} | {error, nil}. +modulo(Dividend, Divisor) -> + case Divisor of + 0 -> + {error, nil}; + + _ -> + Remainder = case Divisor of + 0 -> 0; + Gleam@denominator -> Dividend rem Gleam@denominator + end, + case (Remainder * Divisor) < 0 of + true -> + {ok, Remainder + Divisor}; + + false -> + {ok, Remainder} + end + end. + +-spec floor_divide(integer(), integer()) -> {ok, integer()} | {error, nil}. +floor_divide(Dividend, Divisor) -> + case Divisor of + 0 -> + {error, nil}; + + Divisor@1 -> + case ((Dividend * Divisor@1) < 0) andalso ((case Divisor@1 of + 0 -> 0; + Gleam@denominator -> Dividend rem Gleam@denominator + end) /= 0) of + true -> + {ok, (case Divisor@1 of + 0 -> 0; + Gleam@denominator@1 -> Dividend div Gleam@denominator@1 + end) - 1}; + + false -> + {ok, case Divisor@1 of + 0 -> 0; + Gleam@denominator@2 -> Dividend div Gleam@denominator@2 + end} + end + end. + +-spec add(integer(), integer()) -> integer(). +add(A, B) -> + A + B. + +-spec multiply(integer(), integer()) -> integer(). +multiply(A, B) -> + A * B. + +-spec subtract(integer(), integer()) -> integer(). +subtract(A, B) -> + A - B. + +-spec bitwise_and(integer(), integer()) -> integer(). +bitwise_and(X, Y) -> + erlang:'band'(X, Y). + +-spec bitwise_not(integer()) -> integer(). +bitwise_not(X) -> + erlang:'bnot'(X). + +-spec bitwise_or(integer(), integer()) -> integer(). +bitwise_or(X, Y) -> + erlang:'bor'(X, Y). + +-spec bitwise_exclusive_or(integer(), integer()) -> integer(). +bitwise_exclusive_or(X, Y) -> + erlang:'bxor'(X, Y). + +-spec bitwise_shift_left(integer(), integer()) -> integer(). +bitwise_shift_left(X, Y) -> + erlang:'bsl'(X, Y). + +-spec bitwise_shift_right(integer(), integer()) -> integer(). +bitwise_shift_right(X, Y) -> + erlang:'bsr'(X, Y). diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@io.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@io.erl new file mode 100644 index 0000000..a46eae3 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@io.erl @@ -0,0 +1,27 @@ +-module(gleam@io). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([print/1, print_error/1, println/1, println_error/1, debug/1]). + +-spec print(binary()) -> nil. +print(String) -> + gleam_stdlib:print(String). + +-spec print_error(binary()) -> nil. +print_error(String) -> + gleam_stdlib:print_error(String). + +-spec println(binary()) -> nil. +println(String) -> + gleam_stdlib:println(String). + +-spec println_error(binary()) -> nil. +println_error(String) -> + gleam_stdlib:println_error(String). + +-spec debug(CZT) -> CZT. +debug(Term) -> + _pipe = Term, + _pipe@1 = gleam@string:inspect(_pipe), + gleam_stdlib:println_error(_pipe@1), + Term. diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@iterator.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@iterator.erl new file mode 100644 index 0000000..aa84139 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@iterator.erl @@ -0,0 +1,744 @@ +-module(gleam@iterator). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([unfold/2, repeatedly/1, repeat/1, from_list/1, transform/3, fold/3, run/1, to_list/1, step/1, take/2, drop/2, map/2, map2/3, append/2, flatten/1, concat/1, flat_map/2, filter/2, cycle/1, find/2, index/1, iterate/2, take_while/2, drop_while/2, scan/3, zip/2, chunk/2, sized_chunk/2, intersperse/2, any/2, all/2, group/2, reduce/2, last/1, empty/0, once/1, range/2, single/1, interleave/2, fold_until/3, try_fold/3, first/1, at/2, length/1, each/2, yield/2]). +-export_type([action/1, iterator/1, step/2, chunk/2, sized_chunk/1]). + +-type action(BPF) :: stop | {continue, BPF, fun(() -> action(BPF))}. + +-opaque iterator(BPG) :: {iterator, fun(() -> action(BPG))}. + +-type step(BPH, BPI) :: {next, BPH, BPI} | done. + +-type chunk(BPJ, BPK) :: {another_by, + list(BPJ), + BPK, + BPJ, + fun(() -> action(BPJ))} | + {last_by, list(BPJ)}. + +-type sized_chunk(BPL) :: {another, list(BPL), fun(() -> action(BPL))} | + {last, list(BPL)} | + no_more. + +-spec stop() -> action(any()). +stop() -> + stop. + +-spec do_unfold(BPO, fun((BPO) -> step(BPP, BPO))) -> fun(() -> action(BPP)). +do_unfold(Initial, F) -> + fun() -> case F(Initial) of + {next, X, Acc} -> + {continue, X, do_unfold(Acc, F)}; + + done -> + stop + end end. + +-spec unfold(BPT, fun((BPT) -> step(BPU, BPT))) -> iterator(BPU). +unfold(Initial, F) -> + _pipe = Initial, + _pipe@1 = do_unfold(_pipe, F), + {iterator, _pipe@1}. + +-spec repeatedly(fun(() -> BPY)) -> iterator(BPY). +repeatedly(F) -> + unfold(nil, fun(_) -> {next, F(), nil} end). + +-spec repeat(BQA) -> iterator(BQA). +repeat(X) -> + repeatedly(fun() -> X end). + +-spec from_list(list(BQC)) -> iterator(BQC). +from_list(List) -> + Yield = fun(Acc) -> case Acc of + [] -> + done; + + [Head | Tail] -> + {next, Head, Tail} + end end, + unfold(List, Yield). + +-spec do_transform( + fun(() -> action(BQF)), + BQH, + fun((BQH, BQF) -> step(BQI, BQH)) +) -> fun(() -> action(BQI)). +do_transform(Continuation, State, F) -> + fun() -> case Continuation() of + stop -> + stop; + + {continue, El, Next} -> + case F(State, El) of + done -> + stop; + + {next, Yield, Next_state} -> + {continue, Yield, do_transform(Next, Next_state, F)} + end + end end. + +-spec transform(iterator(BQM), BQO, fun((BQO, BQM) -> step(BQP, BQO))) -> iterator(BQP). +transform(Iterator, Initial, F) -> + _pipe = do_transform(erlang:element(2, Iterator), Initial, F), + {iterator, _pipe}. + +-spec do_fold(fun(() -> action(BQT)), fun((BQV, BQT) -> BQV), BQV) -> BQV. +do_fold(Continuation, F, Accumulator) -> + case Continuation() of + {continue, Elem, Next} -> + do_fold(Next, F, F(Accumulator, Elem)); + + stop -> + Accumulator + end. + +-spec fold(iterator(BQW), BQY, fun((BQY, BQW) -> BQY)) -> BQY. +fold(Iterator, Initial, F) -> + _pipe = erlang:element(2, Iterator), + do_fold(_pipe, F, Initial). + +-spec run(iterator(any())) -> nil. +run(Iterator) -> + fold(Iterator, nil, fun(_, _) -> nil end). + +-spec to_list(iterator(BRB)) -> list(BRB). +to_list(Iterator) -> + _pipe = Iterator, + _pipe@1 = fold(_pipe, [], fun(Acc, E) -> [E | Acc] end), + gleam@list:reverse(_pipe@1). + +-spec step(iterator(BRE)) -> step(BRE, iterator(BRE)). +step(Iterator) -> + case (erlang:element(2, Iterator))() of + stop -> + done; + + {continue, E, A} -> + {next, E, {iterator, A}} + end. + +-spec do_take(fun(() -> action(BRJ)), integer()) -> fun(() -> action(BRJ)). +do_take(Continuation, Desired) -> + fun() -> case Desired > 0 of + false -> + stop; + + true -> + case Continuation() of + stop -> + stop; + + {continue, E, Next} -> + {continue, E, do_take(Next, Desired - 1)} + end + end end. + +-spec take(iterator(BRM), integer()) -> iterator(BRM). +take(Iterator, Desired) -> + _pipe = erlang:element(2, Iterator), + _pipe@1 = do_take(_pipe, Desired), + {iterator, _pipe@1}. + +-spec do_drop(fun(() -> action(BRP)), integer()) -> action(BRP). +do_drop(Continuation, Desired) -> + case Continuation() of + stop -> + stop; + + {continue, E, Next} -> + case Desired > 0 of + true -> + do_drop(Next, Desired - 1); + + false -> + {continue, E, Next} + end + end. + +-spec drop(iterator(BRS), integer()) -> iterator(BRS). +drop(Iterator, Desired) -> + _pipe = fun() -> do_drop(erlang:element(2, Iterator), Desired) end, + {iterator, _pipe}. + +-spec do_map(fun(() -> action(BRV)), fun((BRV) -> BRX)) -> fun(() -> action(BRX)). +do_map(Continuation, F) -> + fun() -> case Continuation() of + stop -> + stop; + + {continue, E, Continuation@1} -> + {continue, F(E), do_map(Continuation@1, F)} + end end. + +-spec map(iterator(BRZ), fun((BRZ) -> BSB)) -> iterator(BSB). +map(Iterator, F) -> + _pipe = erlang:element(2, Iterator), + _pipe@1 = do_map(_pipe, F), + {iterator, _pipe@1}. + +-spec do_map2( + fun(() -> action(BSD)), + fun(() -> action(BSF)), + fun((BSD, BSF) -> BSH) +) -> fun(() -> action(BSH)). +do_map2(Continuation1, Continuation2, Fun) -> + fun() -> case Continuation1() of + stop -> + stop; + + {continue, A, Next_a} -> + case Continuation2() of + stop -> + stop; + + {continue, B, Next_b} -> + {continue, Fun(A, B), do_map2(Next_a, Next_b, Fun)} + end + end end. + +-spec map2(iterator(BSJ), iterator(BSL), fun((BSJ, BSL) -> BSN)) -> iterator(BSN). +map2(Iterator1, Iterator2, Fun) -> + _pipe = do_map2( + erlang:element(2, Iterator1), + erlang:element(2, Iterator2), + Fun + ), + {iterator, _pipe}. + +-spec do_append(fun(() -> action(BSP)), fun(() -> action(BSP))) -> action(BSP). +do_append(First, Second) -> + case First() of + {continue, E, First@1} -> + {continue, E, fun() -> do_append(First@1, Second) end}; + + stop -> + Second() + end. + +-spec append(iterator(BST), iterator(BST)) -> iterator(BST). +append(First, Second) -> + _pipe = fun() -> + do_append(erlang:element(2, First), erlang:element(2, Second)) + end, + {iterator, _pipe}. + +-spec do_flatten(fun(() -> action(iterator(BSX)))) -> action(BSX). +do_flatten(Flattened) -> + case Flattened() of + stop -> + stop; + + {continue, It, Next_iterator} -> + do_append( + erlang:element(2, It), + fun() -> do_flatten(Next_iterator) end + ) + end. + +-spec flatten(iterator(iterator(BTB))) -> iterator(BTB). +flatten(Iterator) -> + _pipe = fun() -> do_flatten(erlang:element(2, Iterator)) end, + {iterator, _pipe}. + +-spec concat(list(iterator(BTF))) -> iterator(BTF). +concat(Iterators) -> + flatten(from_list(Iterators)). + +-spec flat_map(iterator(BTJ), fun((BTJ) -> iterator(BTL))) -> iterator(BTL). +flat_map(Iterator, F) -> + _pipe = Iterator, + _pipe@1 = map(_pipe, F), + flatten(_pipe@1). + +-spec do_filter(fun(() -> action(BTO)), fun((BTO) -> boolean())) -> action(BTO). +do_filter(Continuation, Predicate) -> + case Continuation() of + stop -> + stop; + + {continue, E, Iterator} -> + case Predicate(E) of + true -> + {continue, E, fun() -> do_filter(Iterator, Predicate) end}; + + false -> + do_filter(Iterator, Predicate) + end + end. + +-spec filter(iterator(BTR), fun((BTR) -> boolean())) -> iterator(BTR). +filter(Iterator, Predicate) -> + _pipe = fun() -> do_filter(erlang:element(2, Iterator), Predicate) end, + {iterator, _pipe}. + +-spec cycle(iterator(BTU)) -> iterator(BTU). +cycle(Iterator) -> + _pipe = repeat(Iterator), + flatten(_pipe). + +-spec do_find(fun(() -> action(BTY)), fun((BTY) -> boolean())) -> {ok, BTY} | + {error, nil}. +do_find(Continuation, F) -> + case Continuation() of + stop -> + {error, nil}; + + {continue, E, Next} -> + case F(E) of + true -> + {ok, E}; + + false -> + do_find(Next, F) + end + end. + +-spec find(iterator(BUC), fun((BUC) -> boolean())) -> {ok, BUC} | {error, nil}. +find(Haystack, Is_desired) -> + _pipe = erlang:element(2, Haystack), + do_find(_pipe, Is_desired). + +-spec do_index(fun(() -> action(BUG)), integer()) -> fun(() -> action({integer(), + BUG})). +do_index(Continuation, Next) -> + fun() -> case Continuation() of + stop -> + stop; + + {continue, E, Continuation@1} -> + {continue, {Next, E}, do_index(Continuation@1, Next + 1)} + end end. + +-spec index(iterator(BUJ)) -> iterator({integer(), BUJ}). +index(Iterator) -> + _pipe = erlang:element(2, Iterator), + _pipe@1 = do_index(_pipe, 0), + {iterator, _pipe@1}. + +-spec iterate(BUM, fun((BUM) -> BUM)) -> iterator(BUM). +iterate(Initial, F) -> + unfold(Initial, fun(Element) -> {next, Element, F(Element)} end). + +-spec do_take_while(fun(() -> action(BUO)), fun((BUO) -> boolean())) -> fun(() -> action(BUO)). +do_take_while(Continuation, Predicate) -> + fun() -> case Continuation() of + stop -> + stop; + + {continue, E, Next} -> + case Predicate(E) of + false -> + stop; + + true -> + {continue, E, do_take_while(Next, Predicate)} + end + end end. + +-spec take_while(iterator(BUR), fun((BUR) -> boolean())) -> iterator(BUR). +take_while(Iterator, Predicate) -> + _pipe = erlang:element(2, Iterator), + _pipe@1 = do_take_while(_pipe, Predicate), + {iterator, _pipe@1}. + +-spec do_drop_while(fun(() -> action(BUU)), fun((BUU) -> boolean())) -> action(BUU). +do_drop_while(Continuation, Predicate) -> + case Continuation() of + stop -> + stop; + + {continue, E, Next} -> + case Predicate(E) of + false -> + {continue, E, Next}; + + true -> + do_drop_while(Next, Predicate) + end + end. + +-spec drop_while(iterator(BUX), fun((BUX) -> boolean())) -> iterator(BUX). +drop_while(Iterator, Predicate) -> + _pipe = fun() -> do_drop_while(erlang:element(2, Iterator), Predicate) end, + {iterator, _pipe}. + +-spec do_scan(fun(() -> action(BVA)), fun((BVC, BVA) -> BVC), BVC) -> fun(() -> action(BVC)). +do_scan(Continuation, F, Accumulator) -> + fun() -> case Continuation() of + stop -> + stop; + + {continue, El, Next} -> + Accumulated = F(Accumulator, El), + {continue, Accumulated, do_scan(Next, F, Accumulated)} + end end. + +-spec scan(iterator(BVE), BVG, fun((BVG, BVE) -> BVG)) -> iterator(BVG). +scan(Iterator, Initial, F) -> + _pipe = erlang:element(2, Iterator), + _pipe@1 = do_scan(_pipe, F, Initial), + {iterator, _pipe@1}. + +-spec do_zip(fun(() -> action(BVI)), fun(() -> action(BVK))) -> fun(() -> action({BVI, + BVK})). +do_zip(Left, Right) -> + fun() -> case Left() of + stop -> + stop; + + {continue, El_left, Next_left} -> + case Right() of + stop -> + stop; + + {continue, El_right, Next_right} -> + {continue, + {El_left, El_right}, + do_zip(Next_left, Next_right)} + end + end end. + +-spec zip(iterator(BVN), iterator(BVP)) -> iterator({BVN, BVP}). +zip(Left, Right) -> + _pipe = do_zip(erlang:element(2, Left), erlang:element(2, Right)), + {iterator, _pipe}. + +-spec next_chunk(fun(() -> action(BVS)), fun((BVS) -> BVU), BVU, list(BVS)) -> chunk(BVS, BVU). +next_chunk(Continuation, F, Previous_key, Current_chunk) -> + case Continuation() of + stop -> + {last_by, gleam@list:reverse(Current_chunk)}; + + {continue, E, Next} -> + Key = F(E), + case Key =:= Previous_key of + true -> + next_chunk(Next, F, Key, [E | Current_chunk]); + + false -> + {another_by, + gleam@list:reverse(Current_chunk), + Key, + E, + Next} + end + end. + +-spec do_chunk(fun(() -> action(BVY)), fun((BVY) -> BWA), BWA, BVY) -> action(list(BVY)). +do_chunk(Continuation, F, Previous_key, Previous_element) -> + case next_chunk(Continuation, F, Previous_key, [Previous_element]) of + {last_by, Chunk} -> + {continue, Chunk, fun stop/0}; + + {another_by, Chunk@1, Key, El, Next} -> + {continue, Chunk@1, fun() -> do_chunk(Next, F, Key, El) end} + end. + +-spec chunk(iterator(BWD), fun((BWD) -> any())) -> iterator(list(BWD)). +chunk(Iterator, F) -> + _pipe = fun() -> case (erlang:element(2, Iterator))() of + stop -> + stop; + + {continue, E, Next} -> + do_chunk(Next, F, F(E), E) + end end, + {iterator, _pipe}. + +-spec next_sized_chunk(fun(() -> action(BWI)), integer(), list(BWI)) -> sized_chunk(BWI). +next_sized_chunk(Continuation, Left, Current_chunk) -> + case Continuation() of + stop -> + case Current_chunk of + [] -> + no_more; + + Remaining -> + {last, gleam@list:reverse(Remaining)} + end; + + {continue, E, Next} -> + Chunk = [E | Current_chunk], + case Left > 1 of + false -> + {another, gleam@list:reverse(Chunk), Next}; + + true -> + next_sized_chunk(Next, Left - 1, Chunk) + end + end. + +-spec do_sized_chunk(fun(() -> action(BWM)), integer()) -> fun(() -> action(list(BWM))). +do_sized_chunk(Continuation, Count) -> + fun() -> case next_sized_chunk(Continuation, Count, []) of + no_more -> + stop; + + {last, Chunk} -> + {continue, Chunk, fun stop/0}; + + {another, Chunk@1, Next_element} -> + {continue, Chunk@1, do_sized_chunk(Next_element, Count)} + end end. + +-spec sized_chunk(iterator(BWQ), integer()) -> iterator(list(BWQ)). +sized_chunk(Iterator, Count) -> + _pipe = erlang:element(2, Iterator), + _pipe@1 = do_sized_chunk(_pipe, Count), + {iterator, _pipe@1}. + +-spec do_intersperse(fun(() -> action(BWU)), BWU) -> action(BWU). +do_intersperse(Continuation, Separator) -> + case Continuation() of + stop -> + stop; + + {continue, E, Next} -> + Next_interspersed = fun() -> do_intersperse(Next, Separator) end, + {continue, Separator, fun() -> {continue, E, Next_interspersed} end} + end. + +-spec intersperse(iterator(BWX), BWX) -> iterator(BWX). +intersperse(Iterator, Elem) -> + _pipe = fun() -> case (erlang:element(2, Iterator))() of + stop -> + stop; + + {continue, E, Next} -> + {continue, E, fun() -> do_intersperse(Next, Elem) end} + end end, + {iterator, _pipe}. + +-spec do_any(fun(() -> action(BXA)), fun((BXA) -> boolean())) -> boolean(). +do_any(Continuation, Predicate) -> + case Continuation() of + stop -> + false; + + {continue, E, Next} -> + case Predicate(E) of + true -> + true; + + false -> + do_any(Next, Predicate) + end + end. + +-spec any(iterator(BXC), fun((BXC) -> boolean())) -> boolean(). +any(Iterator, Predicate) -> + _pipe = erlang:element(2, Iterator), + do_any(_pipe, Predicate). + +-spec do_all(fun(() -> action(BXE)), fun((BXE) -> boolean())) -> boolean(). +do_all(Continuation, Predicate) -> + case Continuation() of + stop -> + true; + + {continue, E, Next} -> + case Predicate(E) of + true -> + do_all(Next, Predicate); + + false -> + false + end + end. + +-spec all(iterator(BXG), fun((BXG) -> boolean())) -> boolean(). +all(Iterator, Predicate) -> + _pipe = erlang:element(2, Iterator), + do_all(_pipe, Predicate). + +-spec update_group_with(BXI) -> fun((gleam@option:option(list(BXI))) -> list(BXI)). +update_group_with(El) -> + fun(Maybe_group) -> case Maybe_group of + {some, Group} -> + [El | Group]; + + none -> + [El] + end end. + +-spec group_updater(fun((BXM) -> BXN)) -> fun((gleam@dict:dict(BXN, list(BXM)), BXM) -> gleam@dict:dict(BXN, list(BXM))). +group_updater(F) -> + fun(Groups, Elem) -> _pipe = Groups, + gleam@dict:update(_pipe, F(Elem), update_group_with(Elem)) end. + +-spec group(iterator(BXU), fun((BXU) -> BXW)) -> gleam@dict:dict(BXW, list(BXU)). +group(Iterator, Key) -> + _pipe = Iterator, + _pipe@1 = fold(_pipe, gleam@dict:new(), group_updater(Key)), + gleam@dict:map_values( + _pipe@1, + fun(_, Group) -> gleam@list:reverse(Group) end + ). + +-spec reduce(iterator(BYA), fun((BYA, BYA) -> BYA)) -> {ok, BYA} | {error, nil}. +reduce(Iterator, F) -> + case (erlang:element(2, Iterator))() of + stop -> + {error, nil}; + + {continue, E, Next} -> + _pipe = do_fold(Next, F, E), + {ok, _pipe} + end. + +-spec last(iterator(BYE)) -> {ok, BYE} | {error, nil}. +last(Iterator) -> + _pipe = Iterator, + reduce(_pipe, fun(_, Elem) -> Elem end). + +-spec empty() -> iterator(any()). +empty() -> + {iterator, fun stop/0}. + +-spec once(fun(() -> BYK)) -> iterator(BYK). +once(F) -> + _pipe = fun() -> {continue, F(), fun stop/0} end, + {iterator, _pipe}. + +-spec range(integer(), integer()) -> iterator(integer()). +range(Start, Stop) -> + case gleam@int:compare(Start, Stop) of + eq -> + once(fun() -> Start end); + + gt -> + unfold(Start, fun(Current) -> case Current < Stop of + false -> + {next, Current, Current - 1}; + + true -> + done + end end); + + lt -> + unfold(Start, fun(Current@1) -> case Current@1 > Stop of + false -> + {next, Current@1, Current@1 + 1}; + + true -> + done + end end) + end. + +-spec single(BYM) -> iterator(BYM). +single(Elem) -> + once(fun() -> Elem end). + +-spec do_interleave(fun(() -> action(BYO)), fun(() -> action(BYO))) -> action(BYO). +do_interleave(Current, Next) -> + case Current() of + stop -> + Next(); + + {continue, E, Next_other} -> + {continue, E, fun() -> do_interleave(Next, Next_other) end} + end. + +-spec interleave(iterator(BYS), iterator(BYS)) -> iterator(BYS). +interleave(Left, Right) -> + _pipe = fun() -> + do_interleave(erlang:element(2, Left), erlang:element(2, Right)) + end, + {iterator, _pipe}. + +-spec do_fold_until( + fun(() -> action(BYW)), + fun((BYY, BYW) -> gleam@list:continue_or_stop(BYY)), + BYY +) -> BYY. +do_fold_until(Continuation, F, Accumulator) -> + case Continuation() of + stop -> + Accumulator; + + {continue, Elem, Next} -> + case F(Accumulator, Elem) of + {continue, Accumulator@1} -> + do_fold_until(Next, F, Accumulator@1); + + {stop, Accumulator@2} -> + Accumulator@2 + end + end. + +-spec fold_until( + iterator(BZA), + BZC, + fun((BZC, BZA) -> gleam@list:continue_or_stop(BZC)) +) -> BZC. +fold_until(Iterator, Initial, F) -> + _pipe = erlang:element(2, Iterator), + do_fold_until(_pipe, F, Initial). + +-spec do_try_fold( + fun(() -> action(BZE)), + fun((BZG, BZE) -> {ok, BZG} | {error, BZH}), + BZG +) -> {ok, BZG} | {error, BZH}. +do_try_fold(Continuation, F, Accumulator) -> + case Continuation() of + stop -> + {ok, Accumulator}; + + {continue, Elem, Next} -> + gleam@result:'try'( + F(Accumulator, Elem), + fun(Accumulator@1) -> do_try_fold(Next, F, Accumulator@1) end + ) + end. + +-spec try_fold(iterator(BZM), BZO, fun((BZO, BZM) -> {ok, BZO} | {error, BZP})) -> {ok, + BZO} | + {error, BZP}. +try_fold(Iterator, Initial, F) -> + _pipe = erlang:element(2, Iterator), + do_try_fold(_pipe, F, Initial). + +-spec first(iterator(BZU)) -> {ok, BZU} | {error, nil}. +first(Iterator) -> + case (erlang:element(2, Iterator))() of + stop -> + {error, nil}; + + {continue, E, _} -> + {ok, E} + end. + +-spec at(iterator(BZY), integer()) -> {ok, BZY} | {error, nil}. +at(Iterator, Index) -> + _pipe = Iterator, + _pipe@1 = drop(_pipe, Index), + first(_pipe@1). + +-spec do_length(fun(() -> action(any())), integer()) -> integer(). +do_length(Continuation, Length) -> + case Continuation() of + stop -> + Length; + + {continue, _, Next} -> + do_length(Next, Length + 1) + end. + +-spec length(iterator(any())) -> integer(). +length(Iterator) -> + _pipe = erlang:element(2, Iterator), + do_length(_pipe, 0). + +-spec each(iterator(CAG), fun((CAG) -> any())) -> nil. +each(Iterator, F) -> + _pipe = Iterator, + _pipe@1 = map(_pipe, F), + run(_pipe@1). + +-spec yield(CAJ, fun(() -> iterator(CAJ))) -> iterator(CAJ). +yield(Element, Next) -> + {iterator, fun() -> {continue, Element, erlang:element(2, Next())} end}. diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@list.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@list.erl new file mode 100644 index 0000000..6c2e684 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@list.erl @@ -0,0 +1,1129 @@ +-module(gleam@list). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([length/1, reverse/1, is_empty/1, contains/2, first/1, rest/1, filter/2, filter_map/2, map/2, map2/3, index_map/2, try_map/2, drop/2, take/2, new/0, append/2, prepend/2, concat/1, flatten/1, flat_map/2, fold/3, group/2, map_fold/3, fold_right/3, index_fold/3, try_fold/3, fold_until/3, find/2, find_map/2, all/2, any/2, zip/2, strict_zip/2, unzip/1, intersperse/2, at/2, unique/1, sort/2, range/2, repeat/2, split/2, split_while/2, key_find/2, key_filter/2, pop/2, pop_map/2, key_pop/2, key_set/3, each/2, try_each/2, partition/2, permutations/1, window/2, window_by_2/1, drop_while/2, take_while/2, chunk/2, sized_chunk/2, reduce/2, scan/3, last/1, combinations/2, combination_pairs/1, transpose/1, interleave/1, shuffle/1]). +-export_type([length_mismatch/0, continue_or_stop/1]). + +-type length_mismatch() :: length_mismatch. + +-type continue_or_stop(UD) :: {continue, UD} | {stop, UD}. + +-spec length(list(any())) -> integer(). +length(List) -> + erlang:length(List). + +-spec reverse(list(UI)) -> list(UI). +reverse(Xs) -> + lists:reverse(Xs). + +-spec is_empty(list(any())) -> boolean(). +is_empty(List) -> + List =:= []. + +-spec contains(list(UQ), UQ) -> boolean(). +contains(List, Elem) -> + case List of + [] -> + false; + + [First | _] when First =:= Elem -> + true; + + [_ | Rest] -> + contains(Rest, Elem) + end. + +-spec first(list(US)) -> {ok, US} | {error, nil}. +first(List) -> + case List of + [] -> + {error, nil}; + + [X | _] -> + {ok, X} + end. + +-spec rest(list(UW)) -> {ok, list(UW)} | {error, nil}. +rest(List) -> + case List of + [] -> + {error, nil}; + + [_ | Xs] -> + {ok, Xs} + end. + +-spec update_group(fun((VB) -> VC)) -> fun((gleam@dict:dict(VC, list(VB)), VB) -> gleam@dict:dict(VC, list(VB))). +update_group(F) -> + fun(Groups, Elem) -> case gleam@dict:get(Groups, F(Elem)) of + {ok, Existing} -> + gleam@dict:insert(Groups, F(Elem), [Elem | Existing]); + + {error, _} -> + gleam@dict:insert(Groups, F(Elem), [Elem]) + end end. + +-spec do_filter(list(VP), fun((VP) -> boolean()), list(VP)) -> list(VP). +do_filter(List, Fun, Acc) -> + case List of + [] -> + reverse(Acc); + + [X | Xs] -> + New_acc = case Fun(X) of + true -> + [X | Acc]; + + false -> + Acc + end, + do_filter(Xs, Fun, New_acc) + end. + +-spec filter(list(VT), fun((VT) -> boolean())) -> list(VT). +filter(List, Predicate) -> + do_filter(List, Predicate, []). + +-spec do_filter_map(list(VW), fun((VW) -> {ok, VY} | {error, any()}), list(VY)) -> list(VY). +do_filter_map(List, Fun, Acc) -> + case List of + [] -> + reverse(Acc); + + [X | Xs] -> + New_acc = case Fun(X) of + {ok, X@1} -> + [X@1 | Acc]; + + {error, _} -> + Acc + end, + do_filter_map(Xs, Fun, New_acc) + end. + +-spec filter_map(list(WE), fun((WE) -> {ok, WG} | {error, any()})) -> list(WG). +filter_map(List, Fun) -> + do_filter_map(List, Fun, []). + +-spec do_map(list(WL), fun((WL) -> WN), list(WN)) -> list(WN). +do_map(List, Fun, Acc) -> + case List of + [] -> + reverse(Acc); + + [X | Xs] -> + do_map(Xs, Fun, [Fun(X) | Acc]) + end. + +-spec map(list(WQ), fun((WQ) -> WS)) -> list(WS). +map(List, Fun) -> + do_map(List, Fun, []). + +-spec do_map2(list(XA), list(XC), fun((XA, XC) -> XE), list(XE)) -> list(XE). +do_map2(List1, List2, Fun, Acc) -> + case {List1, List2} of + {[], _} -> + reverse(Acc); + + {_, []} -> + reverse(Acc); + + {[A | As_], [B | Bs]} -> + do_map2(As_, Bs, Fun, [Fun(A, B) | Acc]) + end. + +-spec map2(list(WU), list(WW), fun((WU, WW) -> WY)) -> list(WY). +map2(List1, List2, Fun) -> + do_map2(List1, List2, Fun, []). + +-spec do_index_map(list(XM), fun((integer(), XM) -> XO), integer(), list(XO)) -> list(XO). +do_index_map(List, Fun, Index, Acc) -> + case List of + [] -> + reverse(Acc); + + [X | Xs] -> + Acc@1 = [Fun(Index, X) | Acc], + do_index_map(Xs, Fun, Index + 1, Acc@1) + end. + +-spec index_map(list(XR), fun((integer(), XR) -> XT)) -> list(XT). +index_map(List, Fun) -> + do_index_map(List, Fun, 0, []). + +-spec do_try_map(list(XV), fun((XV) -> {ok, XX} | {error, XY}), list(XX)) -> {ok, + list(XX)} | + {error, XY}. +do_try_map(List, Fun, Acc) -> + case List of + [] -> + {ok, reverse(Acc)}; + + [X | Xs] -> + case Fun(X) of + {ok, Y} -> + do_try_map(Xs, Fun, [Y | Acc]); + + {error, Error} -> + {error, Error} + end + end. + +-spec try_map(list(YF), fun((YF) -> {ok, YH} | {error, YI})) -> {ok, list(YH)} | + {error, YI}. +try_map(List, Fun) -> + do_try_map(List, Fun, []). + +-spec drop(list(YO), integer()) -> list(YO). +drop(List, N) -> + case N =< 0 of + true -> + List; + + false -> + case List of + [] -> + []; + + [_ | Xs] -> + drop(Xs, N - 1) + end + end. + +-spec do_take(list(YR), integer(), list(YR)) -> list(YR). +do_take(List, N, Acc) -> + case N =< 0 of + true -> + reverse(Acc); + + false -> + case List of + [] -> + reverse(Acc); + + [X | Xs] -> + do_take(Xs, N - 1, [X | Acc]) + end + end. + +-spec take(list(YV), integer()) -> list(YV). +take(List, N) -> + do_take(List, N, []). + +-spec new() -> list(any()). +new() -> + []. + +-spec append(list(AAA), list(AAA)) -> list(AAA). +append(First, Second) -> + lists:append(First, Second). + +-spec prepend(list(AAI), AAI) -> list(AAI). +prepend(List, Item) -> + [Item | List]. + +-spec reverse_and_prepend(list(AAL), list(AAL)) -> list(AAL). +reverse_and_prepend(Prefix, Suffix) -> + case Prefix of + [] -> + Suffix; + + [First | Rest] -> + reverse_and_prepend(Rest, [First | Suffix]) + end. + +-spec do_concat(list(list(AAP)), list(AAP)) -> list(AAP). +do_concat(Lists, Acc) -> + case Lists of + [] -> + reverse(Acc); + + [List | Further_lists] -> + do_concat(Further_lists, reverse_and_prepend(List, Acc)) + end. + +-spec concat(list(list(AAU))) -> list(AAU). +concat(Lists) -> + do_concat(Lists, []). + +-spec flatten(list(list(AAY))) -> list(AAY). +flatten(Lists) -> + do_concat(Lists, []). + +-spec flat_map(list(ABC), fun((ABC) -> list(ABE))) -> list(ABE). +flat_map(List, Fun) -> + _pipe = map(List, Fun), + concat(_pipe). + +-spec fold(list(ABH), ABJ, fun((ABJ, ABH) -> ABJ)) -> ABJ. +fold(List, Initial, Fun) -> + case List of + [] -> + Initial; + + [X | Rest] -> + fold(Rest, Fun(Initial, X), Fun) + end. + +-spec group(list(VJ), fun((VJ) -> VL)) -> gleam@dict:dict(VL, list(VJ)). +group(List, Key) -> + fold(List, gleam@dict:new(), update_group(Key)). + +-spec map_fold(list(XH), XJ, fun((XJ, XH) -> {XJ, XK})) -> {XJ, list(XK)}. +map_fold(List, Acc, Fun) -> + _pipe = fold( + List, + {Acc, []}, + fun(Acc@1, Item) -> + {Current_acc, Items} = Acc@1, + {Next_acc, Next_item} = Fun(Current_acc, Item), + {Next_acc, [Next_item | Items]} + end + ), + gleam@pair:map_second(_pipe, fun reverse/1). + +-spec fold_right(list(ABK), ABM, fun((ABM, ABK) -> ABM)) -> ABM. +fold_right(List, Initial, Fun) -> + case List of + [] -> + Initial; + + [X | Rest] -> + Fun(fold_right(Rest, Initial, Fun), X) + end. + +-spec do_index_fold( + list(ABN), + ABP, + fun((ABP, ABN, integer()) -> ABP), + integer() +) -> ABP. +do_index_fold(Over, Acc, With, Index) -> + case Over of + [] -> + Acc; + + [First | Rest] -> + do_index_fold(Rest, With(Acc, First, Index), With, Index + 1) + end. + +-spec index_fold(list(ABQ), ABS, fun((ABS, ABQ, integer()) -> ABS)) -> ABS. +index_fold(Over, Initial, Fun) -> + do_index_fold(Over, Initial, Fun, 0). + +-spec try_fold(list(ABT), ABV, fun((ABV, ABT) -> {ok, ABV} | {error, ABW})) -> {ok, + ABV} | + {error, ABW}. +try_fold(Collection, Accumulator, Fun) -> + case Collection of + [] -> + {ok, Accumulator}; + + [First | Rest] -> + case Fun(Accumulator, First) of + {ok, Result} -> + try_fold(Rest, Result, Fun); + + {error, _} = Error -> + Error + end + end. + +-spec fold_until(list(ACB), ACD, fun((ACD, ACB) -> continue_or_stop(ACD))) -> ACD. +fold_until(Collection, Accumulator, Fun) -> + case Collection of + [] -> + Accumulator; + + [First | Rest] -> + case Fun(Accumulator, First) of + {continue, Next_accumulator} -> + fold_until(Rest, Next_accumulator, Fun); + + {stop, B} -> + B + end + end. + +-spec find(list(ACF), fun((ACF) -> boolean())) -> {ok, ACF} | {error, nil}. +find(Haystack, Is_desired) -> + case Haystack of + [] -> + {error, nil}; + + [X | Rest] -> + case Is_desired(X) of + true -> + {ok, X}; + + _ -> + find(Rest, Is_desired) + end + end. + +-spec find_map(list(ACJ), fun((ACJ) -> {ok, ACL} | {error, any()})) -> {ok, ACL} | + {error, nil}. +find_map(Haystack, Fun) -> + case Haystack of + [] -> + {error, nil}; + + [X | Rest] -> + case Fun(X) of + {ok, X@1} -> + {ok, X@1}; + + _ -> + find_map(Rest, Fun) + end + end. + +-spec all(list(ACR), fun((ACR) -> boolean())) -> boolean(). +all(List, Predicate) -> + case List of + [] -> + true; + + [First | Rest] -> + case Predicate(First) of + true -> + all(Rest, Predicate); + + false -> + false + end + end. + +-spec any(list(ACT), fun((ACT) -> boolean())) -> boolean(). +any(List, Predicate) -> + case List of + [] -> + false; + + [First | Rest] -> + case Predicate(First) of + true -> + true; + + false -> + any(Rest, Predicate) + end + end. + +-spec do_zip(list(ACV), list(ACX), list({ACV, ACX})) -> list({ACV, ACX}). +do_zip(Xs, Ys, Acc) -> + case {Xs, Ys} of + {[X | Xs@1], [Y | Ys@1]} -> + do_zip(Xs@1, Ys@1, [{X, Y} | Acc]); + + {_, _} -> + reverse(Acc) + end. + +-spec zip(list(ADB), list(ADD)) -> list({ADB, ADD}). +zip(List, Other) -> + do_zip(List, Other, []). + +-spec strict_zip(list(ADG), list(ADI)) -> {ok, list({ADG, ADI})} | + {error, length_mismatch()}. +strict_zip(List, Other) -> + case length(List) =:= length(Other) of + true -> + {ok, zip(List, Other)}; + + false -> + {error, length_mismatch} + end. + +-spec do_unzip(list({ATA, ATB}), list(ATA), list(ATB)) -> {list(ATA), list(ATB)}. +do_unzip(Input, Xs, Ys) -> + case Input of + [] -> + {reverse(Xs), reverse(Ys)}; + + [{X, Y} | Rest] -> + do_unzip(Rest, [X | Xs], [Y | Ys]) + end. + +-spec unzip(list({ADR, ADS})) -> {list(ADR), list(ADS)}. +unzip(Input) -> + do_unzip(Input, [], []). + +-spec do_intersperse(list(ADW), ADW, list(ADW)) -> list(ADW). +do_intersperse(List, Separator, Acc) -> + case List of + [] -> + reverse(Acc); + + [X | Rest] -> + do_intersperse(Rest, Separator, [X, Separator | Acc]) + end. + +-spec intersperse(list(AEA), AEA) -> list(AEA). +intersperse(List, Elem) -> + case List of + [] -> + List; + + [_] -> + List; + + [X | Rest] -> + do_intersperse(Rest, Elem, [X]) + end. + +-spec at(list(AED), integer()) -> {ok, AED} | {error, nil}. +at(List, Index) -> + case Index >= 0 of + true -> + _pipe = List, + _pipe@1 = drop(_pipe, Index), + first(_pipe@1); + + false -> + {error, nil} + end. + +-spec unique(list(AEH)) -> list(AEH). +unique(List) -> + case List of + [] -> + []; + + [X | Rest] -> + [X | unique(filter(Rest, fun(Y) -> Y /= X end))] + end. + +-spec merge_up( + integer(), + integer(), + list(AEK), + list(AEK), + list(AEK), + fun((AEK, AEK) -> gleam@order:order()) +) -> list(AEK). +merge_up(Na, Nb, A, B, Acc, Compare) -> + case {Na, Nb, A, B} of + {0, 0, _, _} -> + Acc; + + {_, 0, [Ax | Ar], _} -> + merge_up(Na - 1, Nb, Ar, B, [Ax | Acc], Compare); + + {0, _, _, [Bx | Br]} -> + merge_up(Na, Nb - 1, A, Br, [Bx | Acc], Compare); + + {_, _, [Ax@1 | Ar@1], [Bx@1 | Br@1]} -> + case Compare(Ax@1, Bx@1) of + gt -> + merge_up(Na, Nb - 1, A, Br@1, [Bx@1 | Acc], Compare); + + _ -> + merge_up(Na - 1, Nb, Ar@1, B, [Ax@1 | Acc], Compare) + end; + + {_, _, _, _} -> + Acc + end. + +-spec merge_down( + integer(), + integer(), + list(AEP), + list(AEP), + list(AEP), + fun((AEP, AEP) -> gleam@order:order()) +) -> list(AEP). +merge_down(Na, Nb, A, B, Acc, Compare) -> + case {Na, Nb, A, B} of + {0, 0, _, _} -> + Acc; + + {_, 0, [Ax | Ar], _} -> + merge_down(Na - 1, Nb, Ar, B, [Ax | Acc], Compare); + + {0, _, _, [Bx | Br]} -> + merge_down(Na, Nb - 1, A, Br, [Bx | Acc], Compare); + + {_, _, [Ax@1 | Ar@1], [Bx@1 | Br@1]} -> + case Compare(Bx@1, Ax@1) of + lt -> + merge_down(Na - 1, Nb, Ar@1, B, [Ax@1 | Acc], Compare); + + _ -> + merge_down(Na, Nb - 1, A, Br@1, [Bx@1 | Acc], Compare) + end; + + {_, _, _, _} -> + Acc + end. + +-spec merge_sort( + list(AEU), + integer(), + fun((AEU, AEU) -> gleam@order:order()), + boolean() +) -> list(AEU). +merge_sort(L, Ln, Compare, Down) -> + N = Ln div 2, + A = L, + B = drop(L, N), + case Ln < 3 of + true -> + case Down of + true -> + merge_down(N, Ln - N, A, B, [], Compare); + + false -> + merge_up(N, Ln - N, A, B, [], Compare) + end; + + false -> + case Down of + true -> + merge_down( + N, + Ln - N, + merge_sort(A, N, Compare, false), + merge_sort(B, Ln - N, Compare, false), + [], + Compare + ); + + false -> + merge_up( + N, + Ln - N, + merge_sort(A, N, Compare, true), + merge_sort(B, Ln - N, Compare, true), + [], + Compare + ) + end + end. + +-spec sort(list(AEX), fun((AEX, AEX) -> gleam@order:order())) -> list(AEX). +sort(List, Compare) -> + merge_sort(List, length(List), Compare, true). + +-spec tail_recursive_range(integer(), integer(), list(integer())) -> list(integer()). +tail_recursive_range(Start, Stop, Acc) -> + case gleam@int:compare(Start, Stop) of + eq -> + [Stop | Acc]; + + gt -> + tail_recursive_range(Start, Stop + 1, [Stop | Acc]); + + lt -> + tail_recursive_range(Start, Stop - 1, [Stop | Acc]) + end. + +-spec range(integer(), integer()) -> list(integer()). +range(Start, Stop) -> + tail_recursive_range(Start, Stop, []). + +-spec do_repeat(AFD, integer(), list(AFD)) -> list(AFD). +do_repeat(A, Times, Acc) -> + case Times =< 0 of + true -> + Acc; + + false -> + do_repeat(A, Times - 1, [A | Acc]) + end. + +-spec repeat(AFG, integer()) -> list(AFG). +repeat(A, Times) -> + do_repeat(A, Times, []). + +-spec do_split(list(AFI), integer(), list(AFI)) -> {list(AFI), list(AFI)}. +do_split(List, N, Taken) -> + case N =< 0 of + true -> + {reverse(Taken), List}; + + false -> + case List of + [] -> + {reverse(Taken), []}; + + [X | Xs] -> + do_split(Xs, N - 1, [X | Taken]) + end + end. + +-spec split(list(AFN), integer()) -> {list(AFN), list(AFN)}. +split(List, Index) -> + do_split(List, Index, []). + +-spec do_split_while(list(AFR), fun((AFR) -> boolean()), list(AFR)) -> {list(AFR), + list(AFR)}. +do_split_while(List, F, Acc) -> + case List of + [] -> + {reverse(Acc), []}; + + [X | Xs] -> + case F(X) of + false -> + {reverse(Acc), List}; + + _ -> + do_split_while(Xs, F, [X | Acc]) + end + end. + +-spec split_while(list(AFW), fun((AFW) -> boolean())) -> {list(AFW), list(AFW)}. +split_while(List, Predicate) -> + do_split_while(List, Predicate, []). + +-spec key_find(list({AGA, AGB}), AGA) -> {ok, AGB} | {error, nil}. +key_find(Keyword_list, Desired_key) -> + find_map( + Keyword_list, + fun(Keyword) -> + {Key, Value} = Keyword, + case Key =:= Desired_key of + true -> + {ok, Value}; + + false -> + {error, nil} + end + end + ). + +-spec key_filter(list({AGF, AGG}), AGF) -> list(AGG). +key_filter(Keyword_list, Desired_key) -> + filter_map( + Keyword_list, + fun(Keyword) -> + {Key, Value} = Keyword, + case Key =:= Desired_key of + true -> + {ok, Value}; + + false -> + {error, nil} + end + end + ). + +-spec do_pop(list(AWT), fun((AWT) -> boolean()), list(AWT)) -> {ok, + {AWT, list(AWT)}} | + {error, nil}. +do_pop(Haystack, Predicate, Checked) -> + case Haystack of + [] -> + {error, nil}; + + [X | Rest] -> + case Predicate(X) of + true -> + {ok, {X, append(reverse(Checked), Rest)}}; + + false -> + do_pop(Rest, Predicate, [X | Checked]) + end + end. + +-spec pop(list(AGN), fun((AGN) -> boolean())) -> {ok, {AGN, list(AGN)}} | + {error, nil}. +pop(Haystack, Is_desired) -> + do_pop(Haystack, Is_desired, []). + +-spec do_pop_map(list(AXH), fun((AXH) -> {ok, AXU} | {error, any()}), list(AXH)) -> {ok, + {AXU, list(AXH)}} | + {error, nil}. +do_pop_map(Haystack, Mapper, Checked) -> + case Haystack of + [] -> + {error, nil}; + + [X | Rest] -> + case Mapper(X) of + {ok, Y} -> + {ok, {Y, append(reverse(Checked), Rest)}}; + + {error, _} -> + do_pop_map(Rest, Mapper, [X | Checked]) + end + end. + +-spec pop_map(list(AGW), fun((AGW) -> {ok, AGY} | {error, any()})) -> {ok, + {AGY, list(AGW)}} | + {error, nil}. +pop_map(Haystack, Is_desired) -> + do_pop_map(Haystack, Is_desired, []). + +-spec key_pop(list({AHF, AHG}), AHF) -> {ok, {AHG, list({AHF, AHG})}} | + {error, nil}. +key_pop(Haystack, Key) -> + pop_map( + Haystack, + fun(Entry) -> + {K, V} = Entry, + case K of + K@1 when K@1 =:= Key -> + {ok, V}; + + _ -> + {error, nil} + end + end + ). + +-spec key_set(list({AHL, AHM}), AHL, AHM) -> list({AHL, AHM}). +key_set(List, Key, Value) -> + case List of + [] -> + [{Key, Value}]; + + [{K, _} | Rest] when K =:= Key -> + [{Key, Value} | Rest]; + + [First | Rest@1] -> + [First | key_set(Rest@1, Key, Value)] + end. + +-spec each(list(AHP), fun((AHP) -> any())) -> nil. +each(List, F) -> + case List of + [] -> + nil; + + [X | Xs] -> + F(X), + each(Xs, F) + end. + +-spec try_each(list(AHS), fun((AHS) -> {ok, any()} | {error, AHV})) -> {ok, nil} | + {error, AHV}. +try_each(List, Fun) -> + case List of + [] -> + {ok, nil}; + + [X | Xs] -> + case Fun(X) of + {ok, _} -> + try_each(Xs, Fun); + + {error, E} -> + {error, E} + end + end. + +-spec do_partition(list(AZB), fun((AZB) -> boolean()), list(AZB), list(AZB)) -> {list(AZB), + list(AZB)}. +do_partition(List, Categorise, Trues, Falses) -> + case List of + [] -> + {reverse(Trues), reverse(Falses)}; + + [X | Xs] -> + case Categorise(X) of + true -> + do_partition(Xs, Categorise, [X | Trues], Falses); + + false -> + do_partition(Xs, Categorise, Trues, [X | Falses]) + end + end. + +-spec partition(list(AIF), fun((AIF) -> boolean())) -> {list(AIF), list(AIF)}. +partition(List, Categorise) -> + do_partition(List, Categorise, [], []). + +-spec permutations(list(AIJ)) -> list(list(AIJ)). +permutations(L) -> + case L of + [] -> + [[]]; + + _ -> + _pipe = L, + _pipe@5 = index_map(_pipe, fun(I_idx, I) -> _pipe@1 = L, + _pipe@2 = index_fold( + _pipe@1, + [], + fun(Acc, J, J_idx) -> case I_idx =:= J_idx of + true -> + Acc; + + false -> + [J | Acc] + end end + ), + _pipe@3 = reverse(_pipe@2), + _pipe@4 = permutations(_pipe@3), + map(_pipe@4, fun(Permutation) -> [I | Permutation] end) end), + concat(_pipe@5) + end. + +-spec do_window(list(list(AIN)), list(AIN), integer()) -> list(list(AIN)). +do_window(Acc, L, N) -> + Window = take(L, N), + case length(Window) =:= N of + true -> + do_window([Window | Acc], drop(L, 1), N); + + false -> + Acc + end. + +-spec window(list(AIT), integer()) -> list(list(AIT)). +window(L, N) -> + _pipe = do_window([], L, N), + reverse(_pipe). + +-spec window_by_2(list(AIX)) -> list({AIX, AIX}). +window_by_2(L) -> + zip(L, drop(L, 1)). + +-spec drop_while(list(AJA), fun((AJA) -> boolean())) -> list(AJA). +drop_while(List, Predicate) -> + case List of + [] -> + []; + + [X | Xs] -> + case Predicate(X) of + true -> + drop_while(Xs, Predicate); + + false -> + [X | Xs] + end + end. + +-spec do_take_while(list(AJD), fun((AJD) -> boolean()), list(AJD)) -> list(AJD). +do_take_while(List, Predicate, Acc) -> + case List of + [] -> + reverse(Acc); + + [First | Rest] -> + case Predicate(First) of + true -> + do_take_while(Rest, Predicate, [First | Acc]); + + false -> + reverse(Acc) + end + end. + +-spec take_while(list(AJH), fun((AJH) -> boolean())) -> list(AJH). +take_while(List, Predicate) -> + do_take_while(List, Predicate, []). + +-spec do_chunk(list(AJK), fun((AJK) -> AJM), AJM, list(AJK), list(list(AJK))) -> list(list(AJK)). +do_chunk(List, F, Previous_key, Current_chunk, Acc) -> + case List of + [First | Rest] -> + Key = F(First), + case Key =:= Previous_key of + false -> + New_acc = [reverse(Current_chunk) | Acc], + do_chunk(Rest, F, Key, [First], New_acc); + + _ -> + do_chunk(Rest, F, Key, [First | Current_chunk], Acc) + end; + + _ -> + reverse([reverse(Current_chunk) | Acc]) + end. + +-spec chunk(list(AJS), fun((AJS) -> any())) -> list(list(AJS)). +chunk(List, F) -> + case List of + [] -> + []; + + [First | Rest] -> + do_chunk(Rest, F, F(First), [First], []) + end. + +-spec do_sized_chunk( + list(AJX), + integer(), + integer(), + list(AJX), + list(list(AJX)) +) -> list(list(AJX)). +do_sized_chunk(List, Count, Left, Current_chunk, Acc) -> + case List of + [] -> + case Current_chunk of + [] -> + reverse(Acc); + + Remaining -> + reverse([reverse(Remaining) | Acc]) + end; + + [First | Rest] -> + Chunk = [First | Current_chunk], + case Left > 1 of + false -> + do_sized_chunk( + Rest, + Count, + Count, + [], + [reverse(Chunk) | Acc] + ); + + true -> + do_sized_chunk(Rest, Count, Left - 1, Chunk, Acc) + end + end. + +-spec sized_chunk(list(AKE), integer()) -> list(list(AKE)). +sized_chunk(List, Count) -> + do_sized_chunk(List, Count, Count, [], []). + +-spec reduce(list(AKI), fun((AKI, AKI) -> AKI)) -> {ok, AKI} | {error, nil}. +reduce(List, Fun) -> + case List of + [] -> + {error, nil}; + + [First | Rest] -> + {ok, fold(Rest, First, Fun)} + end. + +-spec do_scan(list(AKM), AKO, list(AKO), fun((AKO, AKM) -> AKO)) -> list(AKO). +do_scan(List, Accumulator, Accumulated, Fun) -> + case List of + [] -> + reverse(Accumulated); + + [X | Xs] -> + Next = Fun(Accumulator, X), + do_scan(Xs, Next, [Next | Accumulated], Fun) + end. + +-spec scan(list(AKR), AKT, fun((AKT, AKR) -> AKT)) -> list(AKT). +scan(List, Initial, Fun) -> + do_scan(List, Initial, [], Fun). + +-spec last(list(AKV)) -> {ok, AKV} | {error, nil}. +last(List) -> + _pipe = List, + reduce(_pipe, fun(_, Elem) -> Elem end). + +-spec combinations(list(AKZ), integer()) -> list(list(AKZ)). +combinations(Items, N) -> + case N of + 0 -> + [[]]; + + _ -> + case Items of + [] -> + []; + + [X | Xs] -> + First_combinations = begin + _pipe = map( + combinations(Xs, N - 1), + fun(Com) -> [X | Com] end + ), + reverse(_pipe) + end, + fold( + First_combinations, + combinations(Xs, N), + fun(Acc, C) -> [C | Acc] end + ) + end + end. + +-spec do_combination_pairs(list(ALD)) -> list(list({ALD, ALD})). +do_combination_pairs(Items) -> + case Items of + [] -> + []; + + [X | Xs] -> + First_combinations = map(Xs, fun(Other) -> {X, Other} end), + [First_combinations | do_combination_pairs(Xs)] + end. + +-spec combination_pairs(list(ALH)) -> list({ALH, ALH}). +combination_pairs(Items) -> + _pipe = do_combination_pairs(Items), + concat(_pipe). + +-spec transpose(list(list(ALO))) -> list(list(ALO)). +transpose(List_of_list) -> + Take_first = fun(List) -> case List of + [] -> + []; + + [F] -> + [F]; + + [F@1 | _] -> + [F@1] + end end, + case List_of_list of + [] -> + []; + + [[] | Xss] -> + transpose(Xss); + + Rows -> + Firsts = begin + _pipe = Rows, + _pipe@1 = map(_pipe, Take_first), + concat(_pipe@1) + end, + Rest = transpose(map(Rows, fun(_capture) -> drop(_capture, 1) end)), + [Firsts | Rest] + end. + +-spec interleave(list(list(ALK))) -> list(ALK). +interleave(List) -> + _pipe = transpose(List), + concat(_pipe). + +-spec do_shuffle_pair_unwrap(list({float(), ALT}), list(ALT)) -> list(ALT). +do_shuffle_pair_unwrap(List, Acc) -> + case List of + [] -> + Acc; + + [Elem_pair | Enumerable] -> + do_shuffle_pair_unwrap( + Enumerable, + [erlang:element(2, Elem_pair) | Acc] + ) + end. + +-spec do_shuffle_by_pair_indexes(list({float(), ALX})) -> list({float(), ALX}). +do_shuffle_by_pair_indexes(List_of_pairs) -> + sort( + List_of_pairs, + fun(A_pair, B_pair) -> + gleam@float:compare( + erlang:element(1, A_pair), + erlang:element(1, B_pair) + ) + end + ). + +-spec shuffle(list(AMA)) -> list(AMA). +shuffle(List) -> + _pipe = List, + _pipe@1 = fold( + _pipe, + [], + fun(Acc, A) -> [{gleam@float:random(+0.0, 1.0), A} | Acc] end + ), + _pipe@2 = do_shuffle_by_pair_indexes(_pipe@1), + do_shuffle_pair_unwrap(_pipe@2, []). diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@map.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@map.erl new file mode 100644 index 0000000..33e89a9 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@map.erl @@ -0,0 +1,76 @@ +-module(gleam@map). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([size/1, to_list/1, from_list/1, has_key/2, new/0, get/2, insert/3, map_values/2, keys/1, values/1, filter/2, take/2, merge/2, delete/2, drop/2, update/3, fold/3]). + +-spec size(gleam@dict:dict(any(), any())) -> integer(). +size(Map) -> + gleam@dict:size(Map). + +-spec to_list(gleam@dict:dict(DAJ, DAK)) -> list({DAJ, DAK}). +to_list(Map) -> + gleam@dict:to_list(Map). + +-spec from_list(list({DAM, DAN})) -> gleam@dict:dict(DAM, DAN). +from_list(List) -> + gleam@dict:from_list(List). + +-spec has_key(gleam@dict:dict(DAR, any()), DAR) -> boolean(). +has_key(Map, Key) -> + gleam@dict:has_key(Map, Key). + +-spec new() -> gleam@dict:dict(any(), any()). +new() -> + gleam@dict:new(). + +-spec get(gleam@dict:dict(DAU, DAV), DAU) -> {ok, DAV} | {error, nil}. +get(From, Get) -> + gleam@dict:get(From, Get). + +-spec insert(gleam@dict:dict(DAZ, DBA), DAZ, DBA) -> gleam@dict:dict(DAZ, DBA). +insert(Map, Key, Value) -> + gleam@dict:insert(Map, Key, Value). + +-spec map_values(gleam@dict:dict(DBD, DBE), fun((DBD, DBE) -> DBF)) -> gleam@dict:dict(DBD, DBF). +map_values(Map, Fun) -> + gleam@dict:map_values(Map, Fun). + +-spec keys(gleam@dict:dict(DBI, any())) -> list(DBI). +keys(Map) -> + gleam@dict:keys(Map). + +-spec values(gleam@dict:dict(any(), DBL)) -> list(DBL). +values(Map) -> + gleam@dict:values(Map). + +-spec filter(gleam@dict:dict(DBO, DBP), fun((DBO, DBP) -> boolean())) -> gleam@dict:dict(DBO, DBP). +filter(Map, Predicate) -> + gleam@dict:filter(Map, Predicate). + +-spec take(gleam@dict:dict(DBS, DDM), list(DBS)) -> gleam@dict:dict(DBS, DDM). +take(Map, Desired_keys) -> + gleam@dict:take(Map, Desired_keys). + +-spec merge(gleam@dict:dict(DDN, DDO), gleam@dict:dict(DDN, DDO)) -> gleam@dict:dict(DDN, DDO). +merge(Map, New_entries) -> + gleam@dict:merge(Map, New_entries). + +-spec delete(gleam@dict:dict(DBZ, DDQ), DBZ) -> gleam@dict:dict(DBZ, DDQ). +delete(Map, Key) -> + gleam@dict:delete(Map, Key). + +-spec drop(gleam@dict:dict(DCC, DDS), list(DCC)) -> gleam@dict:dict(DCC, DDS). +drop(Map, Disallowed_keys) -> + gleam@dict:drop(Map, Disallowed_keys). + +-spec update( + gleam@dict:dict(DCG, DCH), + DCG, + fun((gleam@option:option(DCH)) -> DCH) +) -> gleam@dict:dict(DCG, DCH). +update(Map, Key, Fun) -> + gleam@dict:update(Map, Key, Fun). + +-spec fold(gleam@dict:dict(DCM, DCN), DCL, fun((DCL, DCM, DCN) -> DCL)) -> DCL. +fold(Map, Initial, Fun) -> + gleam@dict:fold(Map, Initial, Fun). diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@option.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@option.erl new file mode 100644 index 0000000..5c20713 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@option.erl @@ -0,0 +1,147 @@ +-module(gleam@option). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([all/1, is_some/1, is_none/1, to_result/2, from_result/1, unwrap/2, lazy_unwrap/2, map/2, flatten/1, then/2, 'or'/2, lazy_or/2, values/1]). +-export_type([option/1]). + +-type option(GB) :: {some, GB} | none. + +-spec do_all(list(option(GC)), list(GC)) -> option(list(GC)). +do_all(List, Acc) -> + case List of + [] -> + {some, Acc}; + + [X | Rest] -> + Accumulate = fun(Acc@1, Item) -> case {Acc@1, Item} of + {{some, Values}, {some, Value}} -> + {some, [Value | Values]}; + + {_, _} -> + none + end end, + Accumulate(do_all(Rest, Acc), X) + end. + +-spec all(list(option(GI))) -> option(list(GI)). +all(List) -> + do_all(List, []). + +-spec is_some(option(any())) -> boolean(). +is_some(Option) -> + Option /= none. + +-spec is_none(option(any())) -> boolean(). +is_none(Option) -> + Option =:= none. + +-spec to_result(option(GR), GU) -> {ok, GR} | {error, GU}. +to_result(Option, E) -> + case Option of + {some, A} -> + {ok, A}; + + _ -> + {error, E} + end. + +-spec from_result({ok, GX} | {error, any()}) -> option(GX). +from_result(Result) -> + case Result of + {ok, A} -> + {some, A}; + + _ -> + none + end. + +-spec unwrap(option(HC), HC) -> HC. +unwrap(Option, Default) -> + case Option of + {some, X} -> + X; + + none -> + Default + end. + +-spec lazy_unwrap(option(HE), fun(() -> HE)) -> HE. +lazy_unwrap(Option, Default) -> + case Option of + {some, X} -> + X; + + none -> + Default() + end. + +-spec map(option(HG), fun((HG) -> HI)) -> option(HI). +map(Option, Fun) -> + case Option of + {some, X} -> + {some, Fun(X)}; + + none -> + none + end. + +-spec flatten(option(option(HK))) -> option(HK). +flatten(Option) -> + case Option of + {some, X} -> + X; + + none -> + none + end. + +-spec then(option(HO), fun((HO) -> option(HQ))) -> option(HQ). +then(Option, Fun) -> + case Option of + {some, X} -> + Fun(X); + + none -> + none + end. + +-spec 'or'(option(HT), option(HT)) -> option(HT). +'or'(First, Second) -> + case First of + {some, _} -> + First; + + none -> + Second + end. + +-spec lazy_or(option(HX), fun(() -> option(HX))) -> option(HX). +lazy_or(First, Second) -> + case First of + {some, _} -> + First; + + none -> + Second() + end. + +-spec do_values(list(option(IB)), list(IB)) -> list(IB). +do_values(List, Acc) -> + case List of + [] -> + Acc; + + [X | Xs] -> + Accumulate = fun(Acc@1, Item) -> case Item of + {some, Value} -> + [Value | Acc@1]; + + none -> + Acc@1 + end end, + Accumulate(do_values(Xs, Acc), X) + end. + +-spec values(list(option(IG))) -> list(IG). +values(Options) -> + do_values(Options, []). diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@order.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@order.erl new file mode 100644 index 0000000..61649b9 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@order.erl @@ -0,0 +1,79 @@ +-module(gleam@order). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([negate/1, to_int/1, compare/2, max/2, min/2, reverse/1]). +-export_type([order/0]). + +-type order() :: lt | eq | gt. + +-spec negate(order()) -> order(). +negate(Order) -> + case Order of + lt -> + gt; + + eq -> + eq; + + gt -> + lt + end. + +-spec to_int(order()) -> integer(). +to_int(Order) -> + case Order of + lt -> + -1; + + eq -> + 0; + + gt -> + 1 + end. + +-spec compare(order(), order()) -> order(). +compare(A, B) -> + case {A, B} of + {X, Y} when X =:= Y -> + eq; + + {lt, _} -> + lt; + + {eq, gt} -> + lt; + + {_, _} -> + gt + end. + +-spec max(order(), order()) -> order(). +max(A, B) -> + case {A, B} of + {gt, _} -> + gt; + + {eq, lt} -> + eq; + + {_, _} -> + B + end. + +-spec min(order(), order()) -> order(). +min(A, B) -> + case {A, B} of + {lt, _} -> + lt; + + {eq, gt} -> + eq; + + {_, _} -> + B + end. + +-spec reverse(fun((I, I) -> order())) -> fun((I, I) -> order()). +reverse(Orderer) -> + fun(A, B) -> Orderer(B, A) end. diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@pair.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@pair.erl new file mode 100644 index 0000000..f4eff52 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@pair.erl @@ -0,0 +1,33 @@ +-module(gleam@pair). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([first/1, second/1, swap/1, map_first/2, map_second/2, new/2]). + +-spec first({FM, any()}) -> FM. +first(Pair) -> + {A, _} = Pair, + A. + +-spec second({any(), FP}) -> FP. +second(Pair) -> + {_, A} = Pair, + A. + +-spec swap({FQ, FR}) -> {FR, FQ}. +swap(Pair) -> + {A, B} = Pair, + {B, A}. + +-spec map_first({FS, FT}, fun((FS) -> FU)) -> {FU, FT}. +map_first(Pair, Fun) -> + {A, B} = Pair, + {Fun(A), B}. + +-spec map_second({FV, FW}, fun((FW) -> FX)) -> {FV, FX}. +map_second(Pair, Fun) -> + {A, B} = Pair, + {A, Fun(B)}. + +-spec new(FY, FZ) -> {FY, FZ}. +new(First, Second) -> + {First, Second}. diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@queue.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@queue.erl new file mode 100644 index 0000000..6b587e7 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@queue.erl @@ -0,0 +1,121 @@ +-module(gleam@queue). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([new/0, from_list/1, to_list/1, is_empty/1, length/1, push_back/2, push_front/2, pop_back/1, pop_front/1, reverse/1, is_logically_equal/3, is_equal/2]). +-export_type([queue/1]). + +-opaque queue(DRL) :: {queue, list(DRL), list(DRL)}. + +-spec new() -> queue(any()). +new() -> + {queue, [], []}. + +-spec from_list(list(DRO)) -> queue(DRO). +from_list(List) -> + {queue, [], List}. + +-spec to_list(queue(DRR)) -> list(DRR). +to_list(Queue) -> + _pipe = erlang:element(3, Queue), + gleam@list:append(_pipe, gleam@list:reverse(erlang:element(2, Queue))). + +-spec is_empty(queue(any())) -> boolean(). +is_empty(Queue) -> + (erlang:element(2, Queue) =:= []) andalso (erlang:element(3, Queue) =:= []). + +-spec length(queue(any())) -> integer(). +length(Queue) -> + gleam@list:length(erlang:element(2, Queue)) + gleam@list:length( + erlang:element(3, Queue) + ). + +-spec push_back(queue(DRY), DRY) -> queue(DRY). +push_back(Queue, Item) -> + {queue, [Item | erlang:element(2, Queue)], erlang:element(3, Queue)}. + +-spec push_front(queue(DSB), DSB) -> queue(DSB). +push_front(Queue, Item) -> + {queue, erlang:element(2, Queue), [Item | erlang:element(3, Queue)]}. + +-spec pop_back(queue(DSE)) -> {ok, {DSE, queue(DSE)}} | {error, nil}. +pop_back(Queue) -> + case Queue of + {queue, [], []} -> + {error, nil}; + + {queue, [], Out} -> + pop_back({queue, gleam@list:reverse(Out), []}); + + {queue, [First | Rest], Out@1} -> + Queue@1 = {queue, Rest, Out@1}, + {ok, {First, Queue@1}} + end. + +-spec pop_front(queue(DSJ)) -> {ok, {DSJ, queue(DSJ)}} | {error, nil}. +pop_front(Queue) -> + case Queue of + {queue, [], []} -> + {error, nil}; + + {queue, In, []} -> + pop_front({queue, [], gleam@list:reverse(In)}); + + {queue, In@1, [First | Rest]} -> + Queue@1 = {queue, In@1, Rest}, + {ok, {First, Queue@1}} + end. + +-spec reverse(queue(DSO)) -> queue(DSO). +reverse(Queue) -> + {queue, erlang:element(3, Queue), erlang:element(2, Queue)}. + +-spec check_equal( + list(DSR), + list(DSR), + list(DSR), + list(DSR), + fun((DSR, DSR) -> boolean()) +) -> boolean(). +check_equal(Xs, X_tail, Ys, Y_tail, Eq) -> + case {Xs, X_tail, Ys, Y_tail} of + {[], [], [], []} -> + true; + + {[X | Xs@1], _, [Y | Ys@1], _} -> + case Eq(X, Y) of + false -> + false; + + true -> + check_equal(Xs@1, X_tail, Ys@1, Y_tail, Eq) + end; + + {[], [_ | _], _, _} -> + check_equal(gleam@list:reverse(X_tail), [], Ys, Y_tail, Eq); + + {_, _, [], [_ | _]} -> + check_equal(Xs, X_tail, gleam@list:reverse(Y_tail), [], Eq); + + {_, _, _, _} -> + false + end. + +-spec is_logically_equal(queue(DSW), queue(DSW), fun((DSW, DSW) -> boolean())) -> boolean(). +is_logically_equal(A, B, Element_is_equal) -> + check_equal( + erlang:element(3, A), + erlang:element(2, A), + erlang:element(3, B), + erlang:element(2, B), + Element_is_equal + ). + +-spec is_equal(queue(DSZ), queue(DSZ)) -> boolean(). +is_equal(A, B) -> + check_equal( + erlang:element(3, A), + erlang:element(2, A), + erlang:element(3, B), + erlang:element(2, B), + fun(A@1, B@1) -> A@1 =:= B@1 end + ). diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@regex.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@regex.erl new file mode 100644 index 0000000..2d1c5fc --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@regex.erl @@ -0,0 +1,33 @@ +-module(gleam@regex). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([compile/2, from_string/1, check/2, split/2, scan/2]). +-export_type([regex/0, match/0, compile_error/0, options/0]). + +-type regex() :: any(). + +-type match() :: {match, binary(), list(gleam@option:option(binary()))}. + +-type compile_error() :: {compile_error, binary(), integer()}. + +-type options() :: {options, boolean(), boolean()}. + +-spec compile(binary(), options()) -> {ok, regex()} | {error, compile_error()}. +compile(Pattern, Options) -> + gleam_stdlib:compile_regex(Pattern, Options). + +-spec from_string(binary()) -> {ok, regex()} | {error, compile_error()}. +from_string(Pattern) -> + compile(Pattern, {options, false, false}). + +-spec check(regex(), binary()) -> boolean(). +check(Regex, Content) -> + gleam_stdlib:regex_check(Regex, Content). + +-spec split(regex(), binary()) -> list(binary()). +split(Regex, String) -> + gleam_stdlib:regex_split(Regex, String). + +-spec scan(regex(), binary()) -> list(match()). +scan(Regex, String) -> + gleam_stdlib:regex_scan(Regex, String). diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@result.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@result.erl new file mode 100644 index 0000000..7324e45 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@result.erl @@ -0,0 +1,201 @@ +-module(gleam@result). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([is_ok/1, is_error/1, map/2, map_error/2, flatten/1, 'try'/2, then/2, unwrap/2, lazy_unwrap/2, unwrap_error/2, unwrap_both/1, nil_error/1, 'or'/2, lazy_or/2, all/1, partition/1, replace/2, replace_error/2, values/1, try_recover/2]). + +-spec is_ok({ok, any()} | {error, any()}) -> boolean(). +is_ok(Result) -> + case Result of + {error, _} -> + false; + + {ok, _} -> + true + end. + +-spec is_error({ok, any()} | {error, any()}) -> boolean(). +is_error(Result) -> + case Result of + {ok, _} -> + false; + + {error, _} -> + true + end. + +-spec map({ok, BFM} | {error, BFN}, fun((BFM) -> BFQ)) -> {ok, BFQ} | + {error, BFN}. +map(Result, Fun) -> + case Result of + {ok, X} -> + {ok, Fun(X)}; + + {error, E} -> + {error, E} + end. + +-spec map_error({ok, BFT} | {error, BFU}, fun((BFU) -> BFX)) -> {ok, BFT} | + {error, BFX}. +map_error(Result, Fun) -> + case Result of + {ok, X} -> + {ok, X}; + + {error, Error} -> + {error, Fun(Error)} + end. + +-spec flatten({ok, {ok, BGA} | {error, BGB}} | {error, BGB}) -> {ok, BGA} | + {error, BGB}. +flatten(Result) -> + case Result of + {ok, X} -> + X; + + {error, Error} -> + {error, Error} + end. + +-spec 'try'({ok, BGI} | {error, BGJ}, fun((BGI) -> {ok, BGM} | {error, BGJ})) -> {ok, + BGM} | + {error, BGJ}. +'try'(Result, Fun) -> + case Result of + {ok, X} -> + Fun(X); + + {error, E} -> + {error, E} + end. + +-spec then({ok, BGR} | {error, BGS}, fun((BGR) -> {ok, BGV} | {error, BGS})) -> {ok, + BGV} | + {error, BGS}. +then(Result, Fun) -> + 'try'(Result, Fun). + +-spec unwrap({ok, BHA} | {error, any()}, BHA) -> BHA. +unwrap(Result, Default) -> + case Result of + {ok, V} -> + V; + + {error, _} -> + Default + end. + +-spec lazy_unwrap({ok, BHE} | {error, any()}, fun(() -> BHE)) -> BHE. +lazy_unwrap(Result, Default) -> + case Result of + {ok, V} -> + V; + + {error, _} -> + Default() + end. + +-spec unwrap_error({ok, any()} | {error, BHJ}, BHJ) -> BHJ. +unwrap_error(Result, Default) -> + case Result of + {ok, _} -> + Default; + + {error, E} -> + E + end. + +-spec unwrap_both({ok, BHM} | {error, BHM}) -> BHM. +unwrap_both(Result) -> + case Result of + {ok, A} -> + A; + + {error, A@1} -> + A@1 + end. + +-spec nil_error({ok, BHP} | {error, any()}) -> {ok, BHP} | {error, nil}. +nil_error(Result) -> + map_error(Result, fun(_) -> nil end). + +-spec 'or'({ok, BHV} | {error, BHW}, {ok, BHV} | {error, BHW}) -> {ok, BHV} | + {error, BHW}. +'or'(First, Second) -> + case First of + {ok, _} -> + First; + + {error, _} -> + Second + end. + +-spec lazy_or({ok, BID} | {error, BIE}, fun(() -> {ok, BID} | {error, BIE})) -> {ok, + BID} | + {error, BIE}. +lazy_or(First, Second) -> + case First of + {ok, _} -> + First; + + {error, _} -> + Second() + end. + +-spec all(list({ok, BIL} | {error, BIM})) -> {ok, list(BIL)} | {error, BIM}. +all(Results) -> + gleam@list:try_map(Results, fun(X) -> X end). + +-spec do_partition(list({ok, BJA} | {error, BJB}), list(BJA), list(BJB)) -> {list(BJA), + list(BJB)}. +do_partition(Results, Oks, Errors) -> + case Results of + [] -> + {Oks, Errors}; + + [{ok, A} | Rest] -> + do_partition(Rest, [A | Oks], Errors); + + [{error, E} | Rest@1] -> + do_partition(Rest@1, Oks, [E | Errors]) + end. + +-spec partition(list({ok, BIT} | {error, BIU})) -> {list(BIT), list(BIU)}. +partition(Results) -> + do_partition(Results, [], []). + +-spec replace({ok, any()} | {error, BJJ}, BJM) -> {ok, BJM} | {error, BJJ}. +replace(Result, Value) -> + case Result of + {ok, _} -> + {ok, Value}; + + {error, Error} -> + {error, Error} + end. + +-spec replace_error({ok, BJP} | {error, any()}, BJT) -> {ok, BJP} | {error, BJT}. +replace_error(Result, Error) -> + case Result of + {ok, X} -> + {ok, X}; + + {error, _} -> + {error, Error} + end. + +-spec values(list({ok, BJW} | {error, any()})) -> list(BJW). +values(Results) -> + gleam@list:filter_map(Results, fun(R) -> R end). + +-spec try_recover( + {ok, BKC} | {error, BKD}, + fun((BKD) -> {ok, BKC} | {error, BKG}) +) -> {ok, BKC} | {error, BKG}. +try_recover(Result, Fun) -> + case Result of + {ok, Value} -> + {ok, Value}; + + {error, Error} -> + Fun(Error) + end. diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@set.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@set.erl new file mode 100644 index 0000000..df87b13 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@set.erl @@ -0,0 +1,85 @@ +-module(gleam@set). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([new/0, size/1, insert/2, contains/2, delete/2, to_list/1, from_list/1, fold/3, filter/2, drop/2, take/2, union/2, intersection/2]). +-export_type([set/1]). + +-opaque set(DJZ) :: {set, gleam@dict:dict(DJZ, list(nil))}. + +-spec new() -> set(any()). +new() -> + {set, gleam@dict:new()}. + +-spec size(set(any())) -> integer(). +size(Set) -> + gleam@dict:size(erlang:element(2, Set)). + +-spec insert(set(DKF), DKF) -> set(DKF). +insert(Set, Member) -> + {set, gleam@dict:insert(erlang:element(2, Set), Member, [])}. + +-spec contains(set(DKI), DKI) -> boolean(). +contains(Set, Member) -> + _pipe = erlang:element(2, Set), + _pipe@1 = gleam@dict:get(_pipe, Member), + gleam@result:is_ok(_pipe@1). + +-spec delete(set(DKK), DKK) -> set(DKK). +delete(Set, Member) -> + {set, gleam@dict:delete(erlang:element(2, Set), Member)}. + +-spec to_list(set(DKN)) -> list(DKN). +to_list(Set) -> + gleam@dict:keys(erlang:element(2, Set)). + +-spec from_list(list(DKQ)) -> set(DKQ). +from_list(Members) -> + Map = gleam@list:fold( + Members, + gleam@dict:new(), + fun(M, K) -> gleam@dict:insert(M, K, []) end + ), + {set, Map}. + +-spec fold(set(DKT), DKV, fun((DKV, DKT) -> DKV)) -> DKV. +fold(Set, Initial, Reducer) -> + gleam@dict:fold( + erlang:element(2, Set), + Initial, + fun(A, K, _) -> Reducer(A, K) end + ). + +-spec filter(set(DKW), fun((DKW) -> boolean())) -> set(DKW). +filter(Set, Predicate) -> + {set, + gleam@dict:filter(erlang:element(2, Set), fun(M, _) -> Predicate(M) end)}. + +-spec drop(set(DKZ), list(DKZ)) -> set(DKZ). +drop(Set, Disallowed) -> + gleam@list:fold(Disallowed, Set, fun delete/2). + +-spec take(set(DLD), list(DLD)) -> set(DLD). +take(Set, Desired) -> + {set, gleam@dict:take(erlang:element(2, Set), Desired)}. + +-spec order(set(DLH), set(DLH)) -> {set(DLH), set(DLH)}. +order(First, Second) -> + case gleam@dict:size(erlang:element(2, First)) > gleam@dict:size( + erlang:element(2, Second) + ) of + true -> + {First, Second}; + + false -> + {Second, First} + end. + +-spec union(set(DLM), set(DLM)) -> set(DLM). +union(First, Second) -> + {Larger, Smaller} = order(First, Second), + fold(Smaller, Larger, fun insert/2). + +-spec intersection(set(DLQ), set(DLQ)) -> set(DLQ). +intersection(First, Second) -> + {Larger, Smaller} = order(First, Second), + take(Larger, to_list(Smaller)). diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@string.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@string.erl new file mode 100644 index 0000000..6cba31d --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@string.erl @@ -0,0 +1,352 @@ +-module(gleam@string). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([is_empty/1, length/1, reverse/1, replace/3, lowercase/1, uppercase/1, compare/2, slice/3, crop/2, drop_left/2, drop_right/2, contains/2, starts_with/2, ends_with/2, split_once/2, append/2, concat/1, repeat/2, join/2, pad_left/3, pad_right/3, trim/1, trim_left/1, trim_right/1, pop_grapheme/1, to_graphemes/1, split/2, to_utf_codepoints/1, from_utf_codepoints/1, utf_codepoint/1, utf_codepoint_to_int/1, to_option/1, first/1, last/1, capitalise/1, inspect/1, byte_size/1]). +-export_type([direction/0]). + +-type direction() :: leading | trailing | both. + +-spec is_empty(binary()) -> boolean(). +is_empty(Str) -> + Str =:= <<""/utf8>>. + +-spec length(binary()) -> integer(). +length(String) -> + string:length(String). + +-spec do_reverse(binary()) -> binary(). +do_reverse(String) -> + _pipe = String, + _pipe@1 = gleam@string_builder:from_string(_pipe), + _pipe@2 = gleam@string_builder:reverse(_pipe@1), + gleam@string_builder:to_string(_pipe@2). + +-spec reverse(binary()) -> binary(). +reverse(String) -> + do_reverse(String). + +-spec replace(binary(), binary(), binary()) -> binary(). +replace(String, Pattern, Substitute) -> + _pipe = String, + _pipe@1 = gleam@string_builder:from_string(_pipe), + _pipe@2 = gleam@string_builder:replace(_pipe@1, Pattern, Substitute), + gleam@string_builder:to_string(_pipe@2). + +-spec lowercase(binary()) -> binary(). +lowercase(String) -> + string:lowercase(String). + +-spec uppercase(binary()) -> binary(). +uppercase(String) -> + string:uppercase(String). + +-spec compare(binary(), binary()) -> gleam@order:order(). +compare(A, B) -> + case A =:= B of + true -> + eq; + + _ -> + case gleam_stdlib:less_than(A, B) of + true -> + lt; + + _ -> + gt + end + end. + +-spec slice(binary(), integer(), integer()) -> binary(). +slice(String, Idx, Len) -> + case Len < 0 of + true -> + <<""/utf8>>; + + false -> + case Idx < 0 of + true -> + Translated_idx = length(String) + Idx, + case Translated_idx < 0 of + true -> + <<""/utf8>>; + + false -> + string:slice(String, Translated_idx, Len) + end; + + false -> + string:slice(String, Idx, Len) + end + end. + +-spec crop(binary(), binary()) -> binary(). +crop(String, Substring) -> + gleam_stdlib:crop_string(String, Substring). + +-spec drop_left(binary(), integer()) -> binary(). +drop_left(String, Num_graphemes) -> + case Num_graphemes < 0 of + true -> + String; + + false -> + slice(String, Num_graphemes, length(String) - Num_graphemes) + end. + +-spec drop_right(binary(), integer()) -> binary(). +drop_right(String, Num_graphemes) -> + case Num_graphemes < 0 of + true -> + String; + + false -> + slice(String, 0, length(String) - Num_graphemes) + end. + +-spec contains(binary(), binary()) -> boolean(). +contains(Haystack, Needle) -> + gleam_stdlib:contains_string(Haystack, Needle). + +-spec starts_with(binary(), binary()) -> boolean(). +starts_with(String, Prefix) -> + gleam_stdlib:string_starts_with(String, Prefix). + +-spec ends_with(binary(), binary()) -> boolean(). +ends_with(String, Suffix) -> + gleam_stdlib:string_ends_with(String, Suffix). + +-spec do_split_once(binary(), binary()) -> {ok, {binary(), binary()}} | + {error, nil}. +do_split_once(X, Substring) -> + case string:split(X, Substring) of + [First, Rest] -> + {ok, {First, Rest}}; + + _ -> + {error, nil} + end. + +-spec split_once(binary(), binary()) -> {ok, {binary(), binary()}} | + {error, nil}. +split_once(X, Substring) -> + do_split_once(X, Substring). + +-spec append(binary(), binary()) -> binary(). +append(First, Second) -> + _pipe = First, + _pipe@1 = gleam@string_builder:from_string(_pipe), + _pipe@2 = gleam@string_builder:append(_pipe@1, Second), + gleam@string_builder:to_string(_pipe@2). + +-spec concat(list(binary())) -> binary(). +concat(Strings) -> + _pipe = Strings, + _pipe@1 = gleam@string_builder:from_strings(_pipe), + gleam@string_builder:to_string(_pipe@1). + +-spec repeat(binary(), integer()) -> binary(). +repeat(String, Times) -> + _pipe = gleam@iterator:repeat(String), + _pipe@1 = gleam@iterator:take(_pipe, Times), + _pipe@2 = gleam@iterator:to_list(_pipe@1), + concat(_pipe@2). + +-spec do_join(list(binary()), binary()) -> binary(). +do_join(Strings, Separator) -> + _pipe = Strings, + _pipe@1 = gleam@list:intersperse(_pipe, Separator), + concat(_pipe@1). + +-spec join(list(binary()), binary()) -> binary(). +join(Strings, Separator) -> + do_join(Strings, Separator). + +-spec padding(integer(), binary()) -> gleam@iterator:iterator(binary()). +padding(Size, Pad_string) -> + Pad_length = length(Pad_string), + Num_pads = case Pad_length of + 0 -> 0; + Gleam@denominator -> Size div Gleam@denominator + end, + Extra = case Pad_length of + 0 -> 0; + Gleam@denominator@1 -> Size rem Gleam@denominator@1 + end, + _pipe = gleam@iterator:repeat(Pad_string), + _pipe@1 = gleam@iterator:take(_pipe, Num_pads), + gleam@iterator:append( + _pipe@1, + gleam@iterator:single(slice(Pad_string, 0, Extra)) + ). + +-spec pad_left(binary(), integer(), binary()) -> binary(). +pad_left(String, Desired_length, Pad_string) -> + Current_length = length(String), + To_pad_length = Desired_length - Current_length, + _pipe = padding(To_pad_length, Pad_string), + _pipe@1 = gleam@iterator:append(_pipe, gleam@iterator:single(String)), + _pipe@2 = gleam@iterator:to_list(_pipe@1), + concat(_pipe@2). + +-spec pad_right(binary(), integer(), binary()) -> binary(). +pad_right(String, Desired_length, Pad_string) -> + Current_length = length(String), + To_pad_length = Desired_length - Current_length, + _pipe = gleam@iterator:single(String), + _pipe@1 = gleam@iterator:append(_pipe, padding(To_pad_length, Pad_string)), + _pipe@2 = gleam@iterator:to_list(_pipe@1), + concat(_pipe@2). + +-spec do_trim(binary()) -> binary(). +do_trim(String) -> + string:trim(String, both). + +-spec trim(binary()) -> binary(). +trim(String) -> + do_trim(String). + +-spec do_trim_left(binary()) -> binary(). +do_trim_left(String) -> + string:trim(String, leading). + +-spec trim_left(binary()) -> binary(). +trim_left(String) -> + do_trim_left(String). + +-spec do_trim_right(binary()) -> binary(). +do_trim_right(String) -> + string:trim(String, trailing). + +-spec trim_right(binary()) -> binary(). +trim_right(String) -> + do_trim_right(String). + +-spec pop_grapheme(binary()) -> {ok, {binary(), binary()}} | {error, nil}. +pop_grapheme(String) -> + gleam_stdlib:string_pop_grapheme(String). + +-spec do_to_graphemes(binary(), list(binary())) -> list(binary()). +do_to_graphemes(String, Acc) -> + case pop_grapheme(String) of + {ok, {Grapheme, Rest}} -> + do_to_graphemes(Rest, [Grapheme | Acc]); + + _ -> + Acc + end. + +-spec to_graphemes(binary()) -> list(binary()). +to_graphemes(String) -> + _pipe = do_to_graphemes(String, []), + gleam@list:reverse(_pipe). + +-spec split(binary(), binary()) -> list(binary()). +split(X, Substring) -> + case Substring of + <<""/utf8>> -> + to_graphemes(X); + + _ -> + _pipe = X, + _pipe@1 = gleam@string_builder:from_string(_pipe), + _pipe@2 = gleam@string_builder:split(_pipe@1, Substring), + gleam@list:map(_pipe@2, fun gleam@string_builder:to_string/1) + end. + +-spec do_to_utf_codepoints_impl(bitstring(), list(integer())) -> list(integer()). +do_to_utf_codepoints_impl(Bit_array, Acc) -> + case Bit_array of + <<First/utf8, Rest/binary>> -> + do_to_utf_codepoints_impl(Rest, [First | Acc]); + + _ -> + Acc + end. + +-spec do_to_utf_codepoints(binary()) -> list(integer()). +do_to_utf_codepoints(String) -> + _pipe = do_to_utf_codepoints_impl(<<String/binary>>, []), + gleam@list:reverse(_pipe). + +-spec to_utf_codepoints(binary()) -> list(integer()). +to_utf_codepoints(String) -> + do_to_utf_codepoints(String). + +-spec from_utf_codepoints(list(integer())) -> binary(). +from_utf_codepoints(Utf_codepoints) -> + gleam_stdlib:utf_codepoint_list_to_string(Utf_codepoints). + +-spec utf_codepoint(integer()) -> {ok, integer()} | {error, nil}. +utf_codepoint(Value) -> + case Value of + I when I > 1114111 -> + {error, nil}; + + 65534 -> + {error, nil}; + + 65535 -> + {error, nil}; + + I@1 when (I@1 >= 55296) andalso (I@1 =< 57343) -> + {error, nil}; + + I@2 -> + {ok, gleam_stdlib:identity(I@2)} + end. + +-spec utf_codepoint_to_int(integer()) -> integer(). +utf_codepoint_to_int(Cp) -> + gleam_stdlib:identity(Cp). + +-spec to_option(binary()) -> gleam@option:option(binary()). +to_option(S) -> + case S of + <<""/utf8>> -> + none; + + _ -> + {some, S} + end. + +-spec first(binary()) -> {ok, binary()} | {error, nil}. +first(S) -> + case pop_grapheme(S) of + {ok, {First, _}} -> + {ok, First}; + + {error, E} -> + {error, E} + end. + +-spec last(binary()) -> {ok, binary()} | {error, nil}. +last(S) -> + case pop_grapheme(S) of + {ok, {First, <<""/utf8>>}} -> + {ok, First}; + + {ok, {_, Rest}} -> + {ok, slice(Rest, -1, 1)}; + + {error, E} -> + {error, E} + end. + +-spec capitalise(binary()) -> binary(). +capitalise(S) -> + case pop_grapheme(S) of + {ok, {First, Rest}} -> + append(uppercase(First), lowercase(Rest)); + + _ -> + <<""/utf8>> + end. + +-spec inspect(any()) -> binary(). +inspect(Term) -> + _pipe = gleam_stdlib:inspect(Term), + gleam@string_builder:to_string(_pipe). + +-spec byte_size(binary()) -> integer(). +byte_size(String) -> + erlang:byte_size(String). diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@string_builder.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@string_builder.erl new file mode 100644 index 0000000..693e840 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@string_builder.erl @@ -0,0 +1,91 @@ +-module(gleam@string_builder). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([prepend_builder/2, append_builder/2, new/0, from_strings/1, concat/1, from_string/1, prepend/2, append/2, to_string/1, byte_size/1, join/2, lowercase/1, uppercase/1, reverse/1, split/2, replace/3, is_equal/2, is_empty/1]). +-export_type([string_builder/0, direction/0]). + +-type string_builder() :: any(). + +-type direction() :: all. + +-spec prepend_builder(string_builder(), string_builder()) -> string_builder(). +prepend_builder(Builder, Prefix) -> + gleam_stdlib:iodata_append(Prefix, Builder). + +-spec append_builder(string_builder(), string_builder()) -> string_builder(). +append_builder(Builder, Suffix) -> + gleam_stdlib:iodata_append(Builder, Suffix). + +-spec new() -> string_builder(). +new() -> + gleam_stdlib:identity([]). + +-spec from_strings(list(binary())) -> string_builder(). +from_strings(Strings) -> + gleam_stdlib:identity(Strings). + +-spec concat(list(string_builder())) -> string_builder(). +concat(Builders) -> + gleam_stdlib:identity(Builders). + +-spec from_string(binary()) -> string_builder(). +from_string(String) -> + gleam_stdlib:identity(String). + +-spec prepend(string_builder(), binary()) -> string_builder(). +prepend(Builder, Prefix) -> + append_builder(from_string(Prefix), Builder). + +-spec append(string_builder(), binary()) -> string_builder(). +append(Builder, Second) -> + append_builder(Builder, from_string(Second)). + +-spec to_string(string_builder()) -> binary(). +to_string(Builder) -> + unicode:characters_to_binary(Builder). + +-spec byte_size(string_builder()) -> integer(). +byte_size(Builder) -> + erlang:iolist_size(Builder). + +-spec join(list(string_builder()), binary()) -> string_builder(). +join(Builders, Sep) -> + _pipe = Builders, + _pipe@1 = gleam@list:intersperse(_pipe, from_string(Sep)), + concat(_pipe@1). + +-spec lowercase(string_builder()) -> string_builder(). +lowercase(Builder) -> + string:lowercase(Builder). + +-spec uppercase(string_builder()) -> string_builder(). +uppercase(Builder) -> + string:uppercase(Builder). + +-spec reverse(string_builder()) -> string_builder(). +reverse(Builder) -> + string:reverse(Builder). + +-spec do_split(string_builder(), binary()) -> list(string_builder()). +do_split(Iodata, Pattern) -> + string:split(Iodata, Pattern, all). + +-spec split(string_builder(), binary()) -> list(string_builder()). +split(Iodata, Pattern) -> + do_split(Iodata, Pattern). + +-spec do_replace(string_builder(), binary(), binary()) -> string_builder(). +do_replace(Iodata, Pattern, Substitute) -> + string:replace(Iodata, Pattern, Substitute, all). + +-spec replace(string_builder(), binary(), binary()) -> string_builder(). +replace(Builder, Pattern, Substitute) -> + do_replace(Builder, Pattern, Substitute). + +-spec is_equal(string_builder(), string_builder()) -> boolean(). +is_equal(A, B) -> + string:equal(A, B). + +-spec is_empty(string_builder()) -> boolean(). +is_empty(Builder) -> + string:is_empty(Builder). diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@uri.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@uri.erl new file mode 100644 index 0000000..7ec4fe7 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@uri.erl @@ -0,0 +1,252 @@ +-module(gleam@uri). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([parse/1, parse_query/1, percent_encode/1, query_to_string/1, percent_decode/1, path_segments/1, to_string/1, origin/1, merge/2]). +-export_type([uri/0]). + +-type uri() :: {uri, + gleam@option:option(binary()), + gleam@option:option(binary()), + gleam@option:option(binary()), + gleam@option:option(integer()), + binary(), + gleam@option:option(binary()), + gleam@option:option(binary())}. + +-spec parse(binary()) -> {ok, uri()} | {error, nil}. +parse(Uri_string) -> + gleam_stdlib:uri_parse(Uri_string). + +-spec parse_query(binary()) -> {ok, list({binary(), binary()})} | {error, nil}. +parse_query(Query) -> + gleam_stdlib:parse_query(Query). + +-spec percent_encode(binary()) -> binary(). +percent_encode(Value) -> + gleam_stdlib:percent_encode(Value). + +-spec query_pair({binary(), binary()}) -> gleam@string_builder:string_builder(). +query_pair(Pair) -> + gleam@string_builder:from_strings( + [percent_encode(erlang:element(1, Pair)), + <<"="/utf8>>, + percent_encode(erlang:element(2, Pair))] + ). + +-spec query_to_string(list({binary(), binary()})) -> binary(). +query_to_string(Query) -> + _pipe = Query, + _pipe@1 = gleam@list:map(_pipe, fun query_pair/1), + _pipe@2 = gleam@list:intersperse( + _pipe@1, + gleam@string_builder:from_string(<<"&"/utf8>>) + ), + _pipe@3 = gleam@string_builder:concat(_pipe@2), + gleam@string_builder:to_string(_pipe@3). + +-spec percent_decode(binary()) -> {ok, binary()} | {error, nil}. +percent_decode(Value) -> + gleam_stdlib:percent_decode(Value). + +-spec do_remove_dot_segments(list(binary()), list(binary())) -> list(binary()). +do_remove_dot_segments(Input, Accumulator) -> + case Input of + [] -> + gleam@list:reverse(Accumulator); + + [Segment | Rest] -> + Accumulator@5 = case {Segment, Accumulator} of + {<<""/utf8>>, Accumulator@1} -> + Accumulator@1; + + {<<"."/utf8>>, Accumulator@2} -> + Accumulator@2; + + {<<".."/utf8>>, []} -> + []; + + {<<".."/utf8>>, [_ | Accumulator@3]} -> + Accumulator@3; + + {Segment@1, Accumulator@4} -> + [Segment@1 | Accumulator@4] + end, + do_remove_dot_segments(Rest, Accumulator@5) + end. + +-spec remove_dot_segments(list(binary())) -> list(binary()). +remove_dot_segments(Input) -> + do_remove_dot_segments(Input, []). + +-spec path_segments(binary()) -> list(binary()). +path_segments(Path) -> + remove_dot_segments(gleam@string:split(Path, <<"/"/utf8>>)). + +-spec to_string(uri()) -> binary(). +to_string(Uri) -> + Parts = case erlang:element(8, Uri) of + {some, Fragment} -> + [<<"#"/utf8>>, Fragment]; + + _ -> + [] + end, + Parts@1 = case erlang:element(7, Uri) of + {some, Query} -> + [<<"?"/utf8>>, Query | Parts]; + + _ -> + Parts + end, + Parts@2 = [erlang:element(6, Uri) | Parts@1], + Parts@3 = case {erlang:element(4, Uri), + gleam@string:starts_with(erlang:element(6, Uri), <<"/"/utf8>>)} of + {{some, Host}, false} when Host =/= <<""/utf8>> -> + [<<"/"/utf8>> | Parts@2]; + + {_, _} -> + Parts@2 + end, + Parts@4 = case {erlang:element(4, Uri), erlang:element(5, Uri)} of + {{some, _}, {some, Port}} -> + [<<":"/utf8>>, gleam@int:to_string(Port) | Parts@3]; + + {_, _} -> + Parts@3 + end, + Parts@5 = case {erlang:element(2, Uri), + erlang:element(3, Uri), + erlang:element(4, Uri)} of + {{some, S}, {some, U}, {some, H}} -> + [S, <<"://"/utf8>>, U, <<"@"/utf8>>, H | Parts@4]; + + {{some, S@1}, none, {some, H@1}} -> + [S@1, <<"://"/utf8>>, H@1 | Parts@4]; + + {{some, S@2}, {some, _}, none} -> + [S@2, <<":"/utf8>> | Parts@4]; + + {{some, S@2}, none, none} -> + [S@2, <<":"/utf8>> | Parts@4]; + + {none, none, {some, H@2}} -> + [<<"//"/utf8>>, H@2 | Parts@4]; + + {_, _, _} -> + Parts@4 + end, + gleam@string:concat(Parts@5). + +-spec origin(uri()) -> {ok, binary()} | {error, nil}. +origin(Uri) -> + {uri, Scheme, _, Host, Port, _, _, _} = Uri, + case Scheme of + {some, <<"https"/utf8>>} when Port =:= {some, 443} -> + Origin = {uri, Scheme, none, Host, none, <<""/utf8>>, none, none}, + {ok, to_string(Origin)}; + + {some, <<"http"/utf8>>} when Port =:= {some, 80} -> + Origin@1 = {uri, Scheme, none, Host, none, <<""/utf8>>, none, none}, + {ok, to_string(Origin@1)}; + + {some, S} when (S =:= <<"http"/utf8>>) orelse (S =:= <<"https"/utf8>>) -> + Origin@2 = {uri, Scheme, none, Host, Port, <<""/utf8>>, none, none}, + {ok, to_string(Origin@2)}; + + _ -> + {error, nil} + end. + +-spec drop_last(list(DFL)) -> list(DFL). +drop_last(Elements) -> + gleam@list:take(Elements, gleam@list:length(Elements) - 1). + +-spec join_segments(list(binary())) -> binary(). +join_segments(Segments) -> + gleam@string:join([<<""/utf8>> | Segments], <<"/"/utf8>>). + +-spec merge(uri(), uri()) -> {ok, uri()} | {error, nil}. +merge(Base, Relative) -> + case Base of + {uri, {some, _}, _, {some, _}, _, _, _, _} -> + case Relative of + {uri, _, _, {some, _}, _, _, _, _} -> + Path = begin + _pipe = gleam@string:split( + erlang:element(6, Relative), + <<"/"/utf8>> + ), + _pipe@1 = remove_dot_segments(_pipe), + join_segments(_pipe@1) + end, + Resolved = {uri, + gleam@option:'or'( + erlang:element(2, Relative), + erlang:element(2, Base) + ), + none, + erlang:element(4, Relative), + gleam@option:'or'( + erlang:element(5, Relative), + erlang:element(5, Base) + ), + Path, + erlang:element(7, Relative), + erlang:element(8, Relative)}, + {ok, Resolved}; + + _ -> + {New_path, New_query} = case erlang:element(6, Relative) of + <<""/utf8>> -> + {erlang:element(6, Base), + gleam@option:'or'( + erlang:element(7, Relative), + erlang:element(7, Base) + )}; + + _ -> + Path_segments = case gleam@string:starts_with( + erlang:element(6, Relative), + <<"/"/utf8>> + ) of + true -> + gleam@string:split( + erlang:element(6, Relative), + <<"/"/utf8>> + ); + + false -> + _pipe@2 = gleam@string:split( + erlang:element(6, Base), + <<"/"/utf8>> + ), + _pipe@3 = drop_last(_pipe@2), + gleam@list:append( + _pipe@3, + gleam@string:split( + erlang:element(6, Relative), + <<"/"/utf8>> + ) + ) + end, + Path@1 = begin + _pipe@4 = Path_segments, + _pipe@5 = remove_dot_segments(_pipe@4), + join_segments(_pipe@5) + end, + {Path@1, erlang:element(7, Relative)} + end, + Resolved@1 = {uri, + erlang:element(2, Base), + none, + erlang:element(4, Base), + erlang:element(5, Base), + New_path, + New_query, + erlang:element(8, Relative)}, + {ok, Resolved@1} + end; + + _ -> + {error, nil} + end. diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.app.src b/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.app.src new file mode 100644 index 0000000..bcf08e2 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.app.src @@ -0,0 +1,31 @@ +{application, gleam_stdlib, [ + {vsn, "0.33.0"}, + {applications, []}, + {description, "A standard library for the Gleam programming language"}, + {modules, [gleam@base, + gleam@bit_array, + gleam@bit_builder, + gleam@bit_string, + gleam@bool, + gleam@bytes_builder, + gleam@dict, + gleam@dynamic, + gleam@float, + gleam@function, + gleam@int, + gleam@io, + gleam@iterator, + gleam@list, + gleam@map, + gleam@option, + gleam@order, + gleam@pair, + gleam@queue, + gleam@regex, + gleam@result, + gleam@set, + gleam@string, + gleam@string_builder, + gleam@uri]}, + {registered, []} +]}. diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.erl new file mode 100644 index 0000000..c6ea125 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.erl @@ -0,0 +1,529 @@ +-module(gleam_stdlib). + +-export([ + map_get/2, iodata_append/2, identity/1, decode_int/1, decode_bool/1, + decode_float/1, decode_list/1, decode_option/2, decode_field/2, parse_int/1, + parse_float/1, less_than/2, string_pop_grapheme/1, string_starts_with/2, + wrap_list/1, string_ends_with/2, string_pad/4, decode_map/1, uri_parse/1, + bit_array_int_to_u32/1, bit_array_int_from_u32/1, decode_result/1, + bit_array_slice/3, decode_bit_array/1, compile_regex/2, regex_scan/2, + percent_encode/1, percent_decode/1, regex_check/2, regex_split/2, + base_decode64/1, parse_query/1, bit_array_concat/1, size_of_tuple/1, + decode_tuple/1, decode_tuple2/1, decode_tuple3/1, decode_tuple4/1, + decode_tuple5/1, decode_tuple6/1, tuple_get/2, classify_dynamic/1, print/1, + println/1, print_error/1, println_error/1, inspect/1, float_to_string/1, + int_from_base_string/2, utf_codepoint_list_to_string/1, contains_string/2, + crop_string/2, base16_decode/1 +]). + +%% Taken from OTP's uri_string module +-define(DEC2HEX(X), + if ((X) >= 0) andalso ((X) =< 9) -> (X) + $0; + ((X) >= 10) andalso ((X) =< 15) -> (X) + $A - 10 + end). + +%% Taken from OTP's uri_string module +-define(HEX2DEC(X), + if ((X) >= $0) andalso ((X) =< $9) -> (X) - $0; + ((X) >= $A) andalso ((X) =< $F) -> (X) - $A + 10; + ((X) >= $a) andalso ((X) =< $f) -> (X) - $a + 10 + end). + +-define(is_lowercase_char(X), (X > 96 andalso X < 123)). +-define(is_underscore_char(X), (X == 95)). +-define(is_digit_char(X), (X > 47 andalso X < 58)). + +uppercase(X) -> X - 32. + +map_get(Map, Key) -> + case maps:find(Key, Map) of + error -> {error, nil}; + OkFound -> OkFound + end. + +iodata_append(Iodata, String) -> [Iodata, String]. + +identity(X) -> X. + +decode_error_msg(Expected, Data) when is_binary(Expected) -> + decode_error(Expected, classify_dynamic(Data)). +decode_error(Expected, Got) when is_binary(Expected) andalso is_binary(Got) -> + {error, [{decode_error, Expected, Got, []}]}. + +classify_dynamic(nil) -> <<"Nil">>; +classify_dynamic(X) when is_atom(X) -> <<"Atom">>; +classify_dynamic(X) when is_binary(X) -> <<"String">>; +classify_dynamic(X) when is_bitstring(X) -> <<"BitArray">>; +classify_dynamic(X) when is_integer(X) -> <<"Int">>; +classify_dynamic(X) when is_float(X) -> <<"Float">>; +classify_dynamic(X) when is_list(X) -> <<"List">>; +classify_dynamic(X) when is_boolean(X) -> <<"Bool">>; +classify_dynamic(X) when is_map(X) -> <<"Map">>; +classify_dynamic(X) when is_tuple(X) -> + iolist_to_binary(["Tuple of ", integer_to_list(tuple_size(X)), " elements"]); +classify_dynamic(X) when + is_function(X, 0) orelse is_function(X, 1) orelse is_function(X, 2) orelse + is_function(X, 3) orelse is_function(X, 4) orelse is_function(X, 5) orelse + is_function(X, 6) orelse is_function(X, 7) orelse is_function(X, 8) orelse + is_function(X, 9) orelse is_function(X, 10) orelse is_function(X, 11) orelse + is_function(X, 12) -> <<"Function">>; +classify_dynamic(_) -> <<"Some other type">>. + +decode_map(Data) when is_map(Data) -> {ok, Data}; +decode_map(Data) -> decode_error_msg(<<"Map">>, Data). + +decode_bit_array(Data) when is_bitstring(Data) -> {ok, Data}; +decode_bit_array(Data) -> decode_error_msg(<<"BitArray">>, Data). + +decode_int(Data) when is_integer(Data) -> {ok, Data}; +decode_int(Data) -> decode_error_msg(<<"Int">>, Data). + +decode_float(Data) when is_float(Data) -> {ok, Data}; +decode_float(Data) -> decode_error_msg(<<"Float">>, Data). + +decode_bool(Data) when is_boolean(Data) -> {ok, Data}; +decode_bool(Data) -> decode_error_msg(<<"Bool">>, Data). + +decode_list(Data) when is_list(Data) -> {ok, Data}; +decode_list(Data) -> decode_error_msg(<<"List">>, Data). + +decode_field(Data, Key) when is_map(Data) -> + case Data of + #{Key := Value} -> {ok, {some, Value}}; + _ -> + {ok, none} + end; +decode_field(Data, _) -> + decode_error_msg(<<"Map">>, Data). + +size_of_tuple(Data) -> tuple_size(Data). + +tuple_get(_tup, Index) when Index < 0 -> {error, nil}; +tuple_get(Data, Index) when Index >= tuple_size(Data) -> {error, nil}; +tuple_get(Data, Index) -> {ok, element(Index + 1, Data)}. + +decode_tuple(Data) when is_tuple(Data) -> {ok, Data}; +decode_tuple(Data) -> decode_error_msg(<<"Tuple">>, Data). + +decode_tuple2({_,_} = A) -> {ok, A}; +decode_tuple2([A,B]) -> {ok, {A,B}}; +decode_tuple2(Data) -> decode_error_msg(<<"Tuple of 2 elements">>, Data). + +decode_tuple3({_,_,_} = A) -> {ok, A}; +decode_tuple3([A,B,C]) -> {ok, {A,B,C}}; +decode_tuple3(Data) -> decode_error_msg(<<"Tuple of 3 elements">>, Data). + +decode_tuple4({_,_,_,_} = A) -> {ok, A}; +decode_tuple4([A,B,C,D]) -> {ok, {A,B,C,D}}; +decode_tuple4(Data) -> decode_error_msg(<<"Tuple of 4 elements">>, Data). + +decode_tuple5({_,_,_,_,_} = A) -> {ok, A}; +decode_tuple5([A,B,C,D,E]) -> {ok, {A,B,C,D,E}}; +decode_tuple5(Data) -> decode_error_msg(<<"Tuple of 5 elements">>, Data). + +decode_tuple6({_,_,_,_,_,_} = A) -> {ok, A}; +decode_tuple6([A,B,C,D,E,F]) -> {ok, {A,B,C,D,E,F}}; +decode_tuple6(Data) -> decode_error_msg(<<"Tuple of 6 elements">>, Data). + +decode_option(Term, F) -> + Decode = fun(Inner) -> + case F(Inner) of + {ok, Decoded} -> {ok, {some, Decoded}}; + Error -> Error + end + end, + case Term of + undefined -> {ok, none}; + error -> {ok, none}; + null -> {ok, none}; + none -> {ok, none}; + nil -> {ok, none}; + {some, Inner} -> Decode(Inner); + _ -> Decode(Term) + end. + +decode_result(Term) -> + case Term of + {ok, Inner} -> {ok, {ok, Inner}}; + ok -> {ok, {ok, nil}}; + {error, Inner} -> {ok, {error, Inner}}; + error -> {ok, {error, nil}}; + _ -> decode_error_msg(<<"Result">>, Term) + end. + +int_from_base_string(String, Base) -> + case catch binary_to_integer(String, Base) of + Int when is_integer(Int) -> {ok, Int}; + _ -> {error, nil} + end. + +parse_int(String) -> + case catch binary_to_integer(String) of + Int when is_integer(Int) -> {ok, Int}; + _ -> {error, nil} + end. + +parse_float(String) -> + case catch binary_to_float(String) of + Float when is_float(Float) -> {ok, Float}; + _ -> {error, nil} + end. + +less_than(Lhs, Rhs) -> + Lhs < Rhs. + +string_starts_with(_, <<>>) -> true; +string_starts_with(String, Prefix) when byte_size(Prefix) > byte_size(String) -> false; +string_starts_with(String, Prefix) -> + PrefixSize = byte_size(Prefix), + Prefix == binary_part(String, 0, PrefixSize). + +string_ends_with(_, <<>>) -> true; +string_ends_with(String, Suffix) when byte_size(Suffix) > byte_size(String) -> false; +string_ends_with(String, Suffix) -> + SuffixSize = byte_size(Suffix), + Suffix == binary_part(String, byte_size(String) - SuffixSize, SuffixSize). + +string_pad(String, Length, Dir, PadString) -> + Chars = string:pad(String, Length, Dir, binary_to_list(PadString)), + case unicode:characters_to_binary(Chars) of + Bin when is_binary(Bin) -> Bin; + Error -> erlang:error({gleam_error, {string_invalid_utf8, Error}}) + end. + +string_pop_grapheme(String) -> + case string:next_grapheme(String) of + [ Next | Rest ] -> + {ok, {unicode:characters_to_binary([Next]), unicode:characters_to_binary(Rest)}}; + _ -> {error, nil} + end. + +bit_array_concat(BitArrays) -> + list_to_bitstring(BitArrays). + +bit_array_slice(Bin, Pos, Len) -> + try {ok, binary:part(Bin, Pos, Len)} + catch error:badarg -> {error, nil} + end. + +bit_array_int_to_u32(I) when 0 =< I, I < 4294967296 -> + {ok, <<I:32>>}; +bit_array_int_to_u32(_) -> + {error, nil}. + +bit_array_int_from_u32(<<I:32>>) -> + {ok, I}; +bit_array_int_from_u32(_) -> + {error, nil}. + +compile_regex(String, Options) -> + {options, Caseless, Multiline} = Options, + OptionsList = [ + unicode, + ucp, + Caseless andalso caseless, + Multiline andalso multiline + ], + FilteredOptions = [Option || Option <- OptionsList, Option /= false], + case re:compile(String, FilteredOptions) of + {ok, MP} -> {ok, MP}; + {error, {Str, Pos}} -> + {error, {compile_error, unicode:characters_to_binary(Str), Pos}} + end. + +regex_check(Regex, String) -> + re:run(String, Regex) /= nomatch. + +regex_split(Regex, String) -> + re:split(String, Regex). + +regex_submatches(_, {-1, 0}) -> none; +regex_submatches(String, {Start, Length}) -> + BinarySlice = binary:part(String, {Start, Length}), + case string:is_empty(binary_to_list(BinarySlice)) of + true -> none; + false -> {some, BinarySlice} + end. + +regex_matches(String, [{Start, Length} | Submatches]) -> + Submatches1 = lists:map(fun(X) -> regex_submatches(String, X) end, Submatches), + {match, binary:part(String, Start, Length), Submatches1}. + +regex_scan(Regex, String) -> + case re:run(String, Regex, [global]) of + {match, Captured} -> lists:map(fun(X) -> regex_matches(String, X) end, Captured); + nomatch -> [] + end. + +base_decode64(S) -> + try {ok, base64:decode(S)} + catch error:_ -> {error, nil} + end. + +wrap_list(X) when is_list(X) -> X; +wrap_list(X) -> [X]. + +parse_query(Query) -> + case uri_string:dissect_query(Query) of + {error, _, _} -> {error, nil}; + Pairs -> + Pairs1 = lists:map(fun + ({K, true}) -> {K, <<"">>}; + (Pair) -> Pair + end, Pairs), + {ok, Pairs1} + end. + +percent_encode(B) -> percent_encode(B, <<>>). +percent_encode(<<>>, Acc) -> + Acc; +percent_encode(<<H,T/binary>>, Acc) -> + case percent_ok(H) of + true -> + percent_encode(T, <<Acc/binary,H>>); + false -> + <<A:4,B:4>> = <<H>>, + percent_encode(T, <<Acc/binary,$%,(?DEC2HEX(A)),(?DEC2HEX(B))>>) + end. + +percent_decode(Cs) -> percent_decode(Cs, <<>>). +percent_decode(<<$%, C0, C1, Cs/binary>>, Acc) -> + case is_hex_digit(C0) andalso is_hex_digit(C1) of + true -> + B = ?HEX2DEC(C0)*16+?HEX2DEC(C1), + percent_decode(Cs, <<Acc/binary, B>>); + false -> + {error, nil} + end; +percent_decode(<<C,Cs/binary>>, Acc) -> + percent_decode(Cs, <<Acc/binary, C>>); +percent_decode(<<>>, Acc) -> + check_utf8(Acc). + +percent_ok($!) -> true; +percent_ok($$) -> true; +percent_ok($') -> true; +percent_ok($() -> true; +percent_ok($)) -> true; +percent_ok($*) -> true; +percent_ok($+) -> true; +percent_ok($-) -> true; +percent_ok($.) -> true; +percent_ok($_) -> true; +percent_ok($~) -> true; +percent_ok(C) when $0 =< C, C =< $9 -> true; +percent_ok(C) when $A =< C, C =< $Z -> true; +percent_ok(C) when $a =< C, C =< $z -> true; +percent_ok(_) -> false. + +is_hex_digit(C) -> + ($0 =< C andalso C =< $9) orelse ($a =< C andalso C =< $f) orelse ($A =< C andalso C =< $F). + +check_utf8(Cs) -> + case unicode:characters_to_list(Cs) of + {incomplete, _, _} -> {error, nil}; + {error, _, _} -> {error, nil}; + _ -> {ok, Cs} + end. + +uri_parse(String) -> + case uri_string:parse(String) of + {error, _, _} -> {error, nil}; + Uri -> + {ok, {uri, + maps_get_optional(Uri, scheme), + maps_get_optional(Uri, userinfo), + maps_get_optional(Uri, host), + maps_get_optional(Uri, port), + maps_get_or(Uri, path, <<>>), + maps_get_optional(Uri, query), + maps_get_optional(Uri, fragment) + }} + end. + +maps_get_optional(Map, Key) -> + try {some, maps:get(Key, Map)} + catch _:_ -> none + end. + +maps_get_or(Map, Key, Default) -> + try maps:get(Key, Map) + catch _:_ -> Default + end. + +print(String) -> + io:put_chars(String), + nil. + +println(String) -> + io:put_chars([String, $\n]), + nil. + +print_error(String) -> + io:put_chars(standard_error, String), + nil. + +println_error(String) -> + io:put_chars(standard_error, [String, $\n]), + nil. + +inspect(true) -> + "True"; +inspect(false) -> + "False"; +inspect(nil) -> + "Nil"; +inspect(Data) when is_map(Data) -> + Fields = [ + [<<"#(">>, inspect(Key), <<", ">>, inspect(Value), <<")">>] + || {Key, Value} <- maps:to_list(Data) + ], + ["dict.from_list([", lists:join(", ", Fields), "])"]; +inspect(Atom) when is_atom(Atom) -> + Binary = erlang:atom_to_binary(Atom), + case inspect_maybe_gleam_atom(Binary, none, <<>>) of + {ok, Inspected} -> Inspected; + {error, _} -> ["atom.create_from_string(\"", Binary, "\")"] + end; +inspect(Any) when is_integer(Any) -> + erlang:integer_to_list(Any); +inspect(Any) when is_float(Any) -> + io_lib_format:fwrite_g(Any); +inspect(Binary) when is_binary(Binary) -> + case inspect_maybe_utf8_string(Binary, <<>>) of + {ok, InspectedUtf8String} -> InspectedUtf8String; + {error, not_a_utf8_string} -> + Segments = [erlang:integer_to_list(X) || <<X>> <= Binary], + ["<<", lists:join(", ", Segments), ">>"] + end; +inspect(Bits) when is_bitstring(Bits) -> + inspect_bit_array(Bits); +inspect(List) when is_list(List) -> + case inspect_list(List) of + {proper, Elements} -> ["[", Elements, "]"]; + {improper, Elements} -> ["//erl([", Elements, "])"] + end; +inspect(Any) when is_tuple(Any) % Record constructors + andalso is_atom(element(1, Any)) + andalso element(1, Any) =/= false + andalso element(1, Any) =/= true + andalso element(1, Any) =/= nil +-> + [Atom | ArgsList] = erlang:tuple_to_list(Any), + Args = lists:join(<<", ">>, + lists:map(fun inspect/1, ArgsList) + ), + [inspect(Atom), "(", Args, ")"]; +inspect(Tuple) when is_tuple(Tuple) -> + Elements = lists:map(fun inspect/1, erlang:tuple_to_list(Tuple)), + ["#(", lists:join(", ", Elements), ")"]; +inspect(Any) when is_function(Any) -> + {arity, Arity} = erlang:fun_info(Any, arity), + ArgsAsciiCodes = lists:seq($a, $a + Arity - 1), + Args = lists:join(<<", ">>, + lists:map(fun(Arg) -> <<Arg>> end, ArgsAsciiCodes) + ), + ["//fn(", Args, ") { ... }"]; +inspect(Any) -> + ["//erl(", io_lib:format("~p", [Any]), ")"]. + + +inspect_maybe_gleam_atom(<<>>, none, _) -> + {error, nil}; +inspect_maybe_gleam_atom(<<First, _Rest/binary>>, none, _) when ?is_digit_char(First) -> + {error, nil}; +inspect_maybe_gleam_atom(<<"_", _Rest/binary>>, none, _) -> + {error, nil}; +inspect_maybe_gleam_atom(<<"_">>, _PrevChar, _Acc) -> + {error, nil}; +inspect_maybe_gleam_atom(<<"_", _Rest/binary>>, $_, _Acc) -> + {error, nil}; +inspect_maybe_gleam_atom(<<First, _Rest/binary>>, _PrevChar, _Acc) + when not (?is_lowercase_char(First) orelse ?is_underscore_char(First) orelse ?is_digit_char(First)) -> + {error, nil}; +inspect_maybe_gleam_atom(<<First, Rest/binary>>, none, Acc) -> + inspect_maybe_gleam_atom(Rest, First, <<Acc/binary, (uppercase(First))>>); +inspect_maybe_gleam_atom(<<"_", Rest/binary>>, _PrevChar, Acc) -> + inspect_maybe_gleam_atom(Rest, $_, Acc); +inspect_maybe_gleam_atom(<<First, Rest/binary>>, $_, Acc) -> + inspect_maybe_gleam_atom(Rest, First, <<Acc/binary, (uppercase(First))>>); +inspect_maybe_gleam_atom(<<First, Rest/binary>>, _PrevChar, Acc) -> + inspect_maybe_gleam_atom(Rest, First, <<Acc/binary, First>>); +inspect_maybe_gleam_atom(<<>>, _PrevChar, Acc) -> + {ok, Acc}; +inspect_maybe_gleam_atom(A, B, C) -> + erlang:display({A, B, C}), + throw({gleam_error, A, B, C}). + +inspect_list([]) -> + {proper, []}; +inspect_list([First]) -> + {proper, [inspect(First)]}; +inspect_list([First | Rest]) when is_list(Rest) -> + {Kind, Inspected} = inspect_list(Rest), + {Kind, [inspect(First), <<", ">> | Inspected]}; +inspect_list([First | ImproperTail]) -> + {improper, [inspect(First), <<" | ">>, inspect(ImproperTail)]}. + +inspect_bit_array(Bits) -> + Text = inspect_bit_array(Bits, <<"<<">>), + <<Text/binary, ">>">>. + +inspect_bit_array(<<>>, Acc) -> + Acc; +inspect_bit_array(<<X, Rest/bitstring>>, Acc) -> + inspect_bit_array(Rest, append_segment(Acc, erlang:integer_to_binary(X))); +inspect_bit_array(Rest, Acc) -> + Size = bit_size(Rest), + <<X:Size>> = Rest, + X1 = erlang:integer_to_binary(X), + Size1 = erlang:integer_to_binary(Size), + Segment = <<X1/binary, ":size(", Size1/binary, ")">>, + inspect_bit_array(<<>>, append_segment(Acc, Segment)). + +append_segment(<<"<<">>, Segment) -> + <<"<<", Segment/binary>>; +append_segment(Acc, Segment) -> + <<Acc/binary, ", ", Segment/binary>>. + + +inspect_maybe_utf8_string(Binary, Acc) -> + case Binary of + <<>> -> {ok, <<$", Acc/binary, $">>}; + <<First/utf8, Rest/binary>> -> + Escaped = case First of + $" -> <<$\\, $">>; + $\\ -> <<$\\, $\\>>; + $\r -> <<$\\, $r>>; + $\n -> <<$\\, $n>>; + $\t -> <<$\\, $t>>; + Other -> <<Other/utf8>> + end, + inspect_maybe_utf8_string(Rest, <<Acc/binary, Escaped/binary>>); + _ -> {error, not_a_utf8_string} + end. + +float_to_string(Float) when is_float(Float) -> + erlang:iolist_to_binary(io_lib_format:fwrite_g(Float)). + +utf_codepoint_list_to_string(List) -> + case unicode:characters_to_binary(List) of + {error, _} -> erlang:error({gleam_error, {string_invalid_utf8, List}}); + Binary -> Binary + end. + +crop_string(String, Prefix) -> + case string:find(String, Prefix) of + nomatch -> String; + New -> New + end. + +contains_string(String, Substring) -> + is_bitstring(string:find(String, Substring)). + +base16_decode(String) -> + try + {ok, binary:decode_hex(String)} + catch + _:_ -> {error, nil} + end. diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.mjs b/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.mjs new file mode 100644 index 0000000..a908b23 --- /dev/null +++ b/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.mjs @@ -0,0 +1,875 @@ +import { + BitArray, + Error, + List, + Ok, + Result, + UtfCodepoint, + stringBits, + toBitArray, + NonEmpty, + CustomType, +} from "./gleam.mjs"; +import { + CompileError as RegexCompileError, + Match as RegexMatch, +} from "./gleam/regex.mjs"; +import { DecodeError } from "./gleam/dynamic.mjs"; +import { Some, None } from "./gleam/option.mjs"; +import Dict from "./dict.mjs"; + +const Nil = undefined; +const NOT_FOUND = {}; + +export function identity(x) { + return x; +} + +export function parse_int(value) { + if (/^[-+]?(\d+)$/.test(value)) { + return new Ok(parseInt(value)); + } else { + return new Error(Nil); + } +} + +export function parse_float(value) { + if (/^[-+]?(\d+)\.(\d+)$/.test(value)) { + return new Ok(parseFloat(value)); + } else { + return new Error(Nil); + } +} + +export function to_string(term) { + return term.toString(); +} + +export function float_to_string(float) { + const string = float.toString(); + if (string.indexOf(".") >= 0) { + return string; + } else { + return string + ".0"; + } +} + +export function int_to_base_string(int, base) { + return int.toString(base).toUpperCase(); +} + +const int_base_patterns = { + 2: /[^0-1]/, + 3: /[^0-2]/, + 4: /[^0-3]/, + 5: /[^0-4]/, + 6: /[^0-5]/, + 7: /[^0-6]/, + 8: /[^0-7]/, + 9: /[^0-8]/, + 10: /[^0-9]/, + 11: /[^0-9a]/, + 12: /[^0-9a-b]/, + 13: /[^0-9a-c]/, + 14: /[^0-9a-d]/, + 15: /[^0-9a-e]/, + 16: /[^0-9a-f]/, + 17: /[^0-9a-g]/, + 18: /[^0-9a-h]/, + 19: /[^0-9a-i]/, + 20: /[^0-9a-j]/, + 21: /[^0-9a-k]/, + 22: /[^0-9a-l]/, + 23: /[^0-9a-m]/, + 24: /[^0-9a-n]/, + 25: /[^0-9a-o]/, + 26: /[^0-9a-p]/, + 27: /[^0-9a-q]/, + 28: /[^0-9a-r]/, + 29: /[^0-9a-s]/, + 30: /[^0-9a-t]/, + 31: /[^0-9a-u]/, + 32: /[^0-9a-v]/, + 33: /[^0-9a-w]/, + 34: /[^0-9a-x]/, + 35: /[^0-9a-y]/, + 36: /[^0-9a-z]/, +}; + +export function int_from_base_string(string, base) { + if (int_base_patterns[base].test(string.replace(/^-/, "").toLowerCase())) { + return new Error(Nil); + } + + const result = parseInt(string, base); + + if (isNaN(result)) { + return new Error(Nil); + } + + return new Ok(result); +} + +export function string_replace(string, target, substitute) { + if (typeof string.replaceAll !== "undefined") { + return string.replaceAll(target, substitute); + } + // Fallback for older Node.js versions: + // 1. <https://stackoverflow.com/a/1144788> + // 2. <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping> + // TODO: This fallback could be remove once Node.js 14 is EOL + // aka <https://nodejs.org/en/about/releases/> on or after 2024-04-30 + return string.replace( + // $& means the whole matched string + new RegExp(target.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g"), + substitute + ); +} + +export function string_reverse(string) { + return [...string].reverse().join(""); +} + +export function string_length(string) { + if (string === "") { + return 0; + } + const iterator = graphemes_iterator(string); + if (iterator) { + let i = 0; + for (const _ of iterator) { + i++; + } + return i; + } else { + return string.match(/./gsu).length; + } +} + +export function graphemes(string) { + return List.fromArray( + Array.from(graphemes_iterator(string)).map((item) => item.segment) + ); +} + +function graphemes_iterator(string) { + if (Intl && Intl.Segmenter) { + return new Intl.Segmenter().segment(string)[Symbol.iterator](); + } +} + +export function pop_grapheme(string) { + let first; + const iterator = graphemes_iterator(string); + if (iterator) { + first = iterator.next().value?.segment; + } else { + first = string.match(/./su)?.[0]; + } + if (first) { + return new Ok([first, string.slice(first.length)]); + } else { + return new Error(Nil); + } +} + +export function lowercase(string) { + return string.toLowerCase(); +} + +export function uppercase(string) { + return string.toUpperCase(); +} + +export function less_than(a, b) { + return a < b; +} + +export function add(a, b) { + return a + b; +} + +export function equal(a, b) { + return a === b; +} + +export function split(xs, pattern) { + return List.fromArray(xs.split(pattern)); +} + +export function join(xs, separator) { + const iterator = xs[Symbol.iterator](); + let result = iterator.next().value || ""; + let current = iterator.next(); + while (!current.done) { + result = result + separator + current.value; + current = iterator.next(); + } + return result; +} + +export function concat(xs) { + let result = ""; + for (const x of xs) { + result = result + x; + } + return result; +} + +export function length(data) { + return data.length; +} + +export function crop_string(string, substring) { + return string.substring(string.indexOf(substring)); +} + +export function contains_string(haystack, needle) { + return haystack.indexOf(needle) >= 0; +} + +export function starts_with(haystack, needle) { + return haystack.startsWith(needle); +} + +export function ends_with(haystack, needle) { + return haystack.endsWith(needle); +} + +export function split_once(haystack, needle) { + const index = haystack.indexOf(needle); + if (index >= 0) { + const before = haystack.slice(0, index); + const after = haystack.slice(index + needle.length); + return new Ok([before, after]); + } else { + return new Error(Nil); + } +} + +export function trim(string) { + return string.trim(); +} + +export function trim_left(string) { + return string.trimLeft(); +} + +export function trim_right(string) { + return string.trimRight(); +} + +export function bit_array_from_string(string) { + return toBitArray([stringBits(string)]); +} + +export function bit_array_concat(bit_arrays) { + return toBitArray(bit_arrays.toArray().map((b) => b.buffer)); +} + +export function console_log(term) { + console.log(term); +} + +export function console_error(term) { + console.error(term); +} + +export function crash(message) { + throw new globalThis.Error(message); +} + +export function bit_array_to_string(bit_array) { + try { + const decoder = new TextDecoder("utf-8", { fatal: true }); + return new Ok(decoder.decode(bit_array.buffer)); + } catch (_error) { + return new Error(Nil); + } +} + +export function print(string) { + if (typeof process === "object") { + process.stdout.write(string); // We can write without a trailing newline + } else if (typeof Deno === "object") { + Deno.stdout.writeSync(new TextEncoder().encode(string)); // We can write without a trailing newline + } else { + console.log(string); // We're in a browser. Newlines are mandated + } +} + +export function print_error(string) { + if (typeof process === "object" && process.stderr?.write) { + process.stderr.write(string); // We can write without a trailing newline + } else if (typeof Deno === "object") { + Deno.stderr.writeSync(new TextEncoder().encode(string)); // We can write without a trailing newline + } else { + console.error(string); // We're in a browser. Newlines are mandated + } +} + +export function print_debug(string) { + if (typeof process === "object" && process.stderr?.write) { + process.stderr.write(string + "\n"); // If we're in Node.js, use `stderr` + } else if (typeof Deno === "object") { + Deno.stderr.writeSync(new TextEncoder().encode(string + "\n")); // If we're in Deno, use `stderr` + } else { + console.log(string); // Otherwise, use `console.log` (so that it doesn't look like an error) + } +} + +export function ceiling(float) { + return Math.ceil(float); +} + +export function floor(float) { + return Math.floor(float); +} + +export function round(float) { + return Math.round(float); +} + +export function truncate(float) { + return Math.trunc(float); +} + +export function power(base, exponent) { + // It is checked in Gleam that: + // - The base is non-negative and that the exponent is not fractional. + // - The base is non-zero and the exponent is non-negative (otherwise + // the result will essentially be division by zero). + // It can thus be assumed that valid input is passed to the Math.pow + // function and a NaN or Infinity value will not be produced. + return Math.pow(base, exponent); +} + +export function random_uniform() { + const random_uniform_result = Math.random(); + // With round-to-nearest-even behavior, the ranges claimed for the functions below + // (excluding the one for Math.random() itself) aren't exact. + // If extremely large bounds are chosen (2^53 or higher), + // it's possible in extremely rare cases to calculate the usually-excluded upper bound. + // Note that as numbers in JavaScript are IEEE 754 floating point numbers + // See: <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random> + // Because of this, we just loop 'until' we get a valid result where 0.0 <= x < 1.0: + if (random_uniform_result === 1.0) { + return random_uniform(); + } + return random_uniform_result; +} + +export function bit_array_slice(bits, position, length) { + const start = Math.min(position, position + length); + const end = Math.max(position, position + length); + if (start < 0 || end > bits.length) return new Error(Nil); + const buffer = new Uint8Array(bits.buffer.buffer, start, Math.abs(length)); + return new Ok(new BitArray(buffer)); +} + +export function codepoint(int) { + return new UtfCodepoint(int); +} + +export function string_to_codepoint_integer_list(string) { + return List.fromArray(Array.from(string).map((item) => item.codePointAt(0))); +} + +export function utf_codepoint_list_to_string(utf_codepoint_integer_list) { + return utf_codepoint_integer_list + .toArray() + .map((x) => String.fromCodePoint(x.value)) + .join(""); +} + +export function utf_codepoint_to_int(utf_codepoint) { + return utf_codepoint.value; +} + +export function regex_check(regex, string) { + regex.lastIndex = 0; + return regex.test(string); +} + +export function compile_regex(pattern, options) { + try { + let flags = "gu"; + if (options.case_insensitive) flags += "i"; + if (options.multi_line) flags += "m"; + return new Ok(new RegExp(pattern, flags)); + } catch (error) { + const number = (error.columnNumber || 0) | 0; + return new Error(new RegexCompileError(error.message, number)); + } +} + +export function regex_scan(regex, string) { + const matches = Array.from(string.matchAll(regex)).map((match) => { + const content = match[0]; + const submatches = []; + for (let n = match.length - 1; n > 0; n--) { + if (match[n]) { + submatches[n - 1] = new Some(match[n]); + continue; + } + if (submatches.length > 0) { + submatches[n - 1] = new None(); + } + } + return new RegexMatch(content, List.fromArray(submatches)); + }); + return List.fromArray(matches); +} + +export function new_map() { + return Dict.new(); +} + +export function map_size(map) { + return map.size; +} + +export function map_to_list(map) { + return List.fromArray(map.entries()); +} + +export function map_remove(key, map) { + return map.delete(key); +} + +export function map_get(map, key) { + const value = map.get(key, NOT_FOUND); + if (value === NOT_FOUND) { + return new Error(Nil); + } + return new Ok(value); +} + +export function map_insert(key, value, map) { + return map.set(key, value); +} + +function unsafe_percent_decode(string) { + return decodeURIComponent((string || "").replace("+", " ")); +} + +export function percent_decode(string) { + try { + return new Ok(unsafe_percent_decode(string)); + } catch (_error) { + return new Error(Nil); + } +} + +export function percent_encode(string) { + return encodeURIComponent(string); +} + +export function parse_query(query) { + try { + const pairs = []; + for (const section of query.split("&")) { + const [key, value] = section.split("="); + if (!key) continue; + pairs.push([unsafe_percent_decode(key), unsafe_percent_decode(value)]); + } + return new Ok(List.fromArray(pairs)); + } catch (_error) { + return new Error(Nil); + } +} + +// From https://developer.mozilla.org/en-US/docs/Glossary/Base64#Solution_2_%E2%80%93_rewrite_the_DOMs_atob()_and_btoa()_using_JavaScript's_TypedArrays_and_UTF-8 +export function encode64(bit_array) { + const aBytes = bit_array.buffer; + let nMod3 = 2; + let sB64Enc = ""; + + for (let nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) { + nMod3 = nIdx % 3; + if (nIdx > 0 && ((nIdx * 4) / 3) % 76 === 0) { + sB64Enc += "\r\n"; + } + nUint24 |= aBytes[nIdx] << ((16 >>> nMod3) & 24); + if (nMod3 === 2 || aBytes.length - nIdx === 1) { + sB64Enc += String.fromCharCode( + uint6ToB64((nUint24 >>> 18) & 63), + uint6ToB64((nUint24 >>> 12) & 63), + uint6ToB64((nUint24 >>> 6) & 63), + uint6ToB64(nUint24 & 63) + ); + nUint24 = 0; + } + } + + return ( + sB64Enc.substr(0, sB64Enc.length - 2 + nMod3) + + (nMod3 === 2 ? "" : nMod3 === 1 ? "=" : "==") + ); +} + +// From https://developer.mozilla.org/en-US/docs/Glossary/Base64#Solution_2_%E2%80%93_rewrite_the_DOMs_atob()_and_btoa()_using_JavaScript's_TypedArrays_and_UTF-8 +function uint6ToB64(nUint6) { + return nUint6 < 26 + ? nUint6 + 65 + : nUint6 < 52 + ? nUint6 + 71 + : nUint6 < 62 + ? nUint6 - 4 + : nUint6 === 62 + ? 43 + : nUint6 === 63 + ? 47 + : 65; +} + +// From https://developer.mozilla.org/en-US/docs/Glossary/Base64#Solution_2_%E2%80%93_rewrite_the_DOMs_atob()_and_btoa()_using_JavaScript's_TypedArrays_and_UTF-8 +function b64ToUint6(nChr) { + return nChr > 64 && nChr < 91 + ? nChr - 65 + : nChr > 96 && nChr < 123 + ? nChr - 71 + : nChr > 47 && nChr < 58 + ? nChr + 4 + : nChr === 43 + ? 62 + : nChr === 47 + ? 63 + : 0; +} + +// From https://developer.mozilla.org/en-US/docs/Glossary/Base64#Solution_2_%E2%80%93_rewrite_the_DOMs_atob()_and_btoa()_using_JavaScript's_TypedArrays_and_UTF-8 +export function decode64(sBase64) { + if (sBase64.match(/[^A-Za-z0-9\+\/=]/g)) return new Error(Nil); + const sB64Enc = sBase64.replace(/=/g, ""); + const nInLen = sB64Enc.length; + const nOutLen = (nInLen * 3 + 1) >> 2; + const taBytes = new Uint8Array(nOutLen); + + for ( + let nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0; + nInIdx < nInLen; + nInIdx++ + ) { + nMod4 = nInIdx & 3; + nUint24 |= b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << (6 * (3 - nMod4)); + if (nMod4 === 3 || nInLen - nInIdx === 1) { + for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++) { + taBytes[nOutIdx] = (nUint24 >>> ((16 >>> nMod3) & 24)) & 255; + } + nUint24 = 0; + } + } + + return new Ok(new BitArray(taBytes)); +} + +export function classify_dynamic(data) { + if (typeof data === "string") { + return "String"; + } else if (data instanceof Result) { + return "Result"; + } else if (data instanceof List) { + return "List"; + } else if (data instanceof BitArray) { + return "BitArray"; + } else if (data instanceof Dict) { + return "Map"; + } else if (Number.isInteger(data)) { + return "Int"; + } else if (Array.isArray(data)) { + return `Tuple of ${data.length} elements`; + } else if (typeof data === "number") { + return "Float"; + } else if (data === null) { + return "Null"; + } else if (data === undefined) { + return "Nil"; + } else { + const type = typeof data; + return type.charAt(0).toUpperCase() + type.slice(1); + } +} + +function decoder_error(expected, got) { + return decoder_error_no_classify(expected, classify_dynamic(got)); +} + +function decoder_error_no_classify(expected, got) { + return new Error( + List.fromArray([new DecodeError(expected, got, List.fromArray([]))]) + ); +} + +export function decode_string(data) { + return typeof data === "string" + ? new Ok(data) + : decoder_error("String", data); +} + +export function decode_int(data) { + return Number.isInteger(data) ? new Ok(data) : decoder_error("Int", data); +} + +export function decode_float(data) { + return typeof data === "number" ? new Ok(data) : decoder_error("Float", data); +} + +export function decode_bool(data) { + return typeof data === "boolean" ? new Ok(data) : decoder_error("Bool", data); +} + +export function decode_bit_array(data) { + if (data instanceof BitArray) { + return new Ok(data); + } + if (data instanceof Uint8Array) { + return new Ok(new BitArray(data)); + } + return decoder_error("BitArray", data); +} + +export function decode_tuple(data) { + return Array.isArray(data) ? new Ok(data) : decoder_error("Tuple", data); +} + +export function decode_tuple2(data) { + return decode_tupleN(data, 2); +} + +export function decode_tuple3(data) { + return decode_tupleN(data, 3); +} + +export function decode_tuple4(data) { + return decode_tupleN(data, 4); +} + +export function decode_tuple5(data) { + return decode_tupleN(data, 5); +} + +export function decode_tuple6(data) { + return decode_tupleN(data, 6); +} + +function decode_tupleN(data, n) { + if (Array.isArray(data) && data.length == n) { + return new Ok(data); + } + + const list = decode_exact_length_list(data, n); + if (list) return new Ok(list); + + return decoder_error(`Tuple of ${n} elements`, data); +} + +function decode_exact_length_list(data, n) { + if (!(data instanceof List)) return; + + const elements = []; + let current = data; + + for (let i = 0; i < n; i++) { + if (!(current instanceof NonEmpty)) break; + elements.push(current.head); + current = current.tail; + } + + if (elements.length === n && !(current instanceof NonEmpty)) return elements; +} + +export function tuple_get(data, index) { + return index >= 0 && data.length > index + ? new Ok(data[index]) + : new Error(Nil); +} + +export function decode_list(data) { + if (Array.isArray(data)) { + return new Ok(List.fromArray(data)); + } + return data instanceof List ? new Ok(data) : decoder_error("List", data); +} + +export function decode_result(data) { + return data instanceof Result ? new Ok(data) : decoder_error("Result", data); +} + +export function decode_map(data) { + if (data instanceof Dict) { + return new Ok(Dict.fromMap(data)); + } + if (data == null) { + return decoder_error("Map", data); + } + if (typeof data !== "object") { + return decoder_error("Map", data); + } + const proto = Object.getPrototypeOf(data); + if (proto === Object.prototype || proto === null) { + return new Ok(Dict.fromObject(data)); + } + return decoder_error("Map", data); +} + +export function decode_option(data, decoder) { + if (data === null || data === undefined || data instanceof None) + return new Ok(new None()); + if (data instanceof Some) data = data[0]; + const result = decoder(data); + if (result.isOk()) { + return new Ok(new Some(result[0])); + } else { + return result; + } +} + +export function decode_field(value, name) { + const not_a_map_error = () => decoder_error("Map", value); + + if ( + value instanceof Dict || + value instanceof WeakMap || + value instanceof Map + ) { + const entry = map_get(value, name); + return new Ok(entry.isOk() ? new Some(entry[0]) : new None()); + } else if (Object.getPrototypeOf(value) == Object.prototype) { + return try_get_field(value, name, () => new Ok(new None())); + } else { + return try_get_field(value, name, not_a_map_error); + } +} + +function try_get_field(value, field, or_else) { + try { + return field in value ? new Ok(new Some(value[field])) : or_else(); + } catch { + return or_else(); + } +} + +export function byte_size(string) { + return new TextEncoder().encode(string).length; +} + +// In Javascript bitwise operations convert numbers to a sequence of 32 bits +// while Erlang uses arbitrary precision. +// To get around this problem and get consistent results use BigInt and then +// downcast the value back to a Number value. + +export function bitwise_and(x, y) { + return Number(BigInt(x) & BigInt(y)); +} + +export function bitwise_not(x) { + return Number(~BigInt(x)); +} + +export function bitwise_or(x, y) { + return Number(BigInt(x) | BigInt(y)); +} + +export function bitwise_exclusive_or(x, y) { + return Number(BigInt(x) ^ BigInt(y)); +} + +export function bitwise_shift_left(x, y) { + return Number(BigInt(x) << BigInt(y)); +} + +export function bitwise_shift_right(x, y) { + return Number(BigInt(x) >> BigInt(y)); +} + +export function inspect(v) { + const t = typeof v; + if (v === true) return "True"; + if (v === false) return "False"; + if (v === null) return "//js(null)"; + if (v === undefined) return "Nil"; + if (t === "string") return JSON.stringify(v); + if (t === "bigint" || t === "number") return v.toString(); + if (Array.isArray(v)) return `#(${v.map(inspect).join(", ")})`; + if (v instanceof List) return inspectList(v); + if (v instanceof UtfCodepoint) return inspectUtfCodepoint(v); + if (v instanceof BitArray) return inspectBitArray(v); + if (v instanceof CustomType) return inspectCustomType(v); + if (v instanceof Dict) return inspectDict(v); + if (v instanceof Set) return `//js(Set(${[...v].map(inspect).join(", ")}))`; + if (v instanceof RegExp) return `//js(${v})`; + if (v instanceof Date) return `//js(Date("${v.toISOString()}"))`; + if (v instanceof Function) { + const args = []; + for (const i of Array(v.length).keys()) + args.push(String.fromCharCode(i + 97)); + return `//fn(${args.join(", ")}) { ... }`; + } + return inspectObject(v); +} + +function inspectDict(map) { + let body = "dict.from_list(["; + let first = true; + map.forEach((value, key) => { + if (!first) body = body + ", "; + body = body + "#(" + inspect(key) + ", " + inspect(value) + ")"; + first = false; + }); + return body + "])"; +} + +function inspectObject(v) { + const name = Object.getPrototypeOf(v)?.constructor?.name || "Object"; + const props = []; + for (const k of Object.keys(v)) { + props.push(`${inspect(k)}: ${inspect(v[k])}`); + } + const body = props.length ? " " + props.join(", ") + " " : ""; + const head = name === "Object" ? "" : name + " "; + return `//js(${head}{${body}})`; +} + +function inspectCustomType(record) { + const props = Object.keys(record) + .map((label) => { + const value = inspect(record[label]); + return isNaN(parseInt(label)) ? `${label}: ${value}` : value; + }) + .join(", "); + return props + ? `${record.constructor.name}(${props})` + : record.constructor.name; +} + +export function inspectList(list) { + return `[${list.toArray().map(inspect).join(", ")}]`; +} + +export function inspectBitArray(bits) { + return `<<${Array.from(bits.buffer).join(", ")}>>`; +} + +export function inspectUtfCodepoint(codepoint) { + return `//utfcodepoint(${String.fromCodePoint(codepoint.value)})`; +} + +export function base16_encode(bit_array) { + let result = ""; + for (const byte of bit_array.buffer) { + result += byte.toString(16).padStart(2, "0").toUpperCase(); + } + return result; +} + +export function base16_decode(string) { + const bytes = new Uint8Array(string.length / 2); + for (let i = 0; i < string.length; i += 2) { + const a = parseInt(string[i], 16); + const b = parseInt(string[i + 1], 16); + if (isNaN(a) || isNaN(b)) return new Error(Nil); + bytes[i / 2] = a * 16 + b; + } + return new Ok(new BitArray(bytes)); +} diff --git a/aoc2023/build/packages/glint/LICENSE b/aoc2023/build/packages/glint/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/aoc2023/build/packages/glint/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/aoc2023/build/packages/glint/README.md b/aoc2023/build/packages/glint/README.md new file mode 100644 index 0000000..d6d5821 --- /dev/null +++ b/aoc2023/build/packages/glint/README.md @@ -0,0 +1,104 @@ +# glint + +[](https://hex.pm/packages/glint) +[](https://hex.pm/packages/glint) +[](https://hexdocs.pm/glint/) +[](https://github.com/tanklesxl/glint/actions) + +Gleam command line argument parsing with basic flag support. + +## Installation + +To install from hex: + +```sh +gleam add glint +``` + +## Usage + +### Glint's Core + +`glint` is conceptually quite small, your general flow will be: + +1. create a new glint instance with `glint.new` +1. configure it with `glint.with_pretty_help` and other configuration functions +1. add commands with `glint.add` + 1. create a new command with `glint.cmd` + 1. assign that command any flags required + 1. assign the command a custom description +1. run your cli with `glnt.run`, run with a function to handle command output with `glint.run_and_handle` + +### Mini Example + +You can import `glint` as a dependency and use it to build simple command-line applications like the following simplified version of the [the hello world example](https://github.com/TanklesXL/glint/tree/main/examples/hello/README.md) + +```gleam +// stdlib imports +import gleam/io +import gleam/list +import gleam/result +import gleam/string.{uppercase} +// external dep imports +import snag +// glint imports +import glint +import glint/flag +// erlang-specific imports + +@target(erlang) +import gleam/erlang.{start_arguments} + +/// the key for the caps flag +const caps = "caps" + +/// a boolean flag with default False to control message capitalization. +/// +fn caps_flag() -> flag.FlagBuilder(Bool) { + flag.bool() + |> flag.default(False) + |> flag.description("Capitalize the provided name") +} + +/// the command function that will be executed +/// +fn hello(input: glint.CommandInput) -> Nil { + let assert Ok(caps) = flag.get_bool(from: input.flags, for: caps) + + let name = + case input.args { + [] -> "Joe" + [name,..] -> name + } + + let msg = "Hello, " <> name <> "!" + + + case caps { + True -> uppercase(msg) + False -> msg + } + |> io.println +} + +pub fn main() { + // create a new glint instance + glint.new() + // with an app name of "hello", this is used when printing help text + |> glint.with_name("hello") + // with pretty help enabled, using the built-in colours + |> glint.with_pretty_help(glint.default_pretty_help()) + // with a root command that executes the `hello` function + |> glint.add( + // add the command to the root + at: [], + // create the command, add any flags + do: glint.command(hello) + // with flag `caps` + |> glint.flag(caps, caps_flag()) + // with a short description + |> glint.description("Prints Hello, <NAME>!"), + ) + |> glint.run(start_arguments()) +} +``` diff --git a/aoc2023/build/packages/glint/gleam.toml b/aoc2023/build/packages/glint/gleam.toml new file mode 100644 index 0000000..e8ac4ae --- /dev/null +++ b/aoc2023/build/packages/glint/gleam.toml @@ -0,0 +1,23 @@ +name = "glint" +version = "0.13.0" + +# Fill out these fields if you intend to generate HTML documentation or publishname = "glint" +# your project to the Hex package manager. +# +licences = ["Apache-2.0"] +description = "Gleam command line argument parsing with basic flag support." +repository = { type = "github", user = "TanklesXL", repo = "glint" } +links = [ + { title = "Hex", href = "https://hex.pm/packages/glint" }, + { title = "Docs", href = "https://hexdocs.pm/glint/" }, +] +gleam = ">= 0.32.0" + +[dependencies] +gleam_stdlib = "~> 0.19" +snag = "~> 0.2" +gleam_community_ansi = "~> 1.0" +gleam_community_colour = "~> 1.0" + +[dev-dependencies] +gleeunit = "~> 0.5" diff --git a/aoc2023/build/packages/glint/include/glint@flag_Flag.hrl b/aoc2023/build/packages/glint/include/glint@flag_Flag.hrl new file mode 100644 index 0000000..645cb12 --- /dev/null +++ b/aoc2023/build/packages/glint/include/glint@flag_Flag.hrl @@ -0,0 +1 @@ +-record(flag, {value :: glint@flag:value(), description :: binary()}). diff --git a/aoc2023/build/packages/glint/include/glint@flag_FlagBuilder.hrl b/aoc2023/build/packages/glint/include/glint@flag_FlagBuilder.hrl new file mode 100644 index 0000000..b5e21a2 --- /dev/null +++ b/aoc2023/build/packages/glint/include/glint@flag_FlagBuilder.hrl @@ -0,0 +1,6 @@ +-record(flag_builder, { + desc :: binary(), + parser :: fun((binary()) -> {ok, any()} | {error, snag:snag()}), + value :: fun((glint@flag:internal(any())) -> glint@flag:value()), + default :: gleam@option:option(any()) +}). diff --git a/aoc2023/build/packages/glint/include/glint@flag_Internal.hrl b/aoc2023/build/packages/glint/include/glint@flag_Internal.hrl new file mode 100644 index 0000000..281bbd0 --- /dev/null +++ b/aoc2023/build/packages/glint/include/glint@flag_Internal.hrl @@ -0,0 +1,4 @@ +-record(internal, { + value :: gleam@option:option(any()), + parser :: fun((binary()) -> {ok, any()} | {error, snag:snag()}) +}). diff --git a/aoc2023/build/packages/glint/include/glint_Command.hrl b/aoc2023/build/packages/glint/include/glint_Command.hrl new file mode 100644 index 0000000..00a03e3 --- /dev/null +++ b/aoc2023/build/packages/glint/include/glint_Command.hrl @@ -0,0 +1,5 @@ +-record(command, { + do :: fun((glint:command_input()) -> any()), + flags :: gleam@map:map_(binary(), glint@flag:flag()), + description :: binary() +}). diff --git a/aoc2023/build/packages/glint/include/glint_CommandInput.hrl b/aoc2023/build/packages/glint/include/glint_CommandInput.hrl new file mode 100644 index 0000000..72c9641 --- /dev/null +++ b/aoc2023/build/packages/glint/include/glint_CommandInput.hrl @@ -0,0 +1,4 @@ +-record(command_input, { + args :: list(binary()), + flags :: gleam@map:map_(binary(), glint@flag:flag()) +}). diff --git a/aoc2023/build/packages/glint/include/glint_Config.hrl b/aoc2023/build/packages/glint/include/glint_Config.hrl new file mode 100644 index 0000000..70cf645 --- /dev/null +++ b/aoc2023/build/packages/glint/include/glint_Config.hrl @@ -0,0 +1,4 @@ +-record(config, { + pretty_help :: gleam@option:option(glint:pretty_help()), + name :: gleam@option:option(binary()) +}). diff --git a/aoc2023/build/packages/glint/include/glint_Glint.hrl b/aoc2023/build/packages/glint/include/glint_Glint.hrl new file mode 100644 index 0000000..7ece11d --- /dev/null +++ b/aoc2023/build/packages/glint/include/glint_Glint.hrl @@ -0,0 +1,5 @@ +-record(glint, { + config :: glint:config(), + cmd :: glint:command_node(any()), + global_flags :: gleam@map:map_(binary(), glint@flag:flag()) +}). diff --git a/aoc2023/build/packages/glint/include/glint_PrettyHelp.hrl b/aoc2023/build/packages/glint/include/glint_PrettyHelp.hrl new file mode 100644 index 0000000..79bd887 --- /dev/null +++ b/aoc2023/build/packages/glint/include/glint_PrettyHelp.hrl @@ -0,0 +1,5 @@ +-record(pretty_help, { + usage :: gleam_community@colour:colour(), + flags :: gleam_community@colour:colour(), + subcommands :: gleam_community@colour:colour() +}). diff --git a/aoc2023/build/packages/glint/include/glint_Stub.hrl b/aoc2023/build/packages/glint/include/glint_Stub.hrl new file mode 100644 index 0000000..5aa5d83 --- /dev/null +++ b/aoc2023/build/packages/glint/include/glint_Stub.hrl @@ -0,0 +1,6 @@ +-record(stub, { + path :: list(binary()), + run :: fun((glint:command_input()) -> any()), + flags :: list({binary(), glint@flag:flag()}), + description :: binary() +}). diff --git a/aoc2023/build/packages/glint/src/glint.app.src b/aoc2023/build/packages/glint/src/glint.app.src new file mode 100644 index 0000000..7eb7649 --- /dev/null +++ b/aoc2023/build/packages/glint/src/glint.app.src @@ -0,0 +1,13 @@ +{application, glint, [ + {vsn, "0.13.0"}, + {applications, [gleam_community_ansi, + gleam_community_colour, + gleam_stdlib, + gleeunit, + snag]}, + {description, "Gleam command line argument parsing with basic flag support."}, + {modules, [glint, + glint@flag, + glint@flag@constraint]}, + {registered, []} +]}. diff --git a/aoc2023/build/packages/glint/src/glint.erl b/aoc2023/build/packages/glint/src/glint.erl new file mode 100644 index 0000000..0501cc6 --- /dev/null +++ b/aoc2023/build/packages/glint/src/glint.erl @@ -0,0 +1,513 @@ +-module(glint). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([with_config/2, with_pretty_help/2, without_pretty_help/1, with_name/2, new/0, command/1, description/2, flag/3, flag_tuple/2, flags/2, global_flag/3, global_flag_tuple/2, global_flags/2, default_pretty_help/0, add/3, help_flag/0, execute/2, run_and_handle/3, run/2, add_command_from_stub/2]). +-export_type([config/0, pretty_help/0, glint/1, command/1, command_input/0, command_node/1, out/1, stub/1]). + +-type config() :: {config, + gleam@option:option(pretty_help()), + gleam@option:option(binary())}. + +-type pretty_help() :: {pretty_help, + gleam_community@colour:colour(), + gleam_community@colour:colour(), + gleam_community@colour:colour()}. + +-opaque glint(GHR) :: {glint, + config(), + command_node(GHR), + gleam@map:map_(binary(), glint@flag:flag())}. + +-opaque command(GHS) :: {command, + fun((command_input()) -> GHS), + gleam@map:map_(binary(), glint@flag:flag()), + binary()}. + +-type command_input() :: {command_input, + list(binary()), + gleam@map:map_(binary(), glint@flag:flag())}. + +-type command_node(GHT) :: {command_node, + gleam@option:option(command(GHT)), + gleam@map:map_(binary(), command_node(GHT))}. + +-type out(GHU) :: {out, GHU} | {help, binary()}. + +-type stub(GHV) :: {stub, + list(binary()), + fun((command_input()) -> GHV), + list({binary(), glint@flag:flag()}), + binary()}. + +-spec with_config(glint(GIA), config()) -> glint(GIA). +with_config(Glint, Config) -> + erlang:setelement(2, Glint, Config). + +-spec with_pretty_help(glint(GID), pretty_help()) -> glint(GID). +with_pretty_help(Glint, Pretty) -> + _pipe = erlang:setelement(2, erlang:element(2, Glint), {some, Pretty}), + with_config(Glint, _pipe). + +-spec without_pretty_help(glint(GIG)) -> glint(GIG). +without_pretty_help(Glint) -> + _pipe = erlang:setelement(2, erlang:element(2, Glint), none), + with_config(Glint, _pipe). + +-spec with_name(glint(GIJ), binary()) -> glint(GIJ). +with_name(Glint, Name) -> + _pipe = erlang:setelement(3, erlang:element(2, Glint), {some, Name}), + with_config(Glint, _pipe). + +-spec empty_command() -> command_node(any()). +empty_command() -> + {command_node, none, gleam@map:new()}. + +-spec new() -> glint(any()). +new() -> + {glint, {config, none, none}, empty_command(), gleam@map:new()}. + +-spec do_add(command_node(GIT), list(binary()), command(GIT)) -> command_node(GIT). +do_add(Root, Path, Contents) -> + case Path of + [] -> + erlang:setelement(2, Root, {some, Contents}); + + [X | Xs] -> + erlang:setelement( + 3, + Root, + (gleam@map:update( + erlang:element(3, Root), + X, + fun(Node) -> _pipe = Node, + _pipe@1 = gleam@option:lazy_unwrap( + _pipe, + fun empty_command/0 + ), + do_add(_pipe@1, Xs, Contents) end + )) + ) + end. + +-spec command(fun((command_input()) -> GJC)) -> command(GJC). +command(Runner) -> + {command, Runner, gleam@map:new(), <<""/utf8>>}. + +-spec description(command(GJF), binary()) -> command(GJF). +description(Cmd, Description) -> + erlang:setelement(4, Cmd, Description). + +-spec flag(command(GJI), binary(), glint@flag:flag_builder(any())) -> command(GJI). +flag(Cmd, Key, Flag) -> + erlang:setelement( + 3, + Cmd, + gleam@map:insert(erlang:element(3, Cmd), Key, glint@flag:build(Flag)) + ). + +-spec flag_tuple(command(GJN), {binary(), glint@flag:flag_builder(any())}) -> command(GJN). +flag_tuple(Cmd, Tup) -> + flag(Cmd, erlang:element(1, Tup), erlang:element(2, Tup)). + +-spec flags(command(GJS), list({binary(), glint@flag:flag()})) -> command(GJS). +flags(Cmd, Flags) -> + gleam@list:fold( + Flags, + Cmd, + fun(Cmd@1, _use1) -> + {Key, Flag} = _use1, + erlang:setelement( + 3, + Cmd@1, + gleam@map:insert(erlang:element(3, Cmd@1), Key, Flag) + ) + end + ). + +-spec global_flag(glint(GJW), binary(), glint@flag:flag_builder(any())) -> glint(GJW). +global_flag(Glint, Key, Flag) -> + erlang:setelement( + 4, + Glint, + gleam@map:insert(erlang:element(4, Glint), Key, glint@flag:build(Flag)) + ). + +-spec global_flag_tuple(glint(GKB), {binary(), glint@flag:flag_builder(any())}) -> glint(GKB). +global_flag_tuple(Glint, Tup) -> + global_flag(Glint, erlang:element(1, Tup), erlang:element(2, Tup)). + +-spec global_flags(glint(GKG), list({binary(), glint@flag:flag()})) -> glint(GKG). +global_flags(Glint, Flags) -> + erlang:setelement( + 4, + Glint, + (gleam@list:fold( + Flags, + erlang:element(4, Glint), + fun(Acc, Tup) -> + gleam@map:insert( + Acc, + erlang:element(1, Tup), + erlang:element(2, Tup) + ) + end + )) + ). + +-spec execute_root( + command_node(GKU), + gleam@map:map_(binary(), glint@flag:flag()), + list(binary()), + list(binary()) +) -> {ok, out(GKU)} | {error, snag:snag()}. +execute_root(Cmd, Global_flags, Args, Flag_inputs) -> + _pipe@3 = case erlang:element(2, Cmd) of + {some, Contents} -> + gleam@result:'try'( + gleam@list:try_fold( + Flag_inputs, + gleam@map:merge(Global_flags, erlang:element(3, Contents)), + fun glint@flag:update_flags/2 + ), + fun(New_flags) -> _pipe = {command_input, Args, New_flags}, + _pipe@1 = (erlang:element(2, Contents))(_pipe), + _pipe@2 = {out, _pipe@1}, + {ok, _pipe@2} end + ); + + none -> + snag:error(<<"command not found"/utf8>>) + end, + snag:context(_pipe@3, <<"failed to run command"/utf8>>). + +-spec default_pretty_help() -> pretty_help(). +default_pretty_help() -> + _assert_subject = gleam_community@colour:from_rgb255(182, 255, 234), + {ok, Usage_colour} = case _assert_subject of + {ok, _} -> _assert_subject; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"glint"/utf8>>, + function => <<"default_pretty_help"/utf8>>, + line => 404}) + end, + _assert_subject@1 = gleam_community@colour:from_rgb255(255, 175, 243), + {ok, Flags_colour} = case _assert_subject@1 of + {ok, _} -> _assert_subject@1; + _assert_fail@1 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@1, + module => <<"glint"/utf8>>, + function => <<"default_pretty_help"/utf8>>, + line => 405}) + end, + _assert_subject@2 = gleam_community@colour:from_rgb255(252, 226, 174), + {ok, Subcommands_colour} = case _assert_subject@2 of + {ok, _} -> _assert_subject@2; + _assert_fail@2 -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail@2, + module => <<"glint"/utf8>>, + function => <<"default_pretty_help"/utf8>>, + line => 406}) + end, + {pretty_help, Usage_colour, Flags_colour, Subcommands_colour}. + +-spec is_not_empty(binary()) -> boolean(). +is_not_empty(S) -> + S /= <<""/utf8>>. + +-spec sanitize_path(list(binary())) -> list(binary()). +sanitize_path(Path) -> + _pipe = Path, + _pipe@1 = gleam@list:map(_pipe, fun gleam@string:trim/1), + gleam@list:filter(_pipe@1, fun is_not_empty/1). + +-spec add(glint(GIO), list(binary()), command(GIO)) -> glint(GIO). +add(Glint, Path, Contents) -> + erlang:setelement( + 3, + Glint, + begin + _pipe = Path, + _pipe@1 = sanitize_path(_pipe), + do_add(erlang:element(3, Glint), _pipe@1, Contents) + end + ). + +-spec help_flag() -> binary(). +help_flag() -> + <<(<<"--"/utf8>>)/binary, "help"/utf8>>. + +-spec wrap_with_space(binary()) -> binary(). +wrap_with_space(S) -> + case S of + <<""/utf8>> -> + <<" "/utf8>>; + + _ -> + <<<<" "/utf8, S/binary>>/binary, " "/utf8>> + end. + +-spec subcommand_help(binary(), command_node(any())) -> binary(). +subcommand_help(Name, Cmd) -> + case erlang:element(2, Cmd) of + none -> + Name; + + {some, Contents} -> + <<<<Name/binary, "\t\t"/utf8>>/binary, + (erlang:element(4, Contents))/binary>> + end. + +-spec subcommands_help(gleam@map:map_(binary(), command_node(any()))) -> binary(). +subcommands_help(Cmds) -> + _pipe = Cmds, + _pipe@1 = gleam@map:map_values(_pipe, fun subcommand_help/2), + _pipe@2 = gleam@map:values(_pipe@1), + _pipe@3 = gleam@list:sort(_pipe@2, fun gleam@string:compare/2), + gleam@string:join(_pipe@3, <<"\n\t"/utf8>>). + +-spec heading_style(binary(), gleam_community@colour:colour()) -> binary(). +heading_style(Heading, Colour) -> + _pipe = Heading, + _pipe@1 = gleam_community@ansi:bold(_pipe), + _pipe@2 = gleam_community@ansi:underline(_pipe@1), + _pipe@3 = gleam_community@ansi:italic(_pipe@2), + _pipe@4 = gleam_community@ansi:hex( + _pipe@3, + gleam_community@colour:to_rgb_hex(Colour) + ), + gleam_community@ansi:reset(_pipe@4). + +-spec usage_help( + binary(), + gleam@map:map_(binary(), glint@flag:flag()), + config() +) -> binary(). +usage_help(Cmd_name, Flags, Config) -> + App_name = gleam@option:unwrap( + erlang:element(3, Config), + <<"gleam run"/utf8>> + ), + Flags@1 = begin + _pipe = Flags, + _pipe@1 = gleam@map:to_list(_pipe), + _pipe@2 = gleam@list:map(_pipe@1, fun glint@flag:flag_type_help/1), + gleam@list:sort(_pipe@2, fun gleam@string:compare/2) + end, + Flag_sb = case Flags@1 of + [] -> + gleam@string_builder:new(); + + _ -> + _pipe@3 = Flags@1, + _pipe@4 = gleam@list:intersperse(_pipe@3, <<" "/utf8>>), + _pipe@5 = gleam@string_builder:from_strings(_pipe@4), + _pipe@6 = gleam@string_builder:prepend(_pipe@5, <<" [ "/utf8>>), + gleam@string_builder:append(_pipe@6, <<" ]"/utf8>>) + end, + _pipe@7 = [App_name, wrap_with_space(Cmd_name), <<"[ ARGS ]"/utf8>>], + _pipe@8 = gleam@string_builder:from_strings(_pipe@7), + _pipe@9 = gleam@string_builder:append_builder(_pipe@8, Flag_sb), + _pipe@12 = gleam@string_builder:prepend( + _pipe@9, + <<(begin + _pipe@10 = erlang:element(2, Config), + _pipe@11 = gleam@option:map( + _pipe@10, + fun(Styling) -> + heading_style( + <<"USAGE:"/utf8>>, + erlang:element(2, Styling) + ) + end + ), + gleam@option:unwrap(_pipe@11, <<"USAGE:"/utf8>>) + end)/binary, + "\n\t"/utf8>> + ), + gleam@string_builder:to_string(_pipe@12). + +-spec cmd_help( + list(binary()), + command_node(any()), + config(), + gleam@map:map_(binary(), glint@flag:flag()) +) -> binary(). +cmd_help(Path, Cmd, Config, Global_flags) -> + Name = begin + _pipe = Path, + _pipe@1 = gleam@list:reverse(_pipe), + gleam@string:join(_pipe@1, <<" "/utf8>>) + end, + Flags = begin + _pipe@2 = gleam@option:map( + erlang:element(2, Cmd), + fun(Contents) -> erlang:element(3, Contents) end + ), + _pipe@3 = gleam@option:lazy_unwrap(_pipe@2, fun gleam@map:new/0), + gleam@map:merge(Global_flags, _pipe@3) + end, + Flags_help_body = <<<<(begin + _pipe@4 = erlang:element(2, Config), + _pipe@5 = gleam@option:map( + _pipe@4, + fun(P) -> + heading_style(<<"FLAGS:"/utf8>>, erlang:element(3, P)) + end + ), + gleam@option:unwrap(_pipe@5, <<"FLAGS:"/utf8>>) + end)/binary, + "\n\t"/utf8>>/binary, + (gleam@string:join( + gleam@list:sort( + [<<"--help\t\t\tPrint help information"/utf8>> | + glint@flag:flags_help(Flags)], + fun gleam@string:compare/2 + ), + <<"\n\t"/utf8>> + ))/binary>>, + Usage = usage_help(Name, Flags, Config), + Description = begin + _pipe@6 = erlang:element(2, Cmd), + _pipe@7 = gleam@option:map( + _pipe@6, + fun(Contents@1) -> erlang:element(4, Contents@1) end + ), + gleam@option:unwrap(_pipe@7, <<""/utf8>>) + end, + Header_items = begin + _pipe@8 = [Name, Description], + _pipe@9 = gleam@list:filter(_pipe@8, fun is_not_empty/1), + gleam@string:join(_pipe@9, <<"\n"/utf8>>) + end, + Subcommands = case subcommands_help(erlang:element(3, Cmd)) of + <<""/utf8>> -> + <<""/utf8>>; + + Subcommands_help_body -> + <<<<(begin + _pipe@10 = erlang:element(2, Config), + _pipe@11 = gleam@option:map( + _pipe@10, + fun(P@1) -> + heading_style( + <<"SUBCOMMANDS:"/utf8>>, + erlang:element(4, P@1) + ) + end + ), + gleam@option:unwrap(_pipe@11, <<"SUBCOMMANDS:"/utf8>>) + end)/binary, + "\n\t"/utf8>>/binary, + Subcommands_help_body/binary>> + end, + _pipe@12 = [Header_items, Usage, Flags_help_body, Subcommands], + _pipe@13 = gleam@list:filter(_pipe@12, fun is_not_empty/1), + gleam@string:join(_pipe@13, <<"\n\n"/utf8>>). + +-spec do_execute( + command_node(GKO), + config(), + gleam@map:map_(binary(), glint@flag:flag()), + list(binary()), + list(binary()), + boolean(), + list(binary()) +) -> {ok, out(GKO)} | {error, snag:snag()}. +do_execute(Cmd, Config, Global_flags, Args, Flags, Help, Command_path) -> + case Args of + [] when Help -> + _pipe = Command_path, + _pipe@1 = cmd_help(_pipe, Cmd, Config, Global_flags), + _pipe@2 = {help, _pipe@1}, + {ok, _pipe@2}; + + [] -> + execute_root(Cmd, Global_flags, [], Flags); + + [Arg | Rest] -> + case gleam@map:get(erlang:element(3, Cmd), Arg) of + {ok, Cmd@1} -> + do_execute( + Cmd@1, + Config, + Global_flags, + Rest, + Flags, + Help, + [Arg | Command_path] + ); + + _ when Help -> + _pipe@3 = Command_path, + _pipe@4 = cmd_help(_pipe@3, Cmd, Config, Global_flags), + _pipe@5 = {help, _pipe@4}, + {ok, _pipe@5}; + + _ -> + execute_root(Cmd, Global_flags, Args, Flags) + end + end. + +-spec execute(glint(GKK), list(binary())) -> {ok, out(GKK)} | + {error, snag:snag()}. +execute(Glint, Args) -> + Help_flag = help_flag(), + {Help, Args@2} = case gleam@list:pop(Args, fun(S) -> S =:= Help_flag end) of + {ok, {_, Args@1}} -> + {true, Args@1}; + + _ -> + {false, Args} + end, + {Flags, Args@3} = gleam@list:partition( + Args@2, + fun(_capture) -> gleam@string:starts_with(_capture, <<"--"/utf8>>) end + ), + do_execute( + erlang:element(3, Glint), + erlang:element(2, Glint), + erlang:element(4, Glint), + Args@3, + Flags, + Help, + [] + ). + +-spec run_and_handle(glint(GLC), list(binary()), fun((GLC) -> any())) -> nil. +run_and_handle(Glint, Args, Handle) -> + case execute(Glint, Args) of + {error, Err} -> + _pipe = Err, + _pipe@1 = snag:pretty_print(_pipe), + gleam@io:println(_pipe@1); + + {ok, {help, Help}} -> + gleam@io:println(Help); + + {ok, {out, Out}} -> + Handle(Out), + nil + end. + +-spec run(glint(any()), list(binary())) -> nil. +run(Glint, Args) -> + run_and_handle(Glint, Args, gleam@function:constant(nil)). + +-spec add_command_from_stub(glint(GLP), stub(GLP)) -> glint(GLP). +add_command_from_stub(Glint, Stub) -> + add( + Glint, + erlang:element(2, Stub), + begin + _pipe = command(erlang:element(3, Stub)), + _pipe@1 = flags(_pipe, erlang:element(4, Stub)), + description(_pipe@1, erlang:element(5, Stub)) + end + ). diff --git a/aoc2023/build/packages/glint/src/glint.gleam b/aoc2023/build/packages/glint/src/glint.gleam new file mode 100644 index 0000000..b159016 --- /dev/null +++ b/aoc2023/build/packages/glint/src/glint.gleam @@ -0,0 +1,588 @@ +import gleam/map.{type Map} +import gleam/option.{type Option, None, Some} +import gleam/list +import gleam/io +import gleam/string +import snag.{type Result} +import glint/flag.{type Flag, type Map as FlagMap} +import gleam/string_builder as sb +import gleam_community/ansi +import gleam_community/colour.{type Colour} +import gleam/result +import gleam/function + +// --- CONFIGURATION --- + +// -- CONFIGURATION: TYPES -- + +/// Config for glint +/// +pub type Config { + Config(pretty_help: Option(PrettyHelp), name: Option(String)) +} + +/// PrettyHelp defines the header colours to be used when styling help text +/// +pub type PrettyHelp { + PrettyHelp(usage: Colour, flags: Colour, subcommands: Colour) +} + +// -- CONFIGURATION: CONSTANTS -- + +/// Default config +/// +pub const default_config = Config(pretty_help: None, name: None) + +// -- CONFIGURATION: FUNCTIONS -- + +/// Add the provided config to the existing command tree +/// +pub fn with_config(glint: Glint(a), config: Config) -> Glint(a) { + Glint(..glint, config: config) +} + +/// Enable custom colours for help text headers +/// For a pre-made colouring use `default_pretty_help()` +/// +pub fn with_pretty_help(glint: Glint(a), pretty: PrettyHelp) -> Glint(a) { + Config(..glint.config, pretty_help: Some(pretty)) + |> with_config(glint, _) +} + +/// Disable custom colours for help text headers +/// +pub fn without_pretty_help(glint: Glint(a)) -> Glint(a) { + Config(..glint.config, pretty_help: None) + |> with_config(glint, _) +} + +pub fn with_name(glint: Glint(a), name: String) -> Glint(a) { + Config(..glint.config, name: Some(name)) + |> with_config(glint, _) +} + +// --- CORE --- + +// -- CORE: TYPES -- + +/// Glint container type for config and commands +/// +pub opaque type Glint(a) { + Glint(config: Config, cmd: CommandNode(a), global_flags: FlagMap) +} + +/// CommandNode contents +/// +pub opaque type Command(a) { + Command(do: Runner(a), flags: FlagMap, description: String) +} + +/// Input type for `Runner`. +/// +pub type CommandInput { + CommandInput(args: List(String), flags: FlagMap) +} + +/// Function type to be run by `glint`. +/// +pub type Runner(a) = + fn(CommandInput) -> a + +/// CommandNode tree representation. +/// +type CommandNode(a) { + CommandNode( + contents: Option(Command(a)), + subcommands: Map(String, CommandNode(a)), + ) +} + +/// Ok type for command execution +/// +pub type Out(a) { + /// Container for the command return value + Out(a) + /// Container for the generated help string + Help(String) +} + +/// Result type for command execution +/// +pub type CmdResult(a) = + Result(Out(a)) + +// -- CORE: BUILDER FUNCTIONS -- + +/// Creates a new command tree. +/// +pub fn new() -> Glint(a) { + Glint(config: default_config, cmd: empty_command(), global_flags: map.new()) +} + +/// Adds a new command to be run at the specified path. +/// +/// If the path is `[]`, the root command is set with the provided function and +/// flags. +/// +/// Note: all command paths are sanitized by stripping whitespace and removing any empty string elements. +/// +pub fn add( + to glint: Glint(a), + at path: List(String), + do contents: Command(a), +) -> Glint(a) { + Glint( + ..glint, + cmd: path + |> sanitize_path + |> do_add(to: glint.cmd, put: contents), + ) +} + +/// Recursive traversal of the command tree to find where to puth the provided command +/// +fn do_add( + to root: CommandNode(a), + at path: List(String), + put contents: Command(a), +) -> CommandNode(a) { + case path { + // update current command with provided contents + [] -> CommandNode(..root, contents: Some(contents)) + // continue down the path, creating empty command nodes along the way + [x, ..xs] -> + CommandNode( + ..root, + subcommands: { + use node <- map.update(root.subcommands, x) + node + |> option.lazy_unwrap(empty_command) + |> do_add(xs, contents) + }, + ) + } +} + +/// Helper for initializing empty commands +/// +fn empty_command() -> CommandNode(a) { + CommandNode(contents: None, subcommands: map.new()) +} + +/// Trim each path element and remove any resulting empty strings. +/// +fn sanitize_path(path: List(String)) -> List(String) { + path + |> list.map(string.trim) + |> list.filter(is_not_empty) +} + +/// Create a Command(a) from a Runner(a) +/// +pub fn command(do runner: Runner(a)) -> Command(a) { + Command(do: runner, flags: map.new(), description: "") +} + +/// Attach a description to a Command(a) +/// +pub fn description(cmd: Command(a), description: String) -> Command(a) { + Command(..cmd, description: description) +} + +/// add a `flag.Flag` to a `Command` +/// +pub fn flag( + cmd: Command(a), + at key: String, + of flag: flag.FlagBuilder(_), +) -> Command(a) { + Command(..cmd, flags: map.insert(cmd.flags, key, flag.build(flag))) +} + +/// Add a `flag.Flag to a `Command` when the flag name and builder are bundled as a #(String, flag.FlagBuilder(a)). +/// +/// This is merely a convenience function and calls `glint.flag` under the hood. +/// +pub fn flag_tuple( + cmd: Command(a), + with tup: #(String, flag.FlagBuilder(_)), +) -> Command(a) { + flag(cmd, tup.0, tup.1) +} + +/// Add multiple `Flag`s to a `Command`, note that this function uses `Flag` and not `FlagBuilder(_)`, so the user will need to call `flag.build` before providing the flags here. +/// +/// It is recommended to call `glint.flag` instead. +/// +pub fn flags(cmd: Command(a), with flags: List(#(String, Flag))) -> Command(a) { + use cmd, #(key, flag) <- list.fold(flags, cmd) + Command(..cmd, flags: map.insert(cmd.flags, key, flag)) +} + +/// Add global flags to the existing command tree +/// +pub fn global_flag( + glint: Glint(a), + at key: String, + of flag: flag.FlagBuilder(_), +) -> Glint(a) { + Glint( + ..glint, + global_flags: map.insert(glint.global_flags, key, flag.build(flag)), + ) +} + +/// Add global flags to the existing command tree. +/// +pub fn global_flag_tuple( + glint: Glint(a), + with tup: #(String, flag.FlagBuilder(_)), +) -> Glint(a) { + global_flag(glint, tup.0, tup.1) +} + +/// Add global flags to the existing command tree. +/// +/// Like `glint.flags`, this function requires `Flag`s insead of `FlagBuilder(_)`. +/// +/// It is recommended to use `glint.global_flag` instead. +/// +pub fn global_flags(glint: Glint(a), flags: List(#(String, Flag))) -> Glint(a) { + Glint( + ..glint, + global_flags: { + list.fold( + flags, + glint.global_flags, + fn(acc, tup) { map.insert(acc, tup.0, tup.1) }, + ) + }, + ) +} + +// -- CORE: EXECUTION FUNCTIONS -- + +/// Determines which command to run and executes it. +/// +/// Sets any provided flags if necessary. +/// +/// Each value prefixed with `--` is parsed as a flag. +/// +/// This function does not print its output and is mainly intended for use within `glint` itself. +/// If you would like to print or handle the output of a command please see the `run_and_handle` function. +/// +pub fn execute(glint: Glint(a), args: List(String)) -> CmdResult(a) { + // create help flag to check for + let help_flag = help_flag() + + // check if help flag is present + let #(help, args) = case list.pop(args, fn(s) { s == help_flag }) { + Ok(#(_, args)) -> #(True, args) + _ -> #(False, args) + } + + // split flags out from the args list + let #(flags, args) = list.partition(args, string.starts_with(_, flag.prefix)) + + // search for command and execute + do_execute(glint.cmd, glint.config, glint.global_flags, args, flags, help, []) +} + +/// Find which command to execute and run it with computed flags and args +/// +fn do_execute( + cmd: CommandNode(a), + config: Config, + global_flags: FlagMap, + args: List(String), + flags: List(String), + help: Bool, + command_path: List(String), +) -> CmdResult(a) { + case args { + // when there are no more available arguments + // and help flag has been passed, generate help message + [] if help -> + command_path + |> cmd_help(cmd, config, global_flags) + |> Help + |> Ok + + // when there are no more available arguments + // run the current command + [] -> execute_root(cmd, global_flags, [], flags) + + // when there are arguments remaining + // check if the next one is a subcommand of the current command + [arg, ..rest] -> + case map.get(cmd.subcommands, arg) { + // subcommand found, continue + Ok(cmd) -> + do_execute( + cmd, + config, + global_flags, + rest, + flags, + help, + [arg, ..command_path], + ) + // subcommand not found, but help flag has been passed + // generate and return help message + _ if help -> + command_path + |> cmd_help(cmd, config, global_flags) + |> Help + |> Ok + // subcommand not found, but help flag has not been passed + // execute the current command + _ -> execute_root(cmd, global_flags, args, flags) + } + } +} + +/// Executes the current root command. +/// +fn execute_root( + cmd: CommandNode(a), + global_flags: FlagMap, + args: List(String), + flag_inputs: List(String), +) -> CmdResult(a) { + case cmd.contents { + Some(contents) -> { + use new_flags <- result.try(list.try_fold( + over: flag_inputs, + from: map.merge(global_flags, contents.flags), + with: flag.update_flags, + )) + CommandInput(args, new_flags) + |> contents.do + |> Out + |> Ok + } + None -> snag.error("command not found") + } + |> snag.context("failed to run command") +} + +/// A wrapper for `execute` that prints any errors enountered or the help text if requested. +/// This function ignores any value returned by the command that was run. +/// If you would like to do something with the command output please see the run_and_handle function. +/// +pub fn run(from glint: Glint(a), for args: List(String)) -> Nil { + run_and_handle(from: glint, for: args, with: function.constant(Nil)) +} + +/// A wrapper for `execute` that prints any errors enountered or the help text if requested. +/// This function calls the provided handler with the value returned by the command that was run. +/// +pub fn run_and_handle( + from glint: Glint(a), + for args: List(String), + with handle: fn(a) -> _, +) -> Nil { + case execute(glint, args) { + Error(err) -> + err + |> snag.pretty_print + |> io.println + Ok(Help(help)) -> io.println(help) + Ok(Out(out)) -> { + handle(out) + Nil + } + } +} + +/// Default pretty help heading colouring +/// mint (r: 182, g: 255, b: 234) colour for usage +/// pink (r: 255, g: 175, b: 243) colour for flags +/// buttercup (r: 252, g: 226, b: 174) colour for subcommands +/// +pub fn default_pretty_help() -> PrettyHelp { + let assert Ok(usage_colour) = colour.from_rgb255(182, 255, 234) + let assert Ok(flags_colour) = colour.from_rgb255(255, 175, 243) + let assert Ok(subcommands_colour) = colour.from_rgb255(252, 226, 174) + + PrettyHelp( + usage: usage_colour, + flags: flags_colour, + subcommands: subcommands_colour, + ) +} + +// constants for setting up sections of the help message +const flags_heading = "FLAGS:" + +const subcommands_heading = "SUBCOMMANDS:" + +const usage_heading = "USAGE:" + +/// Helper for filtering out empty strings +/// +fn is_not_empty(s: String) -> Bool { + s != "" +} + +const help_flag_name = "help" + +const help_flag_message = "--help\t\t\tPrint help information" + +/// Function to create the help flag string +/// Exported for testing purposes only +/// +pub fn help_flag() -> String { + flag.prefix <> help_flag_name +} + +// -- HELP: FUNCTIONS -- + +fn wrap_with_space(s: String) -> String { + case s { + "" -> " " + _ -> " " <> s <> " " + } +} + +/// generate the usage help string for a command +fn usage_help(cmd_name: String, flags: FlagMap, config: Config) -> String { + let app_name = option.unwrap(config.name, "gleam run") + let flags = + flags + |> map.to_list + |> list.map(flag.flag_type_help) + |> list.sort(string.compare) + + let flag_sb = case flags { + [] -> sb.new() + _ -> + flags + |> list.intersperse(" ") + |> sb.from_strings() + |> sb.prepend(prefix: " [ ") + |> sb.append(suffix: " ]") + } + + [app_name, wrap_with_space(cmd_name), "[ ARGS ]"] + |> sb.from_strings + |> sb.append_builder(flag_sb) + |> sb.prepend( + config.pretty_help + |> option.map(fn(styling) { heading_style(usage_heading, styling.usage) }) + |> option.unwrap(usage_heading) <> "\n\t", + ) + |> sb.to_string +} + +/// generate the help text for a command +fn cmd_help( + path: List(String), + cmd: CommandNode(a), + config: Config, + global_flags: FlagMap, +) -> String { + // recreate the path of the current command + // reverse the path because it is created by prepending each section as do_execute walks down the tree + let name = + path + |> list.reverse + |> string.join(" ") + + let flags = + option.map(cmd.contents, fn(contents) { contents.flags }) + |> option.lazy_unwrap(map.new) + |> map.merge(global_flags, _) + + let flags_help_body = + config.pretty_help + |> option.map(fn(p) { heading_style(flags_heading, p.flags) }) + |> option.unwrap(flags_heading) <> "\n\t" <> string.join( + list.sort([help_flag_message, ..flag.flags_help(flags)], string.compare), + "\n\t", + ) + + let usage = usage_help(name, flags, config) + + let description = + cmd.contents + |> option.map(fn(contents) { contents.description }) + |> option.unwrap("") + + // create the header block from the name and description + let header_items = + [name, description] + |> list.filter(is_not_empty) + |> string.join("\n") + + // create the subcommands help block + let subcommands = case subcommands_help(cmd.subcommands) { + "" -> "" + subcommands_help_body -> + config.pretty_help + |> option.map(fn(p) { heading_style(subcommands_heading, p.subcommands) }) + |> option.unwrap(subcommands_heading) <> "\n\t" <> subcommands_help_body + } + + // join the resulting help blocks into the final help message + [header_items, usage, flags_help_body, subcommands] + |> list.filter(is_not_empty) + |> string.join("\n\n") +} + +// create the help text for subcommands +fn subcommands_help(cmds: Map(String, CommandNode(a))) -> String { + cmds + |> map.map_values(subcommand_help) + |> map.values + |> list.sort(string.compare) + |> string.join("\n\t") +} + +// generate the help text for a subcommand +fn subcommand_help(name: String, cmd: CommandNode(_)) -> String { + case cmd.contents { + None -> name + Some(contents) -> name <> "\t\t" <> contents.description + } +} + +/// Style heading text with the provided rgb colouring +/// this is only intended for use within glint itself. +/// +fn heading_style(heading: String, colour: Colour) -> String { + heading + |> ansi.bold + |> ansi.underline + |> ansi.italic + |> ansi.hex(colour.to_rgb_hex(colour)) + |> ansi.reset +} + +// -- DEPRECATED: STUBS -- + +/// DEPRECATED: use `glint.cmd` and related new functions instead to create a Command +/// +/// Create command stubs to be used in `add_command_from_stub` +/// +pub type Stub(a) { + Stub( + path: List(String), + run: Runner(a), + flags: List(#(String, Flag)), + description: String, + ) +} + +/// Add a command to the root given a stub +/// +@deprecated("use `glint.cmd` and related new functions instead to create a Command") +pub fn add_command_from_stub(to glint: Glint(a), with stub: Stub(a)) -> Glint(a) { + add( + to: glint, + at: stub.path, + do: command(stub.run) + |> flags(stub.flags) + |> description(stub.description), + ) +} diff --git a/aoc2023/build/packages/glint/src/glint/flag.gleam b/aoc2023/build/packages/glint/src/glint/flag.gleam new file mode 100644 index 0000000..0a6cae1 --- /dev/null +++ b/aoc2023/build/packages/glint/src/glint/flag.gleam @@ -0,0 +1,478 @@ +import gleam/map +import gleam/string +import gleam/result +import gleam/int +import gleam/list +import gleam/float +import snag.{type Result, type Snag} +import gleam/option.{type Option, None, Some} +import glint/flag/constraint.{type Constraint} +import gleam + +/// Flag inputs must start with this prefix +/// +pub const prefix = "--" + +/// The separation character for flag names and their values +const delimiter = "=" + +/// Supported flag types. +/// +pub type Value { + /// Boolean flags, to be passed in as `--flag=true` or `--flag=false`. + /// Can be toggled by omitting the desired value like `--flag`. + /// Toggling will negate the existing value. + /// + B(Internal(Bool)) + + /// Int flags, to be passed in as `--flag=1` + /// + I(Internal(Int)) + + /// List(Int) flags, to be passed in as `--flag=1,2,3` + /// + LI(Internal(List(Int))) + + /// Float flags, to be passed in as `--flag=1.0` + /// + F(Internal(Float)) + + /// List(Float) flags, to be passed in as `--flag=1.0,2.0` + /// + LF(Internal(List(Float))) + + /// String flags, to be passed in as `--flag=hello` + /// + S(Internal(String)) + + /// List(String) flags, to be passed in as `--flag=hello,world` + /// + LS(Internal(List(String))) +} + +/// A type that facilitates the creation of `Flag`s +/// +pub opaque type FlagBuilder(a) { + FlagBuilder( + desc: Description, + parser: Parser(a, Snag), + value: fn(Internal(a)) -> Value, + default: Option(a), + ) +} + +/// An internal representation of flag contents +/// +pub opaque type Internal(a) { + Internal(value: Option(a), parser: Parser(a, Snag)) +} + +// Builder initializers + +type Parser(a, b) = + fn(String) -> gleam.Result(a, b) + +/// initialise an int flag builder +/// +pub fn int() -> FlagBuilder(Int) { + use input <- new(I) + input + |> int.parse + |> result.replace_error(cannot_parse(input, "int")) +} + +/// initialise an int list flag builder +/// +pub fn int_list() -> FlagBuilder(List(Int)) { + use input <- new(LI) + input + |> string.split(",") + |> list.try_map(int.parse) + |> result.replace_error(cannot_parse(input, "int list")) +} + +/// initialise a float flag builder +/// +pub fn float() -> FlagBuilder(Float) { + use input <- new(F) + input + |> float.parse + |> result.replace_error(cannot_parse(input, "float")) +} + +/// initialise a float list flag builder +/// +pub fn float_list() -> FlagBuilder(List(Float)) { + use input <- new(LF) + input + |> string.split(",") + |> list.try_map(float.parse) + |> result.replace_error(cannot_parse(input, "float list")) +} + +/// initialise a string flag builder +/// +pub fn string() -> FlagBuilder(String) { + new(S, fn(s) { Ok(s) }) +} + +/// intitialise a string list flag builder +/// +pub fn string_list() -> FlagBuilder(List(String)) { + use input <- new(LS) + input + |> string.split(",") + |> Ok +} + +/// initialise a bool flag builder +/// +pub fn bool() -> FlagBuilder(Bool) { + use input <- new(B) + case string.lowercase(input) { + "true" | "t" -> Ok(True) + "false" | "f" -> Ok(False) + _ -> Error(cannot_parse(input, "bool")) + } +} + +/// initialize custom builders using a Value constructor and a parsing function +/// +fn new(valuer: fn(Internal(a)) -> Value, p: Parser(a, Snag)) -> FlagBuilder(a) { + FlagBuilder(desc: "", parser: p, value: valuer, default: None) +} + +/// convert a FlagBuilder(a) into its corresponding Flag representation +/// +pub fn build(fb: FlagBuilder(a)) -> Flag { + Flag( + value: fb.value(Internal(value: fb.default, parser: fb.parser)), + description: fb.desc, + ) +} + +/// attach a constraint to a `Flag` +/// +pub fn constraint( + builder: FlagBuilder(a), + constraint: Constraint(a), +) -> FlagBuilder(a) { + FlagBuilder( + ..builder, + parser: wrap_with_constraint(builder.parser, constraint), + ) +} + +/// attach a Constraint(a) to a Parser(a,Snag) +/// this function should not be used directly unless +fn wrap_with_constraint( + p: Parser(a, Snag), + constraint: Constraint(a), +) -> Parser(a, Snag) { + fn(input: String) -> Result(a) { attempt(p(input), constraint) } +} + +fn attempt( + val: gleam.Result(a, e), + f: fn(a) -> gleam.Result(_, e), +) -> gleam.Result(a, e) { + use a <- result.try(val) + result.replace(f(a), a) +} + +/// Flag descriptions +/// +pub type Description = + String + +/// Flag data and descriptions +/// +pub type Flag { + Flag(value: Value, description: Description) +} + +/// attach a description to a `Flag` +/// +pub fn description( + for builder: FlagBuilder(a), + of description: Description, +) -> FlagBuilder(a) { + FlagBuilder(..builder, desc: description) +} + +/// Set the default value for a flag `Value` +/// +pub fn default(for builder: FlagBuilder(a), of default: a) -> FlagBuilder(a) { + FlagBuilder(..builder, default: Some(default)) +} + +/// Associate flag names to their current values. +/// +pub type Map = + map.Map(String, Flag) + +/// Convert a list of flags to a Map. +/// +pub fn build_map(flags: List(#(String, Flag))) -> Map { + map.from_list(flags) +} + +/// Updates a flag value, ensuring that the new value can satisfy the required type. +/// Assumes that all flag inputs passed in start with -- +/// This function is only intended to be used from glint.execute_root +/// +pub fn update_flags(in flags: Map, with flag_input: String) -> Result(Map) { + let flag_input = string.drop_left(flag_input, string.length(prefix)) + + case string.split_once(flag_input, delimiter) { + Ok(data) -> update_flag_value(flags, data) + Error(_) -> attempt_toggle_flag(flags, flag_input) + } +} + +fn update_flag_value(in flags: Map, with data: #(String, String)) -> Result(Map) { + let #(key, input) = data + use contents <- result.try(access(flags, key)) + use value <- result.map( + compute_flag(with: input, given: contents.value) + |> result.map_error(layer_invalid_flag(_, key)), + ) + map.insert(flags, key, Flag(..contents, value: value)) +} + +fn attempt_toggle_flag(in flags: Map, at key: String) -> Result(Map) { + use contents <- result.try(access(flags, key)) + case contents.value { + B(Internal(None, ..) as internal) -> + Internal(..internal, value: Some(True)) + |> B + |> fn(val) { Flag(..contents, value: val) } + |> map.insert(into: flags, for: key) + |> Ok() + B(Internal(Some(val), ..) as internal) -> + Internal(..internal, value: Some(!val)) + |> B + |> fn(val) { Flag(..contents, value: val) } + |> map.insert(into: flags, for: key) + |> Ok() + _ -> Error(no_value_flag_err(key)) + } +} + +fn access_type_error(flag_type) { + snag.error("cannot access flag as " <> flag_type) +} + +fn flag_not_provided_error() { + snag.error("no value provided") +} + +fn construct_value( + input: String, + internal: Internal(a), + constructor: fn(Internal(a)) -> Value, +) -> Result(Value) { + use val <- result.map(internal.parser(input)) + constructor(Internal(..internal, value: Some(val))) +} + +/// Computes the new flag value given the input and the expected flag type +/// +fn compute_flag(with input: String, given current: Value) -> Result(Value) { + input + |> case current { + I(internal) -> construct_value(_, internal, I) + LI(internal) -> construct_value(_, internal, LI) + F(internal) -> construct_value(_, internal, F) + LF(internal) -> construct_value(_, internal, LF) + S(internal) -> construct_value(_, internal, S) + LS(internal) -> construct_value(_, internal, LS) + B(internal) -> construct_value(_, internal, B) + } + |> snag.context("failed to compute value for flag") +} + +// Error creation and manipulation functions +fn layer_invalid_flag(err: Snag, flag: String) -> Snag { + snag.layer(err, "invalid flag '" <> flag <> "'") +} + +fn no_value_flag_err(flag_input: String) -> Snag { + { "flag '" <> flag_input <> "' has no assigned value" } + |> snag.new() + |> layer_invalid_flag(flag_input) +} + +fn undefined_flag_err(key: String) -> Snag { + "flag provided but not defined" + |> snag.new() + |> layer_invalid_flag(key) +} + +fn cannot_parse(with value: String, is kind: String) -> Snag { + { "cannot parse value '" <> value <> "' as " <> kind } + |> snag.new() +} + +// Help Message Functions +/// Generate the help message contents for a single flag +/// +pub fn flag_type_help(flag: #(String, Flag)) { + let #(name, contents) = flag + let kind = case contents.value { + I(_) -> "INT" + B(_) -> "BOOL" + F(_) -> "FLOAT" + LF(_) -> "FLOAT_LIST" + LI(_) -> "INT_LIST" + LS(_) -> "STRING_LIST" + S(_) -> "STRING" + } + + prefix <> name <> delimiter <> "<" <> kind <> ">" +} + +/// Generate help message line for a single flag +/// +fn flag_help(flag: #(String, Flag)) -> String { + flag_type_help(flag) <> "\t\t" <> { flag.1 }.description +} + +/// Generate help messages for all flags +/// +pub fn flags_help(flags: Map) -> List(String) { + flags + |> map.to_list + |> list.map(flag_help) +} + +// -- FLAG ACCESS FUNCTIONS -- + +/// Access the contents for the associated flag +/// +fn access(flags: Map, name: String) -> Result(Flag) { + map.get(flags, name) + |> result.replace_error(undefined_flag_err(name)) +} + +fn get_value( + from flags: Map, + at key: String, + expecting kind: fn(Flag) -> Result(a), +) -> Result(a) { + access(flags, key) + |> result.try(kind) + |> snag.context("failed to retrieve value for flag '" <> key <> "'") +} + +/// Gets the current value for the provided int flag +/// +pub fn get_int_value(from flag: Flag) -> Result(Int) { + case flag.value { + I(Internal(value: Some(val), ..)) -> Ok(val) + I(Internal(value: None, ..)) -> flag_not_provided_error() + _ -> access_type_error("int") + } +} + +/// Gets the current value for the associated int flag +/// +pub fn get_int(from flags: Map, for name: String) -> Result(Int) { + get_value(flags, name, get_int_value) +} + +/// Gets the current value for the provided ints flag +/// +pub fn get_ints_value(from flag: Flag) -> Result(List(Int)) { + case flag.value { + LI(Internal(value: Some(val), ..)) -> Ok(val) + LI(Internal(value: None, ..)) -> flag_not_provided_error() + _ -> access_type_error("int list") + } +} + +/// Gets the current value for the associated ints flag +/// +pub fn get_ints(from flags: Map, for name: String) -> Result(List(Int)) { + get_value(flags, name, get_ints_value) +} + +/// Gets the current value for the provided bool flag +/// +pub fn get_bool_value(from flag: Flag) -> Result(Bool) { + case flag.value { + B(Internal(Some(val), ..)) -> Ok(val) + B(Internal(None, ..)) -> flag_not_provided_error() + _ -> access_type_error("bool") + } +} + +/// Gets the current value for the associated bool flag +/// +pub fn get_bool(from flags: Map, for name: String) -> Result(Bool) { + get_value(flags, name, get_bool_value) +} + +/// Gets the current value for the provided string flag +/// +pub fn get_string_value(from flag: Flag) -> Result(String) { + case flag.value { + S(Internal(value: Some(val), ..)) -> Ok(val) + S(Internal(value: None, ..)) -> flag_not_provided_error() + _ -> access_type_error("string") + } +} + +/// Gets the current value for the associated string flag +/// +pub fn get_string(from flags: Map, for name: String) -> Result(String) { + get_value(flags, name, get_string_value) +} + +/// Gets the current value for the provided strings flag +/// +pub fn get_strings_value(from flag: Flag) -> Result(List(String)) { + case flag.value { + LS(Internal(value: Some(val), ..)) -> Ok(val) + LS(Internal(value: None, ..)) -> flag_not_provided_error() + _ -> access_type_error("string list") + } +} + +/// Gets the current value for the associated strings flag +/// +pub fn get_strings(from flags: Map, for name: String) -> Result(List(String)) { + get_value(flags, name, get_strings_value) +} + +/// Gets the current value for the provided float flag +/// +pub fn get_float_value(from flag: Flag) -> Result(Float) { + case flag.value { + F(Internal(value: Some(val), ..)) -> Ok(val) + F(Internal(value: None, ..)) -> flag_not_provided_error() + _ -> access_type_error("float") + } +} + +/// Gets the current value for the associated float flag +/// +pub fn get_float(from flags: Map, for name: String) -> Result(Float) { + get_value(flags, name, get_float_value) +} + +/// Gets the current value for the provided floats flag +/// +pub fn get_floats_value(from flag: Flag) -> Result(List(Float)) { + case flag.value { + LF(Internal(value: Some(val), ..)) -> Ok(val) + LF(Internal(value: None, ..)) -> flag_not_provided_error() + _ -> access_type_error("float list") + } +} + +/// Gets the current value for the associated floats flag +/// +pub fn get_floats(from flags: Map, for name: String) -> Result(List(Float)) { + get_value(flags, name, get_floats_value) +} diff --git a/aoc2023/build/packages/glint/src/glint/flag/constraint.gleam b/aoc2023/build/packages/glint/src/glint/flag/constraint.gleam new file mode 100644 index 0000000..e474bc2 --- /dev/null +++ b/aoc2023/build/packages/glint/src/glint/flag/constraint.gleam @@ -0,0 +1,66 @@ +import gleam/list +import gleam/result +import gleam/string +import gleam/set +import snag.{type Result} + +/// Constraint type for verifying flag values +/// +pub type Constraint(a) = + fn(a) -> Result(Nil) + +/// one_of returns a Constraint that ensures the parsed flag value is +/// one of the allowed values. +/// +pub fn one_of(allowed: List(a)) -> Constraint(a) { + let allowed_set = set.from_list(allowed) + fn(val: a) -> Result(Nil) { + case set.contains(allowed_set, val) { + True -> Ok(Nil) + False -> + snag.error( + "invalid value '" <> string.inspect(val) <> "', must be one of: [" <> { + allowed + |> list.map(fn(a) { "'" <> string.inspect(a) <> "'" }) + |> string.join(", ") <> "]" + }, + ) + } + } +} + +/// none_of returns a Constraint that ensures the parsed flag value is not one of the disallowed values. +/// +pub fn none_of(disallowed: List(a)) -> Constraint(a) { + let disallowed_set = set.from_list(disallowed) + fn(val: a) -> Result(Nil) { + case set.contains(disallowed_set, val) { + False -> Ok(Nil) + True -> + snag.error( + "invalid value '" <> string.inspect(val) <> "', must not be one of: [" <> { + { + disallowed + |> list.map(fn(a) { "'" <> string.inspect(a) <> "'" }) + |> string.join(", ") <> "]" + } + }, + ) + } + } +} + +/// each is a convenience function for applying a Constraint(a) to a List(a). +/// This is useful because the default behaviour for constraints on lists is that they will apply to the list as a whole. +/// +/// For example, to apply one_of to all items in a `List(Int)`: +/// ```gleam +/// [1, 2, 3, 4] |> one_of |> each +/// ``` +pub fn each(constraint: Constraint(a)) -> Constraint(List(a)) { + fn(l: List(a)) -> Result(Nil) { + l + |> list.try_map(constraint) + |> result.replace(Nil) + } +} diff --git a/aoc2023/build/packages/glint/src/glint@flag.erl b/aoc2023/build/packages/glint/src/glint@flag.erl new file mode 100644 index 0000000..bcce6db --- /dev/null +++ b/aoc2023/build/packages/glint/src/glint@flag.erl @@ -0,0 +1,523 @@ +-module(glint@flag). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([string/0, string_list/0, build/1, constraint/2, description/2, default/2, build_map/1, int/0, int_list/0, float/0, float_list/0, bool/0, flag_type_help/1, flags_help/1, update_flags/2, get_int_value/1, get_int/2, get_ints_value/1, get_ints/2, get_bool_value/1, get_bool/2, get_string_value/1, get_string/2, get_strings_value/1, get_strings/2, get_float_value/1, get_float/2, get_floats_value/1, get_floats/2]). +-export_type([value/0, flag_builder/1, internal/1, flag/0]). + +-type value() :: {b, internal(boolean())} | + {i, internal(integer())} | + {li, internal(list(integer()))} | + {f, internal(float())} | + {lf, internal(list(float()))} | + {s, internal(binary())} | + {ls, internal(list(binary()))}. + +-opaque flag_builder(FTZ) :: {flag_builder, + binary(), + fun((binary()) -> {ok, FTZ} | {error, snag:snag()}), + fun((internal(FTZ)) -> value()), + gleam@option:option(FTZ)}. + +-opaque internal(FUA) :: {internal, + gleam@option:option(FUA), + fun((binary()) -> {ok, FUA} | {error, snag:snag()})}. + +-type flag() :: {flag, value(), binary()}. + +-spec new( + fun((internal(FUR)) -> value()), + fun((binary()) -> {ok, FUR} | {error, snag:snag()}) +) -> flag_builder(FUR). +new(Valuer, P) -> + {flag_builder, <<""/utf8>>, P, Valuer, none}. + +-spec string() -> flag_builder(binary()). +string() -> + new(fun(Field@0) -> {s, Field@0} end, fun(S) -> {ok, S} end). + +-spec string_list() -> flag_builder(list(binary())). +string_list() -> + new(fun(Field@0) -> {ls, Field@0} end, fun(Input) -> _pipe = Input, + _pipe@1 = gleam@string:split(_pipe, <<","/utf8>>), + {ok, _pipe@1} end). + +-spec build(flag_builder(any())) -> flag(). +build(Fb) -> + {flag, + (erlang:element(4, Fb))( + {internal, erlang:element(5, Fb), erlang:element(3, Fb)} + ), + erlang:element(2, Fb)}. + +-spec attempt( + {ok, FVI} | {error, FVJ}, + fun((FVI) -> {ok, any()} | {error, FVJ}) +) -> {ok, FVI} | {error, FVJ}. +attempt(Val, F) -> + gleam@result:'try'(Val, fun(A) -> gleam@result:replace(F(A), A) end). + +-spec wrap_with_constraint( + fun((binary()) -> {ok, FVC} | {error, snag:snag()}), + fun((FVC) -> {ok, nil} | {error, snag:snag()}) +) -> fun((binary()) -> {ok, FVC} | {error, snag:snag()}). +wrap_with_constraint(P, Constraint) -> + fun(Input) -> attempt(P(Input), Constraint) end. + +-spec constraint( + flag_builder(FUY), + fun((FUY) -> {ok, nil} | {error, snag:snag()}) +) -> flag_builder(FUY). +constraint(Builder, Constraint) -> + erlang:setelement( + 3, + Builder, + wrap_with_constraint(erlang:element(3, Builder), Constraint) + ). + +-spec description(flag_builder(FVR), binary()) -> flag_builder(FVR). +description(Builder, Description) -> + erlang:setelement(2, Builder, Description). + +-spec default(flag_builder(FVU), FVU) -> flag_builder(FVU). +default(Builder, Default) -> + erlang:setelement(5, Builder, {some, Default}). + +-spec build_map(list({binary(), flag()})) -> gleam@map:map_(binary(), flag()). +build_map(Flags) -> + gleam@map:from_list(Flags). + +-spec access_type_error(binary()) -> {ok, any()} | {error, snag:snag()}. +access_type_error(Flag_type) -> + snag:error(<<"cannot access flag as "/utf8, Flag_type/binary>>). + +-spec flag_not_provided_error() -> {ok, any()} | {error, snag:snag()}. +flag_not_provided_error() -> + snag:error(<<"no value provided"/utf8>>). + +-spec construct_value(binary(), internal(FWE), fun((internal(FWE)) -> value())) -> {ok, + value()} | + {error, snag:snag()}. +construct_value(Input, Internal, Constructor) -> + gleam@result:map( + (erlang:element(3, Internal))(Input), + fun(Val) -> Constructor(erlang:setelement(2, Internal, {some, Val})) end + ). + +-spec compute_flag(binary(), value()) -> {ok, value()} | {error, snag:snag()}. +compute_flag(Input, Current) -> + _pipe = Input, + _pipe@1 = case Current of + {i, Internal} -> + fun(_capture) -> + construct_value( + _capture, + Internal, + fun(Field@0) -> {i, Field@0} end + ) + end; + + {li, Internal@1} -> + fun(_capture@1) -> + construct_value( + _capture@1, + Internal@1, + fun(Field@0) -> {li, Field@0} end + ) + end; + + {f, Internal@2} -> + fun(_capture@2) -> + construct_value( + _capture@2, + Internal@2, + fun(Field@0) -> {f, Field@0} end + ) + end; + + {lf, Internal@3} -> + fun(_capture@3) -> + construct_value( + _capture@3, + Internal@3, + fun(Field@0) -> {lf, Field@0} end + ) + end; + + {s, Internal@4} -> + fun(_capture@4) -> + construct_value( + _capture@4, + Internal@4, + fun(Field@0) -> {s, Field@0} end + ) + end; + + {ls, Internal@5} -> + fun(_capture@5) -> + construct_value( + _capture@5, + Internal@5, + fun(Field@0) -> {ls, Field@0} end + ) + end; + + {b, Internal@6} -> + fun(_capture@6) -> + construct_value( + _capture@6, + Internal@6, + fun(Field@0) -> {b, Field@0} end + ) + end + end(_pipe), + snag:context(_pipe@1, <<"failed to compute value for flag"/utf8>>). + +-spec layer_invalid_flag(snag:snag(), binary()) -> snag:snag(). +layer_invalid_flag(Err, Flag) -> + snag:layer(Err, <<<<"invalid flag '"/utf8, Flag/binary>>/binary, "'"/utf8>>). + +-spec no_value_flag_err(binary()) -> snag:snag(). +no_value_flag_err(Flag_input) -> + _pipe = (<<<<"flag '"/utf8, Flag_input/binary>>/binary, + "' has no assigned value"/utf8>>), + _pipe@1 = snag:new(_pipe), + layer_invalid_flag(_pipe@1, Flag_input). + +-spec undefined_flag_err(binary()) -> snag:snag(). +undefined_flag_err(Key) -> + _pipe = <<"flag provided but not defined"/utf8>>, + _pipe@1 = snag:new(_pipe), + layer_invalid_flag(_pipe@1, Key). + +-spec cannot_parse(binary(), binary()) -> snag:snag(). +cannot_parse(Value, Kind) -> + _pipe = (<<<<<<"cannot parse value '"/utf8, Value/binary>>/binary, + "' as "/utf8>>/binary, + Kind/binary>>), + snag:new(_pipe). + +-spec int() -> flag_builder(integer()). +int() -> + new(fun(Field@0) -> {i, Field@0} end, fun(Input) -> _pipe = Input, + _pipe@1 = gleam@int:parse(_pipe), + gleam@result:replace_error( + _pipe@1, + cannot_parse(Input, <<"int"/utf8>>) + ) end). + +-spec int_list() -> flag_builder(list(integer())). +int_list() -> + new(fun(Field@0) -> {li, Field@0} end, fun(Input) -> _pipe = Input, + _pipe@1 = gleam@string:split(_pipe, <<","/utf8>>), + _pipe@2 = gleam@list:try_map(_pipe@1, fun gleam@int:parse/1), + gleam@result:replace_error( + _pipe@2, + cannot_parse(Input, <<"int list"/utf8>>) + ) end). + +-spec float() -> flag_builder(float()). +float() -> + new(fun(Field@0) -> {f, Field@0} end, fun(Input) -> _pipe = Input, + _pipe@1 = gleam@float:parse(_pipe), + gleam@result:replace_error( + _pipe@1, + cannot_parse(Input, <<"float"/utf8>>) + ) end). + +-spec float_list() -> flag_builder(list(float())). +float_list() -> + new(fun(Field@0) -> {lf, Field@0} end, fun(Input) -> _pipe = Input, + _pipe@1 = gleam@string:split(_pipe, <<","/utf8>>), + _pipe@2 = gleam@list:try_map(_pipe@1, fun gleam@float:parse/1), + gleam@result:replace_error( + _pipe@2, + cannot_parse(Input, <<"float list"/utf8>>) + ) end). + +-spec bool() -> flag_builder(boolean()). +bool() -> + new( + fun(Field@0) -> {b, Field@0} end, + fun(Input) -> case gleam@string:lowercase(Input) of + <<"true"/utf8>> -> + {ok, true}; + + <<"t"/utf8>> -> + {ok, true}; + + <<"false"/utf8>> -> + {ok, false}; + + <<"f"/utf8>> -> + {ok, false}; + + _ -> + {error, cannot_parse(Input, <<"bool"/utf8>>)} + end end + ). + +-spec flag_type_help({binary(), flag()}) -> binary(). +flag_type_help(Flag) -> + {Name, Contents} = Flag, + Kind = case erlang:element(2, Contents) of + {i, _} -> + <<"INT"/utf8>>; + + {b, _} -> + <<"BOOL"/utf8>>; + + {f, _} -> + <<"FLOAT"/utf8>>; + + {lf, _} -> + <<"FLOAT_LIST"/utf8>>; + + {li, _} -> + <<"INT_LIST"/utf8>>; + + {ls, _} -> + <<"STRING_LIST"/utf8>>; + + {s, _} -> + <<"STRING"/utf8>> + end, + <<<<<<<<<<"--"/utf8, Name/binary>>/binary, "="/utf8>>/binary, "<"/utf8>>/binary, + Kind/binary>>/binary, + ">"/utf8>>. + +-spec flag_help({binary(), flag()}) -> binary(). +flag_help(Flag) -> + <<<<(flag_type_help(Flag))/binary, "\t\t"/utf8>>/binary, + (erlang:element(3, (erlang:element(2, Flag))))/binary>>. + +-spec flags_help(gleam@map:map_(binary(), flag())) -> list(binary()). +flags_help(Flags) -> + _pipe = Flags, + _pipe@1 = gleam@map:to_list(_pipe), + gleam@list:map(_pipe@1, fun flag_help/1). + +-spec access(gleam@map:map_(binary(), flag()), binary()) -> {ok, flag()} | + {error, snag:snag()}. +access(Flags, Name) -> + _pipe = gleam@map:get(Flags, Name), + gleam@result:replace_error(_pipe, undefined_flag_err(Name)). + +-spec update_flag_value(gleam@map:map_(binary(), flag()), {binary(), binary()}) -> {ok, + gleam@map:map_(binary(), flag())} | + {error, snag:snag()}. +update_flag_value(Flags, Data) -> + {Key, Input} = Data, + gleam@result:'try'( + access(Flags, Key), + fun(Contents) -> + gleam@result:map( + begin + _pipe = compute_flag(Input, erlang:element(2, Contents)), + gleam@result:map_error( + _pipe, + fun(_capture) -> layer_invalid_flag(_capture, Key) end + ) + end, + fun(Value) -> + gleam@map:insert( + Flags, + Key, + erlang:setelement(2, Contents, Value) + ) + end + ) + end + ). + +-spec attempt_toggle_flag(gleam@map:map_(binary(), flag()), binary()) -> {ok, + gleam@map:map_(binary(), flag())} | + {error, snag:snag()}. +attempt_toggle_flag(Flags, Key) -> + gleam@result:'try'( + access(Flags, Key), + fun(Contents) -> case erlang:element(2, Contents) of + {b, {internal, none, _} = Internal} -> + _pipe = erlang:setelement(2, Internal, {some, true}), + _pipe@1 = {b, _pipe}, + _pipe@2 = (fun(Val) -> + erlang:setelement(2, Contents, Val) + end)(_pipe@1), + _pipe@3 = gleam@map:insert(Flags, Key, _pipe@2), + {ok, _pipe@3}; + + {b, {internal, {some, Val@1}, _} = Internal@1} -> + _pipe@4 = erlang:setelement( + 2, + Internal@1, + {some, not Val@1} + ), + _pipe@5 = {b, _pipe@4}, + _pipe@6 = (fun(Val@2) -> + erlang:setelement(2, Contents, Val@2) + end)(_pipe@5), + _pipe@7 = gleam@map:insert(Flags, Key, _pipe@6), + {ok, _pipe@7}; + + _ -> + {error, no_value_flag_err(Key)} + end end + ). + +-spec update_flags(gleam@map:map_(binary(), flag()), binary()) -> {ok, + gleam@map:map_(binary(), flag())} | + {error, snag:snag()}. +update_flags(Flags, Flag_input) -> + Flag_input@1 = gleam@string:drop_left( + Flag_input, + gleam@string:length(<<"--"/utf8>>) + ), + case gleam@string:split_once(Flag_input@1, <<"="/utf8>>) of + {ok, Data} -> + update_flag_value(Flags, Data); + + {error, _} -> + attempt_toggle_flag(Flags, Flag_input@1) + end. + +-spec get_value( + gleam@map:map_(binary(), flag()), + binary(), + fun((flag()) -> {ok, FWM} | {error, snag:snag()}) +) -> {ok, FWM} | {error, snag:snag()}. +get_value(Flags, Key, Kind) -> + _pipe = access(Flags, Key), + _pipe@1 = gleam@result:'try'(_pipe, Kind), + snag:context( + _pipe@1, + <<<<"failed to retrieve value for flag '"/utf8, Key/binary>>/binary, + "'"/utf8>> + ). + +-spec get_int_value(flag()) -> {ok, integer()} | {error, snag:snag()}. +get_int_value(Flag) -> + case erlang:element(2, Flag) of + {i, {internal, {some, Val}, _}} -> + {ok, Val}; + + {i, {internal, none, _}} -> + flag_not_provided_error(); + + _ -> + access_type_error(<<"int"/utf8>>) + end. + +-spec get_int(gleam@map:map_(binary(), flag()), binary()) -> {ok, integer()} | + {error, snag:snag()}. +get_int(Flags, Name) -> + get_value(Flags, Name, fun get_int_value/1). + +-spec get_ints_value(flag()) -> {ok, list(integer())} | {error, snag:snag()}. +get_ints_value(Flag) -> + case erlang:element(2, Flag) of + {li, {internal, {some, Val}, _}} -> + {ok, Val}; + + {li, {internal, none, _}} -> + flag_not_provided_error(); + + _ -> + access_type_error(<<"int list"/utf8>>) + end. + +-spec get_ints(gleam@map:map_(binary(), flag()), binary()) -> {ok, + list(integer())} | + {error, snag:snag()}. +get_ints(Flags, Name) -> + get_value(Flags, Name, fun get_ints_value/1). + +-spec get_bool_value(flag()) -> {ok, boolean()} | {error, snag:snag()}. +get_bool_value(Flag) -> + case erlang:element(2, Flag) of + {b, {internal, {some, Val}, _}} -> + {ok, Val}; + + {b, {internal, none, _}} -> + flag_not_provided_error(); + + _ -> + access_type_error(<<"bool"/utf8>>) + end. + +-spec get_bool(gleam@map:map_(binary(), flag()), binary()) -> {ok, boolean()} | + {error, snag:snag()}. +get_bool(Flags, Name) -> + get_value(Flags, Name, fun get_bool_value/1). + +-spec get_string_value(flag()) -> {ok, binary()} | {error, snag:snag()}. +get_string_value(Flag) -> + case erlang:element(2, Flag) of + {s, {internal, {some, Val}, _}} -> + {ok, Val}; + + {s, {internal, none, _}} -> + flag_not_provided_error(); + + _ -> + access_type_error(<<"string"/utf8>>) + end. + +-spec get_string(gleam@map:map_(binary(), flag()), binary()) -> {ok, binary()} | + {error, snag:snag()}. +get_string(Flags, Name) -> + get_value(Flags, Name, fun get_string_value/1). + +-spec get_strings_value(flag()) -> {ok, list(binary())} | {error, snag:snag()}. +get_strings_value(Flag) -> + case erlang:element(2, Flag) of + {ls, {internal, {some, Val}, _}} -> + {ok, Val}; + + {ls, {internal, none, _}} -> + flag_not_provided_error(); + + _ -> + access_type_error(<<"string list"/utf8>>) + end. + +-spec get_strings(gleam@map:map_(binary(), flag()), binary()) -> {ok, + list(binary())} | + {error, snag:snag()}. +get_strings(Flags, Name) -> + get_value(Flags, Name, fun get_strings_value/1). + +-spec get_float_value(flag()) -> {ok, float()} | {error, snag:snag()}. +get_float_value(Flag) -> + case erlang:element(2, Flag) of + {f, {internal, {some, Val}, _}} -> + {ok, Val}; + + {f, {internal, none, _}} -> + flag_not_provided_error(); + + _ -> + access_type_error(<<"float"/utf8>>) + end. + +-spec get_float(gleam@map:map_(binary(), flag()), binary()) -> {ok, float()} | + {error, snag:snag()}. +get_float(Flags, Name) -> + get_value(Flags, Name, fun get_float_value/1). + +-spec get_floats_value(flag()) -> {ok, list(float())} | {error, snag:snag()}. +get_floats_value(Flag) -> + case erlang:element(2, Flag) of + {lf, {internal, {some, Val}, _}} -> + {ok, Val}; + + {lf, {internal, none, _}} -> + flag_not_provided_error(); + + _ -> + access_type_error(<<"float list"/utf8>>) + end. + +-spec get_floats(gleam@map:map_(binary(), flag()), binary()) -> {ok, + list(float())} | + {error, snag:snag()}. +get_floats(Flags, Name) -> + get_value(Flags, Name, fun get_floats_value/1). diff --git a/aoc2023/build/packages/glint/src/glint@flag@constraint.erl b/aoc2023/build/packages/glint/src/glint@flag@constraint.erl new file mode 100644 index 0000000..2978be0 --- /dev/null +++ b/aoc2023/build/packages/glint/src/glint@flag@constraint.erl @@ -0,0 +1,68 @@ +-module(glint@flag@constraint). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([one_of/1, none_of/1, each/1]). + +-spec one_of(list(FSI)) -> fun((FSI) -> {ok, nil} | {error, snag:snag()}). +one_of(Allowed) -> + Allowed_set = gleam@set:from_list(Allowed), + fun(Val) -> case gleam@set:contains(Allowed_set, Val) of + true -> + {ok, nil}; + + false -> + snag:error( + <<<<<<"invalid value '"/utf8, + (gleam@string:inspect(Val))/binary>>/binary, + "', must be one of: ["/utf8>>/binary, + ((<<(begin + _pipe = Allowed, + _pipe@1 = gleam@list:map( + _pipe, + fun(A) -> + <<<<"'"/utf8, + (gleam@string:inspect(A))/binary>>/binary, + "'"/utf8>> + end + ), + gleam@string:join(_pipe@1, <<", "/utf8>>) + end)/binary, + "]"/utf8>>))/binary>> + ) + end end. + +-spec none_of(list(FSL)) -> fun((FSL) -> {ok, nil} | {error, snag:snag()}). +none_of(Disallowed) -> + Disallowed_set = gleam@set:from_list(Disallowed), + fun(Val) -> case gleam@set:contains(Disallowed_set, Val) of + false -> + {ok, nil}; + + true -> + snag:error( + <<<<<<"invalid value '"/utf8, + (gleam@string:inspect(Val))/binary>>/binary, + "', must not be one of: ["/utf8>>/binary, + (((<<(begin + _pipe = Disallowed, + _pipe@1 = gleam@list:map( + _pipe, + fun(A) -> + <<<<"'"/utf8, + (gleam@string:inspect(A))/binary>>/binary, + "'"/utf8>> + end + ), + gleam@string:join(_pipe@1, <<", "/utf8>>) + end)/binary, + "]"/utf8>>)))/binary>> + ) + end end. + +-spec each(fun((FSO) -> {ok, nil} | {error, snag:snag()})) -> fun((list(FSO)) -> {ok, + nil} | + {error, snag:snag()}). +each(Constraint) -> + fun(L) -> _pipe = L, + _pipe@1 = gleam@list:try_map(_pipe, Constraint), + gleam@result:replace(_pipe@1, nil) end. diff --git a/aoc2023/build/packages/packages.toml b/aoc2023/build/packages/packages.toml new file mode 100644 index 0000000..d4c7b69 --- /dev/null +++ b/aoc2023/build/packages/packages.toml @@ -0,0 +1,16 @@ +[packages] +simplifile = "1.0.0" +gleam_community_ansi = "1.2.0" +glint = "0.13.0" +gleam_community_colour = "1.2.0" +gleam_erlang = "0.23.1" +tom = "0.2.1" +gleam_httpc = "2.1.1" +adglent = "1.2.0" +gap = "1.0.1" +gleam_community_maths = "1.0.1" +gleam_otp = "0.8.0" +gleam_stdlib = "0.33.0" +pqueue = "2.0.7" +snag = "0.2.1" +gleam_http = "3.5.2" diff --git a/aoc2023/build/packages/pqueue/LICENSE b/aoc2023/build/packages/pqueue/LICENSE new file mode 100644 index 0000000..5697803 --- /dev/null +++ b/aoc2023/build/packages/pqueue/LICENSE @@ -0,0 +1,21 @@ +MIT License
+
+Copyright (c) 2011-2023 Michael Truog <mjtruog at protonmail dot com>
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/aoc2023/build/packages/pqueue/README.markdown b/aoc2023/build/packages/pqueue/README.markdown new file mode 100644 index 0000000..77aaf1c --- /dev/null +++ b/aoc2023/build/packages/pqueue/README.markdown @@ -0,0 +1,31 @@ +Erlang Priority Queue Implementation +==================================== + +The priority queue implementations implement a subset of the stdlib Erlang queue interface as seen in the implementation used by both [Riak and RabbitMQ](https://github.com/basho/riak_core/blob/master/src/riak_core_priority_queue.erl). + +The implementations: + +* `priority_queue` (fastest for any priorities when only using a single priority at a time) +* `pqueue` (fastest for 41 priorities, -20 (high) to 20 (low), when using 2 or more priorities at the same time) +* `pqueue2` (slower heap implementation) +* `pqueue3` (faster than `pqueue2` and `priority_queue` when using 64 or more priorities at the same time) +* `pqueue4` (slightly slower than `pqueue` but fastest for allowing 257 priorities, -128 (high) to 128 (low), i.e., fastest when using 42 or more priorities at the same time) + +[The latest results are here](http://okeuday.livejournal.com/19539.html), with [the benchmark here](http://github.com/okeuday/erlbench). + +Author +------ + +Michael Truog (mjtruog at protonmail dot com) + +Thanks +------ + +* Jesper Louis andersen (PropEr integration and testing) +* Ulf Wiger (suggestions and insight) + +License +------- + +MIT License + diff --git a/aoc2023/build/packages/pqueue/doc/edoc-info b/aoc2023/build/packages/pqueue/doc/edoc-info new file mode 100644 index 0000000..5e5a8d3 --- /dev/null +++ b/aoc2023/build/packages/pqueue/doc/edoc-info @@ -0,0 +1,3 @@ +%% encoding: UTF-8 +{application,pqueue}. +{modules,[pqueue,pqueue2,pqueue3,pqueue4]}. diff --git a/aoc2023/build/packages/pqueue/doc/erlang.png b/aoc2023/build/packages/pqueue/doc/erlang.png Binary files differnew file mode 100644 index 0000000..987a618 --- /dev/null +++ b/aoc2023/build/packages/pqueue/doc/erlang.png diff --git a/aoc2023/build/packages/pqueue/doc/index.html b/aoc2023/build/packages/pqueue/doc/index.html new file mode 100644 index 0000000..d55b5e6 --- /dev/null +++ b/aoc2023/build/packages/pqueue/doc/index.html @@ -0,0 +1,17 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<title>The pqueue application</title> +</head> +<frameset cols="20%,80%"> +<frame src="modules-frame.html" name="modulesFrame" title=""> + +<frame src="overview-summary.html" name="overviewFrame" title=""> +<noframes> +<h2>This page uses frames</h2> +<p>Your browser does not accept frames. +<br>You should go to the <a href="overview-summary.html">non-frame version</a> instead. +</p> +</noframes> +</frameset> +</html>
\ No newline at end of file diff --git a/aoc2023/build/packages/pqueue/doc/modules-frame.html b/aoc2023/build/packages/pqueue/doc/modules-frame.html new file mode 100644 index 0000000..5a87cc4 --- /dev/null +++ b/aoc2023/build/packages/pqueue/doc/modules-frame.html @@ -0,0 +1,15 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<title>The pqueue application</title> +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc"> +</head> +<body bgcolor="white"> +<h2 class="indextitle">Modules</h2> +<table width="100%" border="0" summary="list of modules"> +<tr><td><a href="pqueue.html" target="overviewFrame" class="module">pqueue</a></td></tr> +<tr><td><a href="pqueue2.html" target="overviewFrame" class="module">pqueue2</a></td></tr> +<tr><td><a href="pqueue3.html" target="overviewFrame" class="module">pqueue3</a></td></tr> +<tr><td><a href="pqueue4.html" target="overviewFrame" class="module">pqueue4</a></td></tr></table> +</body> +</html>
\ No newline at end of file diff --git a/aoc2023/build/packages/pqueue/doc/overview-summary.html b/aoc2023/build/packages/pqueue/doc/overview-summary.html new file mode 100644 index 0000000..e2f8906 --- /dev/null +++ b/aoc2023/build/packages/pqueue/doc/overview-summary.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>The pqueue application</title> +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc"> +</head> +<body bgcolor="white"> +<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<h1>The pqueue application</h1> + +<hr> +<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<p><i>Generated by EDoc</i></p> +</body> +</html> diff --git a/aoc2023/build/packages/pqueue/doc/pqueue.html b/aoc2023/build/packages/pqueue/doc/pqueue.html new file mode 100644 index 0000000..40b05ac --- /dev/null +++ b/aoc2023/build/packages/pqueue/doc/pqueue.html @@ -0,0 +1,166 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>Module pqueue</title> +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc"> +</head> +<body bgcolor="white"> +<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<hr> + +<h1>Module pqueue</h1> +<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul> + <h3><a name="Static_Priority_Queue.">Static Priority Queue.</a></h3> + This priority queue implementation depends on a static number of priorities + (-20 (high) to 20 (low)) so that tuple access times can be exploited for + quick in/out priority queue operations. +<p>Copyright © 2011-2020 Michael Truog</p> + +<p><b>Version:</b> 2.0.1 Nov 26 2020 14:55:34 + ------------------------------------------------------------------------</p> +<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog at protonmail dot com"><tt>mjtruog at protonmail dot com</tt></a>).</p> + +<h2><a name="description">Description</a></h2> + <h3><a name="Static_Priority_Queue.">Static Priority Queue.</a></h3> + This priority queue implementation depends on a static number of priorities + (-20 (high) to 20 (low)) so that tuple access times can be exploited for + quick in/out priority queue operations. This implementation was created to + avoid the slowness within the priority queue used by both RabbitMQ and Riak + (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl). +<h2><a name="types">Data Types</a></h2> + +<h3 class="typedecl"><a name="type-pqueue">pqueue()</a></h3> +<p><tt>pqueue() = {integer(), {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, <a href="queue.html#type-queue">queue:queue()</a>, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}} | {empty, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, <a href="queue.html#type-queue">queue:queue()</a>, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}}</tt></p> + + +<h2><a name="index">Function Index</a></h2> +<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#in-2">in/2</a></td><td> + <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#in-3">in/3</a></td><td> + <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#is_empty-1">is_empty/1</a></td><td> + <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#is_queue-1">is_queue/1</a></td><td> + <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#join-2">join/2</a></td><td> + <h4><a name="Join_two_priority_queues.">Join two priority queues.</a></h4> + O(N).</td></tr> +<tr><td valign="top"><a href="#len-1">len/1</a></td><td> + <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4> + O(N).</td></tr> +<tr><td valign="top"><a href="#new-0">new/0</a></td><td> + <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#out-1">out/1</a></td><td> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + O(1) amortized, O(N) worst case.</td></tr> +<tr><td valign="top"><a href="#out-2">out/2</a></td><td> + <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4> + O(1) amortized, O(N) worst case.</td></tr> +<tr><td valign="top"><a href="#pout-1">pout/1</a></td><td> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + Includes the priority in the return value.</td></tr> +<tr><td valign="top"><a href="#test-0">test/0</a></td><td> + <h4><a name="Regression_test.">Regression test.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#to_list-1">to_list/1</a></td><td> + <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4> + O(N).</td></tr> +</table> + +<h2><a name="functions">Function Details</a></h2> + +<h3 class="function"><a name="in-2">in/2</a></h3> +<div class="spec"> +<p><tt>in(X::term(), Q::<a href="#type-pqueue">pqueue()</a>) -> <a href="#type-pqueue">pqueue()</a></tt><br></p> +</div><p> + <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="in-3">in/3</a></h3> +<div class="spec"> +<p><tt>in(X::term(), P::integer(), Q::<a href="#type-pqueue">pqueue()</a>) -> <a href="#type-pqueue">pqueue()</a></tt><br></p> +</div><p> + <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="is_empty-1">is_empty/1</a></h3> +<div class="spec"> +<p><tt>is_empty(X1::<a href="#type-pqueue">pqueue()</a>) -> true | false</tt><br></p> +</div><p> + <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4> + O(1)</p> + +<h3 class="function"><a name="is_queue-1">is_queue/1</a></h3> +<div class="spec"> +<p><tt>is_queue(X1::<a href="#type-pqueue">pqueue()</a>) -> true | false</tt><br></p> +</div><p> + <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4> + O(1)</p> + +<h3 class="function"><a name="join-2">join/2</a></h3> +<div class="spec"> +<p><tt>join(X1::<a href="#type-pqueue">pqueue()</a>, X2::<a href="#type-pqueue">pqueue()</a>) -> <a href="#type-pqueue">pqueue()</a></tt><br></p> +</div><p> + <h4><a name="Join_two_priority_queues.">Join two priority queues.</a></h4> + O(N)</p> + +<h3 class="function"><a name="len-1">len/1</a></h3> +<div class="spec"> +<p><tt>len(X1::<a href="#type-pqueue">pqueue()</a>) -> non_neg_integer()</tt><br></p> +</div><p> + <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4> + O(N)</p> + +<h3 class="function"><a name="new-0">new/0</a></h3> +<div class="spec"> +<p><tt>new() -> <a href="#type-pqueue">pqueue()</a></tt><br></p> +</div><p> + <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="out-1">out/1</a></h3> +<div class="spec"> +<p><tt>out(Q::<a href="#type-pqueue">pqueue()</a>) -> {{value, term()}, <a href="#type-pqueue">pqueue()</a>} | {empty, <a href="#type-pqueue">pqueue()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="out-2">out/2</a></h3> +<div class="spec"> +<p><tt>out(P::integer(), Q::<a href="#type-pqueue">pqueue()</a>) -> {{value, term()}, <a href="#type-pqueue">pqueue()</a>} | {empty, <a href="#type-pqueue">pqueue()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4> + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="pout-1">pout/1</a></h3> +<div class="spec"> +<p><tt>pout(Q::<a href="#type-pqueue">pqueue()</a>) -> {{value, term(), integer()}, <a href="#type-pqueue">pqueue()</a>} | {empty, <a href="#type-pqueue">pqueue()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + Includes the priority in the return value. + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="test-0">test/0</a></h3> +<div class="spec"> +<p><tt>test() -> any()</tt></p> +</div><p> + <h4><a name="Regression_test.">Regression test.</a></h4> +</p> + +<h3 class="function"><a name="to_list-1">to_list/1</a></h3> +<div class="spec"> +<p><tt>to_list(X1::<a href="#type-pqueue">pqueue()</a>) -> [term()]</tt><br></p> +</div><p> + <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4> + O(N)</p> +<hr> + +<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<p><i>Generated by EDoc</i></p> +</body> +</html> diff --git a/aoc2023/build/packages/pqueue/doc/pqueue2.html b/aoc2023/build/packages/pqueue/doc/pqueue2.html new file mode 100644 index 0000000..2942b84 --- /dev/null +++ b/aoc2023/build/packages/pqueue/doc/pqueue2.html @@ -0,0 +1,143 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>Module pqueue2</title> +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc"> +</head> +<body bgcolor="white"> +<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<hr> + +<h1>Module pqueue2</h1> +<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul> + <h3><a name="Skew_Heap_Priority_Queue.">Skew Heap Priority Queue.</a></h3> + Ulf Wiger suggested pursuing a skew heap as an optimal Erlang priority + queue implementation. +<p>Copyright © 2011-2020 Michael Truog</p> + +<p><b>Version:</b> 2.0.1 Nov 26 2020 14:55:32 + ------------------------------------------------------------------------</p> +<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog at protonmail dot com"><tt>mjtruog at protonmail dot com</tt></a>).</p> + +<h2><a name="description">Description</a></h2> + <h3><a name="Skew_Heap_Priority_Queue.">Skew Heap Priority Queue.</a></h3> + Ulf Wiger suggested pursuing a skew heap as an optimal Erlang priority + queue implementation. Unfortunately, testing has shown this solution to + be more than 2 times slower than pqueue. +<h2><a name="types">Data Types</a></h2> + +<h3 class="typedecl"><a name="type-pqueue2">pqueue2()</a></h3> +<p><tt>pqueue2() = empty | {integer(), <a href="#type-pqueue2">pqueue2()</a>, <a href="#type-pqueue2">pqueue2()</a>, element, term()} | {integer(), <a href="#type-pqueue2">pqueue2()</a>, <a href="#type-pqueue2">pqueue2()</a>, queue, <a href="queue.html#type-queue">queue:queue()</a>}</tt></p> + + +<h2><a name="index">Function Index</a></h2> +<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#in-2">in/2</a></td><td> + <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#in-3">in/3</a></td><td> + <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#is_empty-1">is_empty/1</a></td><td> + <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#is_queue-1">is_queue/1</a></td><td> + <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#len-1">len/1</a></td><td> + <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#new-0">new/0</a></td><td> + <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#out-1">out/1</a></td><td> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#out-2">out/2</a></td><td> + <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#pout-1">pout/1</a></td><td> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + Includes the priority in the return value.</td></tr> +<tr><td valign="top"><a href="#test-0">test/0</a></td><td> + <h4><a name="Regression_test.">Regression test.</a></h4>.</td></tr> +<tr><td valign="top"><a href="#to_list-1">to_list/1</a></td><td> + <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>.</td></tr> +</table> + +<h2><a name="functions">Function Details</a></h2> + +<h3 class="function"><a name="in-2">in/2</a></h3> +<div class="spec"> +<p><tt>in(Value::term(), H::<a href="#type-pqueue2">pqueue2()</a>) -> <a href="#type-pqueue2">pqueue2()</a></tt><br></p> +</div><p> + <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4> +</p> + +<h3 class="function"><a name="in-3">in/3</a></h3> +<div class="spec"> +<p><tt>in(Value::term(), P::integer(), H::<a href="#type-pqueue2">pqueue2()</a>) -> <a href="#type-pqueue2">pqueue2()</a></tt><br></p> +</div><p> + <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4> +</p> + +<h3 class="function"><a name="is_empty-1">is_empty/1</a></h3> +<div class="spec"> +<p><tt>is_empty(X1::<a href="#type-pqueue2">pqueue2()</a>) -> true | false</tt><br></p> +</div><p> + <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4> +</p> + +<h3 class="function"><a name="is_queue-1">is_queue/1</a></h3> +<div class="spec"> +<p><tt>is_queue(X1::<a href="#type-pqueue2">pqueue2()</a>) -> true | false</tt><br></p> +</div><p> + <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4> +</p> + +<h3 class="function"><a name="len-1">len/1</a></h3> +<div class="spec"> +<p><tt>len(H::<a href="#type-pqueue2">pqueue2()</a>) -> non_neg_integer()</tt><br></p> +</div><p> + <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4> +</p> + +<h3 class="function"><a name="new-0">new/0</a></h3> +<div class="spec"> +<p><tt>new() -> <a href="#type-pqueue2">pqueue2()</a></tt><br></p> +</div><p> + <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4> +</p> + +<h3 class="function"><a name="out-1">out/1</a></h3> +<div class="spec"> +<p><tt>out(X1::<a href="#type-pqueue2">pqueue2()</a>) -> {{value, term()}, <a href="#type-pqueue2">pqueue2()</a>} | {empty, <a href="#type-pqueue2">pqueue2()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> +</p> + +<h3 class="function"><a name="out-2">out/2</a></h3> +<div class="spec"> +<p><tt>out(P::integer(), H::<a href="#type-pqueue2">pqueue2()</a>) -> {{value, term()}, <a href="#type-pqueue2">pqueue2()</a>} | {empty, <a href="#type-pqueue2">pqueue2()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4> +</p> + +<h3 class="function"><a name="pout-1">pout/1</a></h3> +<div class="spec"> +<p><tt>pout(X1::<a href="#type-pqueue2">pqueue2()</a>) -> {{value, term(), integer()}, <a href="#type-pqueue2">pqueue2()</a>} | {empty, <a href="#type-pqueue2">pqueue2()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + Includes the priority in the return value.</p> + +<h3 class="function"><a name="test-0">test/0</a></h3> +<div class="spec"> +<p><tt>test() -> any()</tt></p> +</div><p> + <h4><a name="Regression_test.">Regression test.</a></h4> +</p> + +<h3 class="function"><a name="to_list-1">to_list/1</a></h3> +<div class="spec"> +<p><tt>to_list(H::<a href="#type-pqueue2">pqueue2()</a>) -> [term()]</tt><br></p> +</div><p> + <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4> +</p> +<hr> + +<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<p><i>Generated by EDoc</i></p> +</body> +</html> diff --git a/aoc2023/build/packages/pqueue/doc/pqueue3.html b/aoc2023/build/packages/pqueue/doc/pqueue3.html new file mode 100644 index 0000000..35f1a7b --- /dev/null +++ b/aoc2023/build/packages/pqueue/doc/pqueue3.html @@ -0,0 +1,162 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>Module pqueue3</title> +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc"> +</head> +<body bgcolor="white"> +<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<hr> + +<h1>Module pqueue3</h1> +<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul> + <h3><a name="A_Large_Priority_Queue.">A Large Priority Queue.</a></h3> + This priority queue implementation depends on layered tuples, so that tuple + access times can be exploited for quick in/out priority queue operations + when using 64 or more total priorities. +<p>Copyright © 2011-2020 Michael Truog</p> + +<p><b>Version:</b> 2.0.1 Nov 26 2020 14:55:32 + ------------------------------------------------------------------------</p> +<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog at protonmail dot com"><tt>mjtruog at protonmail dot com</tt></a>).</p> + +<h2><a name="description">Description</a></h2> + <h3><a name="A_Large_Priority_Queue.">A Large Priority Queue.</a></h3> + This priority queue implementation depends on layered tuples, so that tuple + access times can be exploited for quick in/out priority queue operations + when using 64 or more total priorities. This implementation was created + to avoid the slowness within the priority queue used by + both RabbitMQ and Riak + (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl). +<h2><a name="types">Data Types</a></h2> + +<h3 class="typedecl"><a name="type-pqueue3">pqueue3()</a></h3> +<p><tt>pqueue3() = {integer(), integer(), empty | integer(), tuple()}</tt></p> + + +<h3 class="typedecl"><a name="type-pqueue3_empty">pqueue3_empty()</a></h3> +<p><tt>pqueue3_empty() = {integer(), integer(), empty, tuple()}</tt></p> + + +<h2><a name="index">Function Index</a></h2> +<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#in-2">in/2</a></td><td> + <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#in-3">in/3</a></td><td> + <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#is_empty-1">is_empty/1</a></td><td> + <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#is_queue-1">is_queue/1</a></td><td> + <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#len-1">len/1</a></td><td> + <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4> + O(N).</td></tr> +<tr><td valign="top"><a href="#new-0">new/0</a></td><td> + <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#new-1">new/1</a></td><td> + <h4><a name="Create_a_new_priority_queue_with_customization_options.">Create a new priority queue with customization options.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#out-1">out/1</a></td><td> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + O(1) amortized, O(N) worst case.</td></tr> +<tr><td valign="top"><a href="#out-2">out/2</a></td><td> + <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4> + O(1) amortized, O(N) worst case.</td></tr> +<tr><td valign="top"><a href="#pout-1">pout/1</a></td><td> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + Includes the priority in the return value.</td></tr> +<tr><td valign="top"><a href="#to_list-1">to_list/1</a></td><td> + <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4> + O(N).</td></tr> +</table> + +<h2><a name="functions">Function Details</a></h2> + +<h3 class="function"><a name="in-2">in/2</a></h3> +<div class="spec"> +<p><tt>in(Value::term(), Q::<a href="#type-pqueue3">pqueue3()</a>) -> <a href="#type-pqueue3">pqueue3()</a></tt><br></p> +</div><p> + <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="in-3">in/3</a></h3> +<div class="spec"> +<p><tt>in(Value::term(), P::integer(), X3::<a href="#type-pqueue3">pqueue3()</a>) -> <a href="#type-pqueue3">pqueue3()</a></tt><br></p> +</div><p> + <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="is_empty-1">is_empty/1</a></h3> +<div class="spec"> +<p><tt>is_empty(Q::<a href="#type-pqueue3">pqueue3()</a>) -> true | false</tt><br></p> +</div><p> + <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4> + O(1)</p> + +<h3 class="function"><a name="is_queue-1">is_queue/1</a></h3> +<div class="spec"> +<p><tt>is_queue(X1::<a href="#type-pqueue3">pqueue3()</a>) -> true | false</tt><br></p> +</div><p> + <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4> + O(1)</p> + +<h3 class="function"><a name="len-1">len/1</a></h3> +<div class="spec"> +<p><tt>len(Q::<a href="#type-pqueue3">pqueue3()</a>) -> non_neg_integer()</tt><br></p> +</div><p> + <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4> + O(N)</p> + +<h3 class="function"><a name="new-0">new/0</a></h3> +<div class="spec"> +<p><tt>new() -> <a href="#type-pqueue3_empty">pqueue3_empty()</a></tt><br></p> +</div><p> + <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="new-1">new/1</a></h3> +<div class="spec"> +<p><tt>new(Options::[{atom(), term()}]) -> <a href="#type-pqueue3">pqueue3()</a></tt><br></p> +</div><p> + <h4><a name="Create_a_new_priority_queue_with_customization_options.">Create a new priority queue with customization options.</a></h4> + O(1)</p> + +<h3 class="function"><a name="out-1">out/1</a></h3> +<div class="spec"> +<p><tt>out(Q::<a href="#type-pqueue3">pqueue3()</a>) -> {{value, term()}, <a href="#type-pqueue3">pqueue3()</a>} | {empty, <a href="#type-pqueue3">pqueue3()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="out-2">out/2</a></h3> +<div class="spec"> +<p><tt>out(P::integer(), Q::<a href="#type-pqueue3">pqueue3()</a>) -> {{value, term()}, <a href="#type-pqueue3">pqueue3()</a>} | {empty, <a href="#type-pqueue3">pqueue3()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4> + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="pout-1">pout/1</a></h3> +<div class="spec"> +<p><tt>pout(Q::<a href="#type-pqueue3">pqueue3()</a>) -> {{value, term(), integer()}, <a href="#type-pqueue3">pqueue3()</a>} | {empty, <a href="#type-pqueue3">pqueue3()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + Includes the priority in the return value. + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="to_list-1">to_list/1</a></h3> +<div class="spec"> +<p><tt>to_list(Q::<a href="#type-pqueue3">pqueue3()</a>) -> [term()]</tt><br></p> +</div><p> + <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4> + O(N)</p> +<hr> + +<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<p><i>Generated by EDoc</i></p> +</body> +</html> diff --git a/aoc2023/build/packages/pqueue/doc/pqueue4.html b/aoc2023/build/packages/pqueue/doc/pqueue4.html new file mode 100644 index 0000000..edcdb6e --- /dev/null +++ b/aoc2023/build/packages/pqueue/doc/pqueue4.html @@ -0,0 +1,205 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>Module pqueue4</title> +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc"> +</head> +<body bgcolor="white"> +<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<hr> + +<h1>Module pqueue4</h1> +<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul> + <h3><a name="Static_Priority_Queue.">Static Priority Queue.</a></h3> + This priority queue implementation depends on a static number of priorities + (-128 (high) to 128 (low)) so that tuple access times can be exploited for + quick in/out priority queue operations. +<p>Copyright © 2011-2020 Michael Truog</p> + +<p><b>Version:</b> 2.0.1 Nov 26 2020 14:55:34 + ------------------------------------------------------------------------</p> +<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog at protonmail dot com"><tt>mjtruog at protonmail dot com</tt></a>).</p> + +<h2><a name="description">Description</a></h2> + <h3><a name="Static_Priority_Queue.">Static Priority Queue.</a></h3> + This priority queue implementation depends on a static number of priorities + (-128 (high) to 128 (low)) so that tuple access times can be exploited for + quick in/out priority queue operations. This implementation was created to + avoid the slowness within the priority queue used by both RabbitMQ and Riak + (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl). +<h2><a name="types">Data Types</a></h2> + +<h3 class="typedecl"><a name="type-pqueue4">pqueue4()</a></h3> +<p><tt>pqueue4() = <a href="#type-pqueue4">pqueue4</a>(any())</tt></p> + + +<h3 class="typedecl"><a name="type-pqueue4">pqueue4()</a></h3> +<p><tt>pqueue4(T) = {<a href="#type-priority">priority()</a> | empty, non_neg_integer(), {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, <a href="queue.html#type-queue">queue:queue</a>(T), {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}}</tt></p> + + +<h3 class="typedecl"><a name="type-priority">priority()</a></h3> +<p><tt>priority() = -128..128</tt></p> + + +<h2><a name="index">Function Index</a></h2> +<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#filter-2">filter/2</a></td><td> + <h4><a name="Filter_the_priority_queue.">Filter the priority queue.</a></h4> + O(N).</td></tr> +<tr><td valign="top"><a href="#filter-3">filter/3</a></td><td> + <h4><a name="Filter_a_specific_priority_within_the_priority_queue.">Filter a specific priority within the priority queue.</a></h4> + O(N).</td></tr> +<tr><td valign="top"><a href="#in-2">in/2</a></td><td> + <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#in-3">in/3</a></td><td> + <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#is_empty-1">is_empty/1</a></td><td> + <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#is_queue-1">is_queue/1</a></td><td> + <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#len-1">len/1</a></td><td> + <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#new-0">new/0</a></td><td> + <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4> + O(1).</td></tr> +<tr><td valign="top"><a href="#out-1">out/1</a></td><td> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + O(1) amortized, O(N) worst case.</td></tr> +<tr><td valign="top"><a href="#out-2">out/2</a></td><td> + <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4> + O(1) amortized, O(N) worst case.</td></tr> +<tr><td valign="top"><a href="#pout-1">pout/1</a></td><td> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + Includes the priority in the return value.</td></tr> +<tr><td valign="top"><a href="#remove_unique-2">remove_unique/2</a></td><td> + <h4><a name="Remove_a_unique_value_from_the_priority_queue_with_a_binary_predicate.">Remove a unique value from the priority queue with a binary predicate.</a></h4> + O(N) but smaller constant than filter/2.</td></tr> +<tr><td valign="top"><a href="#remove_unique-3">remove_unique/3</a></td><td> + <h4><a name="Remove_a_unique_value_in_a_specific_priority_within_the_priority_queue_with_a_binary_predicate.">Remove a unique value in a specific priority within the priority queue with a binary predicate.</a></h4> + O(N) but smaller constant than filter/3.</td></tr> +<tr><td valign="top"><a href="#to_list-1">to_list/1</a></td><td> + <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4> + O(N).</td></tr> +<tr><td valign="top"><a href="#to_plist-1">to_plist/1</a></td><td> + <h4><a name="Convert_the_priority_queue_to_a_list_with_priorities.">Convert the priority queue to a list with priorities.</a></h4> + O(N).</td></tr> +</table> + +<h2><a name="functions">Function Details</a></h2> + +<h3 class="function"><a name="filter-2">filter/2</a></h3> +<div class="spec"> +<p><tt>filter(F::fun((any()) -> boolean()), Q::<a href="#type-pqueue4">pqueue4()</a>) -> <a href="#type-pqueue4">pqueue4()</a></tt><br></p> +</div><p> + <h4><a name="Filter_the_priority_queue.">Filter the priority queue.</a></h4> + O(N)</p> + +<h3 class="function"><a name="filter-3">filter/3</a></h3> +<div class="spec"> +<p><tt>filter(F::fun((any()) -> boolean()), P::integer(), Q::<a href="#type-pqueue4">pqueue4()</a>) -> <a href="#type-pqueue4">pqueue4()</a></tt><br></p> +</div><p> + <h4><a name="Filter_a_specific_priority_within_the_priority_queue.">Filter a specific priority within the priority queue.</a></h4> + O(N)</p> + +<h3 class="function"><a name="in-2">in/2</a></h3> +<div class="spec"> +<p><tt>in(X::any(), Q::<a href="#type-pqueue4">pqueue4()</a>) -> <a href="#type-pqueue4">pqueue4()</a></tt><br></p> +</div><p> + <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="in-3">in/3</a></h3> +<div class="spec"> +<p><tt>in(X::any(), P::integer(), Q::<a href="#type-pqueue4">pqueue4()</a>) -> <a href="#type-pqueue4">pqueue4()</a></tt><br></p> +</div><p> + <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="is_empty-1">is_empty/1</a></h3> +<div class="spec"> +<p><tt>is_empty(X1::<a href="#type-pqueue4">pqueue4()</a>) -> true | false</tt><br></p> +</div><p> + <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4> + O(1)</p> + +<h3 class="function"><a name="is_queue-1">is_queue/1</a></h3> +<div class="spec"> +<p><tt>is_queue(X1::<a href="#type-pqueue4">pqueue4()</a>) -> true | false</tt><br></p> +</div><p> + <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4> + O(1)</p> + +<h3 class="function"><a name="len-1">len/1</a></h3> +<div class="spec"> +<p><tt>len(X1::<a href="#type-pqueue4">pqueue4()</a>) -> non_neg_integer()</tt><br></p> +</div><p> + <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="new-0">new/0</a></h3> +<div class="spec"> +<p><tt>new() -> <a href="#type-pqueue4">pqueue4()</a></tt><br></p> +</div><p> + <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4> + O(1)</p> + +<h3 class="function"><a name="out-1">out/1</a></h3> +<div class="spec"> +<p><tt>out(Q::<a href="#type-pqueue4">pqueue4()</a>) -> {{value, any()}, <a href="#type-pqueue4">pqueue4()</a>} | {empty, <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="out-2">out/2</a></h3> +<div class="spec"> +<p><tt>out(P::integer(), Q::<a href="#type-pqueue4">pqueue4()</a>) -> {{value, any()}, <a href="#type-pqueue4">pqueue4()</a>} | {empty, <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4> + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="pout-1">pout/1</a></h3> +<div class="spec"> +<p><tt>pout(Q::<a href="#type-pqueue4">pqueue4()</a>) -> {{value, any(), integer()}, <a href="#type-pqueue4">pqueue4()</a>} | {empty, <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p> +</div><p> + <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4> + Includes the priority in the return value. + O(1) amortized, O(N) worst case</p> + +<h3 class="function"><a name="remove_unique-2">remove_unique/2</a></h3> +<div class="spec"> +<p><tt>remove_unique(F::fun((any()) -> boolean()), Q::<a href="#type-pqueue4">pqueue4()</a>) -> {boolean(), <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p> +</div><p> + <h4><a name="Remove_a_unique_value_from_the_priority_queue_with_a_binary_predicate.">Remove a unique value from the priority queue with a binary predicate.</a></h4> + O(N) but smaller constant than filter/2</p> + +<h3 class="function"><a name="remove_unique-3">remove_unique/3</a></h3> +<div class="spec"> +<p><tt>remove_unique(F::fun((any()) -> boolean()), P::integer(), Q::<a href="#type-pqueue4">pqueue4()</a>) -> {boolean(), <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p> +</div><p> + <h4><a name="Remove_a_unique_value_in_a_specific_priority_within_the_priority_queue_with_a_binary_predicate.">Remove a unique value in a specific priority within the priority queue with a binary predicate.</a></h4> + O(N) but smaller constant than filter/3</p> + +<h3 class="function"><a name="to_list-1">to_list/1</a></h3> +<div class="spec"> +<p><tt>to_list(Q::<a href="#type-pqueue4">pqueue4()</a>) -> list()</tt><br></p> +</div><p> + <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4> + O(N)</p> + +<h3 class="function"><a name="to_plist-1">to_plist/1</a></h3> +<div class="spec"> +<p><tt>to_plist(Q::<a href="#type-pqueue4">pqueue4()</a>) -> [{<a href="#type-priority">priority()</a>, list()}]</tt><br></p> +</div><p> + <h4><a name="Convert_the_priority_queue_to_a_list_with_priorities.">Convert the priority queue to a list with priorities.</a></h4> + O(N)</p> +<hr> + +<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div> +<p><i>Generated by EDoc</i></p> +</body> +</html> diff --git a/aoc2023/build/packages/pqueue/doc/stylesheet.css b/aoc2023/build/packages/pqueue/doc/stylesheet.css new file mode 100644 index 0000000..ab170c0 --- /dev/null +++ b/aoc2023/build/packages/pqueue/doc/stylesheet.css @@ -0,0 +1,55 @@ +/* standard EDoc style sheet */ +body { + font-family: Verdana, Arial, Helvetica, sans-serif; + margin-left: .25in; + margin-right: .2in; + margin-top: 0.2in; + margin-bottom: 0.2in; + color: #000000; + background-color: #ffffff; +} +h1,h2 { + margin-left: -0.2in; +} +div.navbar { + background-color: #add8e6; + padding: 0.2em; +} +h2.indextitle { + padding: 0.4em; + background-color: #add8e6; +} +h3.function,h3.typedecl { + background-color: #add8e6; + padding-left: 1em; +} +div.spec { + margin-left: 2em; + background-color: #eeeeee; +} +a.module { + text-decoration:none +} +a.module:hover { + background-color: #eeeeee; +} +ul.definitions { + list-style-type: none; +} +ul.index { + list-style-type: none; + background-color: #eeeeee; +} + +/* + * Minor style tweaks + */ +ul { + list-style-type: square; +} +table { + border-collapse: collapse; +} +td { + padding: 3 +} diff --git a/aoc2023/build/packages/pqueue/rebar.config b/aoc2023/build/packages/pqueue/rebar.config new file mode 100644 index 0000000..f8022f0 --- /dev/null +++ b/aoc2023/build/packages/pqueue/rebar.config @@ -0,0 +1,14 @@ +%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*- +% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod: + +{erl_opts, + [{platform_define, "^R16", 'ERLANG_OTP_VERSION_16'}, + {platform_define, "^17\.", 'ERLANG_OTP_VERSION_17'}, + {platform_define, "^18\.", 'ERLANG_OTP_VERSION_18'}, + {platform_define, "^19\.", 'ERLANG_OTP_VERSION_19'}, + {platform_define, "^20\.", 'ERLANG_OTP_VERSION_20'}, + warn_export_vars, + warn_unused_import, + %warn_missing_spec, + warnings_as_errors]}. +{edoc_opts, [{preprocess, true}]}. diff --git a/aoc2023/build/packages/pqueue/src/pqueue.app.src b/aoc2023/build/packages/pqueue/src/pqueue.app.src new file mode 100644 index 0000000..b153ad1 --- /dev/null +++ b/aoc2023/build/packages/pqueue/src/pqueue.app.src @@ -0,0 +1,10 @@ +%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*- +% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod: + +{application, pqueue, + [{description, "Priority Queue Data Structures"}, + {vsn, "2.0.7"}, + {modules, [pqueue, pqueue2, pqueue3, pqueue4]}, + {registered, []}, + {applications, [stdlib, kernel]}]}. + diff --git a/aoc2023/build/packages/pqueue/src/pqueue.erl b/aoc2023/build/packages/pqueue/src/pqueue.erl new file mode 100644 index 0000000..2c57fa2 --- /dev/null +++ b/aoc2023/build/packages/pqueue/src/pqueue.erl @@ -0,0 +1,2246 @@ +%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*- +% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod: +%%% +%%%------------------------------------------------------------------------ +%%% @doc +%%% ==Static Priority Queue.== +%%% This priority queue implementation depends on a static number of priorities +%%% (-20 (high) to 20 (low)) so that tuple access times can be exploited for +%%% quick in/out priority queue operations. This implementation was created to +%%% avoid the slowness within the priority queue used by both RabbitMQ and Riak +%%% (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl). +%%% @end +%%% +%%% MIT License +%%% +%%% Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com> +%%% +%%% Permission is hereby granted, free of charge, to any person obtaining a +%%% copy of this software and associated documentation files (the "Software"), +%%% to deal in the Software without restriction, including without limitation +%%% the rights to use, copy, modify, merge, publish, distribute, sublicense, +%%% and/or sell copies of the Software, and to permit persons to whom the +%%% Software is furnished to do so, subject to the following conditions: +%%% +%%% The above copyright notice and this permission notice shall be included in +%%% all copies or substantial portions of the Software. +%%% +%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +%%% DEALINGS IN THE SOFTWARE. +%%% +%%% @author Michael Truog <mjtruog at protonmail dot com> +%%% @copyright 2011-2020 Michael Truog +%%% @version 2.0.1 {@date} {@time} +%%%------------------------------------------------------------------------ + +-module(pqueue). +-author('mjtruog at protonmail dot com'). + +%% external interface +-export([in/2, % O(1) + in/3, % O(1) + is_empty/1, % O(1) + is_queue/1, % O(1) + join/2, % O(N) typically (?) + len/1, % O(N) + new/0, % O(1) + out/1, % O(1) amortized, O(N) worst case + out/2, % O(1) amortized, O(N) worst case + pout/1, % O(1) amortized, O(N) worst case + to_list/1, % O(N) + test/0]). + +%%%------------------------------------------------------------------------ +%%% External interface functions +%%%------------------------------------------------------------------------ + +-ifdef(ERLANG_OTP_VERSION_16). +-type pqueue() :: + {integer(), + {queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue()}, + queue(), + {queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue()}} | + {'empty', + {queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue()}, + queue(), + {queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue()}}. +-else. +-type pqueue() :: + {integer(), + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue(), queue:queue()}, + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue(), queue:queue()}, + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue()}, + queue:queue(), + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue()}, + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue(), queue:queue()}, + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue(), queue:queue()}} | + {'empty', + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue(), queue:queue()}, + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue(), queue:queue()}, + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue()}, + queue:queue(), + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue()}, + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue(), queue:queue()}, + {queue:queue(), queue:queue(), queue:queue(), queue:queue(), + queue:queue(), queue:queue(), queue:queue()}}. +-endif. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Append an item to the tail of the 0 priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec in(term(), pqueue()) -> pqueue(). + +in(X, Q) -> + in(X, 0, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Append an item to the tail of a specific priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec in(term(), integer(), pqueue()) -> pqueue(). + +in(_, P, _) + when P < -20; P > 20 -> + erlang:exit(badarg); +in(X, P, {empty, _, _, _, _, _, _, _} = Q) -> + in_higher(P, Q, X); +in(X, P, {Pc, _, _, _, _, _, _, _} = Q) + when P < Pc -> + in_higher(P, Q, X); +in(X, P, Q) -> + in_lower(P, Q, X). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Check if the priority queue is empty.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec is_empty(pqueue()) -> 'true' | 'false'. + +is_empty({empty, _, _, _, _, _, _, _}) -> + true; +is_empty({_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + queue:is_empty(Qn20) and queue:is_empty(Qn19) and queue:is_empty(Qn18) and + queue:is_empty(Qn17) and queue:is_empty(Qn16) and queue:is_empty(Qn15) and + queue:is_empty(Qn14) and + queue:is_empty(Qn13) and queue:is_empty(Qn12) and queue:is_empty(Qn11) and + queue:is_empty(Qn10) and queue:is_empty(Qn9) and queue:is_empty(Qn8) and + queue:is_empty(Qn7) and + queue:is_empty(Qn6) and queue:is_empty(Qn5) and queue:is_empty(Qn4) and + queue:is_empty(Qn3) and queue:is_empty(Qn2) and queue:is_empty(Qn1) and + queue:is_empty(Q0) and + queue:is_empty(Qp1) and queue:is_empty(Qp2) and queue:is_empty(Qp3) and + queue:is_empty(Qp4) and queue:is_empty(Qp5) and queue:is_empty(Qp6) and + queue:is_empty(Qp7) and queue:is_empty(Qp8) and queue:is_empty(Qp9) and + queue:is_empty(Qp10) and queue:is_empty(Qp11) and queue:is_empty(Qp12) and + queue:is_empty(Qp13) and + queue:is_empty(Qp14) and queue:is_empty(Qp15) and queue:is_empty(Qp16) and + queue:is_empty(Qp17) and queue:is_empty(Qp18) and queue:is_empty(Qp19) and + queue:is_empty(Qp20). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Check if the priority queue type is as expected.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec is_queue(pqueue()) -> 'true' | 'false'. + +is_queue({Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) + when tuple_size(Qsn14) == 7, tuple_size(Qsn7) == 7, tuple_size(Qsn1) == 6, + tuple_size(Qsp14) == 7, tuple_size(Qsp7) == 7, tuple_size(Qsp1) == 6 -> + (((Pc =:= empty) or is_integer(Pc)) and queue:is_queue(Q0)); +is_queue(_) -> + false. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Join two priority queues.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec join(pqueue(), pqueue()) -> pqueue(). + +join({P1c, + {Q1_n20, Q1_n19, Q1_n18, Q1_n17, Q1_n16, Q1_n15, Q1_n14}, + {Q1_n13, Q1_n12, Q1_n11, Q1_n10, Q1_n9, Q1_n8, Q1_n7}, + {Q1_n6, Q1_n5, Q1_n4, Q1_n3, Q1_n2, Q1_n1}, + Q1_0, + {Q1_p1, Q1_p2, Q1_p3, Q1_p4, Q1_p5, Q1_p6}, + {Q1_p7, Q1_p8, Q1_p9, Q1_p10, Q1_p11, Q1_p12, Q1_p13}, + {Q1_p14, Q1_p15, Q1_p16, Q1_p17, Q1_p18, Q1_p19, Q1_p20}}, + {P2c, + {Q2_n20, Q2_n19, Q2_n18, Q2_n17, Q2_n16, Q2_n15, Q2_n14}, + {Q2_n13, Q2_n12, Q2_n11, Q2_n10, Q2_n9, Q2_n8, Q2_n7}, + {Q2_n6, Q2_n5, Q2_n4, Q2_n3, Q2_n2, Q2_n1}, + Q2_0, + {Q2_p1, Q2_p2, Q2_p3, Q2_p4, Q2_p5, Q2_p6}, + {Q2_p7, Q2_p8, Q2_p9, Q2_p10, Q2_p11, Q2_p12, Q2_p13}, + {Q2_p14, Q2_p15, Q2_p16, Q2_p17, Q2_p18, Q2_p19, Q2_p20}}) -> + {erlang:min(P1c, P2c), + {queue:join(Q1_n20, Q2_n20), queue:join(Q1_n19, Q2_n19), + queue:join(Q1_n18, Q2_n18), queue:join(Q1_n17, Q2_n17), + queue:join(Q1_n16, Q2_n16), queue:join(Q1_n15, Q2_n15), + queue:join(Q1_n14, Q2_n14)}, + {queue:join(Q1_n13, Q2_n13), queue:join(Q1_n12, Q2_n12), + queue:join(Q1_n11, Q2_n11), queue:join(Q1_n10, Q2_n10), + queue:join(Q1_n9, Q2_n9), queue:join(Q1_n8, Q2_n8), + queue:join(Q1_n7, Q2_n7)}, + {queue:join(Q1_n6, Q2_n6), queue:join(Q1_n5, Q2_n5), + queue:join(Q1_n4, Q2_n4), queue:join(Q1_n3, Q2_n3), + queue:join(Q1_n2, Q2_n2), queue:join(Q1_n1, Q2_n1)}, + queue:join(Q1_0, Q2_0), + {queue:join(Q1_p1, Q2_p1), queue:join(Q1_p2, Q2_p2), + queue:join(Q1_p3, Q2_p3), queue:join(Q1_p4, Q2_p4), + queue:join(Q1_p5, Q2_p5), queue:join(Q1_p6, Q2_p6)}, + {queue:join(Q1_p7, Q2_p7), queue:join(Q1_p8, Q2_p8), + queue:join(Q1_p9, Q2_p9), queue:join(Q1_p10, Q2_p10), + queue:join(Q1_p11, Q2_p11), queue:join(Q1_p12, Q2_p12), + queue:join(Q1_p13, Q2_p13)}, + {queue:join(Q1_p14, Q2_p14), queue:join(Q1_p15, Q2_p15), + queue:join(Q1_p16, Q2_p16), queue:join(Q1_p17, Q2_p17), + queue:join(Q1_p18, Q2_p18), queue:join(Q1_p19, Q2_p19), + queue:join(Q1_p20, Q2_p20)}}. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Determine the length of a priority queue.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec len(pqueue()) -> non_neg_integer(). + +len({_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + queue:len(Qn20) + queue:len(Qn19) + queue:len(Qn18) + queue:len(Qn17) + + queue:len(Qn16) + queue:len(Qn15) + queue:len(Qn14) + + queue:len(Qn13) + queue:len(Qn12) + queue:len(Qn11) + queue:len(Qn10) + + queue:len(Qn9) + queue:len(Qn8) + queue:len(Qn7) + + queue:len(Qn6) + queue:len(Qn5) + queue:len(Qn4) + queue:len(Qn3) + + queue:len(Qn2) + queue:len(Qn1) + + queue:len(Q0) + + queue:len(Qp1) + queue:len(Qp2) + queue:len(Qp3) + queue:len(Qp4) + + queue:len(Qp5) + queue:len(Qp6) + + queue:len(Qp7) + queue:len(Qp8) + queue:len(Qp9) + queue:len(Qp10) + + queue:len(Qp11) + queue:len(Qp12) + queue:len(Qp13) + + queue:len(Qp14) + queue:len(Qp15) + queue:len(Qp16) + queue:len(Qp17) + + queue:len(Qp18) + queue:len(Qp19) + queue:len(Qp20). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Create a new priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec new() -> pqueue(). + +new() -> + {empty, % current priority + erlang:make_tuple(7, queue:new()), % priority [-20..-14] + erlang:make_tuple(7, queue:new()), % priority [-13.. -7] + erlang:make_tuple(6, queue:new()), % priority [ -6.. -1] + queue:new(), % priority 0 (default) + erlang:make_tuple(6, queue:new()), % priority [ 1.. 6] + erlang:make_tuple(7, queue:new()), % priority [ 7.. 13] + erlang:make_tuple(7, queue:new())}. % priority [ 14.. 20] + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item from the head of the priority queue.=== +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec out(pqueue()) -> + {{'value', term()}, pqueue()} | {'empty', pqueue()}. + +out({empty, _, _, _, _, _, _, _} = Q) -> + {empty, Q}; +out({Pc, _, _, _, _, _, _, _} = Q) -> + out_current(Pc, Q, nopriority). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item of a specific priority from the head of the queue.=== +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec out(integer(), pqueue()) -> + {{'value', term()}, pqueue()} | {'empty', pqueue()}. + +out(P, _) + when P < -20; P > 20 -> + erlang:exit(badarg); +out(_, {empty, _, _, _, _, _, _, _} = Q) -> + {empty, Q}; +out(P, Q) -> + out_specific(P, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item from the head of the priority queue.=== +%% Includes the priority in the return value. +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec pout(pqueue()) -> + {{'value', term(), integer()}, pqueue()} | {'empty', pqueue()}. + +pout({empty, _, _, _, _, _, _, _} = Q) -> + {empty, Q}; +pout({Pc, _, _, _, _, _, _, _} = Q) -> + out_current(Pc, Q, priority). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Convert the priority queue to a list.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec to_list(pqueue()) -> list(term()). + +to_list({_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + queue:to_list(Qn20) ++ queue:to_list(Qn19) ++ queue:to_list(Qn18) ++ + queue:to_list(Qn17) ++ queue:to_list(Qn16) ++ queue:to_list(Qn15) ++ + queue:to_list(Qn14) ++ + queue:to_list(Qn13) ++ queue:to_list(Qn12) ++ queue:to_list(Qn11) ++ + queue:to_list(Qn10) ++ queue:to_list(Qn9) ++ queue:to_list(Qn8) ++ + queue:to_list(Qn7) ++ + queue:to_list(Qn6) ++ queue:to_list(Qn5) ++ queue:to_list(Qn4) ++ + queue:to_list(Qn3) ++ queue:to_list(Qn2) ++ queue:to_list(Qn1) ++ + queue:to_list(Q0) ++ + queue:to_list(Qp1) ++ queue:to_list(Qp2) ++ queue:to_list(Qp3) ++ + queue:to_list(Qp4) ++ queue:to_list(Qp5) ++ queue:to_list(Qp6) ++ + queue:to_list(Qp7) ++ queue:to_list(Qp8) ++ queue:to_list(Qp9) ++ + queue:to_list(Qp10) ++ queue:to_list(Qp11) ++ queue:to_list(Qp12) ++ + queue:to_list(Qp13) ++ + queue:to_list(Qp14) ++ queue:to_list(Qp15) ++ queue:to_list(Qp16) ++ + queue:to_list(Qp17) ++ queue:to_list(Qp18) ++ queue:to_list(Qp19) ++ + queue:to_list(Qp20). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Regression test.=== +%% @end +%%------------------------------------------------------------------------- + +test() -> + Q0 = pqueue:new(), + true = pqueue:is_queue(Q0), + Q1 = pqueue:in(20, 20, Q0), + Q2 = pqueue:in(19, 19, Q1), + Q3 = pqueue:in(18, 18, Q2), + Q4 = pqueue:in(17, 17, Q3), + Q5 = pqueue:in(16, 16, Q4), + Q6 = pqueue:in(15, 15, Q5), + Q7 = pqueue:in(14, 14, Q6), + Q8 = pqueue:in(13, 13, Q7), + Q9 = pqueue:in(12, 12, Q8), + Q10 = pqueue:in(11, 11, Q9), + Q11 = pqueue:in(10, 10, Q10), + Q12 = pqueue:in(9, 9, Q11), + Q13 = pqueue:in(8, 8, Q12), + Q14 = pqueue:in(7, 7, Q13), + Q15 = pqueue:in(6, 6, Q14), + Q16 = pqueue:in(5, 5, Q15), + Q17 = pqueue:in(4, 4, Q16), + Q18 = pqueue:in(3, 3, Q17), + Q19 = pqueue:in(2, 2, Q18), + Q20 = pqueue:in(1, 1, Q19), + Q21 = pqueue:in(0, 0, Q20), + Q22 = pqueue:in(-1, -1, Q21), + Q23 = pqueue:in(-2, -2, Q22), + Q24 = pqueue:in(-3, -3, Q23), + Q25 = pqueue:in(-4, -4, Q24), + Q26 = pqueue:in(-5, -5, Q25), + Q27 = pqueue:in(-6, -6, Q26), + Q28 = pqueue:in(-7, -7, Q27), + Q29 = pqueue:in(-8, -8, Q28), + Q30 = pqueue:in(-9, -9, Q29), + Q31 = pqueue:in(-10, -10, Q30), + Q32 = pqueue:in(-11, -11, Q31), + Q33 = pqueue:in(-12, -12, Q32), + Q34 = pqueue:in(-13, -13, Q33), + Q35 = pqueue:in(-14, -14, Q34), + Q36 = pqueue:in(-15, -15, Q35), + Q37 = pqueue:in(-16, -16, Q36), + Q38 = pqueue:in(-17, -17, Q37), + Q39 = pqueue:in(-18, -18, Q38), + Q40 = pqueue:in(-19, -19, Q39), + Q41 = pqueue:in(-20, -20, Q40), + Q42 = pqueue:in(-20, -20, Q41), + Q43 = pqueue:in(-19, -19, Q42), + Q44 = pqueue:in(-18, -18, Q43), + Q45 = pqueue:in(-17, -17, Q44), + Q46 = pqueue:in(-16, -16, Q45), + Q47 = pqueue:in(-15, -15, Q46), + Q48 = pqueue:in(-14, -14, Q47), + Q49 = pqueue:in(-13, -13, Q48), + Q50 = pqueue:in(-12, -12, Q49), + Q51 = pqueue:in(-11, -11, Q50), + Q52 = pqueue:in(-10, -10, Q51), + Q53 = pqueue:in(-9, -9, Q52), + Q54 = pqueue:in(-8, -8, Q53), + Q55 = pqueue:in(-7, -7, Q54), + Q56 = pqueue:in(-6, -6, Q55), + Q57 = pqueue:in(-5, -5, Q56), + Q58 = pqueue:in(-4, -4, Q57), + Q59 = pqueue:in(-3, -3, Q58), + Q60 = pqueue:in(-2, -2, Q59), + Q61 = pqueue:in(-1, -1, Q60), + Q62 = pqueue:in(0, 0, Q61), + Q63 = pqueue:in(1, 1, Q62), + Q64 = pqueue:in(2, 2, Q63), + Q65 = pqueue:in(3, 3, Q64), + Q66 = pqueue:in(4, 4, Q65), + Q67 = pqueue:in(5, 5, Q66), + Q68 = pqueue:in(6, 6, Q67), + Q69 = pqueue:in(7, 7, Q68), + Q70 = pqueue:in(8, 8, Q69), + Q71 = pqueue:in(9, 9, Q70), + Q72 = pqueue:in(10, 10, Q71), + Q73 = pqueue:in(11, 11, Q72), + Q74 = pqueue:in(12, 12, Q73), + Q75 = pqueue:in(13, 13, Q74), + Q76 = pqueue:in(14, 14, Q75), + Q77 = pqueue:in(15, 15, Q76), + Q78 = pqueue:in(16, 16, Q77), + Q79 = pqueue:in(17, 17, Q78), + Q80 = pqueue:in(18, 18, Q79), + Q81 = pqueue:in(19, 19, Q80), + Q82 = pqueue:in(20, 20, Q81), + true = pqueue:is_queue(Q82), + 82 = pqueue:len(Q82), + [-20, -20, -19, -19, -18, -18, -17, -17, -16, -16, -15, -15, -14, -14, + -13, -13, -12, -12, -11, -11, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6, + -5, -5, -4, -4, -3, -3, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, + 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, + 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20] = pqueue:to_list(Q82), + {{value, -20}, Q83} = pqueue:out(Q82), + {{value, -20}, Q84} = pqueue:out(Q83), + {{value, -19}, Q85} = pqueue:out(Q84), + {{value, -19}, Q86} = pqueue:out(Q85), + {{value, -18}, Q87} = pqueue:out(Q86), + {{value, -18}, Q88} = pqueue:out(Q87), + {{value, 0}, Q89} = pqueue:out(0, Q88), + {{value, 0}, Q90} = pqueue:out(0, Q89), + {empty, _} = pqueue:out(0, Q90), + {{value, -17, -17}, Q91} = pqueue:pout(Q90), + {{value, -17, -17}, Q92} = pqueue:pout(Q91), + {{value, -16, -16}, Q93} = pqueue:pout(Q92), + {{value, -16, -16}, Q94} = pqueue:pout(Q93), + {{value, -15, -15}, Q95} = pqueue:pout(Q94), + {{value, -15, -15}, Q96} = pqueue:pout(Q95), + {{value, -14, -14}, Q97} = pqueue:pout(Q96), + {{value, -14, -14}, Q98} = pqueue:pout(Q97), + {{value, -13, -13}, Q99} = pqueue:pout(Q98), + {{value, -13, -13}, Q100} = pqueue:pout(Q99), + {{value, -12, -12}, Q101} = pqueue:pout(Q100), + {{value, -12, -12}, Q102} = pqueue:pout(Q101), + {{value, -11, -11}, Q103} = pqueue:pout(Q102), + {{value, -11, -11}, Q104} = pqueue:pout(Q103), + {{value, -10, -10}, Q105} = pqueue:pout(Q104), + {{value, -10, -10}, Q106} = pqueue:pout(Q105), + {{value, -9, -9}, Q107} = pqueue:pout(Q106), + {{value, -9, -9}, Q108} = pqueue:pout(Q107), + {{value, -8, -8}, Q109} = pqueue:pout(Q108), + {{value, -8, -8}, Q110} = pqueue:pout(Q109), + {{value, -7, -7}, Q111} = pqueue:pout(Q110), + {{value, -7, -7}, Q112} = pqueue:pout(Q111), + {{value, -6, -6}, Q113} = pqueue:pout(Q112), + {{value, -6, -6}, Q114} = pqueue:pout(Q113), + {{value, -5, -5}, Q115} = pqueue:pout(Q114), + {{value, -5, -5}, Q116} = pqueue:pout(Q115), + {{value, -4, -4}, Q117} = pqueue:pout(Q116), + {{value, -4, -4}, Q118} = pqueue:pout(Q117), + {{value, -3, -3}, Q119} = pqueue:pout(Q118), + {{value, -3, -3}, Q120} = pqueue:pout(Q119), + {{value, -2, -2}, Q121} = pqueue:pout(Q120), + {{value, -2, -2}, Q122} = pqueue:pout(Q121), + {{value, -1, -1}, Q123} = pqueue:pout(Q122), + {{value, -1, -1}, Q124} = pqueue:pout(Q123), + {{value, 1, 1}, Q125} = pqueue:pout(Q124), + {{value, 1, 1}, Q126} = pqueue:pout(Q125), + {{value, 2, 2}, Q127} = pqueue:pout(Q126), + {{value, 2, 2}, Q128} = pqueue:pout(Q127), + {{value, 3, 3}, Q129} = pqueue:pout(Q128), + {{value, 3, 3}, Q130} = pqueue:pout(Q129), + {{value, 4, 4}, Q131} = pqueue:pout(Q130), + {{value, 4, 4}, Q132} = pqueue:pout(Q131), + {{value, 5, 5}, Q133} = pqueue:pout(Q132), + {{value, 5, 5}, Q134} = pqueue:pout(Q133), + {{value, 6, 6}, Q135} = pqueue:pout(Q134), + {{value, 6, 6}, Q136} = pqueue:pout(Q135), + {{value, 7, 7}, Q137} = pqueue:pout(Q136), + {{value, 7, 7}, Q138} = pqueue:pout(Q137), + {{value, 8, 8}, Q139} = pqueue:pout(Q138), + {{value, 8, 8}, Q140} = pqueue:pout(Q139), + {{value, 9, 9}, Q141} = pqueue:pout(Q140), + {{value, 9, 9}, Q142} = pqueue:pout(Q141), + {{value, 10, 10}, Q143} = pqueue:pout(Q142), + {{value, 10, 10}, Q144} = pqueue:pout(Q143), + {{value, 11, 11}, Q145} = pqueue:pout(Q144), + {{value, 11, 11}, Q146} = pqueue:pout(Q145), + {{value, 12, 12}, Q147} = pqueue:pout(Q146), + {{value, 12, 12}, Q148} = pqueue:pout(Q147), + {{value, 13, 13}, Q149} = pqueue:pout(Q148), + {{value, 13, 13}, Q150} = pqueue:pout(Q149), + {{value, 14, 14}, Q151} = pqueue:pout(Q150), + {{value, 14, 14}, Q152} = pqueue:pout(Q151), + {{value, 15, 15}, Q153} = pqueue:pout(Q152), + {{value, 15, 15}, Q154} = pqueue:pout(Q153), + {{value, 16, 16}, Q155} = pqueue:pout(Q154), + {{value, 16, 16}, Q156} = pqueue:pout(Q155), + {{value, 17, 17}, Q157} = pqueue:pout(Q156), + {{value, 17, 17}, Q158} = pqueue:pout(Q157), + {{value, 18, 18}, Q159} = pqueue:pout(Q158), + {{value, 18, 18}, Q160} = pqueue:pout(Q159), + {{value, 19, 19}, Q161} = pqueue:pout(Q160), + {{value, 19, 19}, Q162} = pqueue:pout(Q161), + {{value, 20, 20}, Q163} = pqueue:pout(Q162), + {{value, 20, 20}, Q164} = pqueue:pout(Q163), + true = pqueue:is_empty(Q164), + {empty, Q165} = pqueue:pout(Q164), + true = pqueue:is_empty(Q165), + ok. + +%%%------------------------------------------------------------------------ +%%% Private functions +%%%------------------------------------------------------------------------ + +in_higher(-20, {_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-20, + {queue:in(X, Qn20), Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-19, {_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-19, + {Qn20, queue:in(X, Qn19), Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-18, {_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-18, + {Qn20, Qn19, queue:in(X, Qn18), Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-17, {_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-17, + {Qn20, Qn19, Qn18, queue:in(X, Qn17), Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-16, {_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-16, + {Qn20, Qn19, Qn18, Qn17, queue:in(X, Qn16), Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-15, {_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-15, + {Qn20, Qn19, Qn18, Qn17, Qn16, queue:in(X, Qn15), Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-14, {_, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-14, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, queue:in(X, Qn14)}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-13, {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-13, Qsn14, + {queue:in(X, Qn13), Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-12, {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-12, Qsn14, + {Qn13, queue:in(X, Qn12), Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-11, {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-11, Qsn14, + {Qn13, Qn12, queue:in(X, Qn11), Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-10, {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-10, Qsn14, + {Qn13, Qn12, Qn11, queue:in(X, Qn10), Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-9, {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-9, Qsn14, + {Qn13, Qn12, Qn11, Qn10, queue:in(X, Qn9), Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-8, {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-8, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, queue:in(X, Qn8), Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-7, {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-7, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, queue:in(X, Qn7)}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-6, {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-6, Qsn14, Qsn7, + {queue:in(X, Qn6), Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-5, {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-5, Qsn14, Qsn7, + {Qn6, queue:in(X, Qn5), Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-4, {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-4, Qsn14, Qsn7, + {Qn6, Qn5, queue:in(X, Qn4), Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-3, {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-3, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, queue:in(X, Qn3), Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-2, {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-2, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, queue:in(X, Qn2), Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_higher(-1, {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {-1, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, queue:in(X, Qn1)}, + Q0, Qsp1, Qsp7, Qsp14}; +in_higher(0, {_, Qsn14, Qsn7, Qsn1, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {0, Qsn14, Qsn7, Qsn1, + queue:in(X, Q0), + Qsp1, Qsp7, Qsp14}; +in_higher(1, {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {1, Qsn14, Qsn7, Qsn1, Q0, + {queue:in(X, Qp1), Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}; +in_higher(2, {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {2, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, queue:in(X, Qp2), Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}; +in_higher(3, {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {3, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, queue:in(X, Qp3), Qp4, Qp5, Qp6}, + Qsp7, Qsp14}; +in_higher(4, {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {4, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, queue:in(X, Qp4), Qp5, Qp6}, + Qsp7, Qsp14}; +in_higher(5, {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {5, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, queue:in(X, Qp5), Qp6}, + Qsp7, Qsp14}; +in_higher(6, {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {6, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, queue:in(X, Qp6)}, + Qsp7, Qsp14}; +in_higher(7, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {7, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {queue:in(X, Qp7), Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}; +in_higher(8, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {8, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, queue:in(X, Qp8), Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}; +in_higher(9, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {9, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, queue:in(X, Qp9), Qp10, Qp11, Qp12, Qp13}, + Qsp14}; +in_higher(10, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {10, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, queue:in(X, Qp10), Qp11, Qp12, Qp13}, + Qsp14}; +in_higher(11, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {11, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, queue:in(X, Qp11), Qp12, Qp13}, + Qsp14}; +in_higher(12, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {12, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, queue:in(X, Qp12), Qp13}, + Qsp14}; +in_higher(13, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {13, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, queue:in(X, Qp13)}, + Qsp14}; +in_higher(14, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {14, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {queue:in(X, Qp14), Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}; +in_higher(15, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {15, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, queue:in(X, Qp15), Qp16, Qp17, Qp18, Qp19, Qp20}}; +in_higher(16, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {16, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, queue:in(X, Qp16), Qp17, Qp18, Qp19, Qp20}}; +in_higher(17, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {17, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, queue:in(X, Qp17), Qp18, Qp19, Qp20}}; +in_higher(18, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {18, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, queue:in(X, Qp18), Qp19, Qp20}}; +in_higher(19, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {19, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, queue:in(X, Qp19), Qp20}}; +in_higher(20, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {20, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, queue:in(X, Qp20)}}. + +in_lower(-20, {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, + {queue:in(X, Qn20), Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-19, {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, + {Qn20, queue:in(X, Qn19), Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-18, {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, + {Qn20, Qn19, queue:in(X, Qn18), Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-17, {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, + {Qn20, Qn19, Qn18, queue:in(X, Qn17), Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-16, {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, + {Qn20, Qn19, Qn18, Qn17, queue:in(X, Qn16), Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-15, {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, queue:in(X, Qn15), Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-14, {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, queue:in(X, Qn14)}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-13, {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, + {queue:in(X, Qn13), Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-12, {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, + {Qn13, queue:in(X, Qn12), Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-11, {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, + {Qn13, Qn12, queue:in(X, Qn11), Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-10, {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, + {Qn13, Qn12, Qn11, queue:in(X, Qn10), Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-9, {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, queue:in(X, Qn9), Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-8, {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, queue:in(X, Qn8), Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-7, {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, queue:in(X, Qn7)}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-6, {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, + {queue:in(X, Qn6), Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-5, {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, + {Qn6, queue:in(X, Qn5), Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-4, {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, queue:in(X, Qn4), Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-3, {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, queue:in(X, Qn3), Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-2, {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, queue:in(X, Qn2), Qn1}, + Q0, Qsp1, Qsp7, Qsp14}; +in_lower(-1, {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, queue:in(X, Qn1)}, + Q0, Qsp1, Qsp7, Qsp14}; +in_lower(0, {Pc, Qsn14, Qsn7, Qsn1, + Q0, Qsp1, Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, + queue:in(X, Q0), + Qsp1, Qsp7, Qsp14}; +in_lower(1, {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {queue:in(X, Qp1), Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}; +in_lower(2, {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, queue:in(X, Qp2), Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}; +in_lower(3, {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, queue:in(X, Qp3), Qp4, Qp5, Qp6}, + Qsp7, Qsp14}; +in_lower(4, {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, queue:in(X, Qp4), Qp5, Qp6}, + Qsp7, Qsp14}; +in_lower(5, {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, queue:in(X, Qp5), Qp6}, + Qsp7, Qsp14}; +in_lower(6, {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, queue:in(X, Qp6)}, + Qsp7, Qsp14}; +in_lower(7, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {queue:in(X, Qp7), Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}; +in_lower(8, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, queue:in(X, Qp8), Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}; +in_lower(9, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, queue:in(X, Qp9), Qp10, Qp11, Qp12, Qp13}, + Qsp14}; +in_lower(10, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, queue:in(X, Qp10), Qp11, Qp12, Qp13}, + Qsp14}; +in_lower(11, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, queue:in(X, Qp11), Qp12, Qp13}, + Qsp14}; +in_lower(12, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, queue:in(X, Qp12), Qp13}, + Qsp14}; +in_lower(13, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, queue:in(X, Qp13)}, + Qsp14}; +in_lower(14, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {queue:in(X, Qp14), Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}; +in_lower(15, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, queue:in(X, Qp15), Qp16, Qp17, Qp18, Qp19, Qp20}}; +in_lower(16, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, queue:in(X, Qp16), Qp17, Qp18, Qp19, Qp20}}; +in_lower(17, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, queue:in(X, Qp17), Qp18, Qp19, Qp20}}; +in_lower(18, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, queue:in(X, Qp18), Qp19, Qp20}}; +in_lower(19, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, queue:in(X, Qp19), Qp20}}; +in_lower(20, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) -> + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, queue:in(X, Qp20)}}. + +out_current(-20, + {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn20} = queue:out(Qn20), + if + Value =:= empty -> + out_current(-19, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -20}; + true -> + Value + end, + {NewValue, + {-20, + {NewQn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-19, + {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn19} = queue:out(Qn19), + if + Value =:= empty -> + out_current(-18, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -19}; + true -> + Value + end, + {NewValue, + {-19, + {Qn20, NewQn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-18, + {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn18} = queue:out(Qn18), + if + Value =:= empty -> + out_current(-17, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -18}; + true -> + Value + end, + {NewValue, + {-18, + {Qn20, Qn19, NewQn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-17, + {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn17} = queue:out(Qn17), + if + Value =:= empty -> + out_current(-16, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -17}; + true -> + Value + end, + {NewValue, + {-17, + {Qn20, Qn19, Qn18, NewQn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-16, + {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn16} = queue:out(Qn16), + if + Value =:= empty -> + out_current(-15, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -16}; + true -> + Value + end, + {NewValue, + {-16, + {Qn20, Qn19, Qn18, Qn17, NewQn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-15, + {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn15} = queue:out(Qn15), + if + Value =:= empty -> + out_current(-14, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -15}; + true -> + Value + end, + {NewValue, + {-15, + {Qn20, Qn19, Qn18, Qn17, Qn16, NewQn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-14, + {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn14} = queue:out(Qn14), + if + Value =:= empty -> + out_current(-13, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -14}; + true -> + Value + end, + {NewValue, + {-14, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, NewQn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-13, + {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn13} = queue:out(Qn13), + if + Value =:= empty -> + out_current(-12, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -13}; + true -> + Value + end, + {NewValue, + {-13, Qsn14, + {NewQn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-12, + {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn12} = queue:out(Qn12), + if + Value =:= empty -> + out_current(-11, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -12}; + true -> + Value + end, + {NewValue, + {-12, Qsn14, + {Qn13, NewQn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-11, + {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn11} = queue:out(Qn11), + if + Value =:= empty -> + out_current(-10, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -11}; + true -> + Value + end, + {NewValue, + {-11, Qsn14, + {Qn13, Qn12, NewQn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-10, + {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn10} = queue:out(Qn10), + if + Value =:= empty -> + out_current(-9, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -10}; + true -> + Value + end, + {NewValue, + {-10, Qsn14, + {Qn13, Qn12, Qn11, NewQn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-9, + {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn9} = queue:out(Qn9), + if + Value =:= empty -> + out_current(-8, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -9}; + true -> + Value + end, + {NewValue, + {-9, Qsn14, + {Qn13, Qn12, Qn11, Qn10, NewQn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-8, + {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn8} = queue:out(Qn8), + if + Value =:= empty -> + out_current(-7, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -8}; + true -> + Value + end, + {NewValue, + {-8, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, NewQn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-7, + {_, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn7} = queue:out(Qn7), + if + Value =:= empty -> + out_current(-6, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -7}; + true -> + Value + end, + {NewValue, + {-7, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, NewQn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-6, + {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn6} = queue:out(Qn6), + if + Value =:= empty -> + out_current(-5, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -6}; + true -> + Value + end, + {NewValue, + {-6, Qsn14, Qsn7, + {NewQn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-5, + {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn5} = queue:out(Qn5), + if + Value =:= empty -> + out_current(-4, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -5}; + true -> + Value + end, + {NewValue, + {-5, Qsn14, Qsn7, + {Qn6, NewQn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-4, + {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn4} = queue:out(Qn4), + if + Value =:= empty -> + out_current(-3, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -4}; + true -> + Value + end, + {NewValue, + {-4, Qsn14, Qsn7, + {Qn6, Qn5, NewQn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-3, + {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn3} = queue:out(Qn3), + if + Value =:= empty -> + out_current(-2, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -3}; + true -> + Value + end, + {NewValue, + {-3, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, NewQn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-2, + {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn2} = queue:out(Qn2), + if + Value =:= empty -> + out_current(-1, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -2}; + true -> + Value + end, + {NewValue, + {-2, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, NewQn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(-1, + {_, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQn1} = queue:out(Qn1), + if + Value =:= empty -> + out_current(0, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, -1}; + true -> + Value + end, + {NewValue, + {-1, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, NewQn1}, + Q0, Qsp1, Qsp7, Qsp14}} + end; +out_current(0, + {_, Qsn14, Qsn7, Qsn1, + Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQ0} = queue:out(Q0), + if + Value =:= empty -> + out_current(1, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 0}; + true -> + Value + end, + {NewValue, + {0, Qsn14, Qsn7, Qsn1, + NewQ0, + Qsp1, Qsp7, Qsp14}} + end; +out_current(1, + {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQp1} = queue:out(Qp1), + if + Value =:= empty -> + out_current(2, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 1}; + true -> + Value + end, + {NewValue, + {1, Qsn14, Qsn7, Qsn1, Q0, + {NewQp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}} + end; +out_current(2, + {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQp2} = queue:out(Qp2), + if + Value =:= empty -> + out_current(3, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 2}; + true -> + Value + end, + {NewValue, + {2, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, NewQp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}} + end; +out_current(3, + {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQp3} = queue:out(Qp3), + if + Value =:= empty -> + out_current(4, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 3}; + true -> + Value + end, + {NewValue, + {3, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, NewQp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}} + end; +out_current(4, + {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQp4} = queue:out(Qp4), + if + Value =:= empty -> + out_current(5, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 4}; + true -> + Value + end, + {NewValue, + {4, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, NewQp4, Qp5, Qp6}, + Qsp7, Qsp14}} + end; +out_current(5, + {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQp5} = queue:out(Qp5), + if + Value =:= empty -> + out_current(6, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 5}; + true -> + Value + end, + {NewValue, + {5, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, NewQp5, Qp6}, + Qsp7, Qsp14}} + end; +out_current(6, + {_, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14} = Q, ReturnType) -> + {Value, NewQp6} = queue:out(Qp6), + if + Value =:= empty -> + out_current(7, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 6}; + true -> + Value + end, + {NewValue, + {6, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, NewQp6}, + Qsp7, Qsp14}} + end; +out_current(7, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14} = Q, ReturnType) -> + {Value, NewQp7} = queue:out(Qp7), + if + Value =:= empty -> + out_current(8, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 7}; + true -> + Value + end, + {NewValue, + {7, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {NewQp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}} + end; +out_current(8, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14} = Q, ReturnType) -> + {Value, NewQp8} = queue:out(Qp8), + if + Value =:= empty -> + out_current(9, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 8}; + true -> + Value + end, + {NewValue, + {8, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, NewQp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}} + end; +out_current(9, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14} = Q, ReturnType) -> + {Value, NewQp9} = queue:out(Qp9), + if + Value =:= empty -> + out_current(10, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 9}; + true -> + Value + end, + {NewValue, + {9, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, NewQp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}} + end; +out_current(10, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14} = Q, ReturnType) -> + {Value, NewQp10} = queue:out(Qp10), + if + Value =:= empty -> + out_current(11, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 10}; + true -> + Value + end, + {NewValue, + {10, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, NewQp10, Qp11, Qp12, Qp13}, + Qsp14}} + end; +out_current(11, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14} = Q, ReturnType) -> + {Value, NewQp11} = queue:out(Qp11), + if + Value =:= empty -> + out_current(12, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 11}; + true -> + Value + end, + {NewValue, + {11, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, NewQp11, Qp12, Qp13}, + Qsp14}} + end; +out_current(12, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14} = Q, ReturnType) -> + {Value, NewQp12} = queue:out(Qp12), + if + Value =:= empty -> + out_current(13, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 12}; + true -> + Value + end, + {NewValue, + {12, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, NewQp12, Qp13}, + Qsp14}} + end; +out_current(13, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14} = Q, ReturnType) -> + {Value, NewQp13} = queue:out(Qp13), + if + Value =:= empty -> + out_current(14, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 13}; + true -> + Value + end, + {NewValue, + {13, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, NewQp13}, + Qsp14}} + end; +out_current(14, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) -> + {Value, NewQp14} = queue:out(Qp14), + if + Value =:= empty -> + out_current(15, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 14}; + true -> + Value + end, + {NewValue, + {14, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {NewQp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}} + end; +out_current(15, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) -> + {Value, NewQp15} = queue:out(Qp15), + if + Value =:= empty -> + out_current(16, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 15}; + true -> + Value + end, + {NewValue, + {15, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, NewQp15, Qp16, Qp17, Qp18, Qp19, Qp20}}} + end; +out_current(16, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) -> + {Value, NewQp16} = queue:out(Qp16), + if + Value =:= empty -> + out_current(17, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 16}; + true -> + Value + end, + {NewValue, + {16, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, NewQp16, Qp17, Qp18, Qp19, Qp20}}} + end; +out_current(17, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) -> + {Value, NewQp17} = queue:out(Qp17), + if + Value =:= empty -> + out_current(18, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 17}; + true -> + Value + end, + {NewValue, + {17, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, NewQp17, Qp18, Qp19, Qp20}}} + end; +out_current(18, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) -> + {Value, NewQp18} = queue:out(Qp18), + if + Value =:= empty -> + out_current(19, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 18}; + true -> + Value + end, + {NewValue, + {18, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, NewQp18, Qp19, Qp20}}} + end; +out_current(19, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) -> + {Value, NewQp19} = queue:out(Qp19), + if + Value =:= empty -> + out_current(20, Q, ReturnType); + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 19}; + true -> + Value + end, + {NewValue, + {19, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, NewQp19, Qp20}}} + end; +out_current(20, + {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20} = Qsp14}, ReturnType) -> + {Value, NewQp20} = queue:out(Qp20), + if + Value =:= empty -> + {empty, {empty, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; + true -> + NewValue = if + ReturnType =:= priority -> + {value, Contents} = Value, + {value, Contents, 20}; + true -> + Value + end, + {NewValue, + {20, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, NewQp20}}} + end. + +out_specific(-20, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn20} = queue:out(Qn20), + {Value, + {Pc, + {NewQn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-19, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn19} = queue:out(Qn19), + {Value, + {Pc, + {Qn20, NewQn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-18, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn18} = queue:out(Qn18), + {Value, + {Pc, + {Qn20, Qn19, NewQn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-17, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn17} = queue:out(Qn17), + {Value, + {Pc, + {Qn20, Qn19, Qn18, NewQn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-16, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn16} = queue:out(Qn16), + {Value, + {Pc, + {Qn20, Qn19, Qn18, Qn17, NewQn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-15, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn15} = queue:out(Qn15), + {Value, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, NewQn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-14, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn14} = queue:out(Qn14), + {Value, + {Pc, + {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, NewQn14}, + Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-13, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn13} = queue:out(Qn13), + {Value, + {Pc, Qsn14, + {NewQn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-12, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn12} = queue:out(Qn12), + {Value, + {Pc, Qsn14, + {Qn13, NewQn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-11, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn11} = queue:out(Qn11), + {Value, + {Pc, Qsn14, + {Qn13, Qn12, NewQn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-10, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn10} = queue:out(Qn10), + {Value, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, NewQn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-9, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn9} = queue:out(Qn9), + {Value, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, NewQn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-8, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn8} = queue:out(Qn8), + {Value, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, NewQn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-7, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn7} = queue:out(Qn7), + {Value, + {Pc, Qsn14, + {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, NewQn7}, + Qsn1, Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-6, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn6} = queue:out(Qn6), + {Value, + {Pc, Qsn14, Qsn7, + {NewQn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-5, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn5} = queue:out(Qn5), + {Value, + {Pc, Qsn14, Qsn7, + {Qn6, NewQn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-4, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn4} = queue:out(Qn4), + {Value, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, NewQn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-3, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn3} = queue:out(Qn3), + {Value, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, NewQn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-2, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn2} = queue:out(Qn2), + {Value, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, NewQn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(-1, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQn1} = queue:out(Qn1), + {Value, + {Pc, Qsn14, Qsn7, + {Qn6, Qn5, Qn4, Qn3, Qn2, NewQn1}, + Q0, Qsp1, Qsp7, Qsp14}}; +out_specific(0, + {Pc, Qsn14, Qsn7, Qsn1, + Q0, Qsp1, Qsp7, Qsp14}) -> + {Value, NewQ0} = queue:out(Q0), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, + NewQ0, + Qsp1, Qsp7, Qsp14}}; +out_specific(1, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}) -> + {Value, NewQp1} = queue:out(Qp1), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {NewQp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}}; +out_specific(2, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}) -> + {Value, NewQp2} = queue:out(Qp2), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, NewQp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}}; +out_specific(3, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}) -> + {Value, NewQp3} = queue:out(Qp3), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, NewQp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}}; +out_specific(4, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}) -> + {Value, NewQp4} = queue:out(Qp4), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, NewQp4, Qp5, Qp6}, + Qsp7, Qsp14}}; +out_specific(5, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}) -> + {Value, NewQp5} = queue:out(Qp5), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, NewQp5, Qp6}, + Qsp7, Qsp14}}; +out_specific(6, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6}, + Qsp7, Qsp14}) -> + {Value, NewQp6} = queue:out(Qp6), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, NewQp6}, + Qsp7, Qsp14}}; +out_specific(7, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}) -> + {Value, NewQp7} = queue:out(Qp7), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {NewQp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}}; +out_specific(8, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}) -> + {Value, NewQp8} = queue:out(Qp8), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, NewQp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}}; +out_specific(9, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}) -> + {Value, NewQp9} = queue:out(Qp9), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, NewQp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}}; +out_specific(10, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}) -> + {Value, NewQp10} = queue:out(Qp10), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, NewQp10, Qp11, Qp12, Qp13}, + Qsp14}}; +out_specific(11, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}) -> + {Value, NewQp11} = queue:out(Qp11), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, NewQp11, Qp12, Qp13}, + Qsp14}}; +out_specific(12, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}) -> + {Value, NewQp12} = queue:out(Qp12), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, NewQp12, Qp13}, + Qsp14}}; +out_specific(13, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13}, + Qsp14}) -> + {Value, NewQp13} = queue:out(Qp13), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, + {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, NewQp13}, + Qsp14}}; +out_specific(14, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + {Value, NewQp14} = queue:out(Qp14), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {NewQp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}}; +out_specific(15, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + {Value, NewQp15} = queue:out(Qp15), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, NewQp15, Qp16, Qp17, Qp18, Qp19, Qp20}}}; +out_specific(16, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + {Value, NewQp16} = queue:out(Qp16), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, NewQp16, Qp17, Qp18, Qp19, Qp20}}}; +out_specific(17, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + {Value, NewQp17} = queue:out(Qp17), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, NewQp17, Qp18, Qp19, Qp20}}}; +out_specific(18, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + {Value, NewQp18} = queue:out(Qp18), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, NewQp18, Qp19, Qp20}}}; +out_specific(19, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + {Value, NewQp19} = queue:out(Qp19), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, NewQp19, Qp20}}}; +out_specific(20, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) -> + {Value, NewQp20} = queue:out(Qp20), + {Value, + {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, + {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, NewQp20}}}. + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). + +-include("pqueue_test.hrl"). + +module_test_() -> + {timeout, ?TEST_TIMEOUT, [ + {"internal tests", ?_assertOk(test())} + ]}. + +long_test_() -> + test_condition([ + {"proper tests", ?_assert(pqueue_proper:qc_pq())} + ], ?CLOUDI_LONG_TEST_TIMEOUT). + +-endif. + diff --git a/aoc2023/build/packages/pqueue/src/pqueue2.erl b/aoc2023/build/packages/pqueue/src/pqueue2.erl new file mode 100644 index 0000000..bbdeaaf --- /dev/null +++ b/aoc2023/build/packages/pqueue/src/pqueue2.erl @@ -0,0 +1,483 @@ +%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*- +% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod: +%%% +%%%------------------------------------------------------------------------ +%%% @doc +%%% ==Skew Heap Priority Queue.== +%%% Ulf Wiger suggested pursuing a skew heap as an optimal Erlang priority +%%% queue implementation. Unfortunately, testing has shown this solution to +%%% be more than 2 times slower than pqueue. +%%% @end +%%% +%%% MIT License +%%% +%%% Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com> +%%% +%%% Permission is hereby granted, free of charge, to any person obtaining a +%%% copy of this software and associated documentation files (the "Software"), +%%% to deal in the Software without restriction, including without limitation +%%% the rights to use, copy, modify, merge, publish, distribute, sublicense, +%%% and/or sell copies of the Software, and to permit persons to whom the +%%% Software is furnished to do so, subject to the following conditions: +%%% +%%% The above copyright notice and this permission notice shall be included in +%%% all copies or substantial portions of the Software. +%%% +%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +%%% DEALINGS IN THE SOFTWARE. +%%% +%%% @author Michael Truog <mjtruog at protonmail dot com> +%%% @copyright 2011-2020 Michael Truog +%%% @version 2.0.1 {@date} {@time} +%%%------------------------------------------------------------------------ + +-module(pqueue2). +-author('mjtruog at protonmail dot com'). + +%% external interface +-export([in/2, + in/3, + is_empty/1, + is_queue/1, + len/1, + new/0, + out/1, + out/2, + pout/1, + to_list/1, + test/0]). + +%%%------------------------------------------------------------------------ +%%% External interface functions +%%%------------------------------------------------------------------------ + +-ifdef(ERLANG_OTP_VERSION_16). +-type pqueue2() :: + empty | + {integer(), pqueue2(), pqueue2(), element, term()} | + {integer(), pqueue2(), pqueue2(), queue, queue()}. +-else. +-type pqueue2() :: + empty | + {integer(), pqueue2(), pqueue2(), element, term()} | + {integer(), pqueue2(), pqueue2(), queue, queue:queue()}. +-endif. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Append an item to the tail of the 0 priority queue.=== +%% @end +%%------------------------------------------------------------------------- + +-spec in(term(), pqueue2()) -> pqueue2(). + +in(Value, H) -> + in(Value, 0, H). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Append an item to the tail of a specific priority queue.=== +%% @end +%%------------------------------------------------------------------------- + +-spec in(term(), integer(), pqueue2()) -> pqueue2(). + +in(Value, P, H) -> + merge({P, empty, empty, element, Value}, H). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Check if the priority queue is empty.=== +%% @end +%%------------------------------------------------------------------------- + +-spec is_empty(pqueue2()) -> 'true' | 'false'. + +is_empty(empty) -> + true; +is_empty({_, HL, HR, queue, Queue}) -> + is_empty(HL) andalso is_empty(HR) andalso queue:is_empty(Queue); +is_empty(_) -> + false. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Check if the priority queue type is as expected.=== +%% @end +%%------------------------------------------------------------------------- + +-spec is_queue(pqueue2()) -> 'true' | 'false'. + +is_queue(empty) -> + true; +is_queue({P, _, _, element, _}) + when is_integer(P) -> + true; +is_queue({P, _, _, queue, Queue}) + when is_integer(P) -> + queue:is_queue(Queue); +is_queue(_) -> + false. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Determine the length of a priority queue.=== +%% @end +%%------------------------------------------------------------------------- + +-spec len(pqueue2()) -> non_neg_integer(). + +len(H) -> + len(0, out(H)). +len(I, {empty, _}) -> + I; +len(I, {{value, _}, H}) -> + len(I + 1, out(H)). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Create a new priority queue.=== +%% @end +%%------------------------------------------------------------------------- + +-spec new() -> pqueue2(). + +new() -> + empty. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item from the head of the priority queue.=== +%% @end +%%------------------------------------------------------------------------- + +-spec out(pqueue2()) -> + {{'value', term()}, pqueue2()} | {'empty', pqueue2()}. + +out(empty) -> + {empty, empty}; +out({_, HL, HR, element, Value}) -> + {{value, Value}, merge(HL, HR)}; +out({P, HL, HR, queue, Queue}) -> + case queue:out(Queue) of + {{value, _} = Result, NewQueue} -> + {Result, {P, HL, HR, queue, NewQueue}}; + {empty, _} -> + out(merge(HL, HR)) + end. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item of a specific priority from the head of the queue.=== +%% @end +%%------------------------------------------------------------------------- + +-spec out(integer(), pqueue2()) -> + {{'value', term()}, pqueue2()} | {'empty', pqueue2()}. + +out(_, empty) -> + {empty, empty}; +out(P, {P1, _, _, _, _} = H) when P < P1 -> + {empty, H}; +out(P, {P1, HL1, HR1, T, D}) when P > P1 -> + case out(P, HL1) of + {{value, _} = Result, HL2} -> + {Result, {P1, HL2, HR1, T, D}}; + {empty, HL2} -> + case out(P, HR1) of + {{value, _} = Result, HR2} -> + {Result, {P1, HL2, HR2, T, D}}; + {empty, HR2} -> + {empty, {P1, HL2, HR2, T, D}} + end + end; +out(P, {P, HL, HR, element, Value}) -> + {{value, Value}, merge(HL, HR)}; +out(P, {P, HL, HR, queue, Queue}) -> + case queue:out(Queue) of + {{value, _} = Result, NewQueue} -> + {Result, {P, HL, HR, queue, NewQueue}}; + {empty, _} -> + out(P, merge(HL, HR)) + end. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item from the head of the priority queue.=== +%% Includes the priority in the return value. +%% @end +%%------------------------------------------------------------------------- + +-spec pout(pqueue2()) -> + {{'value', term(), integer()}, pqueue2()} | {'empty', pqueue2()}. + +pout(empty) -> + {empty, empty}; +pout({P, HL, HR, element, Value}) -> + {{value, Value, P}, merge(HL, HR)}; +pout({P, HL, HR, queue, Queue}) -> + case queue:out(Queue) of + {{value, Value}, NewQueue} -> + {{value, Value, P}, {P, HL, HR, queue, NewQueue}}; + {empty, _} -> + pout(merge(HL, HR)) + end. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Convert the priority queue to a list.=== +%% @end +%%------------------------------------------------------------------------- + +-spec to_list(pqueue2()) -> list(term()). + +to_list(H) -> + to_list([], out(H)). +to_list(L, {empty, _}) -> + lists:reverse(L); +to_list(L, {{value, Value}, H}) -> + to_list([Value | L], out(H)). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Regression test.=== +%% @end +%%------------------------------------------------------------------------- + +test() -> + Q0 = pqueue2:new(), + true = pqueue2:is_queue(Q0), + Q1 = pqueue2:in(20, 20, Q0), + Q2 = pqueue2:in(19, 19, Q1), + Q3 = pqueue2:in(18, 18, Q2), + Q4 = pqueue2:in(17, 17, Q3), + Q5 = pqueue2:in(16, 16, Q4), + Q6 = pqueue2:in(15, 15, Q5), + Q7 = pqueue2:in(14, 14, Q6), + Q8 = pqueue2:in(13, 13, Q7), + Q9 = pqueue2:in(12, 12, Q8), + Q10 = pqueue2:in(11, 11, Q9), + Q11 = pqueue2:in(10, 10, Q10), + Q12 = pqueue2:in(9, 9, Q11), + Q13 = pqueue2:in(8, 8, Q12), + Q14 = pqueue2:in(7, 7, Q13), + Q15 = pqueue2:in(6, 6, Q14), + Q16 = pqueue2:in(5, 5, Q15), + Q17 = pqueue2:in(4, 4, Q16), + Q18 = pqueue2:in(3, 3, Q17), + Q19 = pqueue2:in(2, 2, Q18), + Q20 = pqueue2:in(1, 1, Q19), + Q21 = pqueue2:in(0, 0, Q20), + Q22 = pqueue2:in(-1, -1, Q21), + Q23 = pqueue2:in(-2, -2, Q22), + Q24 = pqueue2:in(-3, -3, Q23), + Q25 = pqueue2:in(-4, -4, Q24), + Q26 = pqueue2:in(-5, -5, Q25), + Q27 = pqueue2:in(-6, -6, Q26), + Q28 = pqueue2:in(-7, -7, Q27), + Q29 = pqueue2:in(-8, -8, Q28), + Q30 = pqueue2:in(-9, -9, Q29), + Q31 = pqueue2:in(-10, -10, Q30), + Q32 = pqueue2:in(-11, -11, Q31), + Q33 = pqueue2:in(-12, -12, Q32), + Q34 = pqueue2:in(-13, -13, Q33), + Q35 = pqueue2:in(-14, -14, Q34), + Q36 = pqueue2:in(-15, -15, Q35), + Q37 = pqueue2:in(-16, -16, Q36), + Q38 = pqueue2:in(-17, -17, Q37), + Q39 = pqueue2:in(-18, -18, Q38), + Q40 = pqueue2:in(-19, -19, Q39), + Q41 = pqueue2:in(-20, -20, Q40), + Q42 = pqueue2:in(-20, -20, Q41), + Q43 = pqueue2:in(-19, -19, Q42), + Q44 = pqueue2:in(-18, -18, Q43), + Q45 = pqueue2:in(-17, -17, Q44), + Q46 = pqueue2:in(-16, -16, Q45), + Q47 = pqueue2:in(-15, -15, Q46), + Q48 = pqueue2:in(-14, -14, Q47), + Q49 = pqueue2:in(-13, -13, Q48), + Q50 = pqueue2:in(-12, -12, Q49), + Q51 = pqueue2:in(-11, -11, Q50), + Q52 = pqueue2:in(-10, -10, Q51), + Q53 = pqueue2:in(-9, -9, Q52), + Q54 = pqueue2:in(-8, -8, Q53), + Q55 = pqueue2:in(-7, -7, Q54), + Q56 = pqueue2:in(-6, -6, Q55), + Q57 = pqueue2:in(-5, -5, Q56), + Q58 = pqueue2:in(-4, -4, Q57), + Q59 = pqueue2:in(-3, -3, Q58), + Q60 = pqueue2:in(-2, -2, Q59), + Q61 = pqueue2:in(-1, -1, Q60), + Q62 = pqueue2:in(0, 0, Q61), + Q63 = pqueue2:in(1, 1, Q62), + Q64 = pqueue2:in(2, 2, Q63), + Q65 = pqueue2:in(3, 3, Q64), + Q66 = pqueue2:in(4, 4, Q65), + Q67 = pqueue2:in(5, 5, Q66), + Q68 = pqueue2:in(6, 6, Q67), + Q69 = pqueue2:in(7, 7, Q68), + Q70 = pqueue2:in(8, 8, Q69), + Q71 = pqueue2:in(9, 9, Q70), + Q72 = pqueue2:in(10, 10, Q71), + Q73 = pqueue2:in(11, 11, Q72), + Q74 = pqueue2:in(12, 12, Q73), + Q75 = pqueue2:in(13, 13, Q74), + Q76 = pqueue2:in(14, 14, Q75), + Q77 = pqueue2:in(15, 15, Q76), + Q78 = pqueue2:in(16, 16, Q77), + Q79 = pqueue2:in(17, 17, Q78), + Q80 = pqueue2:in(18, 18, Q79), + Q81 = pqueue2:in(19, 19, Q80), + Q82 = pqueue2:in(20, 20, Q81), + true = pqueue2:is_queue(Q82), + 82 = pqueue2:len(Q82), + [-20, -20, -19, -19, -18, -18, -17, -17, -16, -16, -15, -15, -14, -14, + -13, -13, -12, -12, -11, -11, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6, + -5, -5, -4, -4, -3, -3, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, + 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, + 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20] = pqueue2:to_list(Q82), + {{value, -20}, Q83} = pqueue2:out(Q82), + {{value, -20}, Q84} = pqueue2:out(Q83), + {{value, -19}, Q85} = pqueue2:out(Q84), + {{value, -19}, Q86} = pqueue2:out(Q85), + {{value, -18}, Q87} = pqueue2:out(Q86), + {{value, -18}, Q88} = pqueue2:out(Q87), + {{value, 0}, Q89} = pqueue2:out(0, Q88), + {{value, 0}, Q90} = pqueue2:out(0, Q89), + {empty, _} = pqueue2:out(0, Q90), + {{value, -17, -17}, Q91} = pqueue2:pout(Q90), + {{value, -17, -17}, Q92} = pqueue2:pout(Q91), + {{value, -16, -16}, Q93} = pqueue2:pout(Q92), + {{value, -16, -16}, Q94} = pqueue2:pout(Q93), + {{value, -15, -15}, Q95} = pqueue2:pout(Q94), + {{value, -15, -15}, Q96} = pqueue2:pout(Q95), + {{value, -14, -14}, Q97} = pqueue2:pout(Q96), + {{value, -14, -14}, Q98} = pqueue2:pout(Q97), + {{value, -13, -13}, Q99} = pqueue2:pout(Q98), + {{value, -13, -13}, Q100} = pqueue2:pout(Q99), + {{value, -12, -12}, Q101} = pqueue2:pout(Q100), + {{value, -12, -12}, Q102} = pqueue2:pout(Q101), + {{value, -11, -11}, Q103} = pqueue2:pout(Q102), + {{value, -11, -11}, Q104} = pqueue2:pout(Q103), + {{value, -10, -10}, Q105} = pqueue2:pout(Q104), + {{value, -10, -10}, Q106} = pqueue2:pout(Q105), + {{value, -9, -9}, Q107} = pqueue2:pout(Q106), + {{value, -9, -9}, Q108} = pqueue2:pout(Q107), + {{value, -8, -8}, Q109} = pqueue2:pout(Q108), + {{value, -8, -8}, Q110} = pqueue2:pout(Q109), + {{value, -7, -7}, Q111} = pqueue2:pout(Q110), + {{value, -7, -7}, Q112} = pqueue2:pout(Q111), + {{value, -6, -6}, Q113} = pqueue2:pout(Q112), + {{value, -6, -6}, Q114} = pqueue2:pout(Q113), + {{value, -5, -5}, Q115} = pqueue2:pout(Q114), + {{value, -5, -5}, Q116} = pqueue2:pout(Q115), + {{value, -4, -4}, Q117} = pqueue2:pout(Q116), + {{value, -4, -4}, Q118} = pqueue2:pout(Q117), + {{value, -3, -3}, Q119} = pqueue2:pout(Q118), + {{value, -3, -3}, Q120} = pqueue2:pout(Q119), + {{value, -2, -2}, Q121} = pqueue2:pout(Q120), + {{value, -2, -2}, Q122} = pqueue2:pout(Q121), + {{value, -1, -1}, Q123} = pqueue2:pout(Q122), + {{value, -1, -1}, Q124} = pqueue2:pout(Q123), + {{value, 1, 1}, Q125} = pqueue2:pout(Q124), + {{value, 1, 1}, Q126} = pqueue2:pout(Q125), + {{value, 2, 2}, Q127} = pqueue2:pout(Q126), + {{value, 2, 2}, Q128} = pqueue2:pout(Q127), + {{value, 3, 3}, Q129} = pqueue2:pout(Q128), + {{value, 3, 3}, Q130} = pqueue2:pout(Q129), + {{value, 4, 4}, Q131} = pqueue2:pout(Q130), + {{value, 4, 4}, Q132} = pqueue2:pout(Q131), + {{value, 5, 5}, Q133} = pqueue2:pout(Q132), + {{value, 5, 5}, Q134} = pqueue2:pout(Q133), + {{value, 6, 6}, Q135} = pqueue2:pout(Q134), + {{value, 6, 6}, Q136} = pqueue2:pout(Q135), + {{value, 7, 7}, Q137} = pqueue2:pout(Q136), + {{value, 7, 7}, Q138} = pqueue2:pout(Q137), + {{value, 8, 8}, Q139} = pqueue2:pout(Q138), + {{value, 8, 8}, Q140} = pqueue2:pout(Q139), + {{value, 9, 9}, Q141} = pqueue2:pout(Q140), + {{value, 9, 9}, Q142} = pqueue2:pout(Q141), + {{value, 10, 10}, Q143} = pqueue2:pout(Q142), + {{value, 10, 10}, Q144} = pqueue2:pout(Q143), + {{value, 11, 11}, Q145} = pqueue2:pout(Q144), + {{value, 11, 11}, Q146} = pqueue2:pout(Q145), + {{value, 12, 12}, Q147} = pqueue2:pout(Q146), + {{value, 12, 12}, Q148} = pqueue2:pout(Q147), + {{value, 13, 13}, Q149} = pqueue2:pout(Q148), + {{value, 13, 13}, Q150} = pqueue2:pout(Q149), + {{value, 14, 14}, Q151} = pqueue2:pout(Q150), + {{value, 14, 14}, Q152} = pqueue2:pout(Q151), + {{value, 15, 15}, Q153} = pqueue2:pout(Q152), + {{value, 15, 15}, Q154} = pqueue2:pout(Q153), + {{value, 16, 16}, Q155} = pqueue2:pout(Q154), + {{value, 16, 16}, Q156} = pqueue2:pout(Q155), + {{value, 17, 17}, Q157} = pqueue2:pout(Q156), + {{value, 17, 17}, Q158} = pqueue2:pout(Q157), + {{value, 18, 18}, Q159} = pqueue2:pout(Q158), + {{value, 18, 18}, Q160} = pqueue2:pout(Q159), + {{value, 19, 19}, Q161} = pqueue2:pout(Q160), + {{value, 19, 19}, Q162} = pqueue2:pout(Q161), + {{value, 20, 20}, Q163} = pqueue2:pout(Q162), + {{value, 20, 20}, Q164} = pqueue2:pout(Q163), + true = pqueue2:is_empty(Q164), + {empty, Q165} = pqueue2:pout(Q164), + true = pqueue2:is_empty(Q165), + % test case 1, based on proper testing + C1V0 = pqueue2:in(-18, pqueue2:new()), + C1V1 = pqueue2:in(9, C1V0), + C1V2 = pqueue2:in(-10, -4, C1V1), + C1V3 = pqueue2:in(-29, C1V2), + C1V4 = pqueue2:in(11, C1V3), + 5 = pqueue2:len(C1V4), + [-10, -18, 9, -29, 11] = pqueue2:to_list(C1V4), + % test case 2, based on proper testing + C2V0 = pqueue2:in(-4, -15, pqueue2:new()), + C2V1 = pqueue2:in(13, C2V0), + C2V2 = pqueue2:in(2, C2V1), + [-4, 13, 2] = to_list(C2V2), + ok. + +%%%------------------------------------------------------------------------ +%%% Private functions +%%%------------------------------------------------------------------------ + +merge(empty, empty) -> + empty; +merge(empty, {_, _, _, _, _} = H) -> + H; +merge({_, _, _, _, _} = H, empty) -> + H; +merge({P1, HL1, HR1, T, D}, {P2, _, _, _, _} = H2) when P1 < P2 -> + {P1, HL1, merge(HR1, H2), T, D}; +merge({P1, _, _, _, _} = H1, {P2, HL2, HR2, T, D}) when P1 > P2 -> + {P2, HL2, merge(H1, HR2), T, D}; +merge({P, HL1, HR1, element, Value1}, {P, HL2, HR2, element, Value2}) -> + {P, merge(HL1, HR1), merge(HL2, HR2), queue, + queue:from_list([Value2, Value1])}; +merge({P, HL1, HR1, queue, Queue}, {P, HL2, HR2, element, Value}) -> + {P, merge(HL1, HR1), merge(HL2, HR2), queue, queue:in(Value, Queue)}; +merge({P, HL1, HR1, element, Value}, {P, HL2, HR2, queue, Queue}) -> + {P, merge(HL1, HR1), merge(HL2, HR2), queue, queue:in(Value, Queue)}. + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). + +-include("pqueue_test.hrl"). + +module_test_() -> + {timeout, ?TEST_TIMEOUT, [ + {"internal tests", ?_assertOk(test())} + ]}. + +long_test_() -> + test_condition([ + {"proper tests", ?_assert(pqueue_proper:qc_pq2())} + ], ?CLOUDI_LONG_TEST_TIMEOUT). + +-endif. + diff --git a/aoc2023/build/packages/pqueue/src/pqueue3.erl b/aoc2023/build/packages/pqueue/src/pqueue3.erl new file mode 100644 index 0000000..03b370a --- /dev/null +++ b/aoc2023/build/packages/pqueue/src/pqueue3.erl @@ -0,0 +1,404 @@ +%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*- +% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod: +%%% +%%%------------------------------------------------------------------------ +%%% @doc +%%% ==A Large Priority Queue.== +%%% This priority queue implementation depends on layered tuples, so that tuple +%%% access times can be exploited for quick in/out priority queue operations +%%% when using 64 or more total priorities. This implementation was created +%%% to avoid the slowness within the priority queue used by +%%% both RabbitMQ and Riak +%%% (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl). +%%% @end +%%% +%%% MIT License +%%% +%%% Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com> +%%% +%%% Permission is hereby granted, free of charge, to any person obtaining a +%%% copy of this software and associated documentation files (the "Software"), +%%% to deal in the Software without restriction, including without limitation +%%% the rights to use, copy, modify, merge, publish, distribute, sublicense, +%%% and/or sell copies of the Software, and to permit persons to whom the +%%% Software is furnished to do so, subject to the following conditions: +%%% +%%% The above copyright notice and this permission notice shall be included in +%%% all copies or substantial portions of the Software. +%%% +%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +%%% DEALINGS IN THE SOFTWARE. +%%% +%%% @author Michael Truog <mjtruog at protonmail dot com> +%%% @copyright 2011-2020 Michael Truog +%%% @version 2.0.1 {@date} {@time} +%%%------------------------------------------------------------------------ + +-module(pqueue3). +-author('mjtruog at protonmail dot com'). + +%% external interface +-export([in/2, % O(1) + in/3, % O(1) + is_empty/1, % O(1) + is_queue/1, % O(1) + len/1, % O(N) + new/0, % O(1) + new/1, % O(1) + out/1, % O(1) amortized, O(N) worst case + out/2, % O(1) amortized, O(N) worst case + pout/1, % O(1) amortized, O(N) worst case + to_list/1]). % O(N) + +%%%------------------------------------------------------------------------ +%%% External interface functions +%%%------------------------------------------------------------------------ + +-type pqueue3() :: {integer(), integer(), empty | integer(), tuple()}. +-type pqueue3_empty() :: {integer(), integer(), empty, tuple()}. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Append an item to the tail of the 0 priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec in(term(), pqueue3()) -> pqueue3(). + +in(Value, Q) -> + in(Value, 0, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Append an item to the tail of a specific priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec in(term(), integer(), pqueue3()) -> pqueue3(). + +in(_, P, {Size, Offset, _, _}) + when (P + Offset) < 0; (P + Offset) > Size -> + erlang:exit(badarg); +in(Value, P, {Size, Offset, empty, Bins}) -> + PriorityIndex = P + Offset, + {Size, Offset, PriorityIndex, + in_queue(layer_indexes(Size, PriorityIndex), Value, Bins)}; +in(Value, P, {Size, Offset, I, Bins}) + when (P + Offset) < I -> + PriorityIndex = P + Offset, + {Size, Offset, PriorityIndex, + in_queue(layer_indexes(Size, PriorityIndex), Value, Bins)}; +in(Value, P, {Size, Offset, I, Bins}) -> + {Size, Offset, I, + in_queue(layer_indexes(Size, P + Offset), Value, Bins)}. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Check if the priority queue is empty.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec is_empty(pqueue3()) -> 'true' | 'false'. + +is_empty({_, _, empty, _}) -> + true; +is_empty({_, _, _, _} = Q) -> + case out(Q) of + {empty, _} -> + true; + {{value, _}, _} -> + false + end. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Check if the priority queue type is as expected.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec is_queue(pqueue3()) -> 'true' | 'false'. + +is_queue({Size, Offset, I, Bins}) + when is_integer(Size), is_integer(Offset), is_tuple(Bins) -> + (I =:= empty) or is_integer(I); +is_queue(_) -> + false. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Determine the length of a priority queue.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec len(pqueue3()) -> non_neg_integer(). + +len(Q) -> + len(0, out(Q)). +len(I, {empty, _}) -> + I; +len(I, {{value, _}, Q}) -> + len(I + 1, out(Q)). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Create a new priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec new() -> pqueue3_empty(). + +new() -> + new([]). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Create a new priority queue with customization options.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec new(list({atom(), term()})) -> pqueue3(). + +new(Options) -> + Size = proplists:get_value(priorities, Options, 256), + MiddleZero = proplists:get_value(middle_priority_zero, Options, true), + Offset = if + MiddleZero =:= true -> + erlang:round((Size / 2) + 0.5) - 1; + true -> + 0 + end, + {Size, Offset, empty, create(layer_sizes(Size))}. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item from the head of the priority queue.=== +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec out(pqueue3()) -> + {{'value', term()}, pqueue3()} | {'empty', pqueue3()}. + +out({_, _, empty, _} = Q) -> + {empty, Q}; +out({Size, Offset, I, Bins}) -> + {Result, NewI, NewBins} = out_check( + I, Size, out_queue(layer_indexes(Size, I), Bins) + ), + {Result, {Size, Offset, NewI, NewBins}}. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item of a specific priority from the head of the queue.=== +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec out(integer(), pqueue3()) -> + {{'value', term()}, pqueue3()} | {'empty', pqueue3()}. + +out(P, {Size, Offset, _, _}) + when (P + Offset) < 0; (P + Offset) > Size -> + erlang:exit(badarg); +out(_, {_, _, empty, _} = Q) -> + {empty, Q}; +out(P, {Size, Offset, I, Bins}) -> + {Result, NewBins} = out_queue(layer_indexes(Size, P + Offset), Bins), + {Result, {Size, Offset, I, NewBins}}. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item from the head of the priority queue.=== +%% Includes the priority in the return value. +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec pout(pqueue3()) -> + {{'value', term(), integer()}, pqueue3()} | {'empty', pqueue3()}. + +pout({_, _, empty, _} = Q) -> + {empty, Q}; +pout({Size, Offset, I, Bins}) -> + {Result, NewI, NewBins} = pout_check( + I, Size, Offset, out_queue(layer_indexes(Size, I), Bins) + ), + {Result, {Size, Offset, NewI, NewBins}}. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Convert the priority queue to a list.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec to_list(pqueue3()) -> list(term()). + +to_list(Q) -> + to_list([], out(Q)). +to_list(L, {empty, _}) -> + lists:reverse(L); +to_list(L, {{value, Value}, Q}) -> + to_list([Value | L], out(Q)). + +%%%------------------------------------------------------------------------ +%%% Private functions +%%%------------------------------------------------------------------------ + +create([]) -> + queue:new(); + +create([I | Is]) -> + erlang:make_tuple(I + 1, create(Is)). + +in_queue({I1}, Value, Bins1) -> + erlang:setelement(I1, Bins1, queue:in(Value, erlang:element(I1, Bins1))); + +in_queue({I1, I2}, Value, Bins1) -> + Bins2 = erlang:element(I1, Bins1), + erlang:setelement(I1, Bins1, + erlang:setelement(I2, Bins2, queue:in(Value, erlang:element(I2, Bins2)))); + +in_queue({I1, I2, I3}, Value, Bins1) -> + Bins2 = erlang:element(I1, Bins1), + Bins3 = erlang:element(I2, Bins2), + erlang:setelement(I1, Bins1, + erlang:setelement(I2, Bins2, + erlang:setelement(I3, Bins3, queue:in(Value, erlang:element(I3, Bins3))))); + +in_queue({I1, I2, I3, I4}, Value, Bins1) -> + Bins2 = erlang:element(I1, Bins1), + Bins3 = erlang:element(I2, Bins2), + Bins4 = erlang:element(I3, Bins3), + erlang:setelement(I1, Bins1, + erlang:setelement(I2, Bins2, + erlang:setelement(I3, Bins3, + erlang:setelement(I4, Bins4, queue:in(Value, erlang:element(I4, Bins4)))))). + +pout_check(Size, Size, _, {empty, Bins}) -> + {empty, empty, Bins}; +pout_check(I, _, Offset, {{value, Value}, Bins}) -> + {{value, Value, I - Offset}, I, Bins}; +pout_check(I, Size, Offset, {empty, Bins}) -> + NewI = I + 1, + pout_check(NewI, Size, Offset, out_queue(layer_indexes(Size, NewI), Bins)). + +out_check(Size, Size, {empty, Bins}) -> + {empty, empty, Bins}; +out_check(I, _, {{value, _} = Result, Bins}) -> + {Result, I, Bins}; +out_check(I, Size, {empty, Bins}) -> + NewI = I + 1, + out_check(NewI, Size, out_queue(layer_indexes(Size, NewI), Bins)). + +out_queue({I1}, Bins1) -> + {Result, NewQueue} = queue:out(erlang:element(I1, Bins1)), + {Result, + erlang:setelement(I1, Bins1, NewQueue)}; + +out_queue({I1, I2}, Bins1) -> + Bins2 = erlang:element(I1, Bins1), + {Result, NewQueue} = queue:out(erlang:element(I2, Bins2)), + {Result, + erlang:setelement(I1, Bins1, + erlang:setelement(I2, Bins2, NewQueue))}; + +out_queue({I1, I2, I3}, Bins1) -> + Bins2 = erlang:element(I1, Bins1), + Bins3 = erlang:element(I2, Bins2), + {Result, NewQueue} = queue:out(erlang:element(I3, Bins3)), + {Result, + erlang:setelement(I1, Bins1, + erlang:setelement(I2, Bins2, + erlang:setelement(I3, Bins3, NewQueue)))}; + +out_queue({I1, I2, I3, I4}, Bins1) -> + Bins2 = erlang:element(I1, Bins1), + Bins3 = erlang:element(I2, Bins2), + Bins4 = erlang:element(I3, Bins3), + {Result, NewQueue} = queue:out(erlang:element(I4, Bins4)), + {Result, + erlang:setelement(I1, Bins1, + erlang:setelement(I2, Bins2, + erlang:setelement(I3, Bins3, + erlang:setelement(I4, Bins4, NewQueue))))}. + +layer_indexes(Size, PriorityIndex) -> + if + Size =< 127 -> + {PriorityIndex + 1}; + Size =< 255 -> + <<I1:4, I2:4>> = <<PriorityIndex:8>>, + {I1 + 1, I2 + 1}; + Size =< 511 -> + <<I1:4, I2:5>> = <<PriorityIndex:9>>, + {I1 + 1, I2 + 1}; + Size =< 1023 -> + <<I1:3, I2:3, I3:4>> = <<PriorityIndex:10>>, + {I1 + 1, I2 + 1, I3 + 1}; + Size =< 2047 -> + <<I1:3, I2:4, I3:4>> = <<PriorityIndex:11>>, + {I1 + 1, I2 + 1, I3 + 1}; + Size =< 4095 -> + <<I1:4, I2:4, I3:4>> = <<PriorityIndex:12>>, + {I1 + 1, I2 + 1, I3 + 1}; + Size =< 8191 -> + <<I1:4, I2:4, I3:5>> = <<PriorityIndex:13>>, + {I1 + 1, I2 + 1, I3 + 1}; + Size =< 16383 -> + <<I1:4, I2:5, I3:5>> = <<PriorityIndex:14>>, + {I1 + 1, I2 + 1, I3 + 1}; + Size =< 32767 -> + <<I1:3, I2:4, I3:4, I4:4>> = <<PriorityIndex:15>>, + {I1 + 1, I2 + 1, I3 + 1, I4 + 1}; + Size =< 65535 -> + <<I1:4, I2:4, I3:4, I4:4>> = <<PriorityIndex:16>>, + {I1 + 1, I2 + 1, I3 + 1, I4 + 1} + end. + +layer_sizes(Size) -> + if + Size =< 127 -> + <<I1:7>> = <<127:7>>, + [I1]; + Size =< 255 -> + <<I1:4, I2:4>> = <<255:8>>, + [I1, I2]; + Size =< 511 -> + <<I1:4, I2:5>> = <<511:9>>, + [I1, I2]; + Size =< 1023 -> + <<I1:3, I2:3, I3:4>> = <<1023:10>>, + [I1, I2, I3]; + Size =< 2047 -> + <<I1:3, I2:4, I3:4>> = <<2047:11>>, + [I1, I2, I3]; + Size =< 4095 -> + <<I1:4, I2:4, I3:4>> = <<4095:12>>, + [I1, I2, I3]; + Size =< 8191 -> + <<I1:4, I2:4, I3:5>> = <<8191:13>>, + [I1, I2, I3]; + Size =< 16383 -> + <<I1:4, I2:5, I3:5>> = <<16383:14>>, + [I1, I2, I3]; + Size =< 32767 -> + <<I1:3, I2:4, I3:4, I4:4>> = <<32767:15>>, + [I1, I2, I3, I4]; + Size =< 65535 -> + <<I1:4, I2:4, I3:4, I4:4>> = <<65535:16>>, + [I1, I2, I3, I4] + end. + diff --git a/aoc2023/build/packages/pqueue/src/pqueue4.erl b/aoc2023/build/packages/pqueue/src/pqueue4.erl new file mode 100644 index 0000000..30b188d --- /dev/null +++ b/aoc2023/build/packages/pqueue/src/pqueue4.erl @@ -0,0 +1,11662 @@ +%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*- +% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod: +%%% +%%%------------------------------------------------------------------------ +%%% @doc +%%% ==Static Priority Queue.== +%%% This priority queue implementation depends on a static number of priorities +%%% (-128 (high) to 128 (low)) so that tuple access times can be exploited for +%%% quick in/out priority queue operations. This implementation was created to +%%% avoid the slowness within the priority queue used by both RabbitMQ and Riak +%%% (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl). +%%% @end +%%% +%%% MIT License +%%% +%%% Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com> +%%% +%%% Permission is hereby granted, free of charge, to any person obtaining a +%%% copy of this software and associated documentation files (the "Software"), +%%% to deal in the Software without restriction, including without limitation +%%% the rights to use, copy, modify, merge, publish, distribute, sublicense, +%%% and/or sell copies of the Software, and to permit persons to whom the +%%% Software is furnished to do so, subject to the following conditions: +%%% +%%% The above copyright notice and this permission notice shall be included in +%%% all copies or substantial portions of the Software. +%%% +%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +%%% DEALINGS IN THE SOFTWARE. +%%% +%%% +%%% queue_remove_unique/2 is based on queue:filter/2 +%%% which is under the Apache License 2.0: +%%% +%%% Copyright Ericsson AB 1996-2016. All Rights Reserved. +%%% +%%% Licensed under the Apache License, Version 2.0 (the "License"); +%%% you may not use this file except in compliance with the License. +%%% You may obtain a copy of the License at +%%% +%%% http://www.apache.org/licenses/LICENSE-2.0 +%%% +%%% Unless required by applicable law or agreed to in writing, software +%%% distributed under the License is distributed on an "AS IS" BASIS, +%%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%%% See the License for the specific language governing permissions and +%%% limitations under the License. +%%% +%%% @author Michael Truog <mjtruog at protonmail dot com> +%%% @copyright 2011-2020 Michael Truog +%%% @version 2.0.1 {@date} {@time} +%%%------------------------------------------------------------------------ + +-module(pqueue4). +-author('mjtruog at protonmail dot com'). + +%% external interface +-export([filter/2, % O(N) + filter/3, % O(N) + in/2, % O(1) + in/3, % O(1) + is_empty/1, % O(1) + is_queue/1, % O(1) + len/1, % O(1) + new/0, % O(1) + out/1, % O(1) amortized, O(N) worst case + out/2, % O(1) amortized, O(N) worst case + pout/1, % O(1) amortized, O(N) worst case + remove_unique/2, % O(N) but smaller constant than filter/2 + remove_unique/3, % O(N) but smaller constant than filter/3 + to_list/1, % O(N) + to_plist/1, % O(N) + test/0]). + +%%%------------------------------------------------------------------------ +%%% External interface functions +%%%------------------------------------------------------------------------ + +-type priority() :: -128..128. +-ifdef(ERLANG_OTP_VERSION_16). +-type pqueue4(_) :: + {priority() | 'empty', % current priority + non_neg_integer(), % total size + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + queue(), + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}, + {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(), + queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}}. +-else. +-type pqueue4(T) :: + {priority() | 'empty', % current priority + non_neg_integer(), % total size + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + queue:queue(T), + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}, + {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T), + queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}}. +-endif. +-type pqueue4() :: pqueue4(any()). +-export_type([pqueue4/0, pqueue4/1]). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Filter the priority queue.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec filter(fun((any()) -> boolean()), pqueue4()) -> pqueue4(). + +filter(F, {empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) + when is_function(F, 1) -> + Q; +filter(F, {Pc, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) + when is_function(F, 1) -> + filter_all(Pc, F, Q). + +filter_all(_, _, {_, 0, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _} = Q) -> + Q; +filter_all(128, F, Q) -> + filter_priority(128, F, Q); +filter_all(P, F, Q) when is_integer(P) -> + filter_all(P + 1, F, filter_priority(P, F, Q)). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Filter a specific priority within the priority queue.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec filter(fun((any()) -> boolean()), integer(), pqueue4()) -> pqueue4(). + +filter(_, P, _) + when P < -128; P > 128 -> + erlang:exit(badarg); +filter(F, P, Q) when is_function(F, 1) -> + filter_priority(P, F, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Append an item to the tail of the 0 priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec in(any(), pqueue4()) -> pqueue4(). + +in(X, Q) -> + in(X, 0, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Append an item to the tail of a specific priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec in(any(), integer(), pqueue4()) -> pqueue4(). + +in(_, P, _) + when P < -128; P > 128 -> + erlang:exit(badarg); +in(X, P, {empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) -> + in_higher(P, Q, X); % (in a higher priority) +in(X, P, {Pc, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) + when P < Pc -> + in_higher(P, Q, X); % (in a higher priority) +in(X, P, Q) -> + in_lower(P, Q, X). % (in a lower priority) + +%%------------------------------------------------------------------------- +%% @doc +%% ===Check if the priority queue is empty.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec is_empty(pqueue4()) -> 'true' | 'false'. + +is_empty({_, 0, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _}) -> + true; +is_empty({_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _}) -> + false. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Check if the priority queue type is as expected.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec is_queue(pqueue4()) -> 'true' | 'false'. + +is_queue({Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) + when is_integer(Size), + tuple_size(Qn128) == 16, tuple_size(Qn112) == 16, + tuple_size(Qn96) == 16, tuple_size(Qn80) == 16, + tuple_size(Qn64) == 16, tuple_size(Qn48) == 16, + tuple_size(Qn32) == 16, tuple_size(Qn16) == 16, + tuple_size(Qp16) == 16, tuple_size(Qp32) == 16, + tuple_size(Qp48) == 16, tuple_size(Qp64) == 16, + tuple_size(Qp80) == 16, tuple_size(Qp96) == 16, + tuple_size(Qp112) == 16, tuple_size(Qp128) == 16 -> + (((Pc =:= empty) or is_integer(Pc)) and queue:is_queue(Q0)); +is_queue(_) -> + false. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Determine the length of a priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec len(pqueue4()) -> non_neg_integer(). + +len({_, Size, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _}) -> + Size. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Create a new priority queue.=== +%% O(1) +%% @end +%%------------------------------------------------------------------------- + +-spec new() -> pqueue4(). + +new() -> + {empty, % current priority + 0, % current size + erlang:make_tuple(16, queue:new()), % priority [-128..-113] + erlang:make_tuple(16, queue:new()), % priority [-112.. -97] + erlang:make_tuple(16, queue:new()), % priority [ -96.. -81] + erlang:make_tuple(16, queue:new()), % priority [ -80.. -65] + erlang:make_tuple(16, queue:new()), % priority [ -64.. -49] + erlang:make_tuple(16, queue:new()), % priority [ -48.. -33] + erlang:make_tuple(16, queue:new()), % priority [ -32.. -17] + erlang:make_tuple(16, queue:new()), % priority [ -16.. -1] + queue:new(), % priority 0 (default) + erlang:make_tuple(16, queue:new()), % priority [ 1.. 16] + erlang:make_tuple(16, queue:new()), % priority [ 17.. 32] + erlang:make_tuple(16, queue:new()), % priority [ 33.. 48] + erlang:make_tuple(16, queue:new()), % priority [ 49.. 64] + erlang:make_tuple(16, queue:new()), % priority [ 65.. 80] + erlang:make_tuple(16, queue:new()), % priority [ 81.. 96] + erlang:make_tuple(16, queue:new()), % priority [ 97.. 112] + erlang:make_tuple(16, queue:new())}. % priority [ 113.. 128] + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item from the head of the priority queue.=== +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec out(pqueue4()) -> + {{'value', any()}, pqueue4()} | {'empty', pqueue4()}. + +out({empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) -> + {empty, Q}; +out({Pc, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) -> + out_current(Pc, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item of a specific priority from the head of the queue.=== +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec out(integer(), pqueue4()) -> + {{'value', any()}, pqueue4()} | {'empty', pqueue4()}. + +out(P, _) + when P < -128; P > 128 -> + erlang:exit(badarg); +out(_, {empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) -> + {empty, Q}; +out(P, Q) -> + out_specific(P, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Take an item from the head of the priority queue.=== +%% Includes the priority in the return value. +%% O(1) amortized, O(N) worst case +%% @end +%%------------------------------------------------------------------------- + +-spec pout(pqueue4()) -> + {{'value', any(), integer()}, pqueue4()} | {'empty', pqueue4()}. + +pout({empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) -> + {empty, Q}; +pout({Pc, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) -> + out_current_p(Pc, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Remove a unique value from the priority queue with a binary predicate.=== +%% O(N) but smaller constant than filter/2 +%% @end +%%------------------------------------------------------------------------- + +-spec remove_unique(fun((any()) -> boolean()), pqueue4()) -> + {boolean(), pqueue4()}. + +remove_unique(F, {_, 0, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _} = Q) + when is_function(F, 1) -> + {false, Q}; +remove_unique(F, {Pc, _, _, _, _, _, _, _, _, _, + _, _, _, _, _, _, _, _, _} = Q) + when is_function(F, 1) -> + remove_unique_all(Pc, F, Q). + +remove_unique_all(128, F, Q) -> + remove_unique_p(128, F, Q); +remove_unique_all(P, F, Q) when is_integer(P) -> + case remove_unique_p(P, F, Q) of + {true, _} = Result -> + Result; + {false, Q} -> + remove_unique_all(P + 1, F, Q) + end. + +%%------------------------------------------------------------------------- +%% @doc +%% ===Remove a unique value in a specific priority within the priority queue with a binary predicate.=== +%% O(N) but smaller constant than filter/3 +%% @end +%%------------------------------------------------------------------------- + +-spec remove_unique(fun((any()) -> boolean()), integer(), pqueue4()) -> + {boolean(), pqueue4()}. + +remove_unique(_, P, _) + when P < -128; P > 128 -> + erlang:exit(badarg); +remove_unique(F, P, Q) when is_function(F, 1) -> + remove_unique_p(P, F, Q). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Convert the priority queue to a list.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec to_list(pqueue4()) -> list(). + +to_list(Q) -> + to_list([], out(Q)). +to_list(L, {empty, _}) -> + lists:reverse(L); +to_list(L, {{value, Value}, Q}) -> + to_list([Value | L], out(Q)). + +%%------------------------------------------------------------------------- +%% @doc +%% ===Convert the priority queue to a list with priorities.=== +%% O(N) +%% @end +%%------------------------------------------------------------------------- + +-spec to_plist(pqueue4()) -> list({priority(), list()}). + +to_plist(Q) -> + to_plist([], [], undefined, pout(Q)). +to_plist(L, [], _, {empty, _}) -> + lists:reverse(L); +to_plist(L, Lp, Pc, {empty, _}) -> + lists:reverse([{Pc, lists:reverse(Lp)} | L]); +to_plist(L, Lp, Pc, {{value, Value, Pc}, Q}) -> + to_plist(L, [Value | Lp], Pc, pout(Q)); +to_plist(L, [], _, {{value, Value, Pc}, Q}) -> + to_plist(L, [Value], Pc, pout(Q)); +to_plist(L, Lp, P, {{value, Value, Pc}, Q}) -> + to_plist([{P, lists:reverse(Lp)} | L], [Value], Pc, pout(Q)). + +%%------------------------------------------------------------------------- +%% @private +%% @doc +%% ===Regression test.=== +%% @end +%%------------------------------------------------------------------------- + +test() -> + Q0 = pqueue4:new(), + true = pqueue4:is_queue(Q0), + Q1 = pqueue4:in(20, 20, Q0), + Q2 = pqueue4:in(19, 19, Q1), + Q3 = pqueue4:in(18, 18, Q2), + Q4 = pqueue4:in(17, 17, Q3), + Q5 = pqueue4:in(16, 16, Q4), + Q6 = pqueue4:in(15, 15, Q5), + Q7 = pqueue4:in(14, 14, Q6), + Q8 = pqueue4:in(13, 13, Q7), + Q9 = pqueue4:in(12, 12, Q8), + Q10 = pqueue4:in(11, 11, Q9), + Q11 = pqueue4:in(10, 10, Q10), + Q12 = pqueue4:in(9, 9, Q11), + Q13 = pqueue4:in(8, 8, Q12), + Q14 = pqueue4:in(7, 7, Q13), + Q15 = pqueue4:in(6, 6, Q14), + Q16 = pqueue4:in(5, 5, Q15), + Q17 = pqueue4:in(4, 4, Q16), + Q18 = pqueue4:in(3, 3, Q17), + Q19 = pqueue4:in(2, 2, Q18), + Q20 = pqueue4:in(1, 1, Q19), + Q21 = pqueue4:in(0, 0, Q20), + Q22 = pqueue4:in(-1, -1, Q21), + Q23 = pqueue4:in(-2, -2, Q22), + Q24 = pqueue4:in(-3, -3, Q23), + Q25 = pqueue4:in(-4, -4, Q24), + Q26 = pqueue4:in(-5, -5, Q25), + Q27 = pqueue4:in(-6, -6, Q26), + Q28 = pqueue4:in(-7, -7, Q27), + Q29 = pqueue4:in(-8, -8, Q28), + Q30 = pqueue4:in(-9, -9, Q29), + Q31 = pqueue4:in(-10, -10, Q30), + Q32 = pqueue4:in(-11, -11, Q31), + Q33 = pqueue4:in(-12, -12, Q32), + Q34 = pqueue4:in(-13, -13, Q33), + Q35 = pqueue4:in(-14, -14, Q34), + Q36 = pqueue4:in(-15, -15, Q35), + Q37 = pqueue4:in(-16, -16, Q36), + Q38 = pqueue4:in(-17, -17, Q37), + Q39 = pqueue4:in(-18, -18, Q38), + Q40 = pqueue4:in(-19, -19, Q39), + Q41 = pqueue4:in(-20, -20, Q40), + Q42 = pqueue4:in(-20, -20, Q41), + Q43 = pqueue4:in(-19, -19, Q42), + Q44 = pqueue4:in(-18, -18, Q43), + Q45 = pqueue4:in(-17, -17, Q44), + Q46 = pqueue4:in(-16, -16, Q45), + Q47 = pqueue4:in(-15, -15, Q46), + Q48 = pqueue4:in(-14, -14, Q47), + Q49 = pqueue4:in(-13, -13, Q48), + Q50 = pqueue4:in(-12, -12, Q49), + Q51 = pqueue4:in(-11, -11, Q50), + Q52 = pqueue4:in(-10, -10, Q51), + Q53 = pqueue4:in(-9, -9, Q52), + Q54 = pqueue4:in(-8, -8, Q53), + Q55 = pqueue4:in(-7, -7, Q54), + Q56 = pqueue4:in(-6, -6, Q55), + Q57 = pqueue4:in(-5, -5, Q56), + Q58 = pqueue4:in(-4, -4, Q57), + Q59 = pqueue4:in(-3, -3, Q58), + Q60 = pqueue4:in(-2, -2, Q59), + Q61 = pqueue4:in(-1, -1, Q60), + Q62 = pqueue4:in(0, 0, Q61), + Q63 = pqueue4:in(1, 1, Q62), + Q64 = pqueue4:in(2, 2, Q63), + Q65 = pqueue4:in(3, 3, Q64), + Q66 = pqueue4:in(4, 4, Q65), + Q67 = pqueue4:in(5, 5, Q66), + Q68 = pqueue4:in(6, 6, Q67), + Q69 = pqueue4:in(7, 7, Q68), + Q70 = pqueue4:in(8, 8, Q69), + Q71 = pqueue4:in(9, 9, Q70), + Q72 = pqueue4:in(10, 10, Q71), + Q73 = pqueue4:in(11, 11, Q72), + Q74 = pqueue4:in(12, 12, Q73), + Q75 = pqueue4:in(13, 13, Q74), + Q76 = pqueue4:in(14, 14, Q75), + Q77 = pqueue4:in(15, 15, Q76), + Q78 = pqueue4:in(16, 16, Q77), + Q79 = pqueue4:in(17, 17, Q78), + Q80 = pqueue4:in(18, 18, Q79), + Q81 = pqueue4:in(19, 19, Q80), + Q82 = pqueue4:in(20, 20, Q81), + true = pqueue4:is_queue(Q82), + 82 = pqueue4:len(Q82), + [-20, -20, -19, -19, -18, -18, -17, -17, -16, -16, -15, -15, -14, -14, + -13, -13, -12, -12, -11, -11, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6, + -5, -5, -4, -4, -3, -3, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, + 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, + 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20] = pqueue4:to_list(Q82), + [{-20, [-20, -20]}, {-19, [-19, -19]}, {-18, [-18, -18]}, + {-17, [-17, -17]}, {-16, [-16, -16]}, {-15, [-15, -15]}, + {-14, [-14, -14]}, {-13, [-13, -13]}, {-12, [-12, -12]}, + {-11, [-11, -11]}, {-10, [-10, -10]}, {-9, [-9, -9]}, + {-8, [-8, -8]}, {-7, [-7, -7]}, {-6, [-6, -6]}, + {-5, [-5, -5]}, {-4, [-4, -4]}, {-3, [-3, -3]}, + {-2, [-2, -2]}, {-1, [-1, -1]}, {0, [0, 0]}, + {1, [1, 1]}, {2, [2, 2]}, {3, [3, 3]}, + {4, [4, 4]}, {5, [5, 5]}, {6, [6, 6]}, + {7, [7, 7]}, {8, [8, 8]}, {9, [9, 9]}, + {10, [10, 10]}, {11, [11, 11]}, {12, [12, 12]}, + {13, [13, 13]}, {14, [14, 14]}, {15, [15, 15]}, + {16, [16, 16]}, {17, [17, 17]}, {18, [18, 18]}, + {19, [19, 19]}, {20, [20, 20]}] = pqueue4:to_plist(Q82), + {{value, -20}, Q83} = pqueue4:out(Q82), + {{value, -20}, Q84} = pqueue4:out(Q83), + {{value, -19}, Q85} = pqueue4:out(Q84), + {{value, -19}, Q86} = pqueue4:out(Q85), + {{value, -18}, Q87} = pqueue4:out(Q86), + {{value, -18}, Q88} = pqueue4:out(Q87), + {{value, 0}, Q89} = pqueue4:out(0, Q88), + {{value, 0}, Q90} = pqueue4:out(0, Q89), + {empty, _} = pqueue4:out(0, Q90), + {{value, -17, -17}, Q91} = pqueue4:pout(Q90), + {{value, -17, -17}, Q92} = pqueue4:pout(Q91), + {{value, -16, -16}, Q93} = pqueue4:pout(Q92), + {{value, -16, -16}, Q94} = pqueue4:pout(Q93), + {{value, -15, -15}, Q95} = pqueue4:pout(Q94), + {{value, -15, -15}, Q96} = pqueue4:pout(Q95), + {{value, -14, -14}, Q97} = pqueue4:pout(Q96), + {{value, -14, -14}, Q98} = pqueue4:pout(Q97), + {{value, -13, -13}, Q99} = pqueue4:pout(Q98), + {{value, -13, -13}, Q100} = pqueue4:pout(Q99), + {{value, -12, -12}, Q101} = pqueue4:pout(Q100), + {{value, -12, -12}, Q102} = pqueue4:pout(Q101), + {{value, -11, -11}, Q103} = pqueue4:pout(Q102), + {{value, -11, -11}, Q104} = pqueue4:pout(Q103), + {{value, -10, -10}, Q105} = pqueue4:pout(Q104), + {{value, -10, -10}, Q106} = pqueue4:pout(Q105), + {{value, -9, -9}, Q107} = pqueue4:pout(Q106), + {{value, -9, -9}, Q108} = pqueue4:pout(Q107), + {{value, -8, -8}, Q109} = pqueue4:pout(Q108), + {{value, -8, -8}, Q110} = pqueue4:pout(Q109), + {{value, -7, -7}, Q111} = pqueue4:pout(Q110), + {{value, -7, -7}, Q112} = pqueue4:pout(Q111), + {{value, -6, -6}, Q113} = pqueue4:pout(Q112), + {{value, -6, -6}, Q114} = pqueue4:pout(Q113), + {{value, -5, -5}, Q115} = pqueue4:pout(Q114), + {{value, -5, -5}, Q116} = pqueue4:pout(Q115), + {{value, -4, -4}, Q117} = pqueue4:pout(Q116), + {{value, -4, -4}, Q118} = pqueue4:pout(Q117), + {{value, -3, -3}, Q119} = pqueue4:pout(Q118), + {{value, -3, -3}, Q120} = pqueue4:pout(Q119), + {{value, -2, -2}, Q121} = pqueue4:pout(Q120), + {{value, -2, -2}, Q122} = pqueue4:pout(Q121), + {{value, -1, -1}, Q123} = pqueue4:pout(Q122), + {{value, -1, -1}, Q124} = pqueue4:pout(Q123), + {{value, 1, 1}, Q125} = pqueue4:pout(Q124), + {{value, 1, 1}, Q126} = pqueue4:pout(Q125), + {{value, 2, 2}, Q127} = pqueue4:pout(Q126), + {{value, 2, 2}, Q128} = pqueue4:pout(Q127), + {{value, 3, 3}, Q129} = pqueue4:pout(Q128), + {{value, 3, 3}, Q130} = pqueue4:pout(Q129), + {{value, 4, 4}, Q131} = pqueue4:pout(Q130), + {{value, 4, 4}, Q132} = pqueue4:pout(Q131), + {{value, 5, 5}, Q133} = pqueue4:pout(Q132), + {{value, 5, 5}, Q134} = pqueue4:pout(Q133), + {{value, 6, 6}, Q135} = pqueue4:pout(Q134), + {{value, 6, 6}, Q136} = pqueue4:pout(Q135), + {{value, 7, 7}, Q137} = pqueue4:pout(Q136), + {{value, 7, 7}, Q138} = pqueue4:pout(Q137), + {{value, 8, 8}, Q139} = pqueue4:pout(Q138), + {{value, 8, 8}, Q140} = pqueue4:pout(Q139), + {{value, 9, 9}, Q141} = pqueue4:pout(Q140), + {{value, 9, 9}, Q142} = pqueue4:pout(Q141), + {{value, 10, 10}, Q143} = pqueue4:pout(Q142), + {{value, 10, 10}, Q144} = pqueue4:pout(Q143), + {{value, 11, 11}, Q145} = pqueue4:pout(Q144), + {{value, 11, 11}, Q146} = pqueue4:pout(Q145), + {{value, 12, 12}, Q147} = pqueue4:pout(Q146), + {{value, 12, 12}, Q148} = pqueue4:pout(Q147), + {{value, 13, 13}, Q149} = pqueue4:pout(Q148), + {{value, 13, 13}, Q150} = pqueue4:pout(Q149), + {{value, 14, 14}, Q151} = pqueue4:pout(Q150), + {{value, 14, 14}, Q152} = pqueue4:pout(Q151), + {{value, 15, 15}, Q153} = pqueue4:pout(Q152), + {{value, 15, 15}, Q154} = pqueue4:pout(Q153), + {{value, 16, 16}, Q155} = pqueue4:pout(Q154), + {{value, 16, 16}, Q156} = pqueue4:pout(Q155), + {{value, 17, 17}, Q157} = pqueue4:pout(Q156), + {{value, 17, 17}, Q158} = pqueue4:pout(Q157), + {{value, 18, 18}, Q159} = pqueue4:pout(Q158), + {{value, 18, 18}, Q160} = pqueue4:pout(Q159), + {{value, 19, 19}, Q161} = pqueue4:pout(Q160), + {{value, 19, 19}, Q162} = pqueue4:pout(Q161), + {{value, 20, 20}, Q163} = pqueue4:pout(Q162), + {{value, 20, 20}, Q164} = pqueue4:pout(Q163), + {{value, 20}, Q164} = pqueue4:out(Q163), + {{value, 20}, Q164} = pqueue4:out(20, Q163), + true = pqueue4:is_empty(Q164), + empty = erlang:element(1, Q164), % current priority + 0 = erlang:element(2, Q164), % size + {empty, Q164} = pqueue4:pout(Q164), + {empty, Q164} = pqueue4:out(Q164), + {empty, Q164} = pqueue4:out(20, Q164), + + Queue0 = queue:new(), + "{[],[]}" = lists:flatten(io_lib:format("~p", [Queue0])), + Queue1 = queue:in(1, Queue0), + Queue2 = queue:in(2, Queue1), + Queue3 = queue:in(3, Queue2), + {{value, 1}, _} = queue:out(Queue2), + "{[3,2],[1]}" = lists:flatten(io_lib:format("~p", [Queue3])), + {true, {[3],[1]}} = queue_remove_unique(fun(I) -> I == 2 end, {[3,2],[1]}), + Queue4 = queue:filter(fun(I) -> not (I == 2) end, Queue3), + "{[3],[1]}" = lists:flatten(io_lib:format("~p", [Queue4])), + 2 = queue:len(Queue4), + {{value, 1}, _} = queue:out(Queue4), + [1, 3] = queue:to_list(Queue4), + + Q166 = pqueue4:new(), + true = pqueue4:is_queue(Q166), + Q167 = pqueue4:in(6, 1, Q166), + Q168 = pqueue4:in(7, 1, Q167), + Q169 = pqueue4:in(8, 1, Q168), + Q170 = pqueue4:in(3, 0, Q169), + Q171 = pqueue4:in(4, 0, Q170), + Q172 = pqueue4:in(5, 0, Q171), + Q173 = pqueue4:in(0, -1, Q172), + Q174 = pqueue4:in(1, -1, Q173), + Q175 = pqueue4:in(2, -1, Q174), + [{-1, [0, 1, 2]}, {0, [3, 4, 5]}, {1, [6, 7, 8]}] = pqueue4:to_plist(Q175), + 3 = pqueue4:len(pqueue4:filter(fun(I) -> I > 5 end, Q175)), + 3 = pqueue4:len(pqueue4:filter(fun(I) -> I < 3 end, Q175)), + 3 = pqueue4:len(pqueue4:filter(fun(I) -> (I < 1) orelse (I > 6) end, Q175)), + {true, Q176} = pqueue4:remove_unique(fun(I) -> I == 4 end, Q175), + [{-1, [0, 1, 2]}, {0, [3, 5]}, {1, [6, 7, 8]}] = pqueue4:to_plist(Q176), + {true, Q177} = pqueue4:remove_unique(fun(I) -> I == 1 end, Q176), + [{-1, [0, 2]}, {0, [3, 5]}, {1, [6, 7, 8]}] = pqueue4:to_plist(Q177), + {true, Q178} = pqueue4:remove_unique(fun(I) -> I == 7 end, Q177), + [{-1, [0, 2]}, {0, [3, 5]}, {1, [6, 8]}] = pqueue4:to_plist(Q178), + 6 = pqueue4:len(Q178), + {{value, 0, -1}, Q179} = pqueue4:pout(Q178), + {{value, 2}, Q180} = pqueue4:out(Q179), + {{value, 6}, Q181} = pqueue4:out(1, Q180), + {false, Q181} = pqueue4:remove_unique(fun(I) -> I == 7 end, Q181), + [{0, [3, 5]}, {1, [8]}] = pqueue4:to_plist(Q181), + {true, Q182} = pqueue4:remove_unique(fun(I) -> I == 5 end, Q181), + {true, Q183} = pqueue4:remove_unique(fun(I) -> I == 8 end, 1, Q182), + {true, Q184} = pqueue4:remove_unique(fun(I) -> I == 3 end, Q183), + {empty, Q184} = pqueue4:pout(Q184), + {empty, Q184} = pqueue4:out(Q184), + {empty, Q184} = pqueue4:out(0, Q184), + ok. + +%%%------------------------------------------------------------------------ +%%% Private functions +%%%------------------------------------------------------------------------ + +%% @hidden +-define(FILTER_P_Qn128(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121, + Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113}, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + V3, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qn112(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, + {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105, + Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97}, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, + V3, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qn96(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, + {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89, + Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81}, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, + V3, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qn80(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, + {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73, + Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65}, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, + V3, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qn64(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, + {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57, + Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49}, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, + V3, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qn48(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, + {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41, + Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33}, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, + V3, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qn32(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25, + Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17}, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + V3, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qn16(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9, + Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + V3, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qp16(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8, + Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16}, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + V3, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qp32(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24, + Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32}, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + V3, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qp48(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40, + Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48}, + Qp64, Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + V3, + Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qp64(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56, + Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64}, + Qp80, Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + V3, + Qp80, Qp96, Qp112, Qp128}). +-define(FILTER_P_Qp80(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72, + Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80}, + Qp96, Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + V3, + Qp96, Qp112, Qp128}). +-define(FILTER_P_Qp96(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88, + Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96}, + Qp112, Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + V3, + Qp112, Qp128}). +-define(FILTER_P_Qp112(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104, + Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112}, + Qp128}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + V3, + Qp128}). +-define(FILTER_P_Qp128(P, V1, V2, V3), +filter_priority(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) -> + V2 = queue:filter(F, V1), + NewSize = Size - (queue:len(V1) - queue:len(V2)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + V3}). + +?FILTER_P_Qn128(-128, + Qn128, NewQn128, + {NewQn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-127, + Qn127, NewQn127, + {Qn128, NewQn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-126, + Qn126, NewQn126, + {Qn128, Qn127, NewQn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-125, + Qn125, NewQn125, + {Qn128, Qn127, Qn126, NewQn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-124, + Qn124, NewQn124, + {Qn128, Qn127, Qn126, Qn125, NewQn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-123, + Qn123, NewQn123, + {Qn128, Qn127, Qn126, Qn125, Qn124, + NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-122, + Qn122, NewQn122, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-121, + Qn121, NewQn121, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-120, + Qn120, NewQn120, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-119, + Qn119, NewQn119, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-118, + Qn118, NewQn118, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-117, + Qn117, NewQn117, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + NewQn117, Qn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-116, + Qn116, NewQn116, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, NewQn116, Qn115, Qn114, Qn113}); +?FILTER_P_Qn128(-115, + Qn115, NewQn115, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, NewQn115, Qn114, Qn113}); +?FILTER_P_Qn128(-114, + Qn114, NewQn114, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, NewQn114, Qn113}); +?FILTER_P_Qn128(-113, + Qn113, NewQn113, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, NewQn113}); +?FILTER_P_Qn112(-112, + Qn112, NewQn112, + {NewQn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-111, + Qn111, NewQn111, + {Qn112, NewQn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-110, + Qn110, NewQn110, + {Qn112, Qn111, NewQn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-109, + Qn109, NewQn109, + {Qn112, Qn111, Qn110, NewQn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-108, + Qn108, NewQn108, + {Qn112, Qn111, Qn110, Qn109, NewQn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-107, + Qn107, NewQn107, + {Qn112, Qn111, Qn110, Qn109, Qn108, + NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-106, + Qn106, NewQn106, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-105, + Qn105, NewQn105, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-104, + Qn104, NewQn104, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-103, + Qn103, NewQn103, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-102, + Qn102, NewQn102, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-101, + Qn101, NewQn101, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + NewQn101, Qn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-100, + Qn100, NewQn100, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, NewQn100, Qn99, Qn98, Qn97}); +?FILTER_P_Qn112(-99, + Qn99, NewQn99, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, NewQn99, Qn98, Qn97}); +?FILTER_P_Qn112(-98, + Qn98, NewQn98, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, NewQn98, Qn97}); +?FILTER_P_Qn112(-97, + Qn97, NewQn97, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, NewQn97}); +?FILTER_P_Qn96(-96, + Qn96, NewQn96, + {NewQn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-95, + Qn95, NewQn95, + {Qn96, NewQn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-94, + Qn94, NewQn94, + {Qn96, Qn95, NewQn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-93, + Qn93, NewQn93, + {Qn96, Qn95, Qn94, NewQn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-92, + Qn92, NewQn92, + {Qn96, Qn95, Qn94, Qn93, NewQn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-91, + Qn91, NewQn91, + {Qn96, Qn95, Qn94, Qn93, Qn92, + NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-90, + Qn90, NewQn90, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-89, + Qn89, NewQn89, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-88, + Qn88, NewQn88, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-87, + Qn87, NewQn87, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-86, + Qn86, NewQn86, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-85, + Qn85, NewQn85, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + NewQn85, Qn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-84, + Qn84, NewQn84, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, NewQn84, Qn83, Qn82, Qn81}); +?FILTER_P_Qn96(-83, + Qn83, NewQn83, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, NewQn83, Qn82, Qn81}); +?FILTER_P_Qn96(-82, + Qn82, NewQn82, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, NewQn82, Qn81}); +?FILTER_P_Qn96(-81, + Qn81, NewQn81, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, NewQn81}); +?FILTER_P_Qn80(-80, + Qn80, NewQn80, + {NewQn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-79, + Qn79, NewQn79, + {Qn80, NewQn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-78, + Qn78, NewQn78, + {Qn80, Qn79, NewQn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-77, + Qn77, NewQn77, + {Qn80, Qn79, Qn78, NewQn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-76, + Qn76, NewQn76, + {Qn80, Qn79, Qn78, Qn77, NewQn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-75, + Qn75, NewQn75, + {Qn80, Qn79, Qn78, Qn77, Qn76, + NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-74, + Qn74, NewQn74, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-73, + Qn73, NewQn73, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-72, + Qn72, NewQn72, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-71, + Qn71, NewQn71, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-70, + Qn70, NewQn70, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-69, + Qn69, NewQn69, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + NewQn69, Qn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-68, + Qn68, NewQn68, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, NewQn68, Qn67, Qn66, Qn65}); +?FILTER_P_Qn80(-67, + Qn67, NewQn67, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, NewQn67, Qn66, Qn65}); +?FILTER_P_Qn80(-66, + Qn66, NewQn66, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, NewQn66, Qn65}); +?FILTER_P_Qn80(-65, + Qn65, NewQn65, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, NewQn65}); +?FILTER_P_Qn64(-64, + Qn64, NewQn64, + {NewQn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-63, + Qn63, NewQn63, + {Qn64, NewQn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-62, + Qn62, NewQn62, + {Qn64, Qn63, NewQn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-61, + Qn61, NewQn61, + {Qn64, Qn63, Qn62, NewQn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-60, + Qn60, NewQn60, + {Qn64, Qn63, Qn62, Qn61, NewQn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-59, + Qn59, NewQn59, + {Qn64, Qn63, Qn62, Qn61, Qn60, + NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-58, + Qn58, NewQn58, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-57, + Qn57, NewQn57, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-56, + Qn56, NewQn56, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-55, + Qn55, NewQn55, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-54, + Qn54, NewQn54, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-53, + Qn53, NewQn53, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + NewQn53, Qn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-52, + Qn52, NewQn52, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, NewQn52, Qn51, Qn50, Qn49}); +?FILTER_P_Qn64(-51, + Qn51, NewQn51, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, NewQn51, Qn50, Qn49}); +?FILTER_P_Qn64(-50, + Qn50, NewQn50, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, NewQn50, Qn49}); +?FILTER_P_Qn64(-49, + Qn49, NewQn49, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, NewQn49}); +?FILTER_P_Qn48(-48, + Qn48, NewQn48, + {NewQn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-47, + Qn47, NewQn47, + {Qn48, NewQn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-46, + Qn46, NewQn46, + {Qn48, Qn47, NewQn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-45, + Qn45, NewQn45, + {Qn48, Qn47, Qn46, NewQn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-44, + Qn44, NewQn44, + {Qn48, Qn47, Qn46, Qn45, NewQn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-43, + Qn43, NewQn43, + {Qn48, Qn47, Qn46, Qn45, Qn44, + NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-42, + Qn42, NewQn42, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-41, + Qn41, NewQn41, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-40, + Qn40, NewQn40, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-39, + Qn39, NewQn39, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-38, + Qn38, NewQn38, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-37, + Qn37, NewQn37, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + NewQn37, Qn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-36, + Qn36, NewQn36, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, NewQn36, Qn35, Qn34, Qn33}); +?FILTER_P_Qn48(-35, + Qn35, NewQn35, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, NewQn35, Qn34, Qn33}); +?FILTER_P_Qn48(-34, + Qn34, NewQn34, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, NewQn34, Qn33}); +?FILTER_P_Qn48(-33, + Qn33, NewQn33, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, NewQn33}); +?FILTER_P_Qn32(-32, + Qn32, NewQn32, + {NewQn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-31, + Qn31, NewQn31, + {Qn32, NewQn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-30, + Qn30, NewQn30, + {Qn32, Qn31, NewQn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-29, + Qn29, NewQn29, + {Qn32, Qn31, Qn30, NewQn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-28, + Qn28, NewQn28, + {Qn32, Qn31, Qn30, Qn29, NewQn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-27, + Qn27, NewQn27, + {Qn32, Qn31, Qn30, Qn29, Qn28, + NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-26, + Qn26, NewQn26, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-25, + Qn25, NewQn25, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-24, + Qn24, NewQn24, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-23, + Qn23, NewQn23, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-22, + Qn22, NewQn22, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-21, + Qn21, NewQn21, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + NewQn21, Qn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-20, + Qn20, NewQn20, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, NewQn20, Qn19, Qn18, Qn17}); +?FILTER_P_Qn32(-19, + Qn19, NewQn19, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, NewQn19, Qn18, Qn17}); +?FILTER_P_Qn32(-18, + Qn18, NewQn18, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, NewQn18, Qn17}); +?FILTER_P_Qn32(-17, + Qn17, NewQn17, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, NewQn17}); +?FILTER_P_Qn16(-16, + Qn16, NewQn16, + {NewQn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-15, + Qn15, NewQn15, + {Qn16, NewQn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-14, + Qn14, NewQn14, + {Qn16, Qn15, NewQn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-13, + Qn13, NewQn13, + {Qn16, Qn15, Qn14, NewQn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-12, + Qn12, NewQn12, + {Qn16, Qn15, Qn14, Qn13, NewQn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-11, + Qn11, NewQn11, + {Qn16, Qn15, Qn14, Qn13, Qn12, + NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-10, + Qn10, NewQn10, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-9, + Qn9, NewQn9, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-8, + Qn8, NewQn8, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-7, + Qn7, NewQn7, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-6, + Qn6, NewQn6, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-5, + Qn5, NewQn5, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + NewQn5, Qn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-4, + Qn4, NewQn4, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, NewQn4, Qn3, Qn2, Qn1}); +?FILTER_P_Qn16(-3, + Qn3, NewQn3, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, NewQn3, Qn2, Qn1}); +?FILTER_P_Qn16(-2, + Qn2, NewQn2, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, NewQn2, Qn1}); +?FILTER_P_Qn16(-1, + Qn1, NewQn1, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, NewQn1}); +filter_priority(0, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + NewQ0 = queue:filter(F, Q0), + NewSize = Size - (queue:len(Q0) - queue:len(NewQ0)), + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + NewQ0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}; +?FILTER_P_Qp16(1, + Qp1, NewQp1, + {NewQp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(2, + Qp2, NewQp2, + {Qp1, NewQp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(3, + Qp3, NewQp3, + {Qp1, Qp2, NewQp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(4, + Qp4, NewQp4, + {Qp1, Qp2, Qp3, NewQp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(5, + Qp5, NewQp5, + {Qp1, Qp2, Qp3, Qp4, NewQp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(6, + Qp6, NewQp6, + {Qp1, Qp2, Qp3, Qp4, Qp5, + NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(7, + Qp7, NewQp7, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(8, + Qp8, NewQp8, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(9, + Qp9, NewQp9, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(10, + Qp10, NewQp10, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(11, + Qp11, NewQp11, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(12, + Qp12, NewQp12, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + NewQp12, Qp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(13, + Qp13, NewQp13, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, NewQp13, Qp14, Qp15, Qp16}); +?FILTER_P_Qp16(14, + Qp14, NewQp14, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, NewQp14, Qp15, Qp16}); +?FILTER_P_Qp16(15, + Qp15, NewQp15, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, NewQp15, Qp16}); +?FILTER_P_Qp16(16, + Qp16, NewQp16, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, NewQp16}); +?FILTER_P_Qp32(17, + Qp17, NewQp17, + {NewQp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(18, + Qp18, NewQp18, + {Qp17, NewQp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(19, + Qp19, NewQp19, + {Qp17, Qp18, NewQp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(20, + Qp20, NewQp20, + {Qp17, Qp18, Qp19, NewQp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(21, + Qp21, NewQp21, + {Qp17, Qp18, Qp19, Qp20, NewQp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(22, + Qp22, NewQp22, + {Qp17, Qp18, Qp19, Qp20, Qp21, + NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(23, + Qp23, NewQp23, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(24, + Qp24, NewQp24, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(25, + Qp25, NewQp25, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(26, + Qp26, NewQp26, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(27, + Qp27, NewQp27, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(28, + Qp28, NewQp28, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + NewQp28, Qp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(29, + Qp29, NewQp29, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, NewQp29, Qp30, Qp31, Qp32}); +?FILTER_P_Qp32(30, + Qp30, NewQp30, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, NewQp30, Qp31, Qp32}); +?FILTER_P_Qp32(31, + Qp31, NewQp31, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, NewQp31, Qp32}); +?FILTER_P_Qp32(32, + Qp32, NewQp32, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, NewQp32}); +?FILTER_P_Qp48(33, + Qp33, NewQp33, + {NewQp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(34, + Qp34, NewQp34, + {Qp33, NewQp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(35, + Qp35, NewQp35, + {Qp33, Qp34, NewQp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(36, + Qp36, NewQp36, + {Qp33, Qp34, Qp35, NewQp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(37, + Qp37, NewQp37, + {Qp33, Qp34, Qp35, Qp36, NewQp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(38, + Qp38, NewQp38, + {Qp33, Qp34, Qp35, Qp36, Qp37, + NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(39, + Qp39, NewQp39, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(40, + Qp40, NewQp40, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(41, + Qp41, NewQp41, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(42, + Qp42, NewQp42, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(43, + Qp43, NewQp43, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(44, + Qp44, NewQp44, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + NewQp44, Qp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(45, + Qp45, NewQp45, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, NewQp45, Qp46, Qp47, Qp48}); +?FILTER_P_Qp48(46, + Qp46, NewQp46, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, NewQp46, Qp47, Qp48}); +?FILTER_P_Qp48(47, + Qp47, NewQp47, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, NewQp47, Qp48}); +?FILTER_P_Qp48(48, + Qp48, NewQp48, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, NewQp48}); +?FILTER_P_Qp64(49, + Qp49, NewQp49, + {NewQp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(50, + Qp50, NewQp50, + {Qp49, NewQp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(51, + Qp51, NewQp51, + {Qp49, Qp50, NewQp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(52, + Qp52, NewQp52, + {Qp49, Qp50, Qp51, NewQp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(53, + Qp53, NewQp53, + {Qp49, Qp50, Qp51, Qp52, NewQp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(54, + Qp54, NewQp54, + {Qp49, Qp50, Qp51, Qp52, Qp53, + NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(55, + Qp55, NewQp55, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(56, + Qp56, NewQp56, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(57, + Qp57, NewQp57, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(58, + Qp58, NewQp58, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(59, + Qp59, NewQp59, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(60, + Qp60, NewQp60, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + NewQp60, Qp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(61, + Qp61, NewQp61, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, NewQp61, Qp62, Qp63, Qp64}); +?FILTER_P_Qp64(62, + Qp62, NewQp62, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, NewQp62, Qp63, Qp64}); +?FILTER_P_Qp64(63, + Qp63, NewQp63, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, NewQp63, Qp64}); +?FILTER_P_Qp64(64, + Qp64, NewQp64, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, NewQp64}); +?FILTER_P_Qp80(65, + Qp65, NewQp65, + {NewQp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(66, + Qp66, NewQp66, + {Qp65, NewQp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(67, + Qp67, NewQp67, + {Qp65, Qp66, NewQp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(68, + Qp68, NewQp68, + {Qp65, Qp66, Qp67, NewQp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(69, + Qp69, NewQp69, + {Qp65, Qp66, Qp67, Qp68, NewQp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(70, + Qp70, NewQp70, + {Qp65, Qp66, Qp67, Qp68, Qp69, + NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(71, + Qp71, NewQp71, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(72, + Qp72, NewQp72, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(73, + Qp73, NewQp73, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(74, + Qp74, NewQp74, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(75, + Qp75, NewQp75, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(76, + Qp76, NewQp76, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + NewQp76, Qp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(77, + Qp77, NewQp77, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, NewQp77, Qp78, Qp79, Qp80}); +?FILTER_P_Qp80(78, + Qp78, NewQp78, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, NewQp78, Qp79, Qp80}); +?FILTER_P_Qp80(79, + Qp79, NewQp79, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, NewQp79, Qp80}); +?FILTER_P_Qp80(80, + Qp80, NewQp80, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, NewQp80}); +?FILTER_P_Qp96(81, + Qp81, NewQp81, + {NewQp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(82, + Qp82, NewQp82, + {Qp81, NewQp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(83, + Qp83, NewQp83, + {Qp81, Qp82, NewQp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(84, + Qp84, NewQp84, + {Qp81, Qp82, Qp83, NewQp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(85, + Qp85, NewQp85, + {Qp81, Qp82, Qp83, Qp84, NewQp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(86, + Qp86, NewQp86, + {Qp81, Qp82, Qp83, Qp84, Qp85, + NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(87, + Qp87, NewQp87, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(88, + Qp88, NewQp88, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(89, + Qp89, NewQp89, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(90, + Qp90, NewQp90, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(91, + Qp91, NewQp91, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(92, + Qp92, NewQp92, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + NewQp92, Qp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(93, + Qp93, NewQp93, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, NewQp93, Qp94, Qp95, Qp96}); +?FILTER_P_Qp96(94, + Qp94, NewQp94, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, NewQp94, Qp95, Qp96}); +?FILTER_P_Qp96(95, + Qp95, NewQp95, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, NewQp95, Qp96}); +?FILTER_P_Qp96(96, + Qp96, NewQp96, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, NewQp96}); +?FILTER_P_Qp112(97, + Qp97, NewQp97, + {NewQp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(98, + Qp98, NewQp98, + {Qp97, NewQp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(99, + Qp99, NewQp99, + {Qp97, Qp98, NewQp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(100, + Qp100, NewQp100, + {Qp97, Qp98, Qp99, NewQp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(101, + Qp101, NewQp101, + {Qp97, Qp98, Qp99, Qp100, NewQp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(102, + Qp102, NewQp102, + {Qp97, Qp98, Qp99, Qp100, Qp101, + NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(103, + Qp103, NewQp103, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(104, + Qp104, NewQp104, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(105, + Qp105, NewQp105, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(106, + Qp106, NewQp106, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(107, + Qp107, NewQp107, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(108, + Qp108, NewQp108, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + NewQp108, Qp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(109, + Qp109, NewQp109, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, NewQp109, Qp110, Qp111, Qp112}); +?FILTER_P_Qp112(110, + Qp110, NewQp110, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, NewQp110, Qp111, Qp112}); +?FILTER_P_Qp112(111, + Qp111, NewQp111, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, NewQp111, Qp112}); +?FILTER_P_Qp112(112, + Qp112, NewQp112, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, NewQp112}); +?FILTER_P_Qp128(113, + Qp113, NewQp113, + {NewQp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(114, + Qp114, NewQp114, + {Qp113, NewQp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(115, + Qp115, NewQp115, + {Qp113, Qp114, NewQp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(116, + Qp116, NewQp116, + {Qp113, Qp114, Qp115, NewQp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(117, + Qp117, NewQp117, + {Qp113, Qp114, Qp115, Qp116, NewQp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(118, + Qp118, NewQp118, + {Qp113, Qp114, Qp115, Qp116, Qp117, + NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(119, + Qp119, NewQp119, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(120, + Qp120, NewQp120, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(121, + Qp121, NewQp121, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(122, + Qp122, NewQp122, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(123, + Qp123, NewQp123, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(124, + Qp124, NewQp124, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + NewQp124, Qp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(125, + Qp125, NewQp125, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, NewQp125, Qp126, Qp127, Qp128}); +?FILTER_P_Qp128(126, + Qp126, NewQp126, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, NewQp126, Qp127, Qp128}); +?FILTER_P_Qp128(127, + Qp127, NewQp127, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, NewQp127, Qp128}); +?FILTER_P_Qp128(128, + Qp128, NewQp128, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, NewQp128}). + +%% @hidden +-define(IN_HIGHER_Qn128(P, V), +in_higher(P, + {_, + Size, + {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121, + Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113}, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + V, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qn112(P, V), +in_higher(P, + {_, + Size, + Qn128, + {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105, + Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97}, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, + V, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qn96(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, + {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89, + Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81}, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, + V, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qn80(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, + {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73, + Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65}, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, + V, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qn64(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, + {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57, + Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49}, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, + V, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qn48(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, + {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41, + Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33}, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, + V, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qn32(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25, + Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17}, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + V, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qn16(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9, + Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + V, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qp16(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8, + Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16}, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + V, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qp32(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24, + Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32}, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + V, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qp48(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40, + Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48}, + Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + V, + Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qp64(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56, + Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64}, + Qp80, Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + V, + Qp80, Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qp80(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72, + Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80}, + Qp96, Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + V, + Qp96, Qp112, Qp128}). +-define(IN_HIGHER_Qp96(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88, + Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96}, + Qp112, Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + V, + Qp112, Qp128}). +-define(IN_HIGHER_Qp112(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104, + Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112}, + Qp128}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + V, + Qp128}). +-define(IN_HIGHER_Qp128(P, V), +in_higher(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}, X) -> + {P, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + V}). + +?IN_HIGHER_Qn128(-128, + {queue:in(X, Qn128), Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-127, + {Qn128, queue:in(X, Qn127), Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-126, + {Qn128, Qn127, queue:in(X, Qn126), Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-125, + {Qn128, Qn127, Qn126, queue:in(X, Qn125), Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-124, + {Qn128, Qn127, Qn126, Qn125, queue:in(X, Qn124), + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-123, + {Qn128, Qn127, Qn126, Qn125, Qn124, + queue:in(X, Qn123), Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-122, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, queue:in(X, Qn122), Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-121, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, queue:in(X, Qn121), Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-120, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, queue:in(X, Qn120), Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-119, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, queue:in(X, Qn119), Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-118, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, queue:in(X, Qn118), + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-117, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + queue:in(X, Qn117), Qn116, Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-116, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, queue:in(X, Qn116), Qn115, Qn114, Qn113}); +?IN_HIGHER_Qn128(-115, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, queue:in(X, Qn115), Qn114, Qn113}); +?IN_HIGHER_Qn128(-114, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, queue:in(X, Qn114), Qn113}); +?IN_HIGHER_Qn128(-113, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, queue:in(X, Qn113)}); +?IN_HIGHER_Qn112(-112, + {queue:in(X, Qn112), Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-111, + {Qn112, queue:in(X, Qn111), Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-110, + {Qn112, Qn111, queue:in(X, Qn110), Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-109, + {Qn112, Qn111, Qn110, queue:in(X, Qn109), Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-108, + {Qn112, Qn111, Qn110, Qn109, queue:in(X, Qn108), + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-107, + {Qn112, Qn111, Qn110, Qn109, Qn108, + queue:in(X, Qn107), Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-106, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, queue:in(X, Qn106), Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-105, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, queue:in(X, Qn105), Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-104, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, queue:in(X, Qn104), Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-103, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, queue:in(X, Qn103), Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-102, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, queue:in(X, Qn102), + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-101, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + queue:in(X, Qn101), Qn100, Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-100, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, queue:in(X, Qn100), Qn99, Qn98, Qn97}); +?IN_HIGHER_Qn112(-99, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, queue:in(X, Qn99), Qn98, Qn97}); +?IN_HIGHER_Qn112(-98, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, queue:in(X, Qn98), Qn97}); +?IN_HIGHER_Qn112(-97, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, queue:in(X, Qn97)}); +?IN_HIGHER_Qn96(-96, + {queue:in(X, Qn96), Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-95, + {Qn96, queue:in(X, Qn95), Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-94, + {Qn96, Qn95, queue:in(X, Qn94), Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-93, + {Qn96, Qn95, Qn94, queue:in(X, Qn93), Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-92, + {Qn96, Qn95, Qn94, Qn93, queue:in(X, Qn92), + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-91, + {Qn96, Qn95, Qn94, Qn93, Qn92, + queue:in(X, Qn91), Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-90, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, queue:in(X, Qn90), Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-89, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, queue:in(X, Qn89), Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-88, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, queue:in(X, Qn88), Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-87, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, queue:in(X, Qn87), Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-86, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, queue:in(X, Qn86), + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-85, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + queue:in(X, Qn85), Qn84, Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-84, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, queue:in(X, Qn84), Qn83, Qn82, Qn81}); +?IN_HIGHER_Qn96(-83, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, queue:in(X, Qn83), Qn82, Qn81}); +?IN_HIGHER_Qn96(-82, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, queue:in(X, Qn82), Qn81}); +?IN_HIGHER_Qn96(-81, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, queue:in(X, Qn81)}); +?IN_HIGHER_Qn80(-80, + {queue:in(X, Qn80), Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-79, + {Qn80, queue:in(X, Qn79), Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-78, + {Qn80, Qn79, queue:in(X, Qn78), Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-77, + {Qn80, Qn79, Qn78, queue:in(X, Qn77), Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-76, + {Qn80, Qn79, Qn78, Qn77, queue:in(X, Qn76), + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-75, + {Qn80, Qn79, Qn78, Qn77, Qn76, + queue:in(X, Qn75), Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-74, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, queue:in(X, Qn74), Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-73, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, queue:in(X, Qn73), Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-72, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, queue:in(X, Qn72), Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-71, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, queue:in(X, Qn71), Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-70, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, queue:in(X, Qn70), + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-69, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + queue:in(X, Qn69), Qn68, Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-68, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, queue:in(X, Qn68), Qn67, Qn66, Qn65}); +?IN_HIGHER_Qn80(-67, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, queue:in(X, Qn67), Qn66, Qn65}); +?IN_HIGHER_Qn80(-66, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, queue:in(X, Qn66), Qn65}); +?IN_HIGHER_Qn80(-65, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, queue:in(X, Qn65)}); +?IN_HIGHER_Qn64(-64, + {queue:in(X, Qn64), Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-63, + {Qn64, queue:in(X, Qn63), Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-62, + {Qn64, Qn63, queue:in(X, Qn62), Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-61, + {Qn64, Qn63, Qn62, queue:in(X, Qn61), Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-60, + {Qn64, Qn63, Qn62, Qn61, queue:in(X, Qn60), + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-59, + {Qn64, Qn63, Qn62, Qn61, Qn60, + queue:in(X, Qn59), Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-58, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, queue:in(X, Qn58), Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-57, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, queue:in(X, Qn57), Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-56, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, queue:in(X, Qn56), Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-55, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, queue:in(X, Qn55), Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-54, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, queue:in(X, Qn54), + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-53, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + queue:in(X, Qn53), Qn52, Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-52, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, queue:in(X, Qn52), Qn51, Qn50, Qn49}); +?IN_HIGHER_Qn64(-51, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, queue:in(X, Qn51), Qn50, Qn49}); +?IN_HIGHER_Qn64(-50, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, queue:in(X, Qn50), Qn49}); +?IN_HIGHER_Qn64(-49, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, queue:in(X, Qn49)}); +?IN_HIGHER_Qn48(-48, + {queue:in(X, Qn48), Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-47, + {Qn48, queue:in(X, Qn47), Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-46, + {Qn48, Qn47, queue:in(X, Qn46), Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-45, + {Qn48, Qn47, Qn46, queue:in(X, Qn45), Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-44, + {Qn48, Qn47, Qn46, Qn45, queue:in(X, Qn44), + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-43, + {Qn48, Qn47, Qn46, Qn45, Qn44, + queue:in(X, Qn43), Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-42, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, queue:in(X, Qn42), Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-41, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, queue:in(X, Qn41), Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-40, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, queue:in(X, Qn40), Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-39, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, queue:in(X, Qn39), Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-38, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, queue:in(X, Qn38), + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-37, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + queue:in(X, Qn37), Qn36, Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-36, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, queue:in(X, Qn36), Qn35, Qn34, Qn33}); +?IN_HIGHER_Qn48(-35, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, queue:in(X, Qn35), Qn34, Qn33}); +?IN_HIGHER_Qn48(-34, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, queue:in(X, Qn34), Qn33}); +?IN_HIGHER_Qn48(-33, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, queue:in(X, Qn33)}); +?IN_HIGHER_Qn32(-32, + {queue:in(X, Qn32), Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-31, + {Qn32, queue:in(X, Qn31), Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-30, + {Qn32, Qn31, queue:in(X, Qn30), Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-29, + {Qn32, Qn31, Qn30, queue:in(X, Qn29), Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-28, + {Qn32, Qn31, Qn30, Qn29, queue:in(X, Qn28), + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-27, + {Qn32, Qn31, Qn30, Qn29, Qn28, + queue:in(X, Qn27), Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-26, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, queue:in(X, Qn26), Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-25, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, queue:in(X, Qn25), Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-24, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, queue:in(X, Qn24), Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-23, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, queue:in(X, Qn23), Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-22, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, queue:in(X, Qn22), + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-21, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + queue:in(X, Qn21), Qn20, Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-20, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, queue:in(X, Qn20), Qn19, Qn18, Qn17}); +?IN_HIGHER_Qn32(-19, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, queue:in(X, Qn19), Qn18, Qn17}); +?IN_HIGHER_Qn32(-18, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, queue:in(X, Qn18), Qn17}); +?IN_HIGHER_Qn32(-17, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, queue:in(X, Qn17)}); +?IN_HIGHER_Qn16(-16, + {queue:in(X, Qn16), Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-15, + {Qn16, queue:in(X, Qn15), Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-14, + {Qn16, Qn15, queue:in(X, Qn14), Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-13, + {Qn16, Qn15, Qn14, queue:in(X, Qn13), Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-12, + {Qn16, Qn15, Qn14, Qn13, queue:in(X, Qn12), + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-11, + {Qn16, Qn15, Qn14, Qn13, Qn12, + queue:in(X, Qn11), Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-10, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, queue:in(X, Qn10), Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-9, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, queue:in(X, Qn9), Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-8, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, queue:in(X, Qn8), Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-7, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, queue:in(X, Qn7), Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-6, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, queue:in(X, Qn6), + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-5, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + queue:in(X, Qn5), Qn4, Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-4, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, queue:in(X, Qn4), Qn3, Qn2, Qn1}); +?IN_HIGHER_Qn16(-3, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, queue:in(X, Qn3), Qn2, Qn1}); +?IN_HIGHER_Qn16(-2, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, queue:in(X, Qn2), Qn1}); +?IN_HIGHER_Qn16(-1, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, queue:in(X, Qn1)}); +in_higher(0, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {0, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + queue:in(X, Q0), + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}; +?IN_HIGHER_Qp16(1, + {queue:in(X, Qp1), Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(2, + {Qp1, queue:in(X, Qp2), Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(3, + {Qp1, Qp2, queue:in(X, Qp3), Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(4, + {Qp1, Qp2, Qp3, queue:in(X, Qp4), Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(5, + {Qp1, Qp2, Qp3, Qp4, queue:in(X, Qp5), + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(6, + {Qp1, Qp2, Qp3, Qp4, Qp5, + queue:in(X, Qp6), Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(7, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, queue:in(X, Qp7), Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(8, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, queue:in(X, Qp8), Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(9, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, queue:in(X, Qp9), Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(10, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, queue:in(X, Qp10), Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(11, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, queue:in(X, Qp11), + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(12, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + queue:in(X, Qp12), Qp13, Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(13, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, queue:in(X, Qp13), Qp14, Qp15, Qp16}); +?IN_HIGHER_Qp16(14, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, queue:in(X, Qp14), Qp15, Qp16}); +?IN_HIGHER_Qp16(15, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, queue:in(X, Qp15), Qp16}); +?IN_HIGHER_Qp16(16, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, queue:in(X, Qp16)}); +?IN_HIGHER_Qp32(17, + {queue:in(X, Qp17), Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(18, + {Qp17, queue:in(X, Qp18), Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(19, + {Qp17, Qp18, queue:in(X, Qp19), Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(20, + {Qp17, Qp18, Qp19, queue:in(X, Qp20), Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(21, + {Qp17, Qp18, Qp19, Qp20, queue:in(X, Qp21), + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(22, + {Qp17, Qp18, Qp19, Qp20, Qp21, + queue:in(X, Qp22), Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(23, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, queue:in(X, Qp23), Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(24, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, queue:in(X, Qp24), Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(25, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, queue:in(X, Qp25), Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(26, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, queue:in(X, Qp26), Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(27, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, queue:in(X, Qp27), + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(28, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + queue:in(X, Qp28), Qp29, Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(29, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, queue:in(X, Qp29), Qp30, Qp31, Qp32}); +?IN_HIGHER_Qp32(30, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, queue:in(X, Qp30), Qp31, Qp32}); +?IN_HIGHER_Qp32(31, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, queue:in(X, Qp31), Qp32}); +?IN_HIGHER_Qp32(32, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, queue:in(X, Qp32)}); +?IN_HIGHER_Qp48(33, + {queue:in(X, Qp33), Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(34, + {Qp33, queue:in(X, Qp34), Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(35, + {Qp33, Qp34, queue:in(X, Qp35), Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(36, + {Qp33, Qp34, Qp35, queue:in(X, Qp36), Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(37, + {Qp33, Qp34, Qp35, Qp36, queue:in(X, Qp37), + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(38, + {Qp33, Qp34, Qp35, Qp36, Qp37, + queue:in(X, Qp38), Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(39, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, queue:in(X, Qp39), Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(40, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, queue:in(X, Qp40), Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(41, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, queue:in(X, Qp41), Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(42, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, queue:in(X, Qp42), Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(43, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, queue:in(X, Qp43), + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(44, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + queue:in(X, Qp44), Qp45, Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(45, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, queue:in(X, Qp45), Qp46, Qp47, Qp48}); +?IN_HIGHER_Qp48(46, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, queue:in(X, Qp46), Qp47, Qp48}); +?IN_HIGHER_Qp48(47, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, queue:in(X, Qp47), Qp48}); +?IN_HIGHER_Qp48(48, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, queue:in(X, Qp48)}); +?IN_HIGHER_Qp64(49, + {queue:in(X, Qp49), Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(50, + {Qp49, queue:in(X, Qp50), Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(51, + {Qp49, Qp50, queue:in(X, Qp51), Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(52, + {Qp49, Qp50, Qp51, queue:in(X, Qp52), Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(53, + {Qp49, Qp50, Qp51, Qp52, queue:in(X, Qp53), + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(54, + {Qp49, Qp50, Qp51, Qp52, Qp53, + queue:in(X, Qp54), Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(55, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, queue:in(X, Qp55), Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(56, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, queue:in(X, Qp56), Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(57, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, queue:in(X, Qp57), Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(58, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, queue:in(X, Qp58), Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(59, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, queue:in(X, Qp59), + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(60, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + queue:in(X, Qp60), Qp61, Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(61, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, queue:in(X, Qp61), Qp62, Qp63, Qp64}); +?IN_HIGHER_Qp64(62, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, queue:in(X, Qp62), Qp63, Qp64}); +?IN_HIGHER_Qp64(63, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, queue:in(X, Qp63), Qp64}); +?IN_HIGHER_Qp64(64, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, queue:in(X, Qp64)}); +?IN_HIGHER_Qp80(65, + {queue:in(X, Qp65), Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(66, + {Qp65, queue:in(X, Qp66), Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(67, + {Qp65, Qp66, queue:in(X, Qp67), Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(68, + {Qp65, Qp66, Qp67, queue:in(X, Qp68), Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(69, + {Qp65, Qp66, Qp67, Qp68, queue:in(X, Qp69), + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(70, + {Qp65, Qp66, Qp67, Qp68, Qp69, + queue:in(X, Qp70), Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(71, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, queue:in(X, Qp71), Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(72, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, queue:in(X, Qp72), Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(73, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, queue:in(X, Qp73), Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(74, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, queue:in(X, Qp74), Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(75, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, queue:in(X, Qp75), + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(76, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + queue:in(X, Qp76), Qp77, Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(77, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, queue:in(X, Qp77), Qp78, Qp79, Qp80}); +?IN_HIGHER_Qp80(78, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, queue:in(X, Qp78), Qp79, Qp80}); +?IN_HIGHER_Qp80(79, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, queue:in(X, Qp79), Qp80}); +?IN_HIGHER_Qp80(80, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, queue:in(X, Qp80)}); +?IN_HIGHER_Qp96(81, + {queue:in(X, Qp81), Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(82, + {Qp81, queue:in(X, Qp82), Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(83, + {Qp81, Qp82, queue:in(X, Qp83), Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(84, + {Qp81, Qp82, Qp83, queue:in(X, Qp84), Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(85, + {Qp81, Qp82, Qp83, Qp84, queue:in(X, Qp85), + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(86, + {Qp81, Qp82, Qp83, Qp84, Qp85, + queue:in(X, Qp86), Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(87, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, queue:in(X, Qp87), Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(88, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, queue:in(X, Qp88), Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(89, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, queue:in(X, Qp89), Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(90, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, queue:in(X, Qp90), Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(91, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, queue:in(X, Qp91), + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(92, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + queue:in(X, Qp92), Qp93, Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(93, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, queue:in(X, Qp93), Qp94, Qp95, Qp96}); +?IN_HIGHER_Qp96(94, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, queue:in(X, Qp94), Qp95, Qp96}); +?IN_HIGHER_Qp96(95, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, queue:in(X, Qp95), Qp96}); +?IN_HIGHER_Qp96(96, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, queue:in(X, Qp96)}); +?IN_HIGHER_Qp112(97, + {queue:in(X, Qp97), Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(98, + {Qp97, queue:in(X, Qp98), Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(99, + {Qp97, Qp98, queue:in(X, Qp99), Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(100, + {Qp97, Qp98, Qp99, queue:in(X, Qp100), Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(101, + {Qp97, Qp98, Qp99, Qp100, queue:in(X, Qp101), + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(102, + {Qp97, Qp98, Qp99, Qp100, Qp101, + queue:in(X, Qp102), Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(103, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, queue:in(X, Qp103), Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(104, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, queue:in(X, Qp104), Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(105, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, queue:in(X, Qp105), Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(106, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, queue:in(X, Qp106), Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(107, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, queue:in(X, Qp107), + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(108, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + queue:in(X, Qp108), Qp109, Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(109, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, queue:in(X, Qp109), Qp110, Qp111, Qp112}); +?IN_HIGHER_Qp112(110, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, queue:in(X, Qp110), Qp111, Qp112}); +?IN_HIGHER_Qp112(111, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, queue:in(X, Qp111), Qp112}); +?IN_HIGHER_Qp112(112, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, queue:in(X, Qp112)}); +?IN_HIGHER_Qp128(113, + {queue:in(X, Qp113), Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(114, + {Qp113, queue:in(X, Qp114), Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(115, + {Qp113, Qp114, queue:in(X, Qp115), Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(116, + {Qp113, Qp114, Qp115, queue:in(X, Qp116), Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(117, + {Qp113, Qp114, Qp115, Qp116, queue:in(X, Qp117), + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(118, + {Qp113, Qp114, Qp115, Qp116, Qp117, + queue:in(X, Qp118), Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(119, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, queue:in(X, Qp119), Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(120, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, queue:in(X, Qp120), Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(121, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, queue:in(X, Qp121), Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(122, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, queue:in(X, Qp122), Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(123, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, queue:in(X, Qp123), + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(124, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + queue:in(X, Qp124), Qp125, Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(125, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, queue:in(X, Qp125), Qp126, Qp127, Qp128}); +?IN_HIGHER_Qp128(126, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, queue:in(X, Qp126), Qp127, Qp128}); +?IN_HIGHER_Qp128(127, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, queue:in(X, Qp127), Qp128}); +?IN_HIGHER_Qp128(128, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, queue:in(X, Qp128)}). + +%% @hidden +-define(IN_LOWER_Qn128(P, V), +in_lower(P, + {Pc, + Size, + {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121, + Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113}, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + V, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qn112(P, V), +in_lower(P, + {Pc, + Size, + Qn128, + {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105, + Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97}, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, + V, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qn96(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, + {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89, + Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81}, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, + V, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qn80(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, + {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73, + Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65}, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, + V, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qn64(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, + {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57, + Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49}, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, + V, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qn48(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, + {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41, + Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33}, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, + V, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qn32(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25, + Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17}, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + V, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qn16(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9, + Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + V, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qp16(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8, + Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16}, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + V, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qp32(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24, + Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32}, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + V, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qp48(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40, + Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48}, + Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + V, + Qp64, Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qp64(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56, + Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64}, + Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + V, + Qp80, Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qp80(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72, + Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80}, + Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + V, + Qp96, Qp112, Qp128}). +-define(IN_LOWER_Qp96(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88, + Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96}, + Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + V, + Qp112, Qp128}). +-define(IN_LOWER_Qp112(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104, + Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112}, + Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + V, + Qp128}). +-define(IN_LOWER_Qp128(P, V), +in_lower(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + V}). + +?IN_LOWER_Qn128(-128, + {queue:in(X, Qn128), Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-127, + {Qn128, queue:in(X, Qn127), Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-126, + {Qn128, Qn127, queue:in(X, Qn126), Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-125, + {Qn128, Qn127, Qn126, queue:in(X, Qn125), Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-124, + {Qn128, Qn127, Qn126, Qn125, queue:in(X, Qn124), + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-123, + {Qn128, Qn127, Qn126, Qn125, Qn124, + queue:in(X, Qn123), Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-122, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, queue:in(X, Qn122), Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-121, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, queue:in(X, Qn121), Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-120, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, queue:in(X, Qn120), Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-119, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, queue:in(X, Qn119), Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-118, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, queue:in(X, Qn118), + Qn117, Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-117, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + queue:in(X, Qn117), Qn116, Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-116, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, queue:in(X, Qn116), Qn115, Qn114, Qn113}); +?IN_LOWER_Qn128(-115, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, queue:in(X, Qn115), Qn114, Qn113}); +?IN_LOWER_Qn128(-114, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, queue:in(X, Qn114), Qn113}); +?IN_LOWER_Qn128(-113, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, queue:in(X, Qn113)}); +?IN_LOWER_Qn112(-112, + {queue:in(X, Qn112), Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-111, + {Qn112, queue:in(X, Qn111), Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-110, + {Qn112, Qn111, queue:in(X, Qn110), Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-109, + {Qn112, Qn111, Qn110, queue:in(X, Qn109), Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-108, + {Qn112, Qn111, Qn110, Qn109, queue:in(X, Qn108), + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-107, + {Qn112, Qn111, Qn110, Qn109, Qn108, + queue:in(X, Qn107), Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-106, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, queue:in(X, Qn106), Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-105, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, queue:in(X, Qn105), Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-104, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, queue:in(X, Qn104), Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-103, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, queue:in(X, Qn103), Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-102, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, queue:in(X, Qn102), + Qn101, Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-101, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + queue:in(X, Qn101), Qn100, Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-100, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, queue:in(X, Qn100), Qn99, Qn98, Qn97}); +?IN_LOWER_Qn112(-99, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, queue:in(X, Qn99), Qn98, Qn97}); +?IN_LOWER_Qn112(-98, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, queue:in(X, Qn98), Qn97}); +?IN_LOWER_Qn112(-97, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, queue:in(X, Qn97)}); +?IN_LOWER_Qn96(-96, + {queue:in(X, Qn96), Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-95, + {Qn96, queue:in(X, Qn95), Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-94, + {Qn96, Qn95, queue:in(X, Qn94), Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-93, + {Qn96, Qn95, Qn94, queue:in(X, Qn93), Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-92, + {Qn96, Qn95, Qn94, Qn93, queue:in(X, Qn92), + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-91, + {Qn96, Qn95, Qn94, Qn93, Qn92, + queue:in(X, Qn91), Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-90, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, queue:in(X, Qn90), Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-89, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, queue:in(X, Qn89), Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-88, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, queue:in(X, Qn88), Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-87, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, queue:in(X, Qn87), Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-86, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, queue:in(X, Qn86), + Qn85, Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-85, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + queue:in(X, Qn85), Qn84, Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-84, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, queue:in(X, Qn84), Qn83, Qn82, Qn81}); +?IN_LOWER_Qn96(-83, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, queue:in(X, Qn83), Qn82, Qn81}); +?IN_LOWER_Qn96(-82, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, queue:in(X, Qn82), Qn81}); +?IN_LOWER_Qn96(-81, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, queue:in(X, Qn81)}); +?IN_LOWER_Qn80(-80, + {queue:in(X, Qn80), Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-79, + {Qn80, queue:in(X, Qn79), Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-78, + {Qn80, Qn79, queue:in(X, Qn78), Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-77, + {Qn80, Qn79, Qn78, queue:in(X, Qn77), Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-76, + {Qn80, Qn79, Qn78, Qn77, queue:in(X, Qn76), + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-75, + {Qn80, Qn79, Qn78, Qn77, Qn76, + queue:in(X, Qn75), Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-74, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, queue:in(X, Qn74), Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-73, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, queue:in(X, Qn73), Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-72, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, queue:in(X, Qn72), Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-71, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, queue:in(X, Qn71), Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-70, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, queue:in(X, Qn70), + Qn69, Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-69, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + queue:in(X, Qn69), Qn68, Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-68, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, queue:in(X, Qn68), Qn67, Qn66, Qn65}); +?IN_LOWER_Qn80(-67, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, queue:in(X, Qn67), Qn66, Qn65}); +?IN_LOWER_Qn80(-66, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, queue:in(X, Qn66), Qn65}); +?IN_LOWER_Qn80(-65, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, queue:in(X, Qn65)}); +?IN_LOWER_Qn64(-64, + {queue:in(X, Qn64), Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-63, + {Qn64, queue:in(X, Qn63), Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-62, + {Qn64, Qn63, queue:in(X, Qn62), Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-61, + {Qn64, Qn63, Qn62, queue:in(X, Qn61), Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-60, + {Qn64, Qn63, Qn62, Qn61, queue:in(X, Qn60), + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-59, + {Qn64, Qn63, Qn62, Qn61, Qn60, + queue:in(X, Qn59), Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-58, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, queue:in(X, Qn58), Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-57, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, queue:in(X, Qn57), Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-56, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, queue:in(X, Qn56), Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-55, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, queue:in(X, Qn55), Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-54, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, queue:in(X, Qn54), + Qn53, Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-53, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + queue:in(X, Qn53), Qn52, Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-52, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, queue:in(X, Qn52), Qn51, Qn50, Qn49}); +?IN_LOWER_Qn64(-51, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, queue:in(X, Qn51), Qn50, Qn49}); +?IN_LOWER_Qn64(-50, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, queue:in(X, Qn50), Qn49}); +?IN_LOWER_Qn64(-49, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, queue:in(X, Qn49)}); +?IN_LOWER_Qn48(-48, + {queue:in(X, Qn48), Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-47, + {Qn48, queue:in(X, Qn47), Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-46, + {Qn48, Qn47, queue:in(X, Qn46), Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-45, + {Qn48, Qn47, Qn46, queue:in(X, Qn45), Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-44, + {Qn48, Qn47, Qn46, Qn45, queue:in(X, Qn44), + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-43, + {Qn48, Qn47, Qn46, Qn45, Qn44, + queue:in(X, Qn43), Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-42, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, queue:in(X, Qn42), Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-41, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, queue:in(X, Qn41), Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-40, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, queue:in(X, Qn40), Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-39, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, queue:in(X, Qn39), Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-38, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, queue:in(X, Qn38), + Qn37, Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-37, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + queue:in(X, Qn37), Qn36, Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-36, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, queue:in(X, Qn36), Qn35, Qn34, Qn33}); +?IN_LOWER_Qn48(-35, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, queue:in(X, Qn35), Qn34, Qn33}); +?IN_LOWER_Qn48(-34, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, queue:in(X, Qn34), Qn33}); +?IN_LOWER_Qn48(-33, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, queue:in(X, Qn33)}); +?IN_LOWER_Qn32(-32, + {queue:in(X, Qn32), Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-31, + {Qn32, queue:in(X, Qn31), Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-30, + {Qn32, Qn31, queue:in(X, Qn30), Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-29, + {Qn32, Qn31, Qn30, queue:in(X, Qn29), Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-28, + {Qn32, Qn31, Qn30, Qn29, queue:in(X, Qn28), + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-27, + {Qn32, Qn31, Qn30, Qn29, Qn28, + queue:in(X, Qn27), Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-26, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, queue:in(X, Qn26), Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-25, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, queue:in(X, Qn25), Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-24, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, queue:in(X, Qn24), Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-23, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, queue:in(X, Qn23), Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-22, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, queue:in(X, Qn22), + Qn21, Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-21, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + queue:in(X, Qn21), Qn20, Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-20, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, queue:in(X, Qn20), Qn19, Qn18, Qn17}); +?IN_LOWER_Qn32(-19, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, queue:in(X, Qn19), Qn18, Qn17}); +?IN_LOWER_Qn32(-18, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, queue:in(X, Qn18), Qn17}); +?IN_LOWER_Qn32(-17, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, queue:in(X, Qn17)}); +?IN_LOWER_Qn16(-16, + {queue:in(X, Qn16), Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-15, + {Qn16, queue:in(X, Qn15), Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-14, + {Qn16, Qn15, queue:in(X, Qn14), Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-13, + {Qn16, Qn15, Qn14, queue:in(X, Qn13), Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-12, + {Qn16, Qn15, Qn14, Qn13, queue:in(X, Qn12), + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-11, + {Qn16, Qn15, Qn14, Qn13, Qn12, + queue:in(X, Qn11), Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-10, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, queue:in(X, Qn10), Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-9, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, queue:in(X, Qn9), Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-8, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, queue:in(X, Qn8), Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-7, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, queue:in(X, Qn7), Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-6, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, queue:in(X, Qn6), + Qn5, Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-5, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + queue:in(X, Qn5), Qn4, Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-4, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, queue:in(X, Qn4), Qn3, Qn2, Qn1}); +?IN_LOWER_Qn16(-3, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, queue:in(X, Qn3), Qn2, Qn1}); +?IN_LOWER_Qn16(-2, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, queue:in(X, Qn2), Qn1}); +?IN_LOWER_Qn16(-1, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, queue:in(X, Qn1)}); +in_lower(0, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) -> + {Pc, + Size + 1, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + queue:in(X, Q0), + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}; +?IN_LOWER_Qp16(1, + {queue:in(X, Qp1), Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(2, + {Qp1, queue:in(X, Qp2), Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(3, + {Qp1, Qp2, queue:in(X, Qp3), Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(4, + {Qp1, Qp2, Qp3, queue:in(X, Qp4), Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(5, + {Qp1, Qp2, Qp3, Qp4, queue:in(X, Qp5), + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(6, + {Qp1, Qp2, Qp3, Qp4, Qp5, + queue:in(X, Qp6), Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(7, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, queue:in(X, Qp7), Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(8, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, queue:in(X, Qp8), Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(9, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, queue:in(X, Qp9), Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(10, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, queue:in(X, Qp10), Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(11, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, queue:in(X, Qp11), + Qp12, Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(12, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + queue:in(X, Qp12), Qp13, Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(13, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, queue:in(X, Qp13), Qp14, Qp15, Qp16}); +?IN_LOWER_Qp16(14, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, queue:in(X, Qp14), Qp15, Qp16}); +?IN_LOWER_Qp16(15, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, queue:in(X, Qp15), Qp16}); +?IN_LOWER_Qp16(16, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, queue:in(X, Qp16)}); +?IN_LOWER_Qp32(17, + {queue:in(X, Qp17), Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(18, + {Qp17, queue:in(X, Qp18), Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(19, + {Qp17, Qp18, queue:in(X, Qp19), Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(20, + {Qp17, Qp18, Qp19, queue:in(X, Qp20), Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(21, + {Qp17, Qp18, Qp19, Qp20, queue:in(X, Qp21), + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(22, + {Qp17, Qp18, Qp19, Qp20, Qp21, + queue:in(X, Qp22), Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(23, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, queue:in(X, Qp23), Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(24, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, queue:in(X, Qp24), Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(25, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, queue:in(X, Qp25), Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(26, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, queue:in(X, Qp26), Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(27, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, queue:in(X, Qp27), + Qp28, Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(28, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + queue:in(X, Qp28), Qp29, Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(29, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, queue:in(X, Qp29), Qp30, Qp31, Qp32}); +?IN_LOWER_Qp32(30, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, queue:in(X, Qp30), Qp31, Qp32}); +?IN_LOWER_Qp32(31, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, queue:in(X, Qp31), Qp32}); +?IN_LOWER_Qp32(32, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, queue:in(X, Qp32)}); +?IN_LOWER_Qp48(33, + {queue:in(X, Qp33), Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(34, + {Qp33, queue:in(X, Qp34), Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(35, + {Qp33, Qp34, queue:in(X, Qp35), Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(36, + {Qp33, Qp34, Qp35, queue:in(X, Qp36), Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(37, + {Qp33, Qp34, Qp35, Qp36, queue:in(X, Qp37), + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(38, + {Qp33, Qp34, Qp35, Qp36, Qp37, + queue:in(X, Qp38), Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(39, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, queue:in(X, Qp39), Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(40, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, queue:in(X, Qp40), Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(41, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, queue:in(X, Qp41), Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(42, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, queue:in(X, Qp42), Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(43, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, queue:in(X, Qp43), + Qp44, Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(44, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + queue:in(X, Qp44), Qp45, Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(45, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, queue:in(X, Qp45), Qp46, Qp47, Qp48}); +?IN_LOWER_Qp48(46, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, queue:in(X, Qp46), Qp47, Qp48}); +?IN_LOWER_Qp48(47, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, queue:in(X, Qp47), Qp48}); +?IN_LOWER_Qp48(48, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, queue:in(X, Qp48)}); +?IN_LOWER_Qp64(49, + {queue:in(X, Qp49), Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(50, + {Qp49, queue:in(X, Qp50), Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(51, + {Qp49, Qp50, queue:in(X, Qp51), Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(52, + {Qp49, Qp50, Qp51, queue:in(X, Qp52), Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(53, + {Qp49, Qp50, Qp51, Qp52, queue:in(X, Qp53), + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(54, + {Qp49, Qp50, Qp51, Qp52, Qp53, + queue:in(X, Qp54), Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(55, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, queue:in(X, Qp55), Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(56, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, queue:in(X, Qp56), Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(57, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, queue:in(X, Qp57), Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(58, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, queue:in(X, Qp58), Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(59, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, queue:in(X, Qp59), + Qp60, Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(60, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + queue:in(X, Qp60), Qp61, Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(61, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, queue:in(X, Qp61), Qp62, Qp63, Qp64}); +?IN_LOWER_Qp64(62, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, queue:in(X, Qp62), Qp63, Qp64}); +?IN_LOWER_Qp64(63, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, queue:in(X, Qp63), Qp64}); +?IN_LOWER_Qp64(64, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, queue:in(X, Qp64)}); +?IN_LOWER_Qp80(65, + {queue:in(X, Qp65), Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(66, + {Qp65, queue:in(X, Qp66), Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(67, + {Qp65, Qp66, queue:in(X, Qp67), Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(68, + {Qp65, Qp66, Qp67, queue:in(X, Qp68), Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(69, + {Qp65, Qp66, Qp67, Qp68, queue:in(X, Qp69), + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(70, + {Qp65, Qp66, Qp67, Qp68, Qp69, + queue:in(X, Qp70), Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(71, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, queue:in(X, Qp71), Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(72, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, queue:in(X, Qp72), Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(73, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, queue:in(X, Qp73), Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(74, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, queue:in(X, Qp74), Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(75, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, queue:in(X, Qp75), + Qp76, Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(76, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + queue:in(X, Qp76), Qp77, Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(77, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, queue:in(X, Qp77), Qp78, Qp79, Qp80}); +?IN_LOWER_Qp80(78, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, queue:in(X, Qp78), Qp79, Qp80}); +?IN_LOWER_Qp80(79, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, queue:in(X, Qp79), Qp80}); +?IN_LOWER_Qp80(80, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, queue:in(X, Qp80)}); +?IN_LOWER_Qp96(81, + {queue:in(X, Qp81), Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(82, + {Qp81, queue:in(X, Qp82), Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(83, + {Qp81, Qp82, queue:in(X, Qp83), Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(84, + {Qp81, Qp82, Qp83, queue:in(X, Qp84), Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(85, + {Qp81, Qp82, Qp83, Qp84, queue:in(X, Qp85), + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(86, + {Qp81, Qp82, Qp83, Qp84, Qp85, + queue:in(X, Qp86), Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(87, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, queue:in(X, Qp87), Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(88, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, queue:in(X, Qp88), Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(89, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, queue:in(X, Qp89), Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(90, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, queue:in(X, Qp90), Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(91, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, queue:in(X, Qp91), + Qp92, Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(92, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + queue:in(X, Qp92), Qp93, Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(93, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, queue:in(X, Qp93), Qp94, Qp95, Qp96}); +?IN_LOWER_Qp96(94, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, queue:in(X, Qp94), Qp95, Qp96}); +?IN_LOWER_Qp96(95, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, queue:in(X, Qp95), Qp96}); +?IN_LOWER_Qp96(96, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, queue:in(X, Qp96)}); +?IN_LOWER_Qp112(97, + {queue:in(X, Qp97), Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(98, + {Qp97, queue:in(X, Qp98), Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(99, + {Qp97, Qp98, queue:in(X, Qp99), Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(100, + {Qp97, Qp98, Qp99, queue:in(X, Qp100), Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(101, + {Qp97, Qp98, Qp99, Qp100, queue:in(X, Qp101), + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(102, + {Qp97, Qp98, Qp99, Qp100, Qp101, + queue:in(X, Qp102), Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(103, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, queue:in(X, Qp103), Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(104, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, queue:in(X, Qp104), Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(105, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, queue:in(X, Qp105), Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(106, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, queue:in(X, Qp106), Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(107, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, queue:in(X, Qp107), + Qp108, Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(108, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + queue:in(X, Qp108), Qp109, Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(109, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, queue:in(X, Qp109), Qp110, Qp111, Qp112}); +?IN_LOWER_Qp112(110, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, queue:in(X, Qp110), Qp111, Qp112}); +?IN_LOWER_Qp112(111, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, queue:in(X, Qp111), Qp112}); +?IN_LOWER_Qp112(112, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, queue:in(X, Qp112)}); +?IN_LOWER_Qp128(113, + {queue:in(X, Qp113), Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(114, + {Qp113, queue:in(X, Qp114), Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(115, + {Qp113, Qp114, queue:in(X, Qp115), Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(116, + {Qp113, Qp114, Qp115, queue:in(X, Qp116), Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(117, + {Qp113, Qp114, Qp115, Qp116, queue:in(X, Qp117), + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(118, + {Qp113, Qp114, Qp115, Qp116, Qp117, + queue:in(X, Qp118), Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(119, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, queue:in(X, Qp119), Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(120, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, queue:in(X, Qp120), Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(121, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, queue:in(X, Qp121), Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(122, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, queue:in(X, Qp122), Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(123, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, queue:in(X, Qp123), + Qp124, Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(124, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + queue:in(X, Qp124), Qp125, Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(125, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, queue:in(X, Qp125), Qp126, Qp127, Qp128}); +?IN_LOWER_Qp128(126, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, queue:in(X, Qp126), Qp127, Qp128}); +?IN_LOWER_Qp128(127, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, queue:in(X, Qp127), Qp128}); +?IN_LOWER_Qp128(128, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, queue:in(X, Qp128)}). + +%% @hidden +-define(OUT_CURRENT_Qn128(P, V1, V2, V3), +out_current(P, + {_, + Size, + {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121, + Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113}, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + V3, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qn112(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, + {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105, + Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97}, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, + V3, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qn96(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, + {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89, + Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81}, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, + V3, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qn80(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, + {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73, + Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65}, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, + V3, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qn64(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, + {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57, + Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49}, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, + V3, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qn48(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, + {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41, + Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33}, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, + V3, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qn32(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25, + Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17}, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + V3, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qn16(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9, + Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + V3, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qp16(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8, + Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16}, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + V3, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qp32(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24, + Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32}, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + V3, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qp48(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40, + Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48}, + Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + V3, + Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qp64(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56, + Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64}, + Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + V3, + Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qp80(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72, + Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80}, + Qp96, Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + V3, + Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qp96(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88, + Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96}, + Qp112, Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + V3, + Qp112, Qp128}} + end). +-define(OUT_CURRENT_Qp112(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104, + Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112}, + Qp128} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + V3, + Qp128}} + end). +-define(OUT_CURRENT_Qp128(P, V1, V2, V3), +out_current(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}} = Q) -> + {Value, V2} = queue:out(V1), + if + Value =:= empty -> + out_current(P + 1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + V3}} + end). + +?OUT_CURRENT_Qn128(-128, + Qn128, NewQn128, + {NewQn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-127, + Qn127, NewQn127, + {Qn128, NewQn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-126, + Qn126, NewQn126, + {Qn128, Qn127, NewQn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-125, + Qn125, NewQn125, + {Qn128, Qn127, Qn126, NewQn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-124, + Qn124, NewQn124, + {Qn128, Qn127, Qn126, Qn125, NewQn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-123, + Qn123, NewQn123, + {Qn128, Qn127, Qn126, Qn125, Qn124, + NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-122, + Qn122, NewQn122, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-121, + Qn121, NewQn121, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-120, + Qn120, NewQn120, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-119, + Qn119, NewQn119, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-118, + Qn118, NewQn118, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-117, + Qn117, NewQn117, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + NewQn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-116, + Qn116, NewQn116, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, NewQn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-115, + Qn115, NewQn115, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, NewQn115, Qn114, Qn113}); +?OUT_CURRENT_Qn128(-114, + Qn114, NewQn114, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, NewQn114, Qn113}); +?OUT_CURRENT_Qn128(-113, + Qn113, NewQn113, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, NewQn113}); +?OUT_CURRENT_Qn112(-112, + Qn112, NewQn112, + {NewQn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-111, + Qn111, NewQn111, + {Qn112, NewQn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-110, + Qn110, NewQn110, + {Qn112, Qn111, NewQn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-109, + Qn109, NewQn109, + {Qn112, Qn111, Qn110, NewQn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-108, + Qn108, NewQn108, + {Qn112, Qn111, Qn110, Qn109, NewQn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-107, + Qn107, NewQn107, + {Qn112, Qn111, Qn110, Qn109, Qn108, + NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-106, + Qn106, NewQn106, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-105, + Qn105, NewQn105, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-104, + Qn104, NewQn104, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-103, + Qn103, NewQn103, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-102, + Qn102, NewQn102, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-101, + Qn101, NewQn101, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + NewQn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-100, + Qn100, NewQn100, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, NewQn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-99, + Qn99, NewQn99, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, NewQn99, Qn98, Qn97}); +?OUT_CURRENT_Qn112(-98, + Qn98, NewQn98, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, NewQn98, Qn97}); +?OUT_CURRENT_Qn112(-97, + Qn97, NewQn97, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, NewQn97}); +?OUT_CURRENT_Qn96(-96, + Qn96, NewQn96, + {NewQn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-95, + Qn95, NewQn95, + {Qn96, NewQn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-94, + Qn94, NewQn94, + {Qn96, Qn95, NewQn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-93, + Qn93, NewQn93, + {Qn96, Qn95, Qn94, NewQn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-92, + Qn92, NewQn92, + {Qn96, Qn95, Qn94, Qn93, NewQn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-91, + Qn91, NewQn91, + {Qn96, Qn95, Qn94, Qn93, Qn92, + NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-90, + Qn90, NewQn90, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-89, + Qn89, NewQn89, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-88, + Qn88, NewQn88, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-87, + Qn87, NewQn87, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-86, + Qn86, NewQn86, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-85, + Qn85, NewQn85, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + NewQn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-84, + Qn84, NewQn84, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, NewQn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-83, + Qn83, NewQn83, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, NewQn83, Qn82, Qn81}); +?OUT_CURRENT_Qn96(-82, + Qn82, NewQn82, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, NewQn82, Qn81}); +?OUT_CURRENT_Qn96(-81, + Qn81, NewQn81, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, NewQn81}); +?OUT_CURRENT_Qn80(-80, + Qn80, NewQn80, + {NewQn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-79, + Qn79, NewQn79, + {Qn80, NewQn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-78, + Qn78, NewQn78, + {Qn80, Qn79, NewQn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-77, + Qn77, NewQn77, + {Qn80, Qn79, Qn78, NewQn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-76, + Qn76, NewQn76, + {Qn80, Qn79, Qn78, Qn77, NewQn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-75, + Qn75, NewQn75, + {Qn80, Qn79, Qn78, Qn77, Qn76, + NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-74, + Qn74, NewQn74, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-73, + Qn73, NewQn73, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-72, + Qn72, NewQn72, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-71, + Qn71, NewQn71, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-70, + Qn70, NewQn70, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-69, + Qn69, NewQn69, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + NewQn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-68, + Qn68, NewQn68, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, NewQn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-67, + Qn67, NewQn67, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, NewQn67, Qn66, Qn65}); +?OUT_CURRENT_Qn80(-66, + Qn66, NewQn66, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, NewQn66, Qn65}); +?OUT_CURRENT_Qn80(-65, + Qn65, NewQn65, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, NewQn65}); +?OUT_CURRENT_Qn64(-64, + Qn64, NewQn64, + {NewQn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-63, + Qn63, NewQn63, + {Qn64, NewQn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-62, + Qn62, NewQn62, + {Qn64, Qn63, NewQn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-61, + Qn61, NewQn61, + {Qn64, Qn63, Qn62, NewQn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-60, + Qn60, NewQn60, + {Qn64, Qn63, Qn62, Qn61, NewQn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-59, + Qn59, NewQn59, + {Qn64, Qn63, Qn62, Qn61, Qn60, + NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-58, + Qn58, NewQn58, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-57, + Qn57, NewQn57, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-56, + Qn56, NewQn56, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-55, + Qn55, NewQn55, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-54, + Qn54, NewQn54, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-53, + Qn53, NewQn53, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + NewQn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-52, + Qn52, NewQn52, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, NewQn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-51, + Qn51, NewQn51, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, NewQn51, Qn50, Qn49}); +?OUT_CURRENT_Qn64(-50, + Qn50, NewQn50, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, NewQn50, Qn49}); +?OUT_CURRENT_Qn64(-49, + Qn49, NewQn49, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, NewQn49}); +?OUT_CURRENT_Qn48(-48, + Qn48, NewQn48, + {NewQn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-47, + Qn47, NewQn47, + {Qn48, NewQn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-46, + Qn46, NewQn46, + {Qn48, Qn47, NewQn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-45, + Qn45, NewQn45, + {Qn48, Qn47, Qn46, NewQn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-44, + Qn44, NewQn44, + {Qn48, Qn47, Qn46, Qn45, NewQn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-43, + Qn43, NewQn43, + {Qn48, Qn47, Qn46, Qn45, Qn44, + NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-42, + Qn42, NewQn42, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-41, + Qn41, NewQn41, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-40, + Qn40, NewQn40, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-39, + Qn39, NewQn39, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-38, + Qn38, NewQn38, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-37, + Qn37, NewQn37, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + NewQn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-36, + Qn36, NewQn36, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, NewQn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-35, + Qn35, NewQn35, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, NewQn35, Qn34, Qn33}); +?OUT_CURRENT_Qn48(-34, + Qn34, NewQn34, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, NewQn34, Qn33}); +?OUT_CURRENT_Qn48(-33, + Qn33, NewQn33, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, NewQn33}); +?OUT_CURRENT_Qn32(-32, + Qn32, NewQn32, + {NewQn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-31, + Qn31, NewQn31, + {Qn32, NewQn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-30, + Qn30, NewQn30, + {Qn32, Qn31, NewQn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-29, + Qn29, NewQn29, + {Qn32, Qn31, Qn30, NewQn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-28, + Qn28, NewQn28, + {Qn32, Qn31, Qn30, Qn29, NewQn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-27, + Qn27, NewQn27, + {Qn32, Qn31, Qn30, Qn29, Qn28, + NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-26, + Qn26, NewQn26, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-25, + Qn25, NewQn25, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-24, + Qn24, NewQn24, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-23, + Qn23, NewQn23, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-22, + Qn22, NewQn22, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-21, + Qn21, NewQn21, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + NewQn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-20, + Qn20, NewQn20, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, NewQn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-19, + Qn19, NewQn19, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, NewQn19, Qn18, Qn17}); +?OUT_CURRENT_Qn32(-18, + Qn18, NewQn18, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, NewQn18, Qn17}); +?OUT_CURRENT_Qn32(-17, + Qn17, NewQn17, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, NewQn17}); +?OUT_CURRENT_Qn16(-16, + Qn16, NewQn16, + {NewQn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-15, + Qn15, NewQn15, + {Qn16, NewQn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-14, + Qn14, NewQn14, + {Qn16, Qn15, NewQn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-13, + Qn13, NewQn13, + {Qn16, Qn15, Qn14, NewQn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-12, + Qn12, NewQn12, + {Qn16, Qn15, Qn14, Qn13, NewQn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-11, + Qn11, NewQn11, + {Qn16, Qn15, Qn14, Qn13, Qn12, + NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-10, + Qn10, NewQn10, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-9, + Qn9, NewQn9, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-8, + Qn8, NewQn8, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-7, + Qn7, NewQn7, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-6, + Qn6, NewQn6, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-5, + Qn5, NewQn5, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + NewQn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-4, + Qn4, NewQn4, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, NewQn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-3, + Qn3, NewQn3, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, NewQn3, Qn2, Qn1}); +?OUT_CURRENT_Qn16(-2, + Qn2, NewQn2, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, NewQn2, Qn1}); +?OUT_CURRENT_Qn16(-1, + Qn1, NewQn1, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, NewQn1}); +out_current(0, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + {Value, NewQ0} = queue:out(Q0), + if + Value =:= empty -> + out_current(1, Q); + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> 0 end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + NewQ0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end; +?OUT_CURRENT_Qp16(1, + Qp1, NewQp1, + {NewQp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(2, + Qp2, NewQp2, + {Qp1, NewQp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(3, + Qp3, NewQp3, + {Qp1, Qp2, NewQp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(4, + Qp4, NewQp4, + {Qp1, Qp2, Qp3, NewQp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(5, + Qp5, NewQp5, + {Qp1, Qp2, Qp3, Qp4, NewQp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(6, + Qp6, NewQp6, + {Qp1, Qp2, Qp3, Qp4, Qp5, + NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(7, + Qp7, NewQp7, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(8, + Qp8, NewQp8, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(9, + Qp9, NewQp9, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(10, + Qp10, NewQp10, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(11, + Qp11, NewQp11, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(12, + Qp12, NewQp12, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + NewQp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(13, + Qp13, NewQp13, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, NewQp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(14, + Qp14, NewQp14, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, NewQp14, Qp15, Qp16}); +?OUT_CURRENT_Qp16(15, + Qp15, NewQp15, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, NewQp15, Qp16}); +?OUT_CURRENT_Qp16(16, + Qp16, NewQp16, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, NewQp16}); +?OUT_CURRENT_Qp32(17, + Qp17, NewQp17, + {NewQp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(18, + Qp18, NewQp18, + {Qp17, NewQp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(19, + Qp19, NewQp19, + {Qp17, Qp18, NewQp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(20, + Qp20, NewQp20, + {Qp17, Qp18, Qp19, NewQp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(21, + Qp21, NewQp21, + {Qp17, Qp18, Qp19, Qp20, NewQp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(22, + Qp22, NewQp22, + {Qp17, Qp18, Qp19, Qp20, Qp21, + NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(23, + Qp23, NewQp23, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(24, + Qp24, NewQp24, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(25, + Qp25, NewQp25, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(26, + Qp26, NewQp26, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(27, + Qp27, NewQp27, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(28, + Qp28, NewQp28, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + NewQp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(29, + Qp29, NewQp29, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, NewQp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(30, + Qp30, NewQp30, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, NewQp30, Qp31, Qp32}); +?OUT_CURRENT_Qp32(31, + Qp31, NewQp31, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, NewQp31, Qp32}); +?OUT_CURRENT_Qp32(32, + Qp32, NewQp32, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, NewQp32}); +?OUT_CURRENT_Qp48(33, + Qp33, NewQp33, + {NewQp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(34, + Qp34, NewQp34, + {Qp33, NewQp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(35, + Qp35, NewQp35, + {Qp33, Qp34, NewQp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(36, + Qp36, NewQp36, + {Qp33, Qp34, Qp35, NewQp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(37, + Qp37, NewQp37, + {Qp33, Qp34, Qp35, Qp36, NewQp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(38, + Qp38, NewQp38, + {Qp33, Qp34, Qp35, Qp36, Qp37, + NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(39, + Qp39, NewQp39, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(40, + Qp40, NewQp40, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(41, + Qp41, NewQp41, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(42, + Qp42, NewQp42, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(43, + Qp43, NewQp43, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(44, + Qp44, NewQp44, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + NewQp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(45, + Qp45, NewQp45, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, NewQp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(46, + Qp46, NewQp46, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, NewQp46, Qp47, Qp48}); +?OUT_CURRENT_Qp48(47, + Qp47, NewQp47, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, NewQp47, Qp48}); +?OUT_CURRENT_Qp48(48, + Qp48, NewQp48, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, NewQp48}); +?OUT_CURRENT_Qp64(49, + Qp49, NewQp49, + {NewQp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(50, + Qp50, NewQp50, + {Qp49, NewQp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(51, + Qp51, NewQp51, + {Qp49, Qp50, NewQp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(52, + Qp52, NewQp52, + {Qp49, Qp50, Qp51, NewQp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(53, + Qp53, NewQp53, + {Qp49, Qp50, Qp51, Qp52, NewQp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(54, + Qp54, NewQp54, + {Qp49, Qp50, Qp51, Qp52, Qp53, + NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(55, + Qp55, NewQp55, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(56, + Qp56, NewQp56, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(57, + Qp57, NewQp57, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(58, + Qp58, NewQp58, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(59, + Qp59, NewQp59, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(60, + Qp60, NewQp60, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + NewQp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(61, + Qp61, NewQp61, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, NewQp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(62, + Qp62, NewQp62, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, NewQp62, Qp63, Qp64}); +?OUT_CURRENT_Qp64(63, + Qp63, NewQp63, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, NewQp63, Qp64}); +?OUT_CURRENT_Qp64(64, + Qp64, NewQp64, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, NewQp64}); +?OUT_CURRENT_Qp80(65, + Qp65, NewQp65, + {NewQp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(66, + Qp66, NewQp66, + {Qp65, NewQp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(67, + Qp67, NewQp67, + {Qp65, Qp66, NewQp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(68, + Qp68, NewQp68, + {Qp65, Qp66, Qp67, NewQp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(69, + Qp69, NewQp69, + {Qp65, Qp66, Qp67, Qp68, NewQp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(70, + Qp70, NewQp70, + {Qp65, Qp66, Qp67, Qp68, Qp69, + NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(71, + Qp71, NewQp71, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(72, + Qp72, NewQp72, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(73, + Qp73, NewQp73, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(74, + Qp74, NewQp74, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(75, + Qp75, NewQp75, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(76, + Qp76, NewQp76, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + NewQp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(77, + Qp77, NewQp77, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, NewQp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(78, + Qp78, NewQp78, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, NewQp78, Qp79, Qp80}); +?OUT_CURRENT_Qp80(79, + Qp79, NewQp79, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, NewQp79, Qp80}); +?OUT_CURRENT_Qp80(80, + Qp80, NewQp80, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, NewQp80}); +?OUT_CURRENT_Qp96(81, + Qp81, NewQp81, + {NewQp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(82, + Qp82, NewQp82, + {Qp81, NewQp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(83, + Qp83, NewQp83, + {Qp81, Qp82, NewQp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(84, + Qp84, NewQp84, + {Qp81, Qp82, Qp83, NewQp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(85, + Qp85, NewQp85, + {Qp81, Qp82, Qp83, Qp84, NewQp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(86, + Qp86, NewQp86, + {Qp81, Qp82, Qp83, Qp84, Qp85, + NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(87, + Qp87, NewQp87, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(88, + Qp88, NewQp88, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(89, + Qp89, NewQp89, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(90, + Qp90, NewQp90, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(91, + Qp91, NewQp91, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(92, + Qp92, NewQp92, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + NewQp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(93, + Qp93, NewQp93, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, NewQp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(94, + Qp94, NewQp94, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, NewQp94, Qp95, Qp96}); +?OUT_CURRENT_Qp96(95, + Qp95, NewQp95, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, NewQp95, Qp96}); +?OUT_CURRENT_Qp96(96, + Qp96, NewQp96, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, NewQp96}); +?OUT_CURRENT_Qp112(97, + Qp97, NewQp97, + {NewQp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(98, + Qp98, NewQp98, + {Qp97, NewQp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(99, + Qp99, NewQp99, + {Qp97, Qp98, NewQp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(100, + Qp100, NewQp100, + {Qp97, Qp98, Qp99, NewQp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(101, + Qp101, NewQp101, + {Qp97, Qp98, Qp99, Qp100, NewQp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(102, + Qp102, NewQp102, + {Qp97, Qp98, Qp99, Qp100, Qp101, + NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(103, + Qp103, NewQp103, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(104, + Qp104, NewQp104, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(105, + Qp105, NewQp105, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(106, + Qp106, NewQp106, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(107, + Qp107, NewQp107, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(108, + Qp108, NewQp108, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + NewQp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(109, + Qp109, NewQp109, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, NewQp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(110, + Qp110, NewQp110, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, NewQp110, Qp111, Qp112}); +?OUT_CURRENT_Qp112(111, + Qp111, NewQp111, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, NewQp111, Qp112}); +?OUT_CURRENT_Qp112(112, + Qp112, NewQp112, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, NewQp112}); +?OUT_CURRENT_Qp128(113, + Qp113, NewQp113, + {NewQp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(114, + Qp114, NewQp114, + {Qp113, NewQp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(115, + Qp115, NewQp115, + {Qp113, Qp114, NewQp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(116, + Qp116, NewQp116, + {Qp113, Qp114, Qp115, NewQp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(117, + Qp117, NewQp117, + {Qp113, Qp114, Qp115, Qp116, NewQp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(118, + Qp118, NewQp118, + {Qp113, Qp114, Qp115, Qp116, Qp117, + NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(119, + Qp119, NewQp119, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(120, + Qp120, NewQp120, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(121, + Qp121, NewQp121, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(122, + Qp122, NewQp122, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(123, + Qp123, NewQp123, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(124, + Qp124, NewQp124, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + NewQp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(125, + Qp125, NewQp125, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, NewQp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(126, + Qp126, NewQp126, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, NewQp126, Qp127, Qp128}); +?OUT_CURRENT_Qp128(127, + Qp127, NewQp127, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, NewQp127, Qp128}); +out_current(128, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) -> + {Value, NewQp128} = queue:out(Qp128), + if + Value =:= empty -> + {empty, + {empty, + 0, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, NewQp128}}}; + true -> + NewSize = Size - 1, + {Value, + {if NewSize == 0 -> empty; true -> 128 end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, NewQp128}}} + end. + +%% @hidden +-define(OUT_CURRENT_P_Qn128(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121, + Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113}, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + V3, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qn112(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, + {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105, + Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97}, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, + V3, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qn96(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, + {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89, + Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81}, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, + V3, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qn80(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, + {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73, + Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65}, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, + V3, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qn64(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, + {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57, + Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49}, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, + V3, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qn48(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, + {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41, + Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33}, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, + V3, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qn32(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25, + Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17}, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + V3, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qn16(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9, + Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + V3, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qp16(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8, + Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16}, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + V3, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qp32(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24, + Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32}, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + V3, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qp48(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40, + Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48}, + Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + V3, + Qp64, Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qp64(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56, + Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64}, + Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + V3, + Qp80, Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qp80(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72, + Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80}, + Qp96, Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + V3, + Qp96, Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qp96(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88, + Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96}, + Qp112, Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + V3, + Qp112, Qp128}} + end). +-define(OUT_CURRENT_P_Qp112(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104, + Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112}, + Qp128} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + V3, + Qp128}} + end). +-define(OUT_CURRENT_P_Qp128(P, V1, V2, V3), +out_current_p(P, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}} = Q) -> + case queue:out(V1) of + {empty, _} -> + out_current_p(P + 1, Q); + {{value, X}, V2} -> + NewSize = Size - 1, + {{value, X, P}, + {if NewSize == 0 -> empty; true -> P end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + V3}} + end). + +?OUT_CURRENT_P_Qn128(-128, + Qn128, NewQn128, + {NewQn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-127, + Qn127, NewQn127, + {Qn128, NewQn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-126, + Qn126, NewQn126, + {Qn128, Qn127, NewQn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-125, + Qn125, NewQn125, + {Qn128, Qn127, Qn126, NewQn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-124, + Qn124, NewQn124, + {Qn128, Qn127, Qn126, Qn125, NewQn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-123, + Qn123, NewQn123, + {Qn128, Qn127, Qn126, Qn125, Qn124, + NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-122, + Qn122, NewQn122, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-121, + Qn121, NewQn121, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-120, + Qn120, NewQn120, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-119, + Qn119, NewQn119, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-118, + Qn118, NewQn118, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-117, + Qn117, NewQn117, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + NewQn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-116, + Qn116, NewQn116, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, NewQn116, Qn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-115, + Qn115, NewQn115, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, NewQn115, Qn114, Qn113}); +?OUT_CURRENT_P_Qn128(-114, + Qn114, NewQn114, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, NewQn114, Qn113}); +?OUT_CURRENT_P_Qn128(-113, + Qn113, NewQn113, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, NewQn113}); +?OUT_CURRENT_P_Qn112(-112, + Qn112, NewQn112, + {NewQn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-111, + Qn111, NewQn111, + {Qn112, NewQn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-110, + Qn110, NewQn110, + {Qn112, Qn111, NewQn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-109, + Qn109, NewQn109, + {Qn112, Qn111, Qn110, NewQn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-108, + Qn108, NewQn108, + {Qn112, Qn111, Qn110, Qn109, NewQn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-107, + Qn107, NewQn107, + {Qn112, Qn111, Qn110, Qn109, Qn108, + NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-106, + Qn106, NewQn106, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-105, + Qn105, NewQn105, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-104, + Qn104, NewQn104, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-103, + Qn103, NewQn103, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-102, + Qn102, NewQn102, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-101, + Qn101, NewQn101, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + NewQn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-100, + Qn100, NewQn100, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, NewQn100, Qn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-99, + Qn99, NewQn99, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, NewQn99, Qn98, Qn97}); +?OUT_CURRENT_P_Qn112(-98, + Qn98, NewQn98, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, NewQn98, Qn97}); +?OUT_CURRENT_P_Qn112(-97, + Qn97, NewQn97, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, NewQn97}); +?OUT_CURRENT_P_Qn96(-96, + Qn96, NewQn96, + {NewQn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-95, + Qn95, NewQn95, + {Qn96, NewQn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-94, + Qn94, NewQn94, + {Qn96, Qn95, NewQn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-93, + Qn93, NewQn93, + {Qn96, Qn95, Qn94, NewQn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-92, + Qn92, NewQn92, + {Qn96, Qn95, Qn94, Qn93, NewQn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-91, + Qn91, NewQn91, + {Qn96, Qn95, Qn94, Qn93, Qn92, + NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-90, + Qn90, NewQn90, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-89, + Qn89, NewQn89, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-88, + Qn88, NewQn88, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-87, + Qn87, NewQn87, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-86, + Qn86, NewQn86, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-85, + Qn85, NewQn85, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + NewQn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-84, + Qn84, NewQn84, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, NewQn84, Qn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-83, + Qn83, NewQn83, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, NewQn83, Qn82, Qn81}); +?OUT_CURRENT_P_Qn96(-82, + Qn82, NewQn82, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, NewQn82, Qn81}); +?OUT_CURRENT_P_Qn96(-81, + Qn81, NewQn81, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, NewQn81}); +?OUT_CURRENT_P_Qn80(-80, + Qn80, NewQn80, + {NewQn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-79, + Qn79, NewQn79, + {Qn80, NewQn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-78, + Qn78, NewQn78, + {Qn80, Qn79, NewQn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-77, + Qn77, NewQn77, + {Qn80, Qn79, Qn78, NewQn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-76, + Qn76, NewQn76, + {Qn80, Qn79, Qn78, Qn77, NewQn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-75, + Qn75, NewQn75, + {Qn80, Qn79, Qn78, Qn77, Qn76, + NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-74, + Qn74, NewQn74, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-73, + Qn73, NewQn73, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-72, + Qn72, NewQn72, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-71, + Qn71, NewQn71, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-70, + Qn70, NewQn70, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-69, + Qn69, NewQn69, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + NewQn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-68, + Qn68, NewQn68, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, NewQn68, Qn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-67, + Qn67, NewQn67, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, NewQn67, Qn66, Qn65}); +?OUT_CURRENT_P_Qn80(-66, + Qn66, NewQn66, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, NewQn66, Qn65}); +?OUT_CURRENT_P_Qn80(-65, + Qn65, NewQn65, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, NewQn65}); +?OUT_CURRENT_P_Qn64(-64, + Qn64, NewQn64, + {NewQn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-63, + Qn63, NewQn63, + {Qn64, NewQn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-62, + Qn62, NewQn62, + {Qn64, Qn63, NewQn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-61, + Qn61, NewQn61, + {Qn64, Qn63, Qn62, NewQn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-60, + Qn60, NewQn60, + {Qn64, Qn63, Qn62, Qn61, NewQn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-59, + Qn59, NewQn59, + {Qn64, Qn63, Qn62, Qn61, Qn60, + NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-58, + Qn58, NewQn58, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-57, + Qn57, NewQn57, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-56, + Qn56, NewQn56, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-55, + Qn55, NewQn55, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-54, + Qn54, NewQn54, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-53, + Qn53, NewQn53, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + NewQn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-52, + Qn52, NewQn52, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, NewQn52, Qn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-51, + Qn51, NewQn51, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, NewQn51, Qn50, Qn49}); +?OUT_CURRENT_P_Qn64(-50, + Qn50, NewQn50, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, NewQn50, Qn49}); +?OUT_CURRENT_P_Qn64(-49, + Qn49, NewQn49, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, NewQn49}); +?OUT_CURRENT_P_Qn48(-48, + Qn48, NewQn48, + {NewQn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-47, + Qn47, NewQn47, + {Qn48, NewQn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-46, + Qn46, NewQn46, + {Qn48, Qn47, NewQn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-45, + Qn45, NewQn45, + {Qn48, Qn47, Qn46, NewQn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-44, + Qn44, NewQn44, + {Qn48, Qn47, Qn46, Qn45, NewQn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-43, + Qn43, NewQn43, + {Qn48, Qn47, Qn46, Qn45, Qn44, + NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-42, + Qn42, NewQn42, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-41, + Qn41, NewQn41, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-40, + Qn40, NewQn40, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-39, + Qn39, NewQn39, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-38, + Qn38, NewQn38, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-37, + Qn37, NewQn37, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + NewQn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-36, + Qn36, NewQn36, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, NewQn36, Qn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-35, + Qn35, NewQn35, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, NewQn35, Qn34, Qn33}); +?OUT_CURRENT_P_Qn48(-34, + Qn34, NewQn34, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, NewQn34, Qn33}); +?OUT_CURRENT_P_Qn48(-33, + Qn33, NewQn33, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, NewQn33}); +?OUT_CURRENT_P_Qn32(-32, + Qn32, NewQn32, + {NewQn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-31, + Qn31, NewQn31, + {Qn32, NewQn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-30, + Qn30, NewQn30, + {Qn32, Qn31, NewQn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-29, + Qn29, NewQn29, + {Qn32, Qn31, Qn30, NewQn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-28, + Qn28, NewQn28, + {Qn32, Qn31, Qn30, Qn29, NewQn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-27, + Qn27, NewQn27, + {Qn32, Qn31, Qn30, Qn29, Qn28, + NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-26, + Qn26, NewQn26, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-25, + Qn25, NewQn25, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-24, + Qn24, NewQn24, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-23, + Qn23, NewQn23, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-22, + Qn22, NewQn22, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-21, + Qn21, NewQn21, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + NewQn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-20, + Qn20, NewQn20, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, NewQn20, Qn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-19, + Qn19, NewQn19, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, NewQn19, Qn18, Qn17}); +?OUT_CURRENT_P_Qn32(-18, + Qn18, NewQn18, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, NewQn18, Qn17}); +?OUT_CURRENT_P_Qn32(-17, + Qn17, NewQn17, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, NewQn17}); +?OUT_CURRENT_P_Qn16(-16, + Qn16, NewQn16, + {NewQn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-15, + Qn15, NewQn15, + {Qn16, NewQn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-14, + Qn14, NewQn14, + {Qn16, Qn15, NewQn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-13, + Qn13, NewQn13, + {Qn16, Qn15, Qn14, NewQn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-12, + Qn12, NewQn12, + {Qn16, Qn15, Qn14, Qn13, NewQn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-11, + Qn11, NewQn11, + {Qn16, Qn15, Qn14, Qn13, Qn12, + NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-10, + Qn10, NewQn10, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-9, + Qn9, NewQn9, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-8, + Qn8, NewQn8, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-7, + Qn7, NewQn7, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-6, + Qn6, NewQn6, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-5, + Qn5, NewQn5, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + NewQn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-4, + Qn4, NewQn4, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, NewQn4, Qn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-3, + Qn3, NewQn3, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, NewQn3, Qn2, Qn1}); +?OUT_CURRENT_P_Qn16(-2, + Qn2, NewQn2, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, NewQn2, Qn1}); +?OUT_CURRENT_P_Qn16(-1, + Qn1, NewQn1, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, NewQn1}); +out_current_p(0, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) -> + case queue:out(Q0) of + {empty, _} -> + out_current_p(1, Q); + {{value, X}, NewQ0} -> + NewSize = Size - 1, + {{value, X, 0}, + {if NewSize == 0 -> empty; true -> 0 end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + NewQ0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}} + end; +?OUT_CURRENT_P_Qp16(1, + Qp1, NewQp1, + {NewQp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(2, + Qp2, NewQp2, + {Qp1, NewQp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(3, + Qp3, NewQp3, + {Qp1, Qp2, NewQp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(4, + Qp4, NewQp4, + {Qp1, Qp2, Qp3, NewQp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(5, + Qp5, NewQp5, + {Qp1, Qp2, Qp3, Qp4, NewQp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(6, + Qp6, NewQp6, + {Qp1, Qp2, Qp3, Qp4, Qp5, + NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(7, + Qp7, NewQp7, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(8, + Qp8, NewQp8, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(9, + Qp9, NewQp9, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(10, + Qp10, NewQp10, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(11, + Qp11, NewQp11, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(12, + Qp12, NewQp12, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + NewQp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(13, + Qp13, NewQp13, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, NewQp13, Qp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(14, + Qp14, NewQp14, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, NewQp14, Qp15, Qp16}); +?OUT_CURRENT_P_Qp16(15, + Qp15, NewQp15, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, NewQp15, Qp16}); +?OUT_CURRENT_P_Qp16(16, + Qp16, NewQp16, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, NewQp16}); +?OUT_CURRENT_P_Qp32(17, + Qp17, NewQp17, + {NewQp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(18, + Qp18, NewQp18, + {Qp17, NewQp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(19, + Qp19, NewQp19, + {Qp17, Qp18, NewQp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(20, + Qp20, NewQp20, + {Qp17, Qp18, Qp19, NewQp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(21, + Qp21, NewQp21, + {Qp17, Qp18, Qp19, Qp20, NewQp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(22, + Qp22, NewQp22, + {Qp17, Qp18, Qp19, Qp20, Qp21, + NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(23, + Qp23, NewQp23, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(24, + Qp24, NewQp24, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(25, + Qp25, NewQp25, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(26, + Qp26, NewQp26, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(27, + Qp27, NewQp27, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(28, + Qp28, NewQp28, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + NewQp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(29, + Qp29, NewQp29, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, NewQp29, Qp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(30, + Qp30, NewQp30, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, NewQp30, Qp31, Qp32}); +?OUT_CURRENT_P_Qp32(31, + Qp31, NewQp31, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, NewQp31, Qp32}); +?OUT_CURRENT_P_Qp32(32, + Qp32, NewQp32, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, NewQp32}); +?OUT_CURRENT_P_Qp48(33, + Qp33, NewQp33, + {NewQp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(34, + Qp34, NewQp34, + {Qp33, NewQp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(35, + Qp35, NewQp35, + {Qp33, Qp34, NewQp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(36, + Qp36, NewQp36, + {Qp33, Qp34, Qp35, NewQp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(37, + Qp37, NewQp37, + {Qp33, Qp34, Qp35, Qp36, NewQp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(38, + Qp38, NewQp38, + {Qp33, Qp34, Qp35, Qp36, Qp37, + NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(39, + Qp39, NewQp39, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(40, + Qp40, NewQp40, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(41, + Qp41, NewQp41, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(42, + Qp42, NewQp42, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(43, + Qp43, NewQp43, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(44, + Qp44, NewQp44, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + NewQp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(45, + Qp45, NewQp45, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, NewQp45, Qp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(46, + Qp46, NewQp46, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, NewQp46, Qp47, Qp48}); +?OUT_CURRENT_P_Qp48(47, + Qp47, NewQp47, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, NewQp47, Qp48}); +?OUT_CURRENT_P_Qp48(48, + Qp48, NewQp48, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, NewQp48}); +?OUT_CURRENT_P_Qp64(49, + Qp49, NewQp49, + {NewQp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(50, + Qp50, NewQp50, + {Qp49, NewQp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(51, + Qp51, NewQp51, + {Qp49, Qp50, NewQp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(52, + Qp52, NewQp52, + {Qp49, Qp50, Qp51, NewQp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(53, + Qp53, NewQp53, + {Qp49, Qp50, Qp51, Qp52, NewQp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(54, + Qp54, NewQp54, + {Qp49, Qp50, Qp51, Qp52, Qp53, + NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(55, + Qp55, NewQp55, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(56, + Qp56, NewQp56, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(57, + Qp57, NewQp57, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(58, + Qp58, NewQp58, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(59, + Qp59, NewQp59, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(60, + Qp60, NewQp60, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + NewQp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(61, + Qp61, NewQp61, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, NewQp61, Qp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(62, + Qp62, NewQp62, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, NewQp62, Qp63, Qp64}); +?OUT_CURRENT_P_Qp64(63, + Qp63, NewQp63, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, NewQp63, Qp64}); +?OUT_CURRENT_P_Qp64(64, + Qp64, NewQp64, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, NewQp64}); +?OUT_CURRENT_P_Qp80(65, + Qp65, NewQp65, + {NewQp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(66, + Qp66, NewQp66, + {Qp65, NewQp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(67, + Qp67, NewQp67, + {Qp65, Qp66, NewQp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(68, + Qp68, NewQp68, + {Qp65, Qp66, Qp67, NewQp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(69, + Qp69, NewQp69, + {Qp65, Qp66, Qp67, Qp68, NewQp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(70, + Qp70, NewQp70, + {Qp65, Qp66, Qp67, Qp68, Qp69, + NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(71, + Qp71, NewQp71, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(72, + Qp72, NewQp72, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(73, + Qp73, NewQp73, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(74, + Qp74, NewQp74, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(75, + Qp75, NewQp75, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(76, + Qp76, NewQp76, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + NewQp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(77, + Qp77, NewQp77, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, NewQp77, Qp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(78, + Qp78, NewQp78, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, NewQp78, Qp79, Qp80}); +?OUT_CURRENT_P_Qp80(79, + Qp79, NewQp79, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, NewQp79, Qp80}); +?OUT_CURRENT_P_Qp80(80, + Qp80, NewQp80, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, NewQp80}); +?OUT_CURRENT_P_Qp96(81, + Qp81, NewQp81, + {NewQp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(82, + Qp82, NewQp82, + {Qp81, NewQp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(83, + Qp83, NewQp83, + {Qp81, Qp82, NewQp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(84, + Qp84, NewQp84, + {Qp81, Qp82, Qp83, NewQp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(85, + Qp85, NewQp85, + {Qp81, Qp82, Qp83, Qp84, NewQp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(86, + Qp86, NewQp86, + {Qp81, Qp82, Qp83, Qp84, Qp85, + NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(87, + Qp87, NewQp87, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(88, + Qp88, NewQp88, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(89, + Qp89, NewQp89, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(90, + Qp90, NewQp90, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(91, + Qp91, NewQp91, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(92, + Qp92, NewQp92, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + NewQp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(93, + Qp93, NewQp93, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, NewQp93, Qp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(94, + Qp94, NewQp94, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, NewQp94, Qp95, Qp96}); +?OUT_CURRENT_P_Qp96(95, + Qp95, NewQp95, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, NewQp95, Qp96}); +?OUT_CURRENT_P_Qp96(96, + Qp96, NewQp96, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, NewQp96}); +?OUT_CURRENT_P_Qp112(97, + Qp97, NewQp97, + {NewQp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(98, + Qp98, NewQp98, + {Qp97, NewQp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(99, + Qp99, NewQp99, + {Qp97, Qp98, NewQp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(100, + Qp100, NewQp100, + {Qp97, Qp98, Qp99, NewQp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(101, + Qp101, NewQp101, + {Qp97, Qp98, Qp99, Qp100, NewQp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(102, + Qp102, NewQp102, + {Qp97, Qp98, Qp99, Qp100, Qp101, + NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(103, + Qp103, NewQp103, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(104, + Qp104, NewQp104, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(105, + Qp105, NewQp105, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(106, + Qp106, NewQp106, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(107, + Qp107, NewQp107, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(108, + Qp108, NewQp108, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + NewQp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(109, + Qp109, NewQp109, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, NewQp109, Qp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(110, + Qp110, NewQp110, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, NewQp110, Qp111, Qp112}); +?OUT_CURRENT_P_Qp112(111, + Qp111, NewQp111, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, NewQp111, Qp112}); +?OUT_CURRENT_P_Qp112(112, + Qp112, NewQp112, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, NewQp112}); +?OUT_CURRENT_P_Qp128(113, + Qp113, NewQp113, + {NewQp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(114, + Qp114, NewQp114, + {Qp113, NewQp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(115, + Qp115, NewQp115, + {Qp113, Qp114, NewQp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(116, + Qp116, NewQp116, + {Qp113, Qp114, Qp115, NewQp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(117, + Qp117, NewQp117, + {Qp113, Qp114, Qp115, Qp116, NewQp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(118, + Qp118, NewQp118, + {Qp113, Qp114, Qp115, Qp116, Qp117, + NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(119, + Qp119, NewQp119, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(120, + Qp120, NewQp120, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(121, + Qp121, NewQp121, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(122, + Qp122, NewQp122, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(123, + Qp123, NewQp123, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(124, + Qp124, NewQp124, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + NewQp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(125, + Qp125, NewQp125, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, NewQp125, Qp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(126, + Qp126, NewQp126, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, NewQp126, Qp127, Qp128}); +?OUT_CURRENT_P_Qp128(127, + Qp127, NewQp127, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, NewQp127, Qp128}); +out_current_p(128, + {_, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) -> + case queue:out(Qp128) of + {empty, _} -> + {empty, + {empty, + 0, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}}; + {{value, X}, NewQp128} -> + NewSize = Size - 1, + {{value, X, 128}, + {if NewSize == 0 -> empty; true -> 128 end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, NewQp128}}} + end. + +%% @hidden +-define(OUT_SPECIFIC_Qn128(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121, + Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113}, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + V3, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qn112(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, + {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105, + Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97}, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, + V3, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qn96(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, + {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89, + Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81}, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, + V3, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qn80(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, + {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73, + Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65}, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, + V3, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qn64(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, + {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57, + Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49}, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, + V3, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qn48(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, + {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41, + Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33}, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, + V3, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qn32(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25, + Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17}, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + V3, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qn16(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9, + Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + V3, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qp16(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8, + Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16}, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + V3, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qp32(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24, + Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32}, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + V3, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qp48(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40, + Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48}, + Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + V3, + Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qp64(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56, + Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64}, + Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + V3, + Qp80, Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qp80(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72, + Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80}, + Qp96, Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + V3, + Qp96, Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qp96(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88, + Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96}, + Qp112, Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + V3, + Qp112, Qp128}}). +-define(OUT_SPECIFIC_Qp112(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104, + Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112}, + Qp128}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + V3, + Qp128}}). +-define(OUT_SPECIFIC_Qp128(P, V1, V2, V3), +out_specific(P, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) -> + {Value, V2} = queue:out(V1), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + V3}}). + +?OUT_SPECIFIC_Qn128(-128, + Qn128, NewQn128, + {NewQn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-127, + Qn127, NewQn127, + {Qn128, NewQn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-126, + Qn126, NewQn126, + {Qn128, Qn127, NewQn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-125, + Qn125, NewQn125, + {Qn128, Qn127, Qn126, NewQn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-124, + Qn124, NewQn124, + {Qn128, Qn127, Qn126, Qn125, NewQn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-123, + Qn123, NewQn123, + {Qn128, Qn127, Qn126, Qn125, Qn124, + NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-122, + Qn122, NewQn122, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-121, + Qn121, NewQn121, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-120, + Qn120, NewQn120, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-119, + Qn119, NewQn119, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-118, + Qn118, NewQn118, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-117, + Qn117, NewQn117, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + NewQn117, Qn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-116, + Qn116, NewQn116, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, NewQn116, Qn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-115, + Qn115, NewQn115, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, NewQn115, Qn114, Qn113}); +?OUT_SPECIFIC_Qn128(-114, + Qn114, NewQn114, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, NewQn114, Qn113}); +?OUT_SPECIFIC_Qn128(-113, + Qn113, NewQn113, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, NewQn113}); +?OUT_SPECIFIC_Qn112(-112, + Qn112, NewQn112, + {NewQn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-111, + Qn111, NewQn111, + {Qn112, NewQn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-110, + Qn110, NewQn110, + {Qn112, Qn111, NewQn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-109, + Qn109, NewQn109, + {Qn112, Qn111, Qn110, NewQn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-108, + Qn108, NewQn108, + {Qn112, Qn111, Qn110, Qn109, NewQn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-107, + Qn107, NewQn107, + {Qn112, Qn111, Qn110, Qn109, Qn108, + NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-106, + Qn106, NewQn106, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-105, + Qn105, NewQn105, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-104, + Qn104, NewQn104, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-103, + Qn103, NewQn103, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-102, + Qn102, NewQn102, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-101, + Qn101, NewQn101, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + NewQn101, Qn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-100, + Qn100, NewQn100, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, NewQn100, Qn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-99, + Qn99, NewQn99, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, NewQn99, Qn98, Qn97}); +?OUT_SPECIFIC_Qn112(-98, + Qn98, NewQn98, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, NewQn98, Qn97}); +?OUT_SPECIFIC_Qn112(-97, + Qn97, NewQn97, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, NewQn97}); +?OUT_SPECIFIC_Qn96(-96, + Qn96, NewQn96, + {NewQn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-95, + Qn95, NewQn95, + {Qn96, NewQn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-94, + Qn94, NewQn94, + {Qn96, Qn95, NewQn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-93, + Qn93, NewQn93, + {Qn96, Qn95, Qn94, NewQn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-92, + Qn92, NewQn92, + {Qn96, Qn95, Qn94, Qn93, NewQn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-91, + Qn91, NewQn91, + {Qn96, Qn95, Qn94, Qn93, Qn92, + NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-90, + Qn90, NewQn90, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-89, + Qn89, NewQn89, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-88, + Qn88, NewQn88, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-87, + Qn87, NewQn87, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-86, + Qn86, NewQn86, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-85, + Qn85, NewQn85, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + NewQn85, Qn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-84, + Qn84, NewQn84, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, NewQn84, Qn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-83, + Qn83, NewQn83, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, NewQn83, Qn82, Qn81}); +?OUT_SPECIFIC_Qn96(-82, + Qn82, NewQn82, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, NewQn82, Qn81}); +?OUT_SPECIFIC_Qn96(-81, + Qn81, NewQn81, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, NewQn81}); +?OUT_SPECIFIC_Qn80(-80, + Qn80, NewQn80, + {NewQn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-79, + Qn79, NewQn79, + {Qn80, NewQn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-78, + Qn78, NewQn78, + {Qn80, Qn79, NewQn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-77, + Qn77, NewQn77, + {Qn80, Qn79, Qn78, NewQn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-76, + Qn76, NewQn76, + {Qn80, Qn79, Qn78, Qn77, NewQn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-75, + Qn75, NewQn75, + {Qn80, Qn79, Qn78, Qn77, Qn76, + NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-74, + Qn74, NewQn74, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-73, + Qn73, NewQn73, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-72, + Qn72, NewQn72, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-71, + Qn71, NewQn71, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-70, + Qn70, NewQn70, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-69, + Qn69, NewQn69, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + NewQn69, Qn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-68, + Qn68, NewQn68, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, NewQn68, Qn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-67, + Qn67, NewQn67, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, NewQn67, Qn66, Qn65}); +?OUT_SPECIFIC_Qn80(-66, + Qn66, NewQn66, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, NewQn66, Qn65}); +?OUT_SPECIFIC_Qn80(-65, + Qn65, NewQn65, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, NewQn65}); +?OUT_SPECIFIC_Qn64(-64, + Qn64, NewQn64, + {NewQn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-63, + Qn63, NewQn63, + {Qn64, NewQn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-62, + Qn62, NewQn62, + {Qn64, Qn63, NewQn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-61, + Qn61, NewQn61, + {Qn64, Qn63, Qn62, NewQn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-60, + Qn60, NewQn60, + {Qn64, Qn63, Qn62, Qn61, NewQn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-59, + Qn59, NewQn59, + {Qn64, Qn63, Qn62, Qn61, Qn60, + NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-58, + Qn58, NewQn58, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-57, + Qn57, NewQn57, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-56, + Qn56, NewQn56, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-55, + Qn55, NewQn55, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-54, + Qn54, NewQn54, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-53, + Qn53, NewQn53, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + NewQn53, Qn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-52, + Qn52, NewQn52, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, NewQn52, Qn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-51, + Qn51, NewQn51, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, NewQn51, Qn50, Qn49}); +?OUT_SPECIFIC_Qn64(-50, + Qn50, NewQn50, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, NewQn50, Qn49}); +?OUT_SPECIFIC_Qn64(-49, + Qn49, NewQn49, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, NewQn49}); +?OUT_SPECIFIC_Qn48(-48, + Qn48, NewQn48, + {NewQn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-47, + Qn47, NewQn47, + {Qn48, NewQn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-46, + Qn46, NewQn46, + {Qn48, Qn47, NewQn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-45, + Qn45, NewQn45, + {Qn48, Qn47, Qn46, NewQn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-44, + Qn44, NewQn44, + {Qn48, Qn47, Qn46, Qn45, NewQn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-43, + Qn43, NewQn43, + {Qn48, Qn47, Qn46, Qn45, Qn44, + NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-42, + Qn42, NewQn42, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-41, + Qn41, NewQn41, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-40, + Qn40, NewQn40, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-39, + Qn39, NewQn39, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-38, + Qn38, NewQn38, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-37, + Qn37, NewQn37, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + NewQn37, Qn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-36, + Qn36, NewQn36, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, NewQn36, Qn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-35, + Qn35, NewQn35, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, NewQn35, Qn34, Qn33}); +?OUT_SPECIFIC_Qn48(-34, + Qn34, NewQn34, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, NewQn34, Qn33}); +?OUT_SPECIFIC_Qn48(-33, + Qn33, NewQn33, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, NewQn33}); +?OUT_SPECIFIC_Qn32(-32, + Qn32, NewQn32, + {NewQn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-31, + Qn31, NewQn31, + {Qn32, NewQn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-30, + Qn30, NewQn30, + {Qn32, Qn31, NewQn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-29, + Qn29, NewQn29, + {Qn32, Qn31, Qn30, NewQn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-28, + Qn28, NewQn28, + {Qn32, Qn31, Qn30, Qn29, NewQn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-27, + Qn27, NewQn27, + {Qn32, Qn31, Qn30, Qn29, Qn28, + NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-26, + Qn26, NewQn26, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-25, + Qn25, NewQn25, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-24, + Qn24, NewQn24, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-23, + Qn23, NewQn23, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-22, + Qn22, NewQn22, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-21, + Qn21, NewQn21, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + NewQn21, Qn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-20, + Qn20, NewQn20, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, NewQn20, Qn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-19, + Qn19, NewQn19, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, NewQn19, Qn18, Qn17}); +?OUT_SPECIFIC_Qn32(-18, + Qn18, NewQn18, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, NewQn18, Qn17}); +?OUT_SPECIFIC_Qn32(-17, + Qn17, NewQn17, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, NewQn17}); +?OUT_SPECIFIC_Qn16(-16, + Qn16, NewQn16, + {NewQn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-15, + Qn15, NewQn15, + {Qn16, NewQn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-14, + Qn14, NewQn14, + {Qn16, Qn15, NewQn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-13, + Qn13, NewQn13, + {Qn16, Qn15, Qn14, NewQn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-12, + Qn12, NewQn12, + {Qn16, Qn15, Qn14, Qn13, NewQn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-11, + Qn11, NewQn11, + {Qn16, Qn15, Qn14, Qn13, Qn12, + NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-10, + Qn10, NewQn10, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-9, + Qn9, NewQn9, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-8, + Qn8, NewQn8, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-7, + Qn7, NewQn7, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-6, + Qn6, NewQn6, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-5, + Qn5, NewQn5, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + NewQn5, Qn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-4, + Qn4, NewQn4, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, NewQn4, Qn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-3, + Qn3, NewQn3, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, NewQn3, Qn2, Qn1}); +?OUT_SPECIFIC_Qn16(-2, + Qn2, NewQn2, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, NewQn2, Qn1}); +?OUT_SPECIFIC_Qn16(-1, + Qn1, NewQn1, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, NewQn1}); +out_specific(0, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, NewQ0} = queue:out(Q0), + NewSize = if Value =/= empty -> Size - 1; true -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + NewQ0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}; +?OUT_SPECIFIC_Qp16(1, + Qp1, NewQp1, + {NewQp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(2, + Qp2, NewQp2, + {Qp1, NewQp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(3, + Qp3, NewQp3, + {Qp1, Qp2, NewQp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(4, + Qp4, NewQp4, + {Qp1, Qp2, Qp3, NewQp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(5, + Qp5, NewQp5, + {Qp1, Qp2, Qp3, Qp4, NewQp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(6, + Qp6, NewQp6, + {Qp1, Qp2, Qp3, Qp4, Qp5, + NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(7, + Qp7, NewQp7, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(8, + Qp8, NewQp8, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(9, + Qp9, NewQp9, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(10, + Qp10, NewQp10, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(11, + Qp11, NewQp11, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(12, + Qp12, NewQp12, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + NewQp12, Qp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(13, + Qp13, NewQp13, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, NewQp13, Qp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(14, + Qp14, NewQp14, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, NewQp14, Qp15, Qp16}); +?OUT_SPECIFIC_Qp16(15, + Qp15, NewQp15, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, NewQp15, Qp16}); +?OUT_SPECIFIC_Qp16(16, + Qp16, NewQp16, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, NewQp16}); +?OUT_SPECIFIC_Qp32(17, + Qp17, NewQp17, + {NewQp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(18, + Qp18, NewQp18, + {Qp17, NewQp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(19, + Qp19, NewQp19, + {Qp17, Qp18, NewQp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(20, + Qp20, NewQp20, + {Qp17, Qp18, Qp19, NewQp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(21, + Qp21, NewQp21, + {Qp17, Qp18, Qp19, Qp20, NewQp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(22, + Qp22, NewQp22, + {Qp17, Qp18, Qp19, Qp20, Qp21, + NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(23, + Qp23, NewQp23, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(24, + Qp24, NewQp24, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(25, + Qp25, NewQp25, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(26, + Qp26, NewQp26, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(27, + Qp27, NewQp27, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(28, + Qp28, NewQp28, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + NewQp28, Qp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(29, + Qp29, NewQp29, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, NewQp29, Qp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(30, + Qp30, NewQp30, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, NewQp30, Qp31, Qp32}); +?OUT_SPECIFIC_Qp32(31, + Qp31, NewQp31, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, NewQp31, Qp32}); +?OUT_SPECIFIC_Qp32(32, + Qp32, NewQp32, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, NewQp32}); +?OUT_SPECIFIC_Qp48(33, + Qp33, NewQp33, + {NewQp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(34, + Qp34, NewQp34, + {Qp33, NewQp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(35, + Qp35, NewQp35, + {Qp33, Qp34, NewQp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(36, + Qp36, NewQp36, + {Qp33, Qp34, Qp35, NewQp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(37, + Qp37, NewQp37, + {Qp33, Qp34, Qp35, Qp36, NewQp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(38, + Qp38, NewQp38, + {Qp33, Qp34, Qp35, Qp36, Qp37, + NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(39, + Qp39, NewQp39, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(40, + Qp40, NewQp40, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(41, + Qp41, NewQp41, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(42, + Qp42, NewQp42, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(43, + Qp43, NewQp43, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(44, + Qp44, NewQp44, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + NewQp44, Qp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(45, + Qp45, NewQp45, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, NewQp45, Qp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(46, + Qp46, NewQp46, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, NewQp46, Qp47, Qp48}); +?OUT_SPECIFIC_Qp48(47, + Qp47, NewQp47, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, NewQp47, Qp48}); +?OUT_SPECIFIC_Qp48(48, + Qp48, NewQp48, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, NewQp48}); +?OUT_SPECIFIC_Qp64(49, + Qp49, NewQp49, + {NewQp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(50, + Qp50, NewQp50, + {Qp49, NewQp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(51, + Qp51, NewQp51, + {Qp49, Qp50, NewQp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(52, + Qp52, NewQp52, + {Qp49, Qp50, Qp51, NewQp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(53, + Qp53, NewQp53, + {Qp49, Qp50, Qp51, Qp52, NewQp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(54, + Qp54, NewQp54, + {Qp49, Qp50, Qp51, Qp52, Qp53, + NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(55, + Qp55, NewQp55, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(56, + Qp56, NewQp56, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(57, + Qp57, NewQp57, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(58, + Qp58, NewQp58, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(59, + Qp59, NewQp59, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(60, + Qp60, NewQp60, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + NewQp60, Qp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(61, + Qp61, NewQp61, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, NewQp61, Qp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(62, + Qp62, NewQp62, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, NewQp62, Qp63, Qp64}); +?OUT_SPECIFIC_Qp64(63, + Qp63, NewQp63, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, NewQp63, Qp64}); +?OUT_SPECIFIC_Qp64(64, + Qp64, NewQp64, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, NewQp64}); +?OUT_SPECIFIC_Qp80(65, + Qp65, NewQp65, + {NewQp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(66, + Qp66, NewQp66, + {Qp65, NewQp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(67, + Qp67, NewQp67, + {Qp65, Qp66, NewQp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(68, + Qp68, NewQp68, + {Qp65, Qp66, Qp67, NewQp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(69, + Qp69, NewQp69, + {Qp65, Qp66, Qp67, Qp68, NewQp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(70, + Qp70, NewQp70, + {Qp65, Qp66, Qp67, Qp68, Qp69, + NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(71, + Qp71, NewQp71, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(72, + Qp72, NewQp72, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(73, + Qp73, NewQp73, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(74, + Qp74, NewQp74, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(75, + Qp75, NewQp75, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(76, + Qp76, NewQp76, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + NewQp76, Qp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(77, + Qp77, NewQp77, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, NewQp77, Qp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(78, + Qp78, NewQp78, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, NewQp78, Qp79, Qp80}); +?OUT_SPECIFIC_Qp80(79, + Qp79, NewQp79, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, NewQp79, Qp80}); +?OUT_SPECIFIC_Qp80(80, + Qp80, NewQp80, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, NewQp80}); +?OUT_SPECIFIC_Qp96(81, + Qp81, NewQp81, + {NewQp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(82, + Qp82, NewQp82, + {Qp81, NewQp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(83, + Qp83, NewQp83, + {Qp81, Qp82, NewQp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(84, + Qp84, NewQp84, + {Qp81, Qp82, Qp83, NewQp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(85, + Qp85, NewQp85, + {Qp81, Qp82, Qp83, Qp84, NewQp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(86, + Qp86, NewQp86, + {Qp81, Qp82, Qp83, Qp84, Qp85, + NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(87, + Qp87, NewQp87, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(88, + Qp88, NewQp88, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(89, + Qp89, NewQp89, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(90, + Qp90, NewQp90, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(91, + Qp91, NewQp91, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(92, + Qp92, NewQp92, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + NewQp92, Qp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(93, + Qp93, NewQp93, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, NewQp93, Qp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(94, + Qp94, NewQp94, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, NewQp94, Qp95, Qp96}); +?OUT_SPECIFIC_Qp96(95, + Qp95, NewQp95, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, NewQp95, Qp96}); +?OUT_SPECIFIC_Qp96(96, + Qp96, NewQp96, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, NewQp96}); +?OUT_SPECIFIC_Qp112(97, + Qp97, NewQp97, + {NewQp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(98, + Qp98, NewQp98, + {Qp97, NewQp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(99, + Qp99, NewQp99, + {Qp97, Qp98, NewQp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(100, + Qp100, NewQp100, + {Qp97, Qp98, Qp99, NewQp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(101, + Qp101, NewQp101, + {Qp97, Qp98, Qp99, Qp100, NewQp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(102, + Qp102, NewQp102, + {Qp97, Qp98, Qp99, Qp100, Qp101, + NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(103, + Qp103, NewQp103, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(104, + Qp104, NewQp104, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(105, + Qp105, NewQp105, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(106, + Qp106, NewQp106, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(107, + Qp107, NewQp107, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(108, + Qp108, NewQp108, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + NewQp108, Qp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(109, + Qp109, NewQp109, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, NewQp109, Qp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(110, + Qp110, NewQp110, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, NewQp110, Qp111, Qp112}); +?OUT_SPECIFIC_Qp112(111, + Qp111, NewQp111, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, NewQp111, Qp112}); +?OUT_SPECIFIC_Qp112(112, + Qp112, NewQp112, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, NewQp112}); +?OUT_SPECIFIC_Qp128(113, + Qp113, NewQp113, + {NewQp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(114, + Qp114, NewQp114, + {Qp113, NewQp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(115, + Qp115, NewQp115, + {Qp113, Qp114, NewQp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(116, + Qp116, NewQp116, + {Qp113, Qp114, Qp115, NewQp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(117, + Qp117, NewQp117, + {Qp113, Qp114, Qp115, Qp116, NewQp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(118, + Qp118, NewQp118, + {Qp113, Qp114, Qp115, Qp116, Qp117, + NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(119, + Qp119, NewQp119, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(120, + Qp120, NewQp120, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(121, + Qp121, NewQp121, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(122, + Qp122, NewQp122, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(123, + Qp123, NewQp123, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(124, + Qp124, NewQp124, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + NewQp124, Qp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(125, + Qp125, NewQp125, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, NewQp125, Qp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(126, + Qp126, NewQp126, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, NewQp126, Qp127, Qp128}); +?OUT_SPECIFIC_Qp128(127, + Qp127, NewQp127, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, NewQp127, Qp128}); +?OUT_SPECIFIC_Qp128(128, + Qp128, NewQp128, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, NewQp128}). + +%% @hidden +-define(REMOVE_UNIQ_P_Qn128(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121, + Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113}, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + V3, + Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qn112(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, + {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105, + Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97}, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, + V3, + Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qn96(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, + {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89, + Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81}, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, + V3, + Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qn80(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, + {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73, + Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65}, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, + V3, + Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qn64(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, + {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57, + Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49}, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, + V3, + Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qn48(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, + {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41, + Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33}, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, + V3, + Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qn32(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25, + Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17}, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, + V3, + Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qn16(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9, + Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1}, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, + V3, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qp16(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8, + Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16}, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + V3, + Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qp32(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24, + Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32}, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, + V3, + Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qp48(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40, + Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48}, + Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, + V3, + Qp64, Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qp64(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56, + Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64}, + Qp80, Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, + V3, + Qp80, Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qp80(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72, + Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80}, + Qp96, Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, + V3, + Qp96, Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qp96(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88, + Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96}, + Qp112, Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, + V3, + Qp112, Qp128}}). +-define(REMOVE_UNIQ_P_Qp112(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104, + Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112}, + Qp128}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, + V3, + Qp128}}). +-define(REMOVE_UNIQ_P_Qp128(P, V1, V2, V3), +remove_unique_p(P, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120, + Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) -> + {Value, V2} = queue_remove_unique(F, V1), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, + V3}}). + +?REMOVE_UNIQ_P_Qn128(-128, + Qn128, NewQn128, + {NewQn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-127, + Qn127, NewQn127, + {Qn128, NewQn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-126, + Qn126, NewQn126, + {Qn128, Qn127, NewQn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-125, + Qn125, NewQn125, + {Qn128, Qn127, Qn126, NewQn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-124, + Qn124, NewQn124, + {Qn128, Qn127, Qn126, Qn125, NewQn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-123, + Qn123, NewQn123, + {Qn128, Qn127, Qn126, Qn125, Qn124, + NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-122, + Qn122, NewQn122, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-121, + Qn121, NewQn121, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-120, + Qn120, NewQn120, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-119, + Qn119, NewQn119, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-118, + Qn118, NewQn118, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118, + Qn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-117, + Qn117, NewQn117, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + NewQn117, Qn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-116, + Qn116, NewQn116, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, NewQn116, Qn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-115, + Qn115, NewQn115, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, NewQn115, Qn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-114, + Qn114, NewQn114, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, NewQn114, Qn113}); +?REMOVE_UNIQ_P_Qn128(-113, + Qn113, NewQn113, + {Qn128, Qn127, Qn126, Qn125, Qn124, + Qn123, Qn122, Qn121, Qn120, Qn119, Qn118, + Qn117, Qn116, Qn115, Qn114, NewQn113}); +?REMOVE_UNIQ_P_Qn112(-112, + Qn112, NewQn112, + {NewQn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-111, + Qn111, NewQn111, + {Qn112, NewQn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-110, + Qn110, NewQn110, + {Qn112, Qn111, NewQn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-109, + Qn109, NewQn109, + {Qn112, Qn111, Qn110, NewQn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-108, + Qn108, NewQn108, + {Qn112, Qn111, Qn110, Qn109, NewQn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-107, + Qn107, NewQn107, + {Qn112, Qn111, Qn110, Qn109, Qn108, + NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-106, + Qn106, NewQn106, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-105, + Qn105, NewQn105, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-104, + Qn104, NewQn104, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-103, + Qn103, NewQn103, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-102, + Qn102, NewQn102, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102, + Qn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-101, + Qn101, NewQn101, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + NewQn101, Qn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-100, + Qn100, NewQn100, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, NewQn100, Qn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-99, + Qn99, NewQn99, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, NewQn99, Qn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-98, + Qn98, NewQn98, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, NewQn98, Qn97}); +?REMOVE_UNIQ_P_Qn112(-97, + Qn97, NewQn97, + {Qn112, Qn111, Qn110, Qn109, Qn108, + Qn107, Qn106, Qn105, Qn104, Qn103, Qn102, + Qn101, Qn100, Qn99, Qn98, NewQn97}); +?REMOVE_UNIQ_P_Qn96(-96, + Qn96, NewQn96, + {NewQn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-95, + Qn95, NewQn95, + {Qn96, NewQn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-94, + Qn94, NewQn94, + {Qn96, Qn95, NewQn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-93, + Qn93, NewQn93, + {Qn96, Qn95, Qn94, NewQn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-92, + Qn92, NewQn92, + {Qn96, Qn95, Qn94, Qn93, NewQn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-91, + Qn91, NewQn91, + {Qn96, Qn95, Qn94, Qn93, Qn92, + NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-90, + Qn90, NewQn90, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-89, + Qn89, NewQn89, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-88, + Qn88, NewQn88, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-87, + Qn87, NewQn87, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-86, + Qn86, NewQn86, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86, + Qn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-85, + Qn85, NewQn85, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + NewQn85, Qn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-84, + Qn84, NewQn84, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, NewQn84, Qn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-83, + Qn83, NewQn83, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, NewQn83, Qn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-82, + Qn82, NewQn82, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, NewQn82, Qn81}); +?REMOVE_UNIQ_P_Qn96(-81, + Qn81, NewQn81, + {Qn96, Qn95, Qn94, Qn93, Qn92, + Qn91, Qn90, Qn89, Qn88, Qn87, Qn86, + Qn85, Qn84, Qn83, Qn82, NewQn81}); +?REMOVE_UNIQ_P_Qn80(-80, + Qn80, NewQn80, + {NewQn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-79, + Qn79, NewQn79, + {Qn80, NewQn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-78, + Qn78, NewQn78, + {Qn80, Qn79, NewQn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-77, + Qn77, NewQn77, + {Qn80, Qn79, Qn78, NewQn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-76, + Qn76, NewQn76, + {Qn80, Qn79, Qn78, Qn77, NewQn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-75, + Qn75, NewQn75, + {Qn80, Qn79, Qn78, Qn77, Qn76, + NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-74, + Qn74, NewQn74, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-73, + Qn73, NewQn73, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-72, + Qn72, NewQn72, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-71, + Qn71, NewQn71, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-70, + Qn70, NewQn70, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70, + Qn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-69, + Qn69, NewQn69, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + NewQn69, Qn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-68, + Qn68, NewQn68, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, NewQn68, Qn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-67, + Qn67, NewQn67, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, NewQn67, Qn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-66, + Qn66, NewQn66, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, NewQn66, Qn65}); +?REMOVE_UNIQ_P_Qn80(-65, + Qn65, NewQn65, + {Qn80, Qn79, Qn78, Qn77, Qn76, + Qn75, Qn74, Qn73, Qn72, Qn71, Qn70, + Qn69, Qn68, Qn67, Qn66, NewQn65}); +?REMOVE_UNIQ_P_Qn64(-64, + Qn64, NewQn64, + {NewQn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-63, + Qn63, NewQn63, + {Qn64, NewQn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-62, + Qn62, NewQn62, + {Qn64, Qn63, NewQn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-61, + Qn61, NewQn61, + {Qn64, Qn63, Qn62, NewQn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-60, + Qn60, NewQn60, + {Qn64, Qn63, Qn62, Qn61, NewQn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-59, + Qn59, NewQn59, + {Qn64, Qn63, Qn62, Qn61, Qn60, + NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-58, + Qn58, NewQn58, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-57, + Qn57, NewQn57, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-56, + Qn56, NewQn56, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-55, + Qn55, NewQn55, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-54, + Qn54, NewQn54, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54, + Qn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-53, + Qn53, NewQn53, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + NewQn53, Qn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-52, + Qn52, NewQn52, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, NewQn52, Qn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-51, + Qn51, NewQn51, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, NewQn51, Qn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-50, + Qn50, NewQn50, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, NewQn50, Qn49}); +?REMOVE_UNIQ_P_Qn64(-49, + Qn49, NewQn49, + {Qn64, Qn63, Qn62, Qn61, Qn60, + Qn59, Qn58, Qn57, Qn56, Qn55, Qn54, + Qn53, Qn52, Qn51, Qn50, NewQn49}); +?REMOVE_UNIQ_P_Qn48(-48, + Qn48, NewQn48, + {NewQn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-47, + Qn47, NewQn47, + {Qn48, NewQn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-46, + Qn46, NewQn46, + {Qn48, Qn47, NewQn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-45, + Qn45, NewQn45, + {Qn48, Qn47, Qn46, NewQn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-44, + Qn44, NewQn44, + {Qn48, Qn47, Qn46, Qn45, NewQn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-43, + Qn43, NewQn43, + {Qn48, Qn47, Qn46, Qn45, Qn44, + NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-42, + Qn42, NewQn42, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-41, + Qn41, NewQn41, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-40, + Qn40, NewQn40, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-39, + Qn39, NewQn39, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-38, + Qn38, NewQn38, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38, + Qn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-37, + Qn37, NewQn37, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + NewQn37, Qn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-36, + Qn36, NewQn36, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, NewQn36, Qn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-35, + Qn35, NewQn35, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, NewQn35, Qn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-34, + Qn34, NewQn34, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, NewQn34, Qn33}); +?REMOVE_UNIQ_P_Qn48(-33, + Qn33, NewQn33, + {Qn48, Qn47, Qn46, Qn45, Qn44, + Qn43, Qn42, Qn41, Qn40, Qn39, Qn38, + Qn37, Qn36, Qn35, Qn34, NewQn33}); +?REMOVE_UNIQ_P_Qn32(-32, + Qn32, NewQn32, + {NewQn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-31, + Qn31, NewQn31, + {Qn32, NewQn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-30, + Qn30, NewQn30, + {Qn32, Qn31, NewQn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-29, + Qn29, NewQn29, + {Qn32, Qn31, Qn30, NewQn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-28, + Qn28, NewQn28, + {Qn32, Qn31, Qn30, Qn29, NewQn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-27, + Qn27, NewQn27, + {Qn32, Qn31, Qn30, Qn29, Qn28, + NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-26, + Qn26, NewQn26, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-25, + Qn25, NewQn25, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-24, + Qn24, NewQn24, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-23, + Qn23, NewQn23, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-22, + Qn22, NewQn22, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22, + Qn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-21, + Qn21, NewQn21, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + NewQn21, Qn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-20, + Qn20, NewQn20, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, NewQn20, Qn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-19, + Qn19, NewQn19, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, NewQn19, Qn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-18, + Qn18, NewQn18, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, NewQn18, Qn17}); +?REMOVE_UNIQ_P_Qn32(-17, + Qn17, NewQn17, + {Qn32, Qn31, Qn30, Qn29, Qn28, + Qn27, Qn26, Qn25, Qn24, Qn23, Qn22, + Qn21, Qn20, Qn19, Qn18, NewQn17}); +?REMOVE_UNIQ_P_Qn16(-16, + Qn16, NewQn16, + {NewQn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-15, + Qn15, NewQn15, + {Qn16, NewQn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-14, + Qn14, NewQn14, + {Qn16, Qn15, NewQn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-13, + Qn13, NewQn13, + {Qn16, Qn15, Qn14, NewQn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-12, + Qn12, NewQn12, + {Qn16, Qn15, Qn14, Qn13, NewQn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-11, + Qn11, NewQn11, + {Qn16, Qn15, Qn14, Qn13, Qn12, + NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-10, + Qn10, NewQn10, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-9, + Qn9, NewQn9, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-8, + Qn8, NewQn8, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-7, + Qn7, NewQn7, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-6, + Qn6, NewQn6, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6, + Qn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-5, + Qn5, NewQn5, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + NewQn5, Qn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-4, + Qn4, NewQn4, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, NewQn4, Qn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-3, + Qn3, NewQn3, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, NewQn3, Qn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-2, + Qn2, NewQn2, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, NewQn2, Qn1}); +?REMOVE_UNIQ_P_Qn16(-1, + Qn1, NewQn1, + {Qn16, Qn15, Qn14, Qn13, Qn12, + Qn11, Qn10, Qn9, Qn8, Qn7, Qn6, + Qn5, Qn4, Qn3, Qn2, NewQn1}); +remove_unique_p(0, F, + {Pc, + Size, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + Q0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) -> + {Value, NewQ0} = queue_remove_unique(F, Q0), + NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end, + {Value, + {if NewSize == 0 -> empty; true -> Pc end, + NewSize, + Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16, + NewQ0, + Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}; +?REMOVE_UNIQ_P_Qp16(1, + Qp1, NewQp1, + {NewQp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(2, + Qp2, NewQp2, + {Qp1, NewQp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(3, + Qp3, NewQp3, + {Qp1, Qp2, NewQp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(4, + Qp4, NewQp4, + {Qp1, Qp2, Qp3, NewQp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(5, + Qp5, NewQp5, + {Qp1, Qp2, Qp3, Qp4, NewQp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(6, + Qp6, NewQp6, + {Qp1, Qp2, Qp3, Qp4, Qp5, + NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(7, + Qp7, NewQp7, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(8, + Qp8, NewQp8, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(9, + Qp9, NewQp9, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(10, + Qp10, NewQp10, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(11, + Qp11, NewQp11, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11, + Qp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(12, + Qp12, NewQp12, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + NewQp12, Qp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(13, + Qp13, NewQp13, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, NewQp13, Qp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(14, + Qp14, NewQp14, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, NewQp14, Qp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(15, + Qp15, NewQp15, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, NewQp15, Qp16}); +?REMOVE_UNIQ_P_Qp16(16, + Qp16, NewQp16, + {Qp1, Qp2, Qp3, Qp4, Qp5, + Qp6, Qp7, Qp8, Qp9, Qp10, Qp11, + Qp12, Qp13, Qp14, Qp15, NewQp16}); +?REMOVE_UNIQ_P_Qp32(17, + Qp17, NewQp17, + {NewQp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(18, + Qp18, NewQp18, + {Qp17, NewQp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(19, + Qp19, NewQp19, + {Qp17, Qp18, NewQp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(20, + Qp20, NewQp20, + {Qp17, Qp18, Qp19, NewQp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(21, + Qp21, NewQp21, + {Qp17, Qp18, Qp19, Qp20, NewQp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(22, + Qp22, NewQp22, + {Qp17, Qp18, Qp19, Qp20, Qp21, + NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(23, + Qp23, NewQp23, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(24, + Qp24, NewQp24, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(25, + Qp25, NewQp25, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(26, + Qp26, NewQp26, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(27, + Qp27, NewQp27, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27, + Qp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(28, + Qp28, NewQp28, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + NewQp28, Qp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(29, + Qp29, NewQp29, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, NewQp29, Qp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(30, + Qp30, NewQp30, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, NewQp30, Qp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(31, + Qp31, NewQp31, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, NewQp31, Qp32}); +?REMOVE_UNIQ_P_Qp32(32, + Qp32, NewQp32, + {Qp17, Qp18, Qp19, Qp20, Qp21, + Qp22, Qp23, Qp24, Qp25, Qp26, Qp27, + Qp28, Qp29, Qp30, Qp31, NewQp32}); +?REMOVE_UNIQ_P_Qp48(33, + Qp33, NewQp33, + {NewQp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(34, + Qp34, NewQp34, + {Qp33, NewQp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(35, + Qp35, NewQp35, + {Qp33, Qp34, NewQp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(36, + Qp36, NewQp36, + {Qp33, Qp34, Qp35, NewQp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(37, + Qp37, NewQp37, + {Qp33, Qp34, Qp35, Qp36, NewQp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(38, + Qp38, NewQp38, + {Qp33, Qp34, Qp35, Qp36, Qp37, + NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(39, + Qp39, NewQp39, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(40, + Qp40, NewQp40, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(41, + Qp41, NewQp41, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(42, + Qp42, NewQp42, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(43, + Qp43, NewQp43, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43, + Qp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(44, + Qp44, NewQp44, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + NewQp44, Qp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(45, + Qp45, NewQp45, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, NewQp45, Qp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(46, + Qp46, NewQp46, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, NewQp46, Qp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(47, + Qp47, NewQp47, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, NewQp47, Qp48}); +?REMOVE_UNIQ_P_Qp48(48, + Qp48, NewQp48, + {Qp33, Qp34, Qp35, Qp36, Qp37, + Qp38, Qp39, Qp40, Qp41, Qp42, Qp43, + Qp44, Qp45, Qp46, Qp47, NewQp48}); +?REMOVE_UNIQ_P_Qp64(49, + Qp49, NewQp49, + {NewQp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(50, + Qp50, NewQp50, + {Qp49, NewQp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(51, + Qp51, NewQp51, + {Qp49, Qp50, NewQp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(52, + Qp52, NewQp52, + {Qp49, Qp50, Qp51, NewQp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(53, + Qp53, NewQp53, + {Qp49, Qp50, Qp51, Qp52, NewQp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(54, + Qp54, NewQp54, + {Qp49, Qp50, Qp51, Qp52, Qp53, + NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(55, + Qp55, NewQp55, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(56, + Qp56, NewQp56, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(57, + Qp57, NewQp57, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(58, + Qp58, NewQp58, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(59, + Qp59, NewQp59, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59, + Qp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(60, + Qp60, NewQp60, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + NewQp60, Qp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(61, + Qp61, NewQp61, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, NewQp61, Qp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(62, + Qp62, NewQp62, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, NewQp62, Qp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(63, + Qp63, NewQp63, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, NewQp63, Qp64}); +?REMOVE_UNIQ_P_Qp64(64, + Qp64, NewQp64, + {Qp49, Qp50, Qp51, Qp52, Qp53, + Qp54, Qp55, Qp56, Qp57, Qp58, Qp59, + Qp60, Qp61, Qp62, Qp63, NewQp64}); +?REMOVE_UNIQ_P_Qp80(65, + Qp65, NewQp65, + {NewQp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(66, + Qp66, NewQp66, + {Qp65, NewQp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(67, + Qp67, NewQp67, + {Qp65, Qp66, NewQp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(68, + Qp68, NewQp68, + {Qp65, Qp66, Qp67, NewQp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(69, + Qp69, NewQp69, + {Qp65, Qp66, Qp67, Qp68, NewQp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(70, + Qp70, NewQp70, + {Qp65, Qp66, Qp67, Qp68, Qp69, + NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(71, + Qp71, NewQp71, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(72, + Qp72, NewQp72, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(73, + Qp73, NewQp73, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(74, + Qp74, NewQp74, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(75, + Qp75, NewQp75, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75, + Qp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(76, + Qp76, NewQp76, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + NewQp76, Qp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(77, + Qp77, NewQp77, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, NewQp77, Qp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(78, + Qp78, NewQp78, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, NewQp78, Qp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(79, + Qp79, NewQp79, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, NewQp79, Qp80}); +?REMOVE_UNIQ_P_Qp80(80, + Qp80, NewQp80, + {Qp65, Qp66, Qp67, Qp68, Qp69, + Qp70, Qp71, Qp72, Qp73, Qp74, Qp75, + Qp76, Qp77, Qp78, Qp79, NewQp80}); +?REMOVE_UNIQ_P_Qp96(81, + Qp81, NewQp81, + {NewQp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(82, + Qp82, NewQp82, + {Qp81, NewQp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(83, + Qp83, NewQp83, + {Qp81, Qp82, NewQp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(84, + Qp84, NewQp84, + {Qp81, Qp82, Qp83, NewQp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(85, + Qp85, NewQp85, + {Qp81, Qp82, Qp83, Qp84, NewQp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(86, + Qp86, NewQp86, + {Qp81, Qp82, Qp83, Qp84, Qp85, + NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(87, + Qp87, NewQp87, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(88, + Qp88, NewQp88, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(89, + Qp89, NewQp89, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(90, + Qp90, NewQp90, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(91, + Qp91, NewQp91, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91, + Qp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(92, + Qp92, NewQp92, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + NewQp92, Qp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(93, + Qp93, NewQp93, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, NewQp93, Qp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(94, + Qp94, NewQp94, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, NewQp94, Qp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(95, + Qp95, NewQp95, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, NewQp95, Qp96}); +?REMOVE_UNIQ_P_Qp96(96, + Qp96, NewQp96, + {Qp81, Qp82, Qp83, Qp84, Qp85, + Qp86, Qp87, Qp88, Qp89, Qp90, Qp91, + Qp92, Qp93, Qp94, Qp95, NewQp96}); +?REMOVE_UNIQ_P_Qp112(97, + Qp97, NewQp97, + {NewQp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(98, + Qp98, NewQp98, + {Qp97, NewQp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(99, + Qp99, NewQp99, + {Qp97, Qp98, NewQp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(100, + Qp100, NewQp100, + {Qp97, Qp98, Qp99, NewQp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(101, + Qp101, NewQp101, + {Qp97, Qp98, Qp99, Qp100, NewQp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(102, + Qp102, NewQp102, + {Qp97, Qp98, Qp99, Qp100, Qp101, + NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(103, + Qp103, NewQp103, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(104, + Qp104, NewQp104, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(105, + Qp105, NewQp105, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(106, + Qp106, NewQp106, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(107, + Qp107, NewQp107, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107, + Qp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(108, + Qp108, NewQp108, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + NewQp108, Qp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(109, + Qp109, NewQp109, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, NewQp109, Qp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(110, + Qp110, NewQp110, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, NewQp110, Qp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(111, + Qp111, NewQp111, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, NewQp111, Qp112}); +?REMOVE_UNIQ_P_Qp112(112, + Qp112, NewQp112, + {Qp97, Qp98, Qp99, Qp100, Qp101, + Qp102, Qp103, Qp104, Qp105, Qp106, Qp107, + Qp108, Qp109, Qp110, Qp111, NewQp112}); +?REMOVE_UNIQ_P_Qp128(113, + Qp113, NewQp113, + {NewQp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(114, + Qp114, NewQp114, + {Qp113, NewQp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(115, + Qp115, NewQp115, + {Qp113, Qp114, NewQp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(116, + Qp116, NewQp116, + {Qp113, Qp114, Qp115, NewQp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(117, + Qp117, NewQp117, + {Qp113, Qp114, Qp115, Qp116, NewQp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(118, + Qp118, NewQp118, + {Qp113, Qp114, Qp115, Qp116, Qp117, + NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(119, + Qp119, NewQp119, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(120, + Qp120, NewQp120, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(121, + Qp121, NewQp121, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(122, + Qp122, NewQp122, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(123, + Qp123, NewQp123, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123, + Qp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(124, + Qp124, NewQp124, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + NewQp124, Qp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(125, + Qp125, NewQp125, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, NewQp125, Qp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(126, + Qp126, NewQp126, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, NewQp126, Qp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(127, + Qp127, NewQp127, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, NewQp127, Qp128}); +?REMOVE_UNIQ_P_Qp128(128, + Qp128, NewQp128, + {Qp113, Qp114, Qp115, Qp116, Qp117, + Qp118, Qp119, Qp120, Qp121, Qp122, Qp123, + Qp124, Qp125, Qp126, Qp127, NewQp128}). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). + +-include("pqueue_test.hrl"). + +module_test_() -> + {timeout, ?TEST_TIMEOUT, [ + {"internal tests", ?_assertOk(test())} + ]}. + +long_test_() -> + test_condition([ + {"proper tests", ?_assert(pqueue_proper:qc_pq4())} + ], ?CLOUDI_LONG_TEST_TIMEOUT). + +-endif. + +%%------------------------------------------------------------------------- +%% @hidden +%% remove a unique value from a queue based on a binary predicate, +%% traversal order is undefined to keep it efficient (i.e., shouldn't matter) +%% (based on the implementation of queue:filter/2 +%% which is under the Apache License 2.0) +%%------------------------------------------------------------------------- + +-spec queue_remove_unique(F :: fun((any()) -> boolean()), + Q :: {list(), list()}) -> + {boolean(), {list(), list()}}. + +queue_remove_unique(Fun, {R0, F0} = Q) + when is_function(Fun, 1), is_list(R0), is_list(F0) -> + case queue_remove_unique_f(Fun, F0) of + {true, []} -> + {true, queue_r2f(R0)}; + {true, F1} -> + {true, {R0, F1}}; + {false, F1} -> + %true = F1 == F0, + case queue_remove_unique_f(Fun, R0) of % backwards + {true, []} -> + {true, queue_f2r(F1)}; + {true, R1} -> + {true, {R1, F1}}; + {false, _} -> + {false, Q} + end + end; +queue_remove_unique(Fun, Q) -> + erlang:error(badarg, [Fun,Q]). + +% Call Fun in front to back order +queue_remove_unique_f(_, [] = F) -> + {false, F}; +queue_remove_unique_f(Fun, F) -> + queue_remove_unique_f(F, [], F, Fun). + +queue_remove_unique_f([], _, F, _) -> + {false, F}; +queue_remove_unique_f([X | F0], F1, F, Fun) -> + case Fun(X) of + true -> + {true, lists:reverse(F1, F0)}; + false -> + queue_remove_unique_f(F0, [X | F1], F, Fun) + end. + +-compile({inline, [{queue_r2f,1},{queue_f2r,1}]}). + +% Move half of elements from R to F, if there are at least three +queue_r2f([]) -> + {[],[]}; +queue_r2f([_]=R) -> + {[],R}; +queue_r2f([X,Y]) -> + {[X],[Y]}; +queue_r2f(List) -> + {FF,RR} = lists:split(length(List) div 2 + 1, List), + {FF,lists:reverse(RR, [])}. + +% Move half of elements from F to R, if there are enough +queue_f2r([]) -> + {[],[]}; +queue_f2r([_]=F) -> + {F,[]}; +queue_f2r([X,Y]) -> + {[Y],[X]}; +queue_f2r(List) -> + {FF,RR} = lists:split(length(List) div 2 + 1, List), + {lists:reverse(RR, []),FF}. + diff --git a/aoc2023/build/packages/pqueue/src/pqueue_test.hrl b/aoc2023/build/packages/pqueue/src/pqueue_test.hrl new file mode 100644 index 0000000..cedffe0 --- /dev/null +++ b/aoc2023/build/packages/pqueue/src/pqueue_test.hrl @@ -0,0 +1,49 @@ +%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*- +% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod: +%%% +%%%------------------------------------------------------------------------ +%%% pqueue eunit common functionality +%%% +%%% MIT License +%%% +%%% Copyright (c) 2020 Michael Truog <mjtruog at protonmail dot com> +%%% +%%% Permission is hereby granted, free of charge, to any person obtaining a +%%% copy of this software and associated documentation files (the "Software"), +%%% to deal in the Software without restriction, including without limitation +%%% the rights to use, copy, modify, merge, publish, distribute, sublicense, +%%% and/or sell copies of the Software, and to permit persons to whom the +%%% Software is furnished to do so, subject to the following conditions: +%%% +%%% The above copyright notice and this permission notice shall be included in +%%% all copies or substantial portions of the Software. +%%% +%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +%%% DEALINGS IN THE SOFTWARE. +%%% +%%%------------------------------------------------------------------------ + +-ifndef(_assertOk). +-define(_assertOk(Expr), ?_assertEqual(ok, Expr)). +-endif. + +-ifdef(CLOUDI_TEST_TIMEOUT). +-define(TEST_TIMEOUT, ?CLOUDI_TEST_TIMEOUT). % seconds +-else. +-define(TEST_TIMEOUT, 10). % seconds +-endif. +-ifndef(CLOUDI_LONG_TEST_TIMEOUT). +-define(CLOUDI_LONG_TEST_TIMEOUT, 60). % minutes +-endif. + +test_condition(_, 0) -> + []; +test_condition(L, LongTestTimeout) + when LongTestTimeout > 0 -> + {timeout, LongTestTimeout * 60, L}. + diff --git a/aoc2023/build/packages/pqueue/test/pqueue_proper.erl b/aoc2023/build/packages/pqueue/test/pqueue_proper.erl new file mode 100644 index 0000000..6702960 --- /dev/null +++ b/aoc2023/build/packages/pqueue/test/pqueue_proper.erl @@ -0,0 +1,156 @@ +-module(pqueue_proper). +-ifdef(TEST). +-include_lib("proper/include/proper.hrl"). + +-behaviour(proper_statem). + +-export([qc_pq/0, qc_pq2/0, qc_pq3/0, qc_pq4/0, correct/1]). + +-export([command/1, initial_state/0, next_state/3, postcondition/3, + precondition/2]). + +-type value() :: integer(). +-record(state, { in_queue :: [{value(), term()}] }). +-define(SERVER, queue_srv). + +priority() -> + integer(-20, 20). + +%% Selects priorities we have added +priority(InQ) -> + elements([P || {P, _} <- InQ]). + +value() -> + integer(). + +initial_state() -> + #state { in_queue = [] }. + +command(#state { in_queue = InQ }) -> + oneof([{call, ?SERVER, in, [value()]}, + {call, ?SERVER, in, [value(), priority()]}, + {call, ?SERVER, is_empty, []}, + {call, ?SERVER, is_queue, []}, + {call, ?SERVER, len, []}, + {call, ?SERVER, out, []}] ++ + [{call, ?SERVER, out, [priority(InQ)]} || InQ =/= []] ++ + [{call, ?SERVER, pout, []}, + {call, ?SERVER, to_list, []}]). + +next_state(#state { in_queue = InQ } = S, _V, {call, _, out, []}) -> + S#state { in_queue = listq_rem(InQ) }; +next_state(#state { in_queue = InQ } = S, _V, {call, _, out, [Prio]}) -> + S#state { in_queue = listq_rem(InQ, Prio) }; +next_state(#state { in_queue = InQ } = S, _V, {call, _, pout, _}) -> + S#state { in_queue = listq_rem(InQ) }; +next_state(S, _V, {call, _, to_list, _}) -> S; +next_state(S, _V, {call, _, is_queue, _}) -> S; +next_state(S, _V, {call, _, is_empty, _}) -> S; +next_state(S, _V, {call, _, len, _}) -> S; +next_state(#state { in_queue = InQ } = S, _V, {call, _, in, [Value, Prio]}) -> + S#state { in_queue = listq_insert({Prio, Value}, InQ) }; +next_state(#state { in_queue = InQ } = S, _V, {call, _, in, [Value]}) -> + S#state { in_queue = listq_insert({0, Value}, InQ) }. + +precondition(_S, _Call) -> + true. % No limitation on the things we can call at all. + +postcondition(#state { in_queue = InQ }, {call, _, out, [Prio]}, R) -> + R == listq_prio_peek(InQ, Prio); +postcondition(#state { in_queue = InQ }, {call, _, pout, _}, R) -> + R == listq_ppeek(InQ); +postcondition(#state { in_queue = InQ }, {call, _, out, _}, R) -> + R == listq_peek(InQ); +postcondition(S, {call, _, to_list, _}, R) -> + R == listq_to_list(S#state.in_queue); +postcondition(S, {call, _, len, _}, L) -> + L == listq_length(S#state.in_queue); +postcondition(_S, {call, _, is_queue, _}, true) -> true; +postcondition(S, {call, _, is_empty, _}, Res) -> + Res == (S#state.in_queue == []); +postcondition(_S, {call, _, in, _}, _) -> + true; +postcondition(_, _, _) -> + false. + +correct(M) -> + ?FORALL(Cmds, commands(?MODULE), + ?TRAPEXIT( + begin + ?SERVER:start_link(M), + {History,State,Result} = run_commands(?MODULE, Cmds), + ?SERVER:stop(), + ?WHENFAIL(io:format("History: ~w\nState: ~w\nResult: ~w\n", + [History,State,Result]), + aggregate(command_names(Cmds), Result =:= ok)) + end)). + +qc_opts() -> + [{numtests, 10000}]. + +qc_pq() -> + proper:quickcheck(pqueue_proper:correct(pqueue), qc_opts()). + +qc_pq2() -> + proper:quickcheck(pqueue_proper:correct(pqueue2), qc_opts()). + +qc_pq3() -> + proper:quickcheck(pqueue_proper:correct(pqueue3), qc_opts()). + +qc_pq4() -> + proper:quickcheck(pqueue_proper:correct(pqueue4), qc_opts()). + +%% ---------------------------------------------------------------------- + +%% A listq is a sorted list of priorities +listq_insert({P, V}, []) -> + [{P, [V]}]; +listq_insert({P, V}, [{P1, _} | _] = LQ) when P < P1 -> + [{P, [V]} | LQ]; +listq_insert({P, V}, [{P1, Vs} | Next]) when P == P1 -> + [{P, Vs ++ [V]} | Next]; +listq_insert({P, V}, [{P1, Vs} | Next]) when P > P1 -> + [{P1, Vs} | listq_insert({P, V}, Next)]. + +listq_to_list(L) -> + lists:concat( + [ Vals || {_Prio, Vals} <- L]). + +listq_length(L) -> + lists:sum( + [ length(Vs) || {_Prio, Vs} <- L]). + +listq_rem([]) -> + []; +listq_rem([{_P, [_V]} | Next]) -> + Next; +listq_rem([{P, [_V1 | Vs]} | Next]) -> + [{P, Vs} | Next]. + +listq_rem([], _P) -> + []; +listq_rem([{P, [_]} | Next], P) -> + Next; +listq_rem([{P, [_ | Vs]} | Next], P) -> + [{P, Vs} | Next]; +listq_rem([{P1, Vs} | Next], P) -> + [{P1, Vs} | listq_rem(Next, P)]. + +listq_peek([]) -> + empty; +listq_peek([{_P, [V | _]} | _]) -> + {value, V}. + +listq_prio_peek([{P, [V | _]} | _], P) -> + {value, V}; +listq_prio_peek([{_P1, _} | Next], P) -> + listq_prio_peek(Next, P); +listq_prio_peek([], _P) -> + empty. + +listq_ppeek([]) -> + empty; +listq_ppeek([{P, [V | _]} | _]) -> + {value, V, P}. + +-endif. diff --git a/aoc2023/build/packages/pqueue/test/queue_srv.erl b/aoc2023/build/packages/pqueue/test/queue_srv.erl new file mode 100644 index 0000000..7fcb0a1 --- /dev/null +++ b/aoc2023/build/packages/pqueue/test/queue_srv.erl @@ -0,0 +1,183 @@ +%%%------------------------------------------------------------------- +%%% @author Jesper Louis andersen <> +%%% @copyright (C) 2011, Jesper Louis andersen +%%% @doc +%%% +%%% @end +%%% Created : 11 Nov 2011 by Jesper Louis andersen <> +%%%------------------------------------------------------------------- +-module(queue_srv). + +-behaviour(gen_server). + +%% API +-export([start_link/1, stop/0, len/0, in/1, in/2, is_empty/0, + out/0, out/1, pout/0, + is_queue/0, to_list/0]). + +%% gen_server callbacks +-export([init/1, handle_call/3, handle_cast/2, handle_info/2, + terminate/2, code_change/3]). + +-define(SERVER, ?MODULE). + +-record(state, { mod, q }). + +%%%=================================================================== +%%% API +%%%=================================================================== + +%%-------------------------------------------------------------------- +%% @doc +%% Starts the server +%% +%% @spec start_link(Mod) -> {ok, Pid} | ignore | {error, Error} +%% @end +%%-------------------------------------------------------------------- +start_link(Mod) -> + gen_server:start_link({local, ?SERVER}, ?MODULE, [Mod], []). + +stop() -> + gen_server:stop(?SERVER). + +call(M) -> + gen_server:call(?SERVER, M, infinity). + +in(I) -> + call({in, I}). + +in(I, P) -> + call({in, I, P}). + +len() -> + call(len). + +is_empty() -> + call(is_empty). + +is_queue() -> + call(is_queue). + +to_list() -> + call(to_list). + +out() -> + call(out). + +out(P) -> + call({out, P}). + +pout() -> + call(pout). + +%%%=================================================================== +%%% gen_server callbacks +%%%=================================================================== + +%%-------------------------------------------------------------------- +%% @private +%% @doc +%% Initializes the server +%% +%% @spec init(Args) -> {ok, State} | +%% {ok, State, Timeout} | +%% ignore | +%% {stop, Reason} +%% @end +%%-------------------------------------------------------------------- +init([Mod]) -> + {ok, #state{ mod = Mod, + q = Mod:new() }}. + +%%-------------------------------------------------------------------- +%% @private +%% @doc +%% Handling call messages +%% +%% @spec handle_call(Request, From, State) -> +%% {reply, Reply, State} | +%% {reply, Reply, State, Timeout} | +%% {noreply, State} | +%% {noreply, State, Timeout} | +%% {stop, Reason, Reply, State} | +%% {stop, Reason, State} +%% @end +%%-------------------------------------------------------------------- +handle_call({in, Item}, _F, #state { q = Q, mod = M } = S) -> + NQ = M:in(Item, Q), + {reply, ok, S#state { q = NQ }}; +handle_call({in, Item, Prio}, _F, #state { q = Q, mod = M } = S) -> + NQ = M:in(Item, Prio, Q), + {reply, ok, S#state { q = NQ }}; +handle_call({out, P}, _F, #state { q = Q, mod = M } = S) -> + {R, NQ} = M:out(P, Q), + {reply, R, S#state { q = NQ }}; +handle_call(Ty, _F, #state { q = Q, mod = M } = S) when Ty == out; + Ty == pout -> + {R, NQ} = M:Ty(Q), + {reply, R, S#state { q = NQ }}; +handle_call(Ty, _F, #state { q = Q, mod = M } = S) when Ty == is_queue; + Ty == is_empty; + Ty == len; + Ty == to_list -> + R = M:Ty(Q), + {reply, R, S}; +handle_call(Req, From, State) -> + error_logger:info_report([{handle_call, Req, From, State}]), + Reply = ok, + {reply, Reply, State}. + +%%-------------------------------------------------------------------- +%% @private +%% @doc +%% Handling cast messages +%% +%% @spec handle_cast(Msg, State) -> {noreply, State} | +%% {noreply, State, Timeout} | +%% {stop, Reason, State} +%% @end +%%-------------------------------------------------------------------- +handle_cast(_Msg, State) -> + {noreply, State}. + +%%-------------------------------------------------------------------- +%% @private +%% @doc +%% Handling all non call/cast messages +%% +%% @spec handle_info(Info, State) -> {noreply, State} | +%% {noreply, State, Timeout} | +%% {stop, Reason, State} +%% @end +%%-------------------------------------------------------------------- +handle_info(_Info, State) -> + {noreply, State}. + +%%-------------------------------------------------------------------- +%% @private +%% @doc +%% This function is called by a gen_server when it is about to +%% terminate. It should be the opposite of Module:init/1 and do any +%% necessary cleaning up. When it returns, the gen_server terminates +%% with Reason. The return value is ignored. +%% +%% @spec terminate(Reason, State) -> void() +%% @end +%%-------------------------------------------------------------------- +terminate(_Reason, _State) -> + ok. + +%%-------------------------------------------------------------------- +%% @private +%% @doc +%% Convert process state when code is changed +%% +%% @spec code_change(OldVsn, State, Extra) -> {ok, NewState} +%% @end +%%-------------------------------------------------------------------- +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +%%%=================================================================== +%%% Internal functions +%%%=================================================================== diff --git a/aoc2023/build/packages/simplifile/README.md b/aoc2023/build/packages/simplifile/README.md new file mode 100644 index 0000000..5e49113 --- /dev/null +++ b/aoc2023/build/packages/simplifile/README.md @@ -0,0 +1,29 @@ +# simplifile + +[](https://hex.pm/packages/simplifile) +[](https://hexdocs.pm/simplifile/) + +Simplifile provides basic file operations (read, write, append, and delete) that work +for all targets (Erlang, Node, and Deno). It also provides functions for working with directories. + +Note: When upgrading versions, be sure to check the changelog. + +## Example +```gleam +let filepath = "./test/hello.txt" +let assert Ok(_) = "Hello, World" |> write(to: filepath) +let assert Ok(_) = "Goodbye, Mars" |> append(to: filepath) +let assert Ok("Hello, WorldGoodbye, Mars") = read(from: filepath) +let assert Ok(_) = delete(filepath) +let assert Error(_) = read(from: filepath) +``` + +## Installation + +If available on Hex this package can be added to your Gleam project: + +```sh +gleam add simplifile +``` + +and its documentation can be found at <https://hexdocs.pm/simplifile>. diff --git a/aoc2023/build/packages/simplifile/gleam.toml b/aoc2023/build/packages/simplifile/gleam.toml new file mode 100644 index 0000000..8e7523d --- /dev/null +++ b/aoc2023/build/packages/simplifile/gleam.toml @@ -0,0 +1,17 @@ +name = "simplifile" +version = "1.0.0" +description = "Basic file operations that work on all targets" + +licences = ["Apache-2.0"] +repository = { type = "github", user = "bcpeinhardt", repo = "simplifile" } +gleam = ">= 0.32.0" +# links = [{ title = "Website", href = "https://gleam.run" }] + +[javascript.deno] +allow_all = true + +[dependencies] +gleam_stdlib = "~> 0.29" + +[dev-dependencies] +gleeunit = "~> 1.0" diff --git a/aoc2023/build/packages/simplifile/src/simplifile.app.src b/aoc2023/build/packages/simplifile/src/simplifile.app.src new file mode 100644 index 0000000..5b9d6ef --- /dev/null +++ b/aoc2023/build/packages/simplifile/src/simplifile.app.src @@ -0,0 +1,8 @@ +{application, simplifile, [ + {vsn, "1.0.0"}, + {applications, [gleam_stdlib, + gleeunit]}, + {description, "Basic file operations that work on all targets"}, + {modules, [simplifile]}, + {registered, []} +]}. diff --git a/aoc2023/build/packages/simplifile/src/simplifile.erl b/aoc2023/build/packages/simplifile/src/simplifile.erl new file mode 100644 index 0000000..0d3818c --- /dev/null +++ b/aoc2023/build/packages/simplifile/src/simplifile.erl @@ -0,0 +1,287 @@ +-module(simplifile). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([read/1, write/2, delete/1, delete_all/1, append/2, read_bits/1, write_bits/2, append_bits/2, is_directory/1, create_directory/1, read_directory/1, is_file/1, create_file/1, get_files/1, create_directory_all/1, copy_directory/2, rename_directory/2, copy_file/2, rename_file/2]). +-export_type([file_error/0]). + +-type file_error() :: eacces | + eagain | + ebadf | + ebadmsg | + ebusy | + edeadlk | + edeadlock | + edquot | + eexist | + efault | + efbig | + eftype | + eintr | + einval | + eio | + eisdir | + eloop | + emfile | + emlink | + emultihop | + enametoolong | + enfile | + enobufs | + enodev | + enolck | + enolink | + enoent | + enomem | + enospc | + enosr | + enostr | + enosys | + enotblk | + enotdir | + enotsup | + enxio | + eopnotsupp | + eoverflow | + eperm | + epipe | + erange | + erofs | + espipe | + esrch | + estale | + etxtbsy | + exdev | + not_utf8 | + unknown. + +-spec do_append(binary(), binary()) -> {ok, nil} | {error, file_error()}. +do_append(Content, Filepath) -> + _pipe = Content, + _pipe@1 = gleam_stdlib:identity(_pipe), + simplifile_erl:append_file(_pipe@1, Filepath). + +-spec do_write(binary(), binary()) -> {ok, nil} | {error, file_error()}. +do_write(Content, Filepath) -> + _pipe = Content, + _pipe@1 = gleam_stdlib:identity(_pipe), + simplifile_erl:write_file(_pipe@1, Filepath). + +-spec do_read(binary()) -> {ok, binary()} | {error, file_error()}. +do_read(Filepath) -> + case simplifile_erl:read_file(Filepath) of + {ok, Bits} -> + case gleam@bit_array:to_string(Bits) of + {ok, Str} -> + {ok, Str}; + + _ -> + {error, not_utf8} + end; + + {error, E} -> + {error, E} + end. + +-spec cast_error({ok, FIL} | {error, file_error()}) -> {ok, FIL} | + {error, file_error()}. +cast_error(Input) -> + Input. + +-spec read(binary()) -> {ok, binary()} | {error, file_error()}. +read(Filepath) -> + _pipe = do_read(Filepath), + cast_error(_pipe). + +-spec write(binary(), binary()) -> {ok, nil} | {error, file_error()}. +write(Filepath, Contents) -> + _pipe = do_write(Contents, Filepath), + cast_error(_pipe). + +-spec delete(binary()) -> {ok, nil} | {error, file_error()}. +delete(Path) -> + _pipe = simplifile_erl:recursive_delete(Path), + cast_error(_pipe). + +-spec delete_all(list(binary())) -> {ok, nil} | {error, file_error()}. +delete_all(Paths) -> + case Paths of + [] -> + {ok, nil}; + + [Path | Rest] -> + case delete(Path) of + {ok, nil} -> + delete_all(Rest); + + {error, enoent} -> + delete_all(Rest); + + E -> + E + end + end. + +-spec append(binary(), binary()) -> {ok, nil} | {error, file_error()}. +append(Filepath, Contents) -> + _pipe = do_append(Contents, Filepath), + cast_error(_pipe). + +-spec read_bits(binary()) -> {ok, bitstring()} | {error, file_error()}. +read_bits(Filepath) -> + _pipe = simplifile_erl:read_file(Filepath), + cast_error(_pipe). + +-spec write_bits(binary(), bitstring()) -> {ok, nil} | {error, file_error()}. +write_bits(Filepath, Bits) -> + _pipe = simplifile_erl:write_file(Bits, Filepath), + cast_error(_pipe). + +-spec append_bits(binary(), bitstring()) -> {ok, nil} | {error, file_error()}. +append_bits(Filepath, Bits) -> + _pipe = simplifile_erl:append_file(Bits, Filepath), + cast_error(_pipe). + +-spec is_directory(binary()) -> boolean(). +is_directory(Filepath) -> + filelib:is_dir(Filepath). + +-spec create_directory(binary()) -> {ok, nil} | {error, file_error()}. +create_directory(Filepath) -> + _pipe = simplifile_erl:make_directory(Filepath), + cast_error(_pipe). + +-spec read_directory(binary()) -> {ok, list(binary())} | {error, file_error()}. +read_directory(Path) -> + _pipe = simplifile_erl:list_directory(Path), + cast_error(_pipe). + +-spec is_file(binary()) -> boolean(). +is_file(Filepath) -> + simplifile_erl:is_file(Filepath). + +-spec create_file(binary()) -> {ok, nil} | {error, file_error()}. +create_file(Filepath) -> + case begin + _pipe = Filepath, + is_file(_pipe) + end + orelse begin + _pipe@1 = Filepath, + is_directory(_pipe@1) + end of + true -> + {error, eexist}; + + false -> + write_bits(Filepath, <<>>) + end. + +-spec do_copy_directory(binary(), binary()) -> {ok, nil} | {error, file_error()}. +do_copy_directory(Src, Dest) -> + gleam@result:'try'( + read_directory(Src), + fun(Segments) -> + _pipe = Segments, + gleam@list:each( + _pipe, + fun(Segment) -> + Src_path = <<<<Src/binary, "/"/utf8>>/binary, + Segment/binary>>, + Dest_path = <<<<Dest/binary, "/"/utf8>>/binary, + Segment/binary>>, + case {is_file(Src_path), is_directory(Src_path)} of + {true, false} -> + gleam@result:'try'( + read_bits(Src_path), + fun(Content) -> _pipe@1 = Content, + write_bits(Dest_path, _pipe@1) end + ); + + {false, true} -> + gleam@result:'try'( + create_directory(Dest_path), + fun(_) -> + do_copy_directory(Src_path, Dest_path) + end + ); + + {_, _} -> + erlang:error(#{gleam_error => panic, + message => <<"unreachable"/utf8>>, + module => <<"simplifile"/utf8>>, + function => <<"do_copy_directory"/utf8>>, + line => 341}) + end + end + ), + {ok, nil} + end + ). + +-spec get_files(binary()) -> {ok, list(binary())} | {error, file_error()}. +get_files(Directory) -> + gleam@result:'try'( + read_directory(Directory), + fun(Contents) -> + Paths = gleam@list:map( + Contents, + fun(Segment) -> + <<<<Directory/binary, "/"/utf8>>/binary, Segment/binary>> + end + ), + Files = gleam@list:filter(Paths, fun is_file/1), + case gleam@list:filter(Paths, fun is_directory/1) of + [] -> + {ok, Files}; + + Directories -> + gleam@result:'try'( + gleam@list:try_map(Directories, fun get_files/1), + fun(Nested_files) -> + {ok, + gleam@list:append( + Files, + gleam@list:flatten(Nested_files) + )} + end + ) + end + end + ). + +-spec create_directory_all(binary()) -> {ok, nil} | {error, file_error()}. +create_directory_all(Dirpath) -> + Path = case begin + _pipe = Dirpath, + gleam@string:ends_with(_pipe, <<"/"/utf8>>) + end of + true -> + Dirpath; + + false -> + <<Dirpath/binary, "/"/utf8>> + end, + _pipe@1 = simplifile_erl:create_dir_all(Path), + cast_error(_pipe@1). + +-spec copy_directory(binary(), binary()) -> {ok, nil} | {error, file_error()}. +copy_directory(Src, Dest) -> + gleam@result:'try'( + create_directory_all(Dest), + fun(_) -> do_copy_directory(Src, Dest) end + ). + +-spec rename_directory(binary(), binary()) -> {ok, nil} | {error, file_error()}. +rename_directory(Src, Dest) -> + gleam@result:'try'(copy_directory(Src, Dest), fun(_) -> delete(Src) end). + +-spec copy_file(binary(), binary()) -> {ok, nil} | {error, file_error()}. +copy_file(Src, Dest) -> + _pipe = file:copy(Src, Dest), + _pipe@1 = gleam@result:replace(_pipe, nil), + cast_error(_pipe@1). + +-spec rename_file(binary(), binary()) -> {ok, nil} | {error, file_error()}. +rename_file(Src, Dest) -> + _pipe = simplifile_erl:rename_file(Src, Dest), + cast_error(_pipe). diff --git a/aoc2023/build/packages/simplifile/src/simplifile.gleam b/aoc2023/build/packages/simplifile/src/simplifile.gleam new file mode 100644 index 0000000..eff0306 --- /dev/null +++ b/aoc2023/build/packages/simplifile/src/simplifile.gleam @@ -0,0 +1,580 @@ +import gleam/bit_array +import gleam/string +import gleam/result +import gleam/list + +/// This type represents all of the reasons for why a file system operation could fail. +/// +/// Most of these reasons are POSIX errors, which come from the operating system +/// and start with E. Others have been added to represent other issues that may +/// arise specific to this library. +/// +pub type FileError { + /// Permission denied. + Eacces + /// Resource temporarily unavailable. + Eagain + /// Bad file number + Ebadf + /// Bad message. + Ebadmsg + /// File busy. + Ebusy + /// Resource deadlock avoided. + Edeadlk + /// On most architectures, same as `Edeadlk`. On some architectures, it + /// means "File locking deadlock error." + Edeadlock + /// Disk quota exceeded. + Edquot + /// File already exists. + Eexist + /// Bad address in system call argument. + Efault + /// File too large. + Efbig + /// Inappropriate file type or format. Usually caused by trying to set the + /// "sticky bit" on a regular file (not a directory). + Eftype + /// Interrupted system call. + Eintr + /// Invalid argument. + Einval + /// I/O error. + Eio + /// Illegal operation on a directory. + Eisdir + /// Too many levels of symbolic links. + Eloop + /// Too many open files. + Emfile + /// Too many links. + Emlink + /// Multihop attempted. + Emultihop + /// Filename too long + Enametoolong + /// File table overflow + Enfile + /// No buffer space available. + Enobufs + /// No such device. + Enodev + /// No locks available. + Enolck + /// Link has been severed. + Enolink + /// No such file or directory. + Enoent + /// Not enough memory. + Enomem + /// No space left on device. + Enospc + /// No STREAM resources. + Enosr + /// Not a STREAM. + Enostr + /// Function not implemented. + Enosys + /// Block device required. + Enotblk + /// Not a directory. + Enotdir + /// Operation not supported. + Enotsup + /// No such device or address. + Enxio + /// Operation not supported on socket. + Eopnotsupp + /// Value too large to be stored in data type. + Eoverflow + /// Not owner. + Eperm + /// Broken pipe. + Epipe + /// Result too large. + Erange + /// Read-only file system. + Erofs + /// Invalid seek. + Espipe + /// No such process. + Esrch + /// Stale remote file handle. + Estale + /// Text file busy. + Etxtbsy + /// Cross-domain link. + Exdev + /// File was requested to be read as UTF-8, but is not UTF-8 encoded. + NotUtf8 + /// Any error not accounted for by this type + Unknown +} + +/// Read a files contents as a string +/// ## Example +/// ```gleam +/// let assert Ok(records) = read(from: "./users.csv") +/// ``` +/// +pub fn read(from filepath: String) -> Result(String, FileError) { + do_read(filepath) + |> cast_error +} + +/// Write a string to a file at the given path +/// ## Example +/// ```gleam +/// let assert Ok(Nil) = write("Hello, World!", to: "./hello_world.txt") +/// ``` +/// +pub fn write( + to filepath: String, + contents contents: String, +) -> Result(Nil, FileError) { + do_write(contents, to: filepath) + |> cast_error +} + +/// Delete a file or directory at a given path. Performs a recursive +/// delete on a directory. +/// Throws an error if the path does not exist. +/// ## Example +/// ```gleam +/// let assert Ok(Nil) = delete(file_at: "./delete_me.txt") +/// ``` +/// +pub fn delete(file_or_dir_at path: String) -> Result(Nil, FileError) { + do_delete(path) + |> cast_error +} + +/// Delete all files/directories specified in a list of paths. +/// Recursively deletes provided directories. +/// Does not return an error if one or more of the provided paths +/// do not exist. +/// +pub fn delete_all(paths paths: List(String)) -> Result(Nil, FileError) { + case paths { + [] -> Ok(Nil) + [path, ..rest] -> { + case delete(path) { + Ok(Nil) | Error(Enoent) -> delete_all(rest) + e -> e + } + } + } +} + +/// Append a string to the contents of a file at the given path +/// ## Example +/// ```gleam +/// let assert Ok(Nil) = append("more text", to: "./needs_more_text.txt") +/// ``` +/// +pub fn append( + to filepath: String, + contents contents: String, +) -> Result(Nil, FileError) { + do_append(contents, to: filepath) + |> cast_error +} + +/// Read a files contents as a bitstring +/// ## Example +/// ```gleam +/// let assert Ok(records) = read_bits(from: "./users.csv") +/// ``` +/// +pub fn read_bits(from filepath: String) -> Result(BitArray, FileError) { + do_read_bits(filepath) + |> cast_error +} + +/// Write a bitstring to a file at the given path +/// ## Example +/// ```gleam +/// let assert Ok(Nil) = write_bits(<<"Hello, World!":utf8>>, to: "./hello_world.txt") +/// ``` +/// +pub fn write_bits( + to filepath: String, + bits bits: BitArray, +) -> Result(Nil, FileError) { + do_write_bits(bits, filepath) + |> cast_error +} + +/// Append a bitstring to the contents of a file at the given path +/// ## Example +/// ```gleam +/// let assert Ok(Nil) = append_bits(<<"more text":utf8>>, to: "./needs_more_text.txt") +/// ``` +/// +pub fn append_bits( + to filepath: String, + bits bits: BitArray, +) -> Result(Nil, FileError) { + do_append_bits(bits, filepath) + |> cast_error +} + +/// Checks if the provided filepath is a directory +/// ## Example +/// ```gleam +/// let assert True = is_directory("./test") +/// ``` +pub fn is_directory(filepath: String) -> Bool { + do_is_directory(filepath) +} + +/// Create a directory at the provided filepath. Returns an error if +/// the directory already exists. +/// +/// ## Example +/// ```gleam +/// create_directory("./test") +/// ``` +pub fn create_directory(filepath: String) -> Result(Nil, FileError) { + do_make_directory(filepath) + |> cast_error +} + +/// Lists the contents of a directory. +/// The list contains directory and file names, and is not recursive. +/// +/// ## Example +/// ```gleam +/// let assert Ok(files_and_folders) = read_directory(at: "./Folder1") +/// ``` +/// +pub fn read_directory(at path: String) -> Result(List(String), FileError) { + do_read_directory(path) + |> cast_error +} + +/// Returns `True` if there is a file at the given path, false otherwise. +/// +pub fn is_file(filepath: String) -> Bool { + do_is_file(filepath) +} + +/// Creates an empty file at the given filepath. Returns an `Error(Eexist)` +/// if the file already exists. +/// +pub fn create_file(at filepath: String) -> Result(Nil, FileError) { + case + filepath + |> is_file || filepath + |> is_directory + { + True -> Error(Eexist) + False -> write_bits(<<>>, to: filepath) + } +} + +/// Recursively creates necessary directories for a given directory +/// path. Note that if you pass a path that "looks like" a file, i.e. +/// `./a/b.txt`, a folder named `b.txt` will be created, so be sure +/// to pass only the path to the required directory. +pub fn create_directory_all(dirpath: String) -> Result(Nil, FileError) { + let path = case + dirpath + |> string.ends_with("/") + { + True -> dirpath + False -> dirpath <> "/" + } + do_create_dir_all(path) + |> cast_error +} + +/// Copy a file at a given path to another path. +/// Note: destination should include the filename, not just the directory +pub fn copy_file(at src: String, to dest: String) -> Result(Nil, FileError) { + do_copy_file(src, dest) + |> result.replace(Nil) + |> cast_error +} + +/// Rename a file at a given path to another path. +/// Note: destination should include the filename, not just the directory +pub fn rename_file(at src: String, to dest: String) -> Result(Nil, FileError) { + do_rename_file(src, dest) + |> cast_error +} + +/// Copy a directory recursively +pub fn copy_directory(at src: String, to dest: String) -> Result(Nil, FileError) { + // Erlang does not provide a built in `copy_dir` function, + // and Deno doesn't support Node's `fs.cpSync`, so we'll just roll + // our own for now. + use _ <- result.try(create_directory_all(dest)) + do_copy_directory(src, dest) +} + +fn do_copy_directory(src: String, dest: String) -> Result(Nil, FileError) { + // Iterate over the segments of the file + use segments <- result.try(read_directory(src)) + segments + |> list.each(fn(segment) { + let src_path = src <> "/" <> segment + let dest_path = dest <> "/" <> segment + + case is_file(src_path), is_directory(src_path) { + True, False -> { + // For a file, create the file in the new directory + use content <- result.try(read_bits(src_path)) + content + |> write_bits(to: dest_path) + } + False, True -> { + // Create the target directory and recurs + use _ <- result.try(create_directory(dest_path)) + do_copy_directory(src_path, dest_path) + } + _, _ -> { + // This should be unreachable. The src_path can't be both a file + // and a directory, and it's definitely one of the two because it's + // coming from list_contents + panic as "unreachable" + } + } + }) + Ok(Nil) +} + +/// Copy a directory recursively and then delete the old one. +pub fn rename_directory( + at src: String, + to dest: String, +) -> Result(Nil, FileError) { + use _ <- result.try(copy_directory(src, dest)) + delete(src) +} + +/// Returns a list of filepaths for every file in the directory, including nested +/// files. +/// +pub fn get_files(in directory: String) -> Result(List(String), FileError) { + use contents <- result.try(read_directory(directory)) + let paths = list.map(contents, fn(segment) { directory <> "/" <> segment }) + let files = list.filter(paths, is_file) + case list.filter(paths, is_directory) { + [] -> Ok(files) + directories -> { + use nested_files <- result.try(list.try_map(directories, get_files)) + Ok(list.append(files, list.flatten(nested_files))) + } + } +} + +@target(javascript) +fn do_read(from filepath: String) -> Result(String, String) { + case do_read_bits(filepath) { + Ok(bits) -> { + case bit_array.to_string(bits) { + Ok(str) -> Ok(str) + _ -> Error("NOTUTF8") + } + } + Error(e) -> Error(e) + } +} + +@target(javascript) +fn do_write(content: String, to filepath: String) -> Result(Nil, String) { + content + |> bit_array.from_string + |> do_write_bits(to: filepath) +} + +@target(javascript) +@external(javascript, "./simplifile_js.mjs", "deleteFileOrDirRecursive") +fn do_delete(file_or_dir_at: String) -> Result(Nil, String) + +@target(javascript) +fn do_append(content: String, to filepath: String) -> Result(Nil, String) { + content + |> bit_array.from_string + |> do_append_bits(to: filepath) +} + +@target(javascript) +@external(javascript, "./simplifile_js.mjs", "readBits") +fn do_read_bits(from: String) -> Result(BitArray, String) + +@target(javascript) +@external(javascript, "./simplifile_js.mjs", "writeBits") +fn do_write_bits(content: BitArray, to filepath: String) -> Result(Nil, String) + +@target(javascript) +@external(javascript, "./simplifile_js.mjs", "appendBits") +fn do_append_bits(content: BitArray, to filepath: String) -> Result(Nil, String) + +@target(javascript) +@external(javascript, "./simplifile_js.mjs", "isDirectory") +fn do_is_directory(filepath: String) -> Bool + +@target(javascript) +@external(javascript, "./simplifile_js.mjs", "makeDirectory") +fn do_make_directory(filepath: String) -> Result(Nil, String) + +@target(javascript) +@external(javascript, "./simplifile_js.mjs", "createDirAll") +fn do_create_dir_all(dirpath: String) -> Result(Nil, String) + +@target(javascript) +@external(javascript, "./simplifile_js.mjs", "listContents") +fn do_read_directory(directory_path: String) -> Result(List(String), String) + +@target(javascript) +@external(javascript, "./simplifile_js.mjs", "copyFile") +fn do_copy_file(at: String, to: String) -> Result(Nil, String) + +@target(javascript) +@external(javascript, "./simplifile_js.mjs", "renameFile") +fn do_rename_file(at: String, to: String) -> Result(Nil, String) + +@target(javascript) +fn cast_error(input: Result(a, String)) -> Result(a, FileError) { + result.map_error( + input, + fn(e) { + case e { + "EACCES" -> Eacces + "EAGAIN" -> Eagain + "EBADF" -> Ebadf + "EBADMSG" -> Ebadmsg + "EBUSY" -> Ebusy + "EDEADLK" -> Edeadlk + "EDEADLOCK" -> Edeadlock + "EDQUOT" -> Edquot + "EEXIST" -> Eexist + "EFAULT" -> Efault + "EFBIG" -> Efbig + "EFTYPE" -> Eftype + "EINTR" -> Eintr + "EINVAL" -> Einval + "EIO" -> Eio + "EISDIR" -> Eisdir + "ELOOP" -> Eloop + "EMFILE" -> Emfile + "EMLINK" -> Emlink + "EMULTIHOP" -> Emultihop + "ENAMETOOLONG" -> Enametoolong + "ENFILE" -> Enfile + "ENOBUFS" -> Enobufs + "ENODEV" -> Enodev + "ENOLCK" -> Enolck + "ENOLINK" -> Enolink + "ENOENT" -> Enoent + "ENOMEM" -> Enomem + "ENOSPC" -> Enospc + "ENOSR" -> Enosr + "ENOSTR" -> Enostr + "ENOSYS" -> Enosys + "ENOBLK" -> Enotblk + "ENODIR" -> Enotdir + "ENOTSUP" -> Enotsup + "ENXIO" -> Enxio + "EOPNOTSUPP" -> Eopnotsupp + "EOVERFLOW" -> Eoverflow + "EPERM" -> Eperm + "EPIPE" -> Epipe + "ERANGE" -> Erange + "EROFS" -> Erofs + "ESPIPE" -> Espipe + "ESRCH" -> Esrch + "ESTALE" -> Estale + "ETXTBSY" -> Etxtbsy + "EXDEV" -> Exdev + "NOTUTF8" -> NotUtf8 + _ -> Unknown + } + }, + ) +} + +@target(erlang) +@external(erlang, "simplifile_erl", "append_file") +fn do_append_bits( + content: BitArray, + to filepath: String, +) -> Result(Nil, FileError) + +@target(erlang) +@external(erlang, "simplifile_erl", "write_file") +fn do_write_bits( + content: BitArray, + to filepath: String, +) -> Result(Nil, FileError) + +@target(erlang) +@external(erlang, "simplifile_erl", "read_file") +fn do_read_bits(from: String) -> Result(BitArray, FileError) + +@target(erlang) +@external(erlang, "simplifile_erl", "recursive_delete") +fn do_delete(file_or_dir_at: String) -> Result(Nil, FileError) + +@target(erlang) +fn do_append(content: String, to filepath: String) -> Result(Nil, FileError) { + content + |> bit_array.from_string + |> do_append_bits(filepath) +} + +@target(erlang) +fn do_write(content: String, to filepath: String) -> Result(Nil, FileError) { + content + |> bit_array.from_string + |> do_write_bits(filepath) +} + +@target(erlang) +fn do_read(from filepath: String) -> Result(String, FileError) { + case do_read_bits(filepath) { + Ok(bits) -> { + case bit_array.to_string(bits) { + Ok(str) -> Ok(str) + _ -> Error(NotUtf8) + } + } + Error(e) -> Error(e) + } +} + +@target(erlang) +fn cast_error(input: Result(a, FileError)) -> Result(a, FileError) { + input +} + +@target(erlang) +@external(erlang, "filelib", "is_dir") +fn do_is_directory(path: String) -> Bool + +@target(erlang) +@external(erlang, "simplifile_erl", "make_directory") +fn do_make_directory(directory: String) -> Result(Nil, FileError) + +@target(erlang) +@external(erlang, "simplifile_erl", "list_directory") +fn do_read_directory(directory: String) -> Result(List(String), FileError) + +@external(erlang, "simplifile_erl", "is_file") +@external(javascript, "./simplifile_js.mjs", "isFile") +fn do_is_file(filepath: String) -> Bool + +@target(erlang) +@external(erlang, "simplifile_erl", "create_dir_all") +fn do_create_dir_all(dirpath: String) -> Result(Nil, FileError) + +@target(erlang) +@external(erlang, "file", "copy") +fn do_copy_file(src: String, dest: String) -> Result(Int, FileError) + +@target(erlang) +@external(erlang, "simplifile_erl", "rename_file") +fn do_rename_file(src: String, dest: String) -> Result(Nil, FileError) diff --git a/aoc2023/build/packages/simplifile/src/simplifile_erl.erl b/aoc2023/build/packages/simplifile/src/simplifile_erl.erl new file mode 100644 index 0000000..dac135a --- /dev/null +++ b/aoc2023/build/packages/simplifile/src/simplifile_erl.erl @@ -0,0 +1,70 @@ +-module(simplifile_erl). +-export([ + read_file/1, + append_file/2, write_file/2, delete_file/1, delete_directory/1, recursive_delete/1, + list_directory/1, make_directory/1, is_file/1, create_dir_all/1, rename_file/2 +]). + +-define(is_posix_error(Error), + Error =:= eacces orelse Error =:= eagain orelse Error =:= ebadf orelse + Error =:= ebadmsg orelse Error =:= ebusy orelse Error =:= edeadlk orelse + Error =:= edeadlock orelse Error =:= edquot orelse Error =:= eexist orelse + Error =:= efault orelse Error =:= efbig orelse Error =:= eftype orelse + Error =:= eintr orelse Error =:= einval orelse Error =:= eio orelse + Error =:= eisdir orelse Error =:= eloop orelse Error =:= emfile orelse + Error =:= emlink orelse Error =:= emultihop orelse Error =:= enametoolong orelse + Error =:= enfile orelse Error =:= enobufs orelse Error =:= enodev orelse + Error =:= enolck orelse Error =:= enolink orelse Error =:= enoent orelse + Error =:= enomem orelse Error =:= enospc orelse Error =:= enosr orelse + Error =:= enostr orelse Error =:= enosys orelse Error =:= enotblk orelse + Error =:= enotdir orelse Error =:= enotsup orelse Error =:= enxio orelse + Error =:= eopnotsupp orelse Error =:= eoverflow orelse Error =:= eperm orelse + Error =:= epipe orelse Error =:= erange orelse Error =:= erofs orelse + Error =:= espipe orelse Error =:= esrch orelse Error =:= estale orelse + Error =:= etxtbsy orelse Error =:= exdev +). + +posix_result(Result) -> + case Result of + ok -> {ok, nil}; + {ok, Value} -> {ok, Value}; + {error, Reason} when ?is_posix_error(Reason) -> {error, Reason} + end. + +read_file(Filename) -> + posix_result(file:read_file(Filename)). + +write_file(Contents, Filename) -> + posix_result(file:write_file(Filename, Contents)). + +append_file(Contents, Filename) -> + posix_result(file:write_file(Filename, Contents, [append])). + +delete_file(Filename) -> + posix_result(file:delete(Filename)). + +make_directory(Dir) -> + posix_result(file:make_dir(Dir)). + +list_directory(Dir) -> + case file:list_dir(Dir) of + {ok, Filenames} -> + {ok, [list_to_binary(Filename) || Filename <- Filenames]}; + {error, Reason} when ?is_posix_error(Reason) -> + {error, Reason} + end. + +delete_directory(Dir) -> + posix_result(file:del_dir(Dir)). + +recursive_delete(Dir) -> + posix_result(file:del_dir_r(Dir)). + +is_file(Filename) -> + not (file:read_file_info(Filename) == {error, enoent}) and not filelib: is_dir(Filename). + +create_dir_all(Filename) -> + posix_result(filelib:ensure_dir(Filename)). + +rename_file(Source, Destination) -> + posix_result(file:rename(Source, Destination)). diff --git a/aoc2023/build/packages/simplifile/src/simplifile_js.mjs b/aoc2023/build/packages/simplifile/src/simplifile_js.mjs new file mode 100644 index 0000000..faf4109 --- /dev/null +++ b/aoc2023/build/packages/simplifile/src/simplifile_js.mjs @@ -0,0 +1,102 @@ +import fs from "node:fs" +import path from "node:path" +import { BitArray, Ok, Error as GError, toList} from "./gleam.mjs"; + +export function readBits(filepath) { + try { + const contents = fs.readFileSync(path.normalize(filepath)) + return new Ok(new BitArray(new Uint8Array(contents))) + } catch(e) { + return new GError(stringifyError(e)) + } +} + +export function writeBits(contents, filepath) { + try { + fs.writeFileSync(path.normalize(filepath), contents.buffer) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +export function appendBits(contents, filepath) { + try { + fs.appendFileSync(path.normalize(filepath), contents.buffer) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +function stringifyError(e) { + return e.code +} + +export function isFile(filepath) { + let fp = path.normalize(filepath) + return fs.existsSync(fp) && fs.lstatSync(fp).isFile(); +} + +export function isDirectory(filepath) { + let fp = path.normalize(filepath) + return fs.existsSync(fp) && fs.lstatSync(fp).isDirectory(); +} + +export function makeDirectory(filepath) { + try { + fs.mkdirSync(path.normalize(filepath)) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +export function createDirAll(filepath) { + try { + fs.mkdirSync(filepath, { recursive: true }) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +export function deleteFileOrDirRecursive(fileOrDirPath) { + try { + if (isDirectory(fileOrDirPath)) { + fs.rmSync(path.normalize(fileOrDirPath), { recursive: true }) + } else { + fs.unlinkSync(path.normalize(fileOrDirPath)) + } + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +export function listContents(filepath) { + try { + const stuff = toList(fs.readdirSync(path.normalize(filepath))) + return new Ok(stuff) + } catch(e) { + return new GError(stringifyError(e)) + } +} + +export function copyFile(srcpath, destpath) { + try { + fs.copyFileSync(path.normalize(srcpath), path.normalize(destpath)) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +export function renameFile(srcpath, destpath) { + try { + fs.renameSync(path.normalize(srcpath), path.normalize(destpath)) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +}
\ No newline at end of file diff --git a/aoc2023/build/packages/snag/LICENCE b/aoc2023/build/packages/snag/LICENCE new file mode 100644 index 0000000..b8c2e9e --- /dev/null +++ b/aoc2023/build/packages/snag/LICENCE @@ -0,0 +1,211 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2021 - present Louis Pilfold + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + +## Runtime Library Exception to the Apache 2.0 License: ## + + + As an exception, if you use this Software to compile your source code and + portions of this Software are embedded into the binary product as a result, + you may redistribute such product without providing attribution as would + otherwise be required by Sections 4(a), 4(b) and 4(d) of the License. diff --git a/aoc2023/build/packages/snag/README.md b/aoc2023/build/packages/snag/README.md new file mode 100644 index 0000000..aaedcf5 --- /dev/null +++ b/aoc2023/build/packages/snag/README.md @@ -0,0 +1,81 @@ +# Snag + +A Snag is a boilerplate-free ad-hoc error type. + +Use `Result(value, Snag)` (or the `snag.Result(value)` alias) in functions +that may fail. + +A low level message like "Unexpected status 401" or "No such file or +directory" can be confusing or difficult to debug, so use the `snag.context` +function to add extra contextual information. + +```gleam +import gleam/io +import my_app.{User} +import snag.{Result} + +pub fn log_in(user_id: Int) -> Result(User) { + try api_key = + my_app.read_file("api_key.txt") + |> snag.context("Could not load API key") + + try session_token = + user_id + |> my_app.create_session(api_key) + |> snag.context("Session creation failed") + + Ok(session_token) +} + +pub fn main() { + case log_in(42) { + Ok(session) -> io.println("Logged in!") + Error(snag) -> { + io.print(snag.pretty_print(snag)) + my_app.exit(1) + } + } +} +``` + +In this code when an error occurs within the `create_session` function an +error message like this is printed using the added contextual information: + +```text +error: Session creation failed + +cause: + 0: Unable to exchange token with authentication service + 1: Service authentication failed + 2: Unexpected HTTP status 401 +``` + +## When should I use Snag? + +Snag is useful in code where it must either pass or fail, and when it fails we +want good debugging information to print to the user. i.e. Command line +tools, data processing pipelines, etc. Here Snag provides a convenient way to +create errors with a reasonable amount of debugging information, without the +boilerplate of a custom error type. + +It is not suited to code where the application needs to make a decision about +what to do in the event of an error, such as whether to give up or to try +again. i.e. Libraries, web application backends, API clients, etc. In these +situations it is recommended to create a custom type for your errors as it +can be pattern matched on and have any additional detail added as fields. + +## Installation + +Add `snag` to your Gleam project + +``` +gleam add snag +``` + +## Prior art + +This library is inspired by the following projects: + +- Rust's [`anyhow`](https://github.com/dtolnay/anyhow) and + [`std::error::Error`](https://doc.rust-lang.org/std/error/trait.Error.html) +- Go's [`error`](https://golang.org/pkg/errors/). diff --git a/aoc2023/build/packages/snag/gleam.toml b/aoc2023/build/packages/snag/gleam.toml new file mode 100644 index 0000000..4f2d670 --- /dev/null +++ b/aoc2023/build/packages/snag/gleam.toml @@ -0,0 +1,16 @@ +name = "snag" +version = "0.2.1" +licences = ["Apache-2.0"] +description = "A boilerplate-free ad-hoc error type" + +repository = { type = "github", user = "gleam-experiments", repo = "snag" } +links = [ + { title = "Website", href = "https://gleam.run" }, + { title = "Sponsor", href = "https://github.com/sponsors/lpil" }, +] + +[dependencies] +gleam_stdlib = "~> 0.18" + +[dev-dependencies] +gleeunit = "~> 0.5" diff --git a/aoc2023/build/packages/snag/include/snag_Snag.hrl b/aoc2023/build/packages/snag/include/snag_Snag.hrl new file mode 100644 index 0000000..5d6614e --- /dev/null +++ b/aoc2023/build/packages/snag/include/snag_Snag.hrl @@ -0,0 +1 @@ +-record(snag, {issue :: binary(), cause :: list(binary())}). diff --git a/aoc2023/build/packages/snag/src/snag.app.src b/aoc2023/build/packages/snag/src/snag.app.src new file mode 100644 index 0000000..175e326 --- /dev/null +++ b/aoc2023/build/packages/snag/src/snag.app.src @@ -0,0 +1,8 @@ +{application, snag, [ + {vsn, "0.2.1"}, + {applications, [gleam_stdlib, + gleeunit]}, + {description, "A boilerplate-free ad-hoc error type"}, + {modules, [snag]}, + {registered, []} +]}. diff --git a/aoc2023/build/packages/snag/src/snag.erl b/aoc2023/build/packages/snag/src/snag.erl new file mode 100644 index 0000000..a07f242 --- /dev/null +++ b/aoc2023/build/packages/snag/src/snag.erl @@ -0,0 +1,74 @@ +-module(snag). +-compile([no_auto_import, nowarn_unused_vars]). + +-export([new/1, error/1, layer/2, context/2, pretty_print/1, line_print/1]). +-export_type([snag/0]). + +-type snag() :: {snag, binary(), list(binary())}. + +-spec new(binary()) -> snag(). +new(Issue) -> + {snag, Issue, []}. + +-spec error(binary()) -> {ok, any()} | {error, snag()}. +error(Issue) -> + {error, new(Issue)}. + +-spec layer(snag(), binary()) -> snag(). +layer(Snag, Issue) -> + {snag, Issue, [erlang:element(2, Snag) | erlang:element(3, Snag)]}. + +-spec context({ok, EXX} | {error, snag()}, binary()) -> {ok, EXX} | + {error, snag()}. +context(Result, Issue) -> + case Result of + {ok, _} -> + Result; + + {error, Snag} -> + {error, layer(Snag, Issue)} + end. + +-spec pretty_print_cause(list(binary())) -> gleam@string_builder:string_builder(). +pretty_print_cause(Cause) -> + _pipe = Cause, + _pipe@1 = gleam@list:index_map( + _pipe, + fun(Index, Line) -> + gleam@string:concat( + [<<" "/utf8>>, + gleam@int:to_string(Index), + <<": "/utf8>>, + Line, + <<"\n"/utf8>>] + ) + end + ), + gleam@string_builder:from_strings(_pipe@1). + +-spec pretty_print(snag()) -> binary(). +pretty_print(Snag) -> + Builder = gleam@string_builder:from_strings( + [<<"error: "/utf8>>, erlang:element(2, Snag), <<"\n"/utf8>>] + ), + gleam@string_builder:to_string(case erlang:element(3, Snag) of + [] -> + Builder; + + Cause -> + _pipe = Builder, + _pipe@1 = gleam@string_builder:append( + _pipe, + <<"\ncause:\n"/utf8>> + ), + gleam@string_builder:append_builder( + _pipe@1, + pretty_print_cause(Cause) + ) + end). + +-spec line_print(snag()) -> binary(). +line_print(Snag) -> + _pipe = [gleam@string:append(<<"error: "/utf8>>, erlang:element(2, Snag)) | + erlang:element(3, Snag)], + gleam@string:join(_pipe, <<" <- "/utf8>>). diff --git a/aoc2023/build/packages/snag/src/snag.gleam b/aoc2023/build/packages/snag/src/snag.gleam new file mode 100644 index 0000000..8d39537 --- /dev/null +++ b/aoc2023/build/packages/snag/src/snag.gleam @@ -0,0 +1,141 @@ +import gleam +import gleam/string_builder +import gleam/string +import gleam/list +import gleam/int + +/// A Snag is a boilerplate-free error type that can be used to track why an +/// error happened, though does not store as much detail on specific errors as a +/// custom error type would. +/// +/// It is useful in code where it must either pass or fail, and when it fails we +/// want good debugging information to print to the user. i.e. Command line +/// tools, data processing pipelines, etc. +/// +/// If it not suited to code where the application needs to make a decision about +/// what to do in the event of an error, such as whether to give up or to try +/// again. i.e. Libraries, web application backends, API clients, etc. +/// In these situations it is recommended to create a custom type for your errors +/// as it can be pattern matched on and have any additional detail added as +/// fields. +pub type Snag { + Snag(issue: String, cause: List(String)) +} + +/// A concise alias for a `Result` that uses a `Snag` as the error value. +pub type Result(t) = + gleam.Result(t, Snag) + +/// Create a new `Snag` with the given issue text. +/// +/// See also the `error` function for creating a `Snag` wrapped in a `Result`. +/// +/// # Example +/// +/// ```gleam +/// > new("Not enough credit") +/// > |> line_print +/// "error: Not enough credit" +/// ``` +pub fn new(issue: String) -> Snag { + Snag(issue: issue, cause: []) +} + +/// Create a new `Snag` wrapped in a `Result` with the given issue text. +/// +/// # Example +/// +/// ```gleam +/// > error("Not enough credit") +/// Error(new("Not enough credit")) +/// ``` +pub fn error(issue: String) -> Result(success) { + Error(new(issue)) +} + +/// Add additional contextual information to a `Snag`. +/// +/// See also the `context` function for adding contextual information to a `Snag` +/// wrapped in a `Result`. +/// +/// # Example +/// +/// ```gleam +/// > new("Not enough credit") +/// > |> layer("Unable to make purchase") +/// > |> line_print +/// "error: Unable to make purchase <- Not enough credit" +/// ``` +pub fn layer(snag: Snag, issue: String) -> Snag { + Snag(issue: issue, cause: [snag.issue, ..snag.cause]) +} + +/// Add additional contextual information to a `Snag` wrapped in a `Result`. +/// +/// # Example +/// +/// ```gleam +/// > error("Not enough credit") +/// > |> context("Unable to make purchase") +/// > |> result.map_error(line_print) +/// Error("error: Unable to make purchase <- Not enough credit") +/// ``` +pub fn context(result: Result(success), issue: String) -> Result(success) { + case result { + Ok(_) -> result + Error(snag) -> Error(layer(snag, issue)) + } +} + +/// Turn a snag into a multi-line string, optimised for readability. +/// +/// # Example +/// +/// ```gleam +/// > new("Not enough credit") +/// > |> layer("Unable to make purchase") +/// > |> layer("Character creation failed") +/// > |> pretty_print +/// "error: Character creation failed +/// +/// cause: +/// 0: Unable to make purchase +/// 1: Not enough credit +/// " +/// ``` +pub fn pretty_print(snag: Snag) -> String { + let builder = string_builder.from_strings(["error: ", snag.issue, "\n"]) + + string_builder.to_string(case snag.cause { + [] -> builder + cause -> + builder + |> string_builder.append("\ncause:\n") + |> string_builder.append_builder(pretty_print_cause(cause)) + }) +} + +fn pretty_print_cause(cause) { + cause + |> list.index_map(fn(index, line) { + string.concat([" ", int.to_string(index), ": ", line, "\n"]) + }) + |> string_builder.from_strings +} + +/// Turn a snag into a single-line string, optimised for compactness. This may be +/// useful for logging snags. +/// +/// # Example +/// +/// ```gleam +/// > new("Not enough credit") +/// > |> layer("Unable to make purchase") +/// > |> layer("Character creation failed") +/// > |> pretty_print +/// "error: Character creation failed <- Unable to make purchase <- Not enough credit" +/// ``` +pub fn line_print(snag: Snag) -> String { + [string.append("error: ", snag.issue), ..snag.cause] + |> string.join(" <- ") +} diff --git a/aoc2023/build/packages/tom/README.md b/aoc2023/build/packages/tom/README.md new file mode 100644 index 0000000..e6adcbe --- /dev/null +++ b/aoc2023/build/packages/tom/README.md @@ -0,0 +1,47 @@ +# tom + +A Gleam TOML parser! + +[](https://hex.pm/packages/tom) +[](https://hexdocs.pm/tom/) + + +```sh +gleam add tom +``` +```gleam +import tom + +const config = " + [person] + name = \"Lucy\" + is_cool = true +" + +pub fn main() { + // Parse a string of TOML + let assert Ok(parsed) = tom.parse(config) + + // Now you can work with the data directly, or you can use the `get_*` + // functions to retrieve values. + + tom.get_string(parsed, ["person", "name"]) + // -> Ok("Lucy") + + let is_cool = tom.get_bool(parsed, ["person", "is_cool"]) + // -> Ok(True) +} +``` + +Further documentation can be found at <https://hexdocs.pm/tom>. + +## Status + +The following string escape sequences are not supported yet: + +- `\b` +- `\f` +- `\e` +- `\xHH` +- `\uHHHH` +- `\UHHHHHHHH` diff --git a/aoc2023/build/packages/tom/gleam.toml b/aoc2023/build/packages/tom/gleam.toml new file mode 100644 index 0000000..f131d09 --- /dev/null +++ b/aoc2023/build/packages/tom/gleam.toml @@ -0,0 +1,13 @@ +name = "tom" +version = "0.2.1" + +description = "A pure Gleam TOML parser!" +licences = ["Apache-2.0"] +repository = { type = "github", user = "lpil", repo = "tom" } +links = [{ title = "TOML website", href = "https://toml.io/en/" }] + +[dependencies] +gleam_stdlib = "~> 0.32" + +[dev-dependencies] +gleeunit = "~> 1.0" diff --git a/aoc2023/build/packages/tom/include/tom_DateTimeValue.hrl b/aoc2023/build/packages/tom/include/tom_DateTimeValue.hrl new file mode 100644 index 0000000..3b1e660 --- /dev/null +++ b/aoc2023/build/packages/tom/include/tom_DateTimeValue.hrl @@ -0,0 +1,5 @@ +-record(date_time_value, { + date :: tom:date(), + time :: tom:time(), + offset :: tom:offset() +}). diff --git a/aoc2023/build/packages/tom/include/tom_DateValue.hrl b/aoc2023/build/packages/tom/include/tom_DateValue.hrl new file mode 100644 index 0000000..c41f901 --- /dev/null +++ b/aoc2023/build/packages/tom/include/tom_DateValue.hrl @@ -0,0 +1 @@ +-record(date_value, {year :: integer(), month :: integer(), day :: integer()}). diff --git a/aoc2023/build/packages/tom/include/tom_KeyAlreadyInUse.hrl b/aoc2023/build/packages/tom/include/tom_KeyAlreadyInUse.hrl new file mode 100644 index 0000000..930df26 --- /dev/null +++ b/aoc2023/build/packages/tom/include/tom_KeyAlreadyInUse.hrl @@ -0,0 +1 @@ +-record(key_already_in_use, {key :: list(binary())}). diff --git a/aoc2023/build/packages/tom/include/tom_NotFound.hrl b/aoc2023/build/packages/tom/include/tom_NotFound.hrl new file mode 100644 index 0000000..19c9a17 --- /dev/null +++ b/aoc2023/build/packages/tom/include/tom_NotFound.hrl @@ -0,0 +1 @@ +-record(not_found, {key :: list(binary())}). diff --git a/aoc2023/build/packages/tom/include/tom_Offset.hrl b/aoc2023/build/packages/tom/include/tom_Offset.hrl new file mode 100644 index 0000000..a58a8e1 --- /dev/null +++ b/aoc2023/build/packages/tom/include/tom_Offset.hrl @@ -0,0 +1,5 @@ +-record(offset, { + direction :: tom:sign(), + hours :: integer(), + minutes :: integer() +}). diff --git a/aoc2023/build/packages/tom/include/tom_TimeValue.hrl b/aoc2023/build/packages/tom/include/tom_TimeValue.hrl new file mode 100644 index 0000000..e1275de --- /dev/null +++ b/aoc2023/build/packages/tom/include/tom_TimeValue.hrl @@ -0,0 +1,6 @@ +-record(time_value, { + hour :: integer(), + minute :: integer(), + second :: integer(), + millisecond :: integer() +}). diff --git a/aoc2023/build/packages/tom/include/tom_Unexpected.hrl b/aoc2023/build/packages/tom/include/tom_Unexpected.hrl new file mode 100644 index 0000000..ab1091c --- /dev/null +++ b/aoc2023/build/packages/tom/include/tom_Unexpected.hrl @@ -0,0 +1 @@ +-record(unexpected, {got :: binary(), expected :: binary()}). diff --git a/aoc2023/build/packages/tom/include/tom_WrongType.hrl b/aoc2023/build/packages/tom/include/tom_WrongType.hrl new file mode 100644 index 0000000..ae57352 --- /dev/null +++ b/aoc2023/build/packages/tom/include/tom_WrongType.hrl @@ -0,0 +1,5 @@ +-record(wrong_type, { + key :: list(binary()), + expected :: binary(), + got :: binary() +}). diff --git a/aoc2023/build/packages/tom/src/tom.app.src b/aoc2023/build/packages/tom/src/tom.app.src new file mode 100644 index 0000000..051649c --- /dev/null +++ b/aoc2023/build/packages/tom/src/tom.app.src @@ -0,0 +1,8 @@ +{application, tom, [ + {vsn, "0.2.1"}, + {applications, [gleam_stdlib, + gleeunit]}, + {description, "A pure Gleam TOML parser!"}, + {modules, [tom]}, + {registered, []} +]}. diff --git a/aoc2023/build/packages/tom/src/tom.erl b/aoc2023/build/packages/tom/src/tom.erl new file mode 100644 index 0000000..4f5c071 --- /dev/null +++ b/aoc2023/build/packages/tom/src/tom.erl @@ -0,0 +1,2140 @@ +-module(tom). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([get/2, get_int/2, get_float/2, get_bool/2, get_string/2, get_date/2, get_time/2, get_date_time/2, get_array/2, get_table/2, get_number/2, parse/1]). +-export_type([toml/0, date_time/0, date/0, time/0, offset/0, sign/0, parse_error/0, number_/0, get_error/0]). + +-type toml() :: {int, integer()} | + {float, float()} | + {infinity, sign()} | + {nan, sign()} | + {bool, boolean()} | + {string, binary()} | + {date, date()} | + {time, time()} | + {date_time, date_time()} | + {array, list(toml())} | + {array_of_tables, list(gleam@map:map_(binary(), toml()))} | + {table, gleam@map:map_(binary(), toml())} | + {inline_table, gleam@map:map_(binary(), toml())}. + +-type date_time() :: {date_time_value, date(), time(), offset()}. + +-type date() :: {date_value, integer(), integer(), integer()}. + +-type time() :: {time_value, integer(), integer(), integer(), integer()}. + +-type offset() :: local | {offset, sign(), integer(), integer()}. + +-type sign() :: positive | negative. + +-type parse_error() :: {unexpected, binary(), binary()} | + {key_already_in_use, list(binary())}. + +-type number_() :: {number_int, integer()} | + {number_float, float()} | + {number_infinity, sign()} | + {number_nan, sign()}. + +-type get_error() :: {not_found, list(binary())} | + {wrong_type, list(binary()), binary(), binary()}. + +-spec classify(toml()) -> binary(). +classify(Toml) -> + case Toml of + {int, _} -> + <<"Int"/utf8>>; + + {float, _} -> + <<"Float"/utf8>>; + + {nan, positive} -> + <<"NaN"/utf8>>; + + {nan, negative} -> + <<"Negative NaN"/utf8>>; + + {infinity, positive} -> + <<"Infinity"/utf8>>; + + {infinity, negative} -> + <<"Negative Infinity"/utf8>>; + + {bool, _} -> + <<"Bool"/utf8>>; + + {string, _} -> + <<"String"/utf8>>; + + {date, _} -> + <<"Date"/utf8>>; + + {time, _} -> + <<"Time"/utf8>>; + + {date_time, _} -> + <<"DateTime"/utf8>>; + + {array, _} -> + <<"Array"/utf8>>; + + {array_of_tables, _} -> + <<"Array"/utf8>>; + + {table, _} -> + <<"Table"/utf8>>; + + {inline_table, _} -> + <<"Table"/utf8>> + end. + +-spec push_key({ok, FIU} | {error, get_error()}, binary()) -> {ok, FIU} | + {error, get_error()}. +push_key(Result, Key) -> + case Result of + {ok, T} -> + {ok, T}; + + {error, {not_found, Path}} -> + {error, {not_found, [Key | Path]}}; + + {error, {wrong_type, Path@1, Expected, Got}} -> + {error, {wrong_type, [Key | Path@1], Expected, Got}} + end. + +-spec get(gleam@map:map_(binary(), toml()), list(binary())) -> {ok, toml()} | + {error, get_error()}. +get(Toml, Key) -> + case Key of + [] -> + {error, {not_found, []}}; + + [K] -> + gleam@result:replace_error(gleam@map:get(Toml, K), {not_found, [K]}); + + [K@1 | Key@1] -> + case gleam@map:get(Toml, K@1) of + {ok, {table, T}} -> + push_key(get(T, Key@1), K@1); + + {ok, Other} -> + {error, + {wrong_type, [K@1], <<"Table"/utf8>>, classify(Other)}}; + + {error, _} -> + {error, {not_found, [K@1]}} + end + end. + +-spec get_int(gleam@map:map_(binary(), toml()), list(binary())) -> {ok, + integer()} | + {error, get_error()}. +get_int(Toml, Key) -> + case get(Toml, Key) of + {ok, {int, I}} -> + {ok, I}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"Int"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_float(gleam@map:map_(binary(), toml()), list(binary())) -> {ok, + float()} | + {error, get_error()}. +get_float(Toml, Key) -> + case get(Toml, Key) of + {ok, {float, I}} -> + {ok, I}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"Float"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_bool(gleam@map:map_(binary(), toml()), list(binary())) -> {ok, + boolean()} | + {error, get_error()}. +get_bool(Toml, Key) -> + case get(Toml, Key) of + {ok, {bool, I}} -> + {ok, I}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"Bool"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_string(gleam@map:map_(binary(), toml()), list(binary())) -> {ok, + binary()} | + {error, get_error()}. +get_string(Toml, Key) -> + case get(Toml, Key) of + {ok, {string, I}} -> + {ok, I}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"String"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_date(gleam@map:map_(binary(), toml()), list(binary())) -> {ok, date()} | + {error, get_error()}. +get_date(Toml, Key) -> + case get(Toml, Key) of + {ok, {date, I}} -> + {ok, I}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"Date"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_time(gleam@map:map_(binary(), toml()), list(binary())) -> {ok, time()} | + {error, get_error()}. +get_time(Toml, Key) -> + case get(Toml, Key) of + {ok, {time, I}} -> + {ok, I}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"Time"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_date_time(gleam@map:map_(binary(), toml()), list(binary())) -> {ok, + date_time()} | + {error, get_error()}. +get_date_time(Toml, Key) -> + case get(Toml, Key) of + {ok, {date_time, I}} -> + {ok, I}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"DateTime"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_array(gleam@map:map_(binary(), toml()), list(binary())) -> {ok, + list(toml())} | + {error, get_error()}. +get_array(Toml, Key) -> + case get(Toml, Key) of + {ok, {array, I}} -> + {ok, I}; + + {ok, {array_of_tables, I@1}} -> + {ok, gleam@list:map(I@1, fun(Field@0) -> {table, Field@0} end)}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"Array"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_table(gleam@map:map_(binary(), toml()), list(binary())) -> {ok, + gleam@map:map_(binary(), toml())} | + {error, get_error()}. +get_table(Toml, Key) -> + case get(Toml, Key) of + {ok, {table, I}} -> + {ok, I}; + + {ok, {inline_table, I@1}} -> + {ok, I@1}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"Table"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec get_number(gleam@map:map_(binary(), toml()), list(binary())) -> {ok, + number_()} | + {error, get_error()}. +get_number(Toml, Key) -> + case get(Toml, Key) of + {ok, {int, X}} -> + {ok, {number_int, X}}; + + {ok, {float, X@1}} -> + {ok, {number_float, X@1}}; + + {ok, {nan, X@2}} -> + {ok, {number_nan, X@2}}; + + {ok, {infinity, X@3}} -> + {ok, {number_infinity, X@3}}; + + {ok, Other} -> + {error, {wrong_type, Key, <<"Number"/utf8>>, classify(Other)}}; + + {error, E} -> + {error, E} + end. + +-spec merge(gleam@map:map_(binary(), toml()), binary(), toml(), toml()) -> {ok, + gleam@map:map_(binary(), toml())} | + {error, list(binary())}. +merge(Table, Key, Old, New) -> + case {Old, New} of + {{array_of_tables, Tables}, {array_of_tables, New@1}} -> + {ok, + gleam@map:insert( + Table, + Key, + {array_of_tables, gleam@list:append(New@1, Tables)} + )}; + + {_, _} -> + {error, [Key]} + end. + +-spec insert_loop(gleam@map:map_(binary(), toml()), list(binary()), toml()) -> {ok, + gleam@map:map_(binary(), toml())} | + {error, list(binary())}. +insert_loop(Table, Key, Value) -> + case Key of + [] -> + erlang:error(#{gleam_error => panic, + message => <<"unreachable"/utf8>>, + module => <<"tom"/utf8>>, + function => <<"insert_loop"/utf8>>, + line => 511}); + + [K] -> + case gleam@map:get(Table, K) of + {error, nil} -> + {ok, gleam@map:insert(Table, K, Value)}; + + {ok, Old} -> + merge(Table, K, Old, Value) + end; + + [K@1 | Key@1] -> + case gleam@map:get(Table, K@1) of + {error, nil} -> + case insert_loop(gleam@map:new(), Key@1, Value) of + {ok, Inner} -> + {ok, gleam@map:insert(Table, K@1, {table, Inner})}; + + {error, Path} -> + {error, [K@1 | Path]} + end; + + {ok, {array_of_tables, [Inner@1 | Rest]}} -> + case insert_loop(Inner@1, Key@1, Value) of + {ok, Inner@2} -> + {ok, + gleam@map:insert( + Table, + K@1, + {array_of_tables, [Inner@2 | Rest]} + )}; + + {error, Path@1} -> + {error, [K@1 | Path@1]} + end; + + {ok, {table, Inner@3}} -> + case insert_loop(Inner@3, Key@1, Value) of + {ok, Inner@4} -> + {ok, gleam@map:insert(Table, K@1, {table, Inner@4})}; + + {error, Path@2} -> + {error, [K@1 | Path@2]} + end; + + {ok, _} -> + {error, [K@1]} + end + end. + +-spec insert(gleam@map:map_(binary(), toml()), list(binary()), toml()) -> {ok, + gleam@map:map_(binary(), toml())} | + {error, parse_error()}. +insert(Table, Key, Value) -> + case insert_loop(Table, Key, Value) of + {ok, Table@1} -> + {ok, Table@1}; + + {error, Path} -> + {error, {key_already_in_use, Path}} + end. + +-spec expect_end_of_line( + list(binary()), + fun((list(binary())) -> {ok, {FKZ, list(binary())}} | {error, parse_error()}) +) -> {ok, {FKZ, list(binary())}} | {error, parse_error()}. +expect_end_of_line(Input, Next) -> + case Input of + [<<"\n"/utf8>> | Input@1] -> + Next(Input@1); + + [<<"\r\n"/utf8>> | Input@2] -> + Next(Input@2); + + [G | _] -> + {error, {unexpected, G, <<"\n"/utf8>>}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"\n"/utf8>>}} + end. + +-spec parse_key_quoted(list(binary()), binary(), binary()) -> {ok, + {binary(), list(binary())}} | + {error, parse_error()}. +parse_key_quoted(Input, Close, Name) -> + case Input of + [G | Input@1] when G =:= Close -> + {ok, {Name, Input@1}}; + + [G@1 | Input@2] -> + parse_key_quoted(Input@2, Close, <<Name/binary, G@1/binary>>); + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, Close}} + end. + +-spec parse_key_bare(list(binary()), binary()) -> {ok, + {binary(), list(binary())}} | + {error, parse_error()}. +parse_key_bare(Input, Name) -> + case Input of + [<<" "/utf8>> | Input@1] when Name =/= <<""/utf8>> -> + {ok, {Name, Input@1}}; + + [<<"="/utf8>> | _] when Name =/= <<""/utf8>> -> + {ok, {Name, Input}}; + + [<<"."/utf8>> | _] when Name =/= <<""/utf8>> -> + {ok, {Name, Input}}; + + [<<"]"/utf8>> | _] when Name =/= <<""/utf8>> -> + {ok, {Name, Input}}; + + [<<","/utf8>> | _] when Name =/= <<""/utf8>> -> + {error, {unexpected, <<","/utf8>>, <<"="/utf8>>}}; + + [<<"\n"/utf8>> | _] when Name =/= <<""/utf8>> -> + {error, {unexpected, <<"\n"/utf8>>, <<"="/utf8>>}}; + + [<<"\r\n"/utf8>> | _] when Name =/= <<""/utf8>> -> + {error, {unexpected, <<"\r\n"/utf8>>, <<"="/utf8>>}}; + + [<<"\n"/utf8>> | _] -> + {error, {unexpected, <<"\n"/utf8>>, <<"key"/utf8>>}}; + + [<<"\r\n"/utf8>> | _] -> + {error, {unexpected, <<"\r\n"/utf8>>, <<"key"/utf8>>}}; + + [<<"]"/utf8>> | _] -> + {error, {unexpected, <<"]"/utf8>>, <<"key"/utf8>>}}; + + [<<","/utf8>> | _] -> + {error, {unexpected, <<","/utf8>>, <<"key"/utf8>>}}; + + [G | Input@2] -> + parse_key_bare(Input@2, <<Name/binary, G/binary>>); + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"key"/utf8>>}} + end. + +-spec skip_line_whitespace(list(binary())) -> list(binary()). +skip_line_whitespace(Input) -> + gleam@list:drop_while( + Input, + fun(G) -> (G =:= <<" "/utf8>>) orelse (G =:= <<"\t"/utf8>>) end + ). + +-spec parse_key_segment(list(binary())) -> {ok, {binary(), list(binary())}} | + {error, parse_error()}. +parse_key_segment(Input) -> + Input@1 = skip_line_whitespace(Input), + case Input@1 of + [<<"="/utf8>> | _] -> + {error, {unexpected, <<"="/utf8>>, <<"Key"/utf8>>}}; + + [<<"\n"/utf8>> | _] -> + {error, {unexpected, <<"\n"/utf8>>, <<"Key"/utf8>>}}; + + [<<"\r\n"/utf8>> | _] -> + {error, {unexpected, <<"\r\n"/utf8>>, <<"Key"/utf8>>}}; + + [<<"["/utf8>> | _] -> + {error, {unexpected, <<"["/utf8>>, <<"Key"/utf8>>}}; + + [<<"\""/utf8>> | Input@2] -> + parse_key_quoted(Input@2, <<"\""/utf8>>, <<""/utf8>>); + + [<<"'"/utf8>> | Input@3] -> + parse_key_quoted(Input@3, <<"'"/utf8>>, <<""/utf8>>); + + _ -> + parse_key_bare(Input@1, <<""/utf8>>) + end. + +-spec skip_whitespace(list(binary())) -> list(binary()). +skip_whitespace(Input) -> + case Input of + [<<" "/utf8>> | Input@1] -> + skip_whitespace(Input@1); + + [<<"\t"/utf8>> | Input@2] -> + skip_whitespace(Input@2); + + [<<"\n"/utf8>> | Input@3] -> + skip_whitespace(Input@3); + + [<<"\r\n"/utf8>> | Input@4] -> + skip_whitespace(Input@4); + + Input@5 -> + Input@5 + end. + +-spec drop_comments(list(binary()), list(binary())) -> list(binary()). +drop_comments(Input, Acc) -> + case Input of + [<<"#"/utf8>> | Input@1] -> + _pipe = Input@1, + _pipe@1 = gleam@list:drop_while( + _pipe, + fun(G) -> G /= <<"\n"/utf8>> end + ), + drop_comments(_pipe@1, Acc); + + [G@1 | Input@2] -> + drop_comments(Input@2, [G@1 | Acc]); + + [] -> + gleam@list:reverse(Acc) + end. + +-spec do( + {ok, {FLK, list(binary())}} | {error, parse_error()}, + fun((FLK, list(binary())) -> {ok, FLN} | {error, parse_error()}) +) -> {ok, FLN} | {error, parse_error()}. +do(Result, Next) -> + case Result of + {ok, {A, Input}} -> + Next(A, Input); + + {error, E} -> + {error, E} + end. + +-spec parse_key(list(binary()), list(binary())) -> {ok, + {list(binary()), list(binary())}} | + {error, parse_error()}. +parse_key(Input, Segments) -> + do( + parse_key_segment(Input), + fun(Segment, Input@1) -> + Segments@1 = [Segment | Segments], + Input@2 = skip_line_whitespace(Input@1), + case Input@2 of + [<<"."/utf8>> | Input@3] -> + parse_key(Input@3, Segments@1); + + _ -> + {ok, {gleam@list:reverse(Segments@1), Input@2}} + end + end + ). + +-spec expect( + list(binary()), + binary(), + fun((list(binary())) -> {ok, {FLS, list(binary())}} | {error, parse_error()}) +) -> {ok, {FLS, list(binary())}} | {error, parse_error()}. +expect(Input, Expected, Next) -> + case Input of + [G | Input@1] when G =:= Expected -> + Next(Input@1); + + [G@1 | _] -> + {error, {unexpected, G@1, Expected}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, Expected}} + end. + +-spec parse_table_header(list(binary())) -> {ok, + {list(binary()), list(binary())}} | + {error, parse_error()}. +parse_table_header(Input) -> + Input@1 = skip_line_whitespace(Input), + do( + parse_key(Input@1, []), + fun(Key, Input@2) -> + expect( + Input@2, + <<"]"/utf8>>, + fun(Input@3) -> + Input@4 = skip_line_whitespace(Input@3), + expect_end_of_line( + Input@4, + fun(Input@5) -> {ok, {Key, Input@5}} end + ) + end + ) + end + ). + +-spec parse_hex(list(binary()), integer(), sign()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_hex(Input, Number, Sign) -> + case Input of + [<<"_"/utf8>> | Input@1] -> + parse_hex(Input@1, Number, Sign); + + [<<"0"/utf8>> | Input@2] -> + parse_hex(Input@2, (Number * 16) + 0, Sign); + + [<<"1"/utf8>> | Input@3] -> + parse_hex(Input@3, (Number * 16) + 1, Sign); + + [<<"2"/utf8>> | Input@4] -> + parse_hex(Input@4, (Number * 16) + 2, Sign); + + [<<"3"/utf8>> | Input@5] -> + parse_hex(Input@5, (Number * 16) + 3, Sign); + + [<<"4"/utf8>> | Input@6] -> + parse_hex(Input@6, (Number * 16) + 4, Sign); + + [<<"5"/utf8>> | Input@7] -> + parse_hex(Input@7, (Number * 16) + 5, Sign); + + [<<"6"/utf8>> | Input@8] -> + parse_hex(Input@8, (Number * 16) + 6, Sign); + + [<<"7"/utf8>> | Input@9] -> + parse_hex(Input@9, (Number * 16) + 7, Sign); + + [<<"8"/utf8>> | Input@10] -> + parse_hex(Input@10, (Number * 16) + 8, Sign); + + [<<"9"/utf8>> | Input@11] -> + parse_hex(Input@11, (Number * 16) + 9, Sign); + + [<<"a"/utf8>> | Input@12] -> + parse_hex(Input@12, (Number * 16) + 10, Sign); + + [<<"b"/utf8>> | Input@13] -> + parse_hex(Input@13, (Number * 16) + 11, Sign); + + [<<"c"/utf8>> | Input@14] -> + parse_hex(Input@14, (Number * 16) + 12, Sign); + + [<<"d"/utf8>> | Input@15] -> + parse_hex(Input@15, (Number * 16) + 13, Sign); + + [<<"e"/utf8>> | Input@16] -> + parse_hex(Input@16, (Number * 16) + 14, Sign); + + [<<"f"/utf8>> | Input@17] -> + parse_hex(Input@17, (Number * 16) + 15, Sign); + + [<<"A"/utf8>> | Input@18] -> + parse_hex(Input@18, (Number * 16) + 10, Sign); + + [<<"B"/utf8>> | Input@19] -> + parse_hex(Input@19, (Number * 16) + 11, Sign); + + [<<"C"/utf8>> | Input@20] -> + parse_hex(Input@20, (Number * 16) + 12, Sign); + + [<<"D"/utf8>> | Input@21] -> + parse_hex(Input@21, (Number * 16) + 13, Sign); + + [<<"E"/utf8>> | Input@22] -> + parse_hex(Input@22, (Number * 16) + 14, Sign); + + [<<"F"/utf8>> | Input@23] -> + parse_hex(Input@23, (Number * 16) + 15, Sign); + + Input@24 -> + Number@1 = case Sign of + positive -> + Number; + + negative -> + - Number + end, + {ok, {{int, Number@1}, Input@24}} + end. + +-spec parse_octal(list(binary()), integer(), sign()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_octal(Input, Number, Sign) -> + case Input of + [<<"_"/utf8>> | Input@1] -> + parse_octal(Input@1, Number, Sign); + + [<<"0"/utf8>> | Input@2] -> + parse_octal(Input@2, (Number * 8) + 0, Sign); + + [<<"1"/utf8>> | Input@3] -> + parse_octal(Input@3, (Number * 8) + 1, Sign); + + [<<"2"/utf8>> | Input@4] -> + parse_octal(Input@4, (Number * 8) + 2, Sign); + + [<<"3"/utf8>> | Input@5] -> + parse_octal(Input@5, (Number * 8) + 3, Sign); + + [<<"4"/utf8>> | Input@6] -> + parse_octal(Input@6, (Number * 8) + 4, Sign); + + [<<"5"/utf8>> | Input@7] -> + parse_octal(Input@7, (Number * 8) + 5, Sign); + + [<<"6"/utf8>> | Input@8] -> + parse_octal(Input@8, (Number * 8) + 6, Sign); + + [<<"7"/utf8>> | Input@9] -> + parse_octal(Input@9, (Number * 8) + 7, Sign); + + Input@10 -> + Number@1 = case Sign of + positive -> + Number; + + negative -> + - Number + end, + {ok, {{int, Number@1}, Input@10}} + end. + +-spec parse_binary(list(binary()), integer(), sign()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_binary(Input, Number, Sign) -> + case Input of + [<<"_"/utf8>> | Input@1] -> + parse_binary(Input@1, Number, Sign); + + [<<"0"/utf8>> | Input@2] -> + parse_binary(Input@2, (Number * 2) + 0, Sign); + + [<<"1"/utf8>> | Input@3] -> + parse_binary(Input@3, (Number * 2) + 1, Sign); + + Input@4 -> + Number@1 = case Sign of + positive -> + Number; + + negative -> + - Number + end, + {ok, {{int, Number@1}, Input@4}} + end. + +-spec parse_exponent(list(binary()), float(), sign(), integer(), sign()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_exponent(Input, N, N_sign, Ex, Ex_sign) -> + case Input of + [<<"_"/utf8>> | Input@1] -> + parse_exponent(Input@1, N, N_sign, Ex, Ex_sign); + + [<<"0"/utf8>> | Input@2] -> + parse_exponent(Input@2, N, N_sign, Ex * 10, Ex_sign); + + [<<"1"/utf8>> | Input@3] -> + parse_exponent(Input@3, N, N_sign, (Ex * 10) + 1, Ex_sign); + + [<<"2"/utf8>> | Input@4] -> + parse_exponent(Input@4, N, N_sign, (Ex * 10) + 2, Ex_sign); + + [<<"3"/utf8>> | Input@5] -> + parse_exponent(Input@5, N, N_sign, (Ex * 10) + 3, Ex_sign); + + [<<"4"/utf8>> | Input@6] -> + parse_exponent(Input@6, N, N_sign, (Ex * 10) + 4, Ex_sign); + + [<<"5"/utf8>> | Input@7] -> + parse_exponent(Input@7, N, N_sign, (Ex * 10) + 5, Ex_sign); + + [<<"6"/utf8>> | Input@8] -> + parse_exponent(Input@8, N, N_sign, (Ex * 10) + 6, Ex_sign); + + [<<"7"/utf8>> | Input@9] -> + parse_exponent(Input@9, N, N_sign, (Ex * 10) + 7, Ex_sign); + + [<<"8"/utf8>> | Input@10] -> + parse_exponent(Input@10, N, N_sign, (Ex * 10) + 8, Ex_sign); + + [<<"9"/utf8>> | Input@11] -> + parse_exponent(Input@11, N, N_sign, (Ex * 10) + 9, Ex_sign); + + Input@12 -> + Number = case N_sign of + positive -> + N; + + negative -> + N * -1.0 + end, + Exponent = gleam@int:to_float(case Ex_sign of + positive -> + Ex; + + negative -> + - Ex + end), + Multiplier@1 = case gleam@float:power(10.0, Exponent) of + {ok, Multiplier} -> + Multiplier; + + {error, _} -> + 1.0 + end, + {ok, {{float, Number * Multiplier@1}, Input@12}} + end. + +-spec parse_float(list(binary()), float(), sign(), float()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_float(Input, Number, Sign, Unit) -> + case Input of + [<<"_"/utf8>> | Input@1] -> + parse_float(Input@1, Number, Sign, Unit); + + [<<"0"/utf8>> | Input@2] -> + parse_float(Input@2, Number, Sign, Unit * 0.1); + + [<<"1"/utf8>> | Input@3] -> + parse_float(Input@3, Number + (1.0 * Unit), Sign, Unit * 0.1); + + [<<"2"/utf8>> | Input@4] -> + parse_float(Input@4, Number + (2.0 * Unit), Sign, Unit * 0.1); + + [<<"3"/utf8>> | Input@5] -> + parse_float(Input@5, Number + (3.0 * Unit), Sign, Unit * 0.1); + + [<<"4"/utf8>> | Input@6] -> + parse_float(Input@6, Number + (4.0 * Unit), Sign, Unit * 0.1); + + [<<"5"/utf8>> | Input@7] -> + parse_float(Input@7, Number + (5.0 * Unit), Sign, Unit * 0.1); + + [<<"6"/utf8>> | Input@8] -> + parse_float(Input@8, Number + (6.0 * Unit), Sign, Unit * 0.1); + + [<<"7"/utf8>> | Input@9] -> + parse_float(Input@9, Number + (7.0 * Unit), Sign, Unit * 0.1); + + [<<"8"/utf8>> | Input@10] -> + parse_float(Input@10, Number + (8.0 * Unit), Sign, Unit * 0.1); + + [<<"9"/utf8>> | Input@11] -> + parse_float(Input@11, Number + (9.0 * Unit), Sign, Unit * 0.1); + + [<<"e"/utf8>>, <<"+"/utf8>> | Input@12] -> + parse_exponent(Input@12, Number, Sign, 0, positive); + + [<<"e"/utf8>>, <<"-"/utf8>> | Input@13] -> + parse_exponent(Input@13, Number, Sign, 0, negative); + + [<<"e"/utf8>> | Input@14] -> + parse_exponent(Input@14, Number, Sign, 0, positive); + + [<<"E"/utf8>>, <<"+"/utf8>> | Input@15] -> + parse_exponent(Input@15, Number, Sign, 0, positive); + + [<<"E"/utf8>>, <<"-"/utf8>> | Input@16] -> + parse_exponent(Input@16, Number, Sign, 0, negative); + + [<<"E"/utf8>> | Input@17] -> + parse_exponent(Input@17, Number, Sign, 0, positive); + + Input@18 -> + Number@1 = case Sign of + positive -> + Number; + + negative -> + Number * -1.0 + end, + {ok, {{float, Number@1}, Input@18}} + end. + +-spec parse_string(list(binary()), binary()) -> {ok, {toml(), list(binary())}} | + {error, parse_error()}. +parse_string(Input, String) -> + case Input of + [<<"\""/utf8>> | Input@1] -> + {ok, {{string, String}, Input@1}}; + + [<<"\\"/utf8>>, <<"t"/utf8>> | Input@2] -> + parse_string(Input@2, <<String/binary, "\t"/utf8>>); + + [<<"\\"/utf8>>, <<"n"/utf8>> | Input@3] -> + parse_string(Input@3, <<String/binary, "\n"/utf8>>); + + [<<"\\"/utf8>>, <<"r"/utf8>> | Input@4] -> + parse_string(Input@4, <<String/binary, "\r"/utf8>>); + + [<<"\\"/utf8>>, <<"\""/utf8>> | Input@5] -> + parse_string(Input@5, <<String/binary, "\""/utf8>>); + + [<<"\\"/utf8>>, <<"\\"/utf8>> | Input@6] -> + parse_string(Input@6, <<String/binary, "\\"/utf8>>); + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"\""/utf8>>}}; + + [<<"\n"/utf8>> | _] -> + {error, {unexpected, <<"\n"/utf8>>, <<"\""/utf8>>}}; + + [<<"\r\n"/utf8>> | _] -> + {error, {unexpected, <<"\r\n"/utf8>>, <<"\""/utf8>>}}; + + [G | Input@7] -> + parse_string(Input@7, <<String/binary, G/binary>>) + end. + +-spec parse_multi_line_string(list(binary()), binary()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_multi_line_string(Input, String) -> + case Input of + [<<"\""/utf8>>, <<"\""/utf8>>, <<"\""/utf8>> | Input@1] -> + {ok, {{string, String}, Input@1}}; + + [<<"\\"/utf8>>, <<"\n"/utf8>> | Input@2] -> + parse_multi_line_string(skip_whitespace(Input@2), String); + + [<<"\\"/utf8>>, <<"\r\n"/utf8>> | Input@3] -> + parse_multi_line_string(skip_whitespace(Input@3), String); + + [<<"\r\n"/utf8>> | Input@4] when String =:= <<""/utf8>> -> + parse_multi_line_string(Input@4, String); + + [<<"\n"/utf8>> | Input@5] when String =:= <<""/utf8>> -> + parse_multi_line_string(Input@5, String); + + [<<"\r\n"/utf8>> | Input@6] when String =:= <<""/utf8>> -> + parse_multi_line_string(Input@6, String); + + [<<"\\"/utf8>>, <<"t"/utf8>> | Input@7] -> + parse_multi_line_string(Input@7, <<String/binary, "\t"/utf8>>); + + [<<"\\"/utf8>>, <<"n"/utf8>> | Input@8] -> + parse_multi_line_string(Input@8, <<String/binary, "\n"/utf8>>); + + [<<"\\"/utf8>>, <<"r"/utf8>> | Input@9] -> + parse_multi_line_string(Input@9, <<String/binary, "\r"/utf8>>); + + [<<"\\"/utf8>>, <<"\""/utf8>> | Input@10] -> + parse_multi_line_string(Input@10, <<String/binary, "\""/utf8>>); + + [<<"\\"/utf8>>, <<"\\"/utf8>> | Input@11] -> + parse_multi_line_string(Input@11, <<String/binary, "\\"/utf8>>); + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"\""/utf8>>}}; + + [G | Input@12] -> + parse_multi_line_string(Input@12, <<String/binary, G/binary>>) + end. + +-spec parse_multi_line_literal_string(list(binary()), binary()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_multi_line_literal_string(Input, String) -> + case Input of + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"\""/utf8>>}}; + + [<<"'"/utf8>>, <<"'"/utf8>>, <<"'"/utf8>>, <<"'"/utf8>> | _] -> + {error, {unexpected, <<"''''"/utf8>>, <<"'''"/utf8>>}}; + + [<<"'"/utf8>>, <<"'"/utf8>>, <<"'"/utf8>> | Input@1] -> + {ok, {{string, String}, Input@1}}; + + [<<"\n"/utf8>> | Input@2] when String =:= <<""/utf8>> -> + parse_multi_line_literal_string(Input@2, String); + + [<<"\r\n"/utf8>> | Input@3] when String =:= <<""/utf8>> -> + parse_multi_line_literal_string(Input@3, String); + + [G | Input@4] -> + parse_multi_line_literal_string( + Input@4, + <<String/binary, G/binary>> + ) + end. + +-spec parse_literal_string(list(binary()), binary()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_literal_string(Input, String) -> + case Input of + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"\""/utf8>>}}; + + [<<"\n"/utf8>> | _] -> + {error, {unexpected, <<"\n"/utf8>>, <<"'"/utf8>>}}; + + [<<"\r\n"/utf8>> | _] -> + {error, {unexpected, <<"\r\n"/utf8>>, <<"'"/utf8>>}}; + + [<<"'"/utf8>> | Input@1] -> + {ok, {{string, String}, Input@1}}; + + [G | Input@2] -> + parse_literal_string(Input@2, <<String/binary, G/binary>>) + end. + +-spec parse_time_ms(list(binary()), integer(), integer()) -> {ok, + {{integer(), integer()}, list(binary())}} | + {error, parse_error()}. +parse_time_ms(Input, Seconds, Ms) -> + case Input of + [<<"0"/utf8>> | Input@1] when Ms < 100000 -> + parse_time_ms(Input@1, Seconds, (Ms * 10) + 0); + + [<<"1"/utf8>> | Input@2] when Ms < 100000 -> + parse_time_ms(Input@2, Seconds, (Ms * 10) + 1); + + [<<"2"/utf8>> | Input@3] when Ms < 100000 -> + parse_time_ms(Input@3, Seconds, (Ms * 10) + 2); + + [<<"3"/utf8>> | Input@4] when Ms < 100000 -> + parse_time_ms(Input@4, Seconds, (Ms * 10) + 3); + + [<<"4"/utf8>> | Input@5] when Ms < 100000 -> + parse_time_ms(Input@5, Seconds, (Ms * 10) + 4); + + [<<"5"/utf8>> | Input@6] when Ms < 100000 -> + parse_time_ms(Input@6, Seconds, (Ms * 10) + 5); + + [<<"6"/utf8>> | Input@7] when Ms < 100000 -> + parse_time_ms(Input@7, Seconds, (Ms * 10) + 6); + + [<<"7"/utf8>> | Input@8] when Ms < 100000 -> + parse_time_ms(Input@8, Seconds, (Ms * 10) + 7); + + [<<"8"/utf8>> | Input@9] when Ms < 100000 -> + parse_time_ms(Input@9, Seconds, (Ms * 10) + 8); + + [<<"9"/utf8>> | Input@10] when Ms < 100000 -> + parse_time_ms(Input@10, Seconds, (Ms * 10) + 9); + + _ -> + {ok, {{Seconds, Ms}, Input}} + end. + +-spec parse_number_under_60(list(binary()), binary()) -> {ok, + {integer(), list(binary())}} | + {error, parse_error()}. +parse_number_under_60(Input, Expected) -> + case Input of + [<<"0"/utf8>>, <<"0"/utf8>> | Input@1] -> + {ok, {0, Input@1}}; + + [<<"0"/utf8>>, <<"1"/utf8>> | Input@2] -> + {ok, {1, Input@2}}; + + [<<"0"/utf8>>, <<"2"/utf8>> | Input@3] -> + {ok, {2, Input@3}}; + + [<<"0"/utf8>>, <<"3"/utf8>> | Input@4] -> + {ok, {3, Input@4}}; + + [<<"0"/utf8>>, <<"4"/utf8>> | Input@5] -> + {ok, {4, Input@5}}; + + [<<"0"/utf8>>, <<"5"/utf8>> | Input@6] -> + {ok, {5, Input@6}}; + + [<<"0"/utf8>>, <<"6"/utf8>> | Input@7] -> + {ok, {6, Input@7}}; + + [<<"0"/utf8>>, <<"7"/utf8>> | Input@8] -> + {ok, {7, Input@8}}; + + [<<"0"/utf8>>, <<"8"/utf8>> | Input@9] -> + {ok, {8, Input@9}}; + + [<<"0"/utf8>>, <<"9"/utf8>> | Input@10] -> + {ok, {9, Input@10}}; + + [<<"1"/utf8>>, <<"0"/utf8>> | Input@11] -> + {ok, {10, Input@11}}; + + [<<"1"/utf8>>, <<"1"/utf8>> | Input@12] -> + {ok, {11, Input@12}}; + + [<<"1"/utf8>>, <<"2"/utf8>> | Input@13] -> + {ok, {12, Input@13}}; + + [<<"1"/utf8>>, <<"3"/utf8>> | Input@14] -> + {ok, {13, Input@14}}; + + [<<"1"/utf8>>, <<"4"/utf8>> | Input@15] -> + {ok, {14, Input@15}}; + + [<<"1"/utf8>>, <<"5"/utf8>> | Input@16] -> + {ok, {15, Input@16}}; + + [<<"1"/utf8>>, <<"6"/utf8>> | Input@17] -> + {ok, {16, Input@17}}; + + [<<"1"/utf8>>, <<"7"/utf8>> | Input@18] -> + {ok, {17, Input@18}}; + + [<<"1"/utf8>>, <<"8"/utf8>> | Input@19] -> + {ok, {18, Input@19}}; + + [<<"1"/utf8>>, <<"9"/utf8>> | Input@20] -> + {ok, {19, Input@20}}; + + [<<"2"/utf8>>, <<"0"/utf8>> | Input@21] -> + {ok, {20, Input@21}}; + + [<<"2"/utf8>>, <<"1"/utf8>> | Input@22] -> + {ok, {21, Input@22}}; + + [<<"2"/utf8>>, <<"2"/utf8>> | Input@23] -> + {ok, {22, Input@23}}; + + [<<"2"/utf8>>, <<"3"/utf8>> | Input@24] -> + {ok, {23, Input@24}}; + + [<<"2"/utf8>>, <<"4"/utf8>> | Input@25] -> + {ok, {24, Input@25}}; + + [<<"2"/utf8>>, <<"5"/utf8>> | Input@26] -> + {ok, {25, Input@26}}; + + [<<"2"/utf8>>, <<"6"/utf8>> | Input@27] -> + {ok, {26, Input@27}}; + + [<<"2"/utf8>>, <<"7"/utf8>> | Input@28] -> + {ok, {27, Input@28}}; + + [<<"2"/utf8>>, <<"8"/utf8>> | Input@29] -> + {ok, {28, Input@29}}; + + [<<"2"/utf8>>, <<"9"/utf8>> | Input@30] -> + {ok, {29, Input@30}}; + + [<<"3"/utf8>>, <<"0"/utf8>> | Input@31] -> + {ok, {30, Input@31}}; + + [<<"3"/utf8>>, <<"1"/utf8>> | Input@32] -> + {ok, {31, Input@32}}; + + [<<"3"/utf8>>, <<"2"/utf8>> | Input@33] -> + {ok, {32, Input@33}}; + + [<<"3"/utf8>>, <<"3"/utf8>> | Input@34] -> + {ok, {33, Input@34}}; + + [<<"3"/utf8>>, <<"4"/utf8>> | Input@35] -> + {ok, {34, Input@35}}; + + [<<"3"/utf8>>, <<"5"/utf8>> | Input@36] -> + {ok, {35, Input@36}}; + + [<<"3"/utf8>>, <<"6"/utf8>> | Input@37] -> + {ok, {36, Input@37}}; + + [<<"3"/utf8>>, <<"7"/utf8>> | Input@38] -> + {ok, {37, Input@38}}; + + [<<"3"/utf8>>, <<"8"/utf8>> | Input@39] -> + {ok, {38, Input@39}}; + + [<<"3"/utf8>>, <<"9"/utf8>> | Input@40] -> + {ok, {39, Input@40}}; + + [<<"4"/utf8>>, <<"0"/utf8>> | Input@41] -> + {ok, {40, Input@41}}; + + [<<"4"/utf8>>, <<"1"/utf8>> | Input@42] -> + {ok, {41, Input@42}}; + + [<<"4"/utf8>>, <<"2"/utf8>> | Input@43] -> + {ok, {42, Input@43}}; + + [<<"4"/utf8>>, <<"3"/utf8>> | Input@44] -> + {ok, {43, Input@44}}; + + [<<"4"/utf8>>, <<"4"/utf8>> | Input@45] -> + {ok, {44, Input@45}}; + + [<<"4"/utf8>>, <<"5"/utf8>> | Input@46] -> + {ok, {45, Input@46}}; + + [<<"4"/utf8>>, <<"6"/utf8>> | Input@47] -> + {ok, {46, Input@47}}; + + [<<"4"/utf8>>, <<"7"/utf8>> | Input@48] -> + {ok, {47, Input@48}}; + + [<<"4"/utf8>>, <<"8"/utf8>> | Input@49] -> + {ok, {48, Input@49}}; + + [<<"4"/utf8>>, <<"9"/utf8>> | Input@50] -> + {ok, {49, Input@50}}; + + [<<"5"/utf8>>, <<"0"/utf8>> | Input@51] -> + {ok, {50, Input@51}}; + + [<<"5"/utf8>>, <<"1"/utf8>> | Input@52] -> + {ok, {51, Input@52}}; + + [<<"5"/utf8>>, <<"2"/utf8>> | Input@53] -> + {ok, {52, Input@53}}; + + [<<"5"/utf8>>, <<"3"/utf8>> | Input@54] -> + {ok, {53, Input@54}}; + + [<<"5"/utf8>>, <<"4"/utf8>> | Input@55] -> + {ok, {54, Input@55}}; + + [<<"5"/utf8>>, <<"5"/utf8>> | Input@56] -> + {ok, {55, Input@56}}; + + [<<"5"/utf8>>, <<"6"/utf8>> | Input@57] -> + {ok, {56, Input@57}}; + + [<<"5"/utf8>>, <<"7"/utf8>> | Input@58] -> + {ok, {57, Input@58}}; + + [<<"5"/utf8>>, <<"8"/utf8>> | Input@59] -> + {ok, {58, Input@59}}; + + [<<"5"/utf8>>, <<"9"/utf8>> | Input@60] -> + {ok, {59, Input@60}}; + + [G | _] -> + {error, {unexpected, G, Expected}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, Expected}} + end. + +-spec parse_hour_minute(list(binary())) -> {ok, + {{integer(), integer()}, list(binary())}} | + {error, parse_error()}. +parse_hour_minute(Input) -> + do(case Input of + [<<"0"/utf8>>, <<"0"/utf8>>, <<":"/utf8>> | Input@1] -> + {ok, {0, Input@1}}; + + [<<"0"/utf8>>, <<"1"/utf8>>, <<":"/utf8>> | Input@2] -> + {ok, {1, Input@2}}; + + [<<"0"/utf8>>, <<"2"/utf8>>, <<":"/utf8>> | Input@3] -> + {ok, {2, Input@3}}; + + [<<"0"/utf8>>, <<"3"/utf8>>, <<":"/utf8>> | Input@4] -> + {ok, {3, Input@4}}; + + [<<"0"/utf8>>, <<"4"/utf8>>, <<":"/utf8>> | Input@5] -> + {ok, {4, Input@5}}; + + [<<"0"/utf8>>, <<"5"/utf8>>, <<":"/utf8>> | Input@6] -> + {ok, {5, Input@6}}; + + [<<"0"/utf8>>, <<"6"/utf8>>, <<":"/utf8>> | Input@7] -> + {ok, {6, Input@7}}; + + [<<"0"/utf8>>, <<"7"/utf8>>, <<":"/utf8>> | Input@8] -> + {ok, {7, Input@8}}; + + [<<"0"/utf8>>, <<"8"/utf8>>, <<":"/utf8>> | Input@9] -> + {ok, {8, Input@9}}; + + [<<"0"/utf8>>, <<"9"/utf8>>, <<":"/utf8>> | Input@10] -> + {ok, {9, Input@10}}; + + [<<"1"/utf8>>, <<"0"/utf8>>, <<":"/utf8>> | Input@11] -> + {ok, {10, Input@11}}; + + [<<"1"/utf8>>, <<"1"/utf8>>, <<":"/utf8>> | Input@12] -> + {ok, {11, Input@12}}; + + [<<"1"/utf8>>, <<"2"/utf8>>, <<":"/utf8>> | Input@13] -> + {ok, {12, Input@13}}; + + [<<"1"/utf8>>, <<"3"/utf8>>, <<":"/utf8>> | Input@14] -> + {ok, {13, Input@14}}; + + [<<"1"/utf8>>, <<"4"/utf8>>, <<":"/utf8>> | Input@15] -> + {ok, {14, Input@15}}; + + [<<"1"/utf8>>, <<"5"/utf8>>, <<":"/utf8>> | Input@16] -> + {ok, {15, Input@16}}; + + [<<"1"/utf8>>, <<"6"/utf8>>, <<":"/utf8>> | Input@17] -> + {ok, {16, Input@17}}; + + [<<"1"/utf8>>, <<"7"/utf8>>, <<":"/utf8>> | Input@18] -> + {ok, {17, Input@18}}; + + [<<"1"/utf8>>, <<"8"/utf8>>, <<":"/utf8>> | Input@19] -> + {ok, {18, Input@19}}; + + [<<"1"/utf8>>, <<"9"/utf8>>, <<":"/utf8>> | Input@20] -> + {ok, {19, Input@20}}; + + [<<"2"/utf8>>, <<"0"/utf8>>, <<":"/utf8>> | Input@21] -> + {ok, {20, Input@21}}; + + [<<"2"/utf8>>, <<"1"/utf8>>, <<":"/utf8>> | Input@22] -> + {ok, {21, Input@22}}; + + [<<"2"/utf8>>, <<"2"/utf8>>, <<":"/utf8>> | Input@23] -> + {ok, {22, Input@23}}; + + [<<"2"/utf8>>, <<"3"/utf8>>, <<":"/utf8>> | Input@24] -> + {ok, {23, Input@24}}; + + [G | _] -> + {error, {unexpected, G, <<"time"/utf8>>}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"time"/utf8>>}} + end, fun(Hours, Input@25) -> + do( + parse_number_under_60(Input@25, <<"minutes"/utf8>>), + fun(Minutes, Input@26) -> {ok, {{Hours, Minutes}, Input@26}} end + ) + end). + +-spec parse_time_s_ms(list(binary())) -> {ok, + {{integer(), integer()}, list(binary())}} | + {error, parse_error()}. +parse_time_s_ms(Input) -> + case Input of + [<<":"/utf8>> | Input@1] -> + do( + parse_number_under_60(Input@1, <<"seconds"/utf8>>), + fun(Seconds, Input@2) -> case Input@2 of + [<<"."/utf8>> | Input@3] -> + parse_time_ms(Input@3, Seconds, 0); + + _ -> + {ok, {{Seconds, 0}, Input@2}} + end end + ); + + _ -> + {ok, {{0, 0}, Input}} + end. + +-spec parse_time_minute(list(binary()), integer()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_time_minute(Input, Hours) -> + do( + parse_number_under_60(Input, <<"minutes"/utf8>>), + fun(Minutes, Input@1) -> + do( + parse_time_s_ms(Input@1), + fun(_use0, Input@2) -> + {Seconds, Ms} = _use0, + Time = {time_value, Hours, Minutes, Seconds, Ms}, + {ok, {{time, Time}, Input@2}} + end + ) + end + ). + +-spec parse_time_value(list(binary())) -> {ok, {time(), list(binary())}} | + {error, parse_error()}. +parse_time_value(Input) -> + do( + parse_hour_minute(Input), + fun(_use0, Input@1) -> + {Hours, Minutes} = _use0, + do( + parse_time_s_ms(Input@1), + fun(_use0@1, Input@2) -> + {Seconds, Ms} = _use0@1, + Time = {time_value, Hours, Minutes, Seconds, Ms}, + {ok, {Time, Input@2}} + end + ) + end + ). + +-spec parse_offset_hours(list(binary()), sign()) -> {ok, + {offset(), list(binary())}} | + {error, parse_error()}. +parse_offset_hours(Input, Sign) -> + do( + parse_hour_minute(Input), + fun(_use0, Input@1) -> + {Hours, Minutes} = _use0, + {ok, {{offset, Sign, Hours, Minutes}, Input@1}} + end + ). + +-spec parse_offset(list(binary())) -> {ok, {offset(), list(binary())}} | + {error, parse_error()}. +parse_offset(Input) -> + case Input of + [<<"Z"/utf8>> | Input@1] -> + {ok, {{offset, positive, 0, 0}, Input@1}}; + + [<<"+"/utf8>> | Input@2] -> + parse_offset_hours(Input@2, positive); + + [<<"-"/utf8>> | Input@3] -> + parse_offset_hours(Input@3, negative); + + _ -> + {ok, {local, Input}} + end. + +-spec parse_date_end(list(binary()), integer(), integer(), integer()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_date_end(Input, Year, Month, Day) -> + Date = {date_value, Year, Month, Day}, + case Input of + [<<" "/utf8>> | Input@1] -> + do( + parse_time_value(Input@1), + fun(Time, Input@2) -> + do( + parse_offset(Input@2), + fun(Offset, Input@3) -> + {ok, + {{date_time, + {date_time_value, Date, Time, Offset}}, + Input@3}} + end + ) + end + ); + + [<<"T"/utf8>> | Input@1] -> + do( + parse_time_value(Input@1), + fun(Time, Input@2) -> + do( + parse_offset(Input@2), + fun(Offset, Input@3) -> + {ok, + {{date_time, + {date_time_value, Date, Time, Offset}}, + Input@3}} + end + ) + end + ); + + _ -> + {ok, {{date, Date}, Input}} + end. + +-spec parse_date_day(list(binary()), integer(), integer()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_date_day(Input, Year, Month) -> + case Input of + [<<"0"/utf8>>, <<"1"/utf8>> | Input@1] -> + parse_date_end(Input@1, Year, Month, 1); + + [<<"0"/utf8>>, <<"2"/utf8>> | Input@2] -> + parse_date_end(Input@2, Year, Month, 2); + + [<<"0"/utf8>>, <<"3"/utf8>> | Input@3] -> + parse_date_end(Input@3, Year, Month, 3); + + [<<"0"/utf8>>, <<"4"/utf8>> | Input@4] -> + parse_date_end(Input@4, Year, Month, 4); + + [<<"0"/utf8>>, <<"5"/utf8>> | Input@5] -> + parse_date_end(Input@5, Year, Month, 5); + + [<<"0"/utf8>>, <<"6"/utf8>> | Input@6] -> + parse_date_end(Input@6, Year, Month, 6); + + [<<"0"/utf8>>, <<"7"/utf8>> | Input@7] -> + parse_date_end(Input@7, Year, Month, 7); + + [<<"0"/utf8>>, <<"8"/utf8>> | Input@8] -> + parse_date_end(Input@8, Year, Month, 8); + + [<<"0"/utf8>>, <<"9"/utf8>> | Input@9] -> + parse_date_end(Input@9, Year, Month, 9); + + [<<"1"/utf8>>, <<"0"/utf8>> | Input@10] -> + parse_date_end(Input@10, Year, Month, 10); + + [<<"1"/utf8>>, <<"1"/utf8>> | Input@11] -> + parse_date_end(Input@11, Year, Month, 11); + + [<<"1"/utf8>>, <<"2"/utf8>> | Input@12] -> + parse_date_end(Input@12, Year, Month, 12); + + [<<"1"/utf8>>, <<"3"/utf8>> | Input@13] -> + parse_date_end(Input@13, Year, Month, 13); + + [<<"1"/utf8>>, <<"4"/utf8>> | Input@14] -> + parse_date_end(Input@14, Year, Month, 14); + + [<<"1"/utf8>>, <<"5"/utf8>> | Input@15] -> + parse_date_end(Input@15, Year, Month, 15); + + [<<"1"/utf8>>, <<"6"/utf8>> | Input@16] -> + parse_date_end(Input@16, Year, Month, 16); + + [<<"1"/utf8>>, <<"7"/utf8>> | Input@17] -> + parse_date_end(Input@17, Year, Month, 17); + + [<<"1"/utf8>>, <<"8"/utf8>> | Input@18] -> + parse_date_end(Input@18, Year, Month, 18); + + [<<"1"/utf8>>, <<"9"/utf8>> | Input@19] -> + parse_date_end(Input@19, Year, Month, 19); + + [<<"2"/utf8>>, <<"0"/utf8>> | Input@20] -> + parse_date_end(Input@20, Year, Month, 20); + + [<<"2"/utf8>>, <<"1"/utf8>> | Input@21] -> + parse_date_end(Input@21, Year, Month, 21); + + [<<"2"/utf8>>, <<"2"/utf8>> | Input@22] -> + parse_date_end(Input@22, Year, Month, 22); + + [<<"2"/utf8>>, <<"3"/utf8>> | Input@23] -> + parse_date_end(Input@23, Year, Month, 23); + + [<<"2"/utf8>>, <<"4"/utf8>> | Input@24] -> + parse_date_end(Input@24, Year, Month, 24); + + [<<"2"/utf8>>, <<"5"/utf8>> | Input@25] -> + parse_date_end(Input@25, Year, Month, 25); + + [<<"2"/utf8>>, <<"6"/utf8>> | Input@26] -> + parse_date_end(Input@26, Year, Month, 26); + + [<<"2"/utf8>>, <<"7"/utf8>> | Input@27] -> + parse_date_end(Input@27, Year, Month, 27); + + [<<"2"/utf8>>, <<"8"/utf8>> | Input@28] -> + parse_date_end(Input@28, Year, Month, 28); + + [<<"2"/utf8>>, <<"9"/utf8>> | Input@29] -> + parse_date_end(Input@29, Year, Month, 29); + + [<<"3"/utf8>>, <<"0"/utf8>> | Input@30] -> + parse_date_end(Input@30, Year, Month, 30); + + [<<"3"/utf8>>, <<"1"/utf8>> | Input@31] -> + parse_date_end(Input@31, Year, Month, 31); + + [G | _] -> + {error, {unexpected, G, <<"date day"/utf8>>}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"date day"/utf8>>}} + end. + +-spec parse_date(list(binary()), integer()) -> {ok, {toml(), list(binary())}} | + {error, parse_error()}. +parse_date(Input, Year) -> + case Input of + [<<"0"/utf8>>, <<"1"/utf8>>, <<"-"/utf8>> | Input@1] -> + parse_date_day(Input@1, Year, 1); + + [<<"0"/utf8>>, <<"2"/utf8>>, <<"-"/utf8>> | Input@2] -> + parse_date_day(Input@2, Year, 2); + + [<<"0"/utf8>>, <<"3"/utf8>>, <<"-"/utf8>> | Input@3] -> + parse_date_day(Input@3, Year, 3); + + [<<"0"/utf8>>, <<"4"/utf8>>, <<"-"/utf8>> | Input@4] -> + parse_date_day(Input@4, Year, 4); + + [<<"0"/utf8>>, <<"5"/utf8>>, <<"-"/utf8>> | Input@5] -> + parse_date_day(Input@5, Year, 5); + + [<<"0"/utf8>>, <<"6"/utf8>>, <<"-"/utf8>> | Input@6] -> + parse_date_day(Input@6, Year, 6); + + [<<"0"/utf8>>, <<"7"/utf8>>, <<"-"/utf8>> | Input@7] -> + parse_date_day(Input@7, Year, 7); + + [<<"0"/utf8>>, <<"8"/utf8>>, <<"-"/utf8>> | Input@8] -> + parse_date_day(Input@8, Year, 8); + + [<<"0"/utf8>>, <<"9"/utf8>>, <<"-"/utf8>> | Input@9] -> + parse_date_day(Input@9, Year, 9); + + [<<"1"/utf8>>, <<"0"/utf8>>, <<"-"/utf8>> | Input@10] -> + parse_date_day(Input@10, Year, 10); + + [<<"1"/utf8>>, <<"1"/utf8>>, <<"-"/utf8>> | Input@11] -> + parse_date_day(Input@11, Year, 11); + + [<<"1"/utf8>>, <<"2"/utf8>>, <<"-"/utf8>> | Input@12] -> + parse_date_day(Input@12, Year, 12); + + [G | _] -> + {error, {unexpected, G, <<"date month"/utf8>>}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"date month"/utf8>>}} + end. + +-spec parse_number(list(binary()), integer(), sign()) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_number(Input, Number, Sign) -> + case Input of + [<<"_"/utf8>> | Input@1] -> + parse_number(Input@1, Number, Sign); + + [<<"0"/utf8>> | Input@2] -> + parse_number(Input@2, (Number * 10) + 0, Sign); + + [<<"1"/utf8>> | Input@3] -> + parse_number(Input@3, (Number * 10) + 1, Sign); + + [<<"2"/utf8>> | Input@4] -> + parse_number(Input@4, (Number * 10) + 2, Sign); + + [<<"3"/utf8>> | Input@5] -> + parse_number(Input@5, (Number * 10) + 3, Sign); + + [<<"4"/utf8>> | Input@6] -> + parse_number(Input@6, (Number * 10) + 4, Sign); + + [<<"5"/utf8>> | Input@7] -> + parse_number(Input@7, (Number * 10) + 5, Sign); + + [<<"6"/utf8>> | Input@8] -> + parse_number(Input@8, (Number * 10) + 6, Sign); + + [<<"7"/utf8>> | Input@9] -> + parse_number(Input@9, (Number * 10) + 7, Sign); + + [<<"8"/utf8>> | Input@10] -> + parse_number(Input@10, (Number * 10) + 8, Sign); + + [<<"9"/utf8>> | Input@11] -> + parse_number(Input@11, (Number * 10) + 9, Sign); + + [<<"-"/utf8>> | Input@12] -> + parse_date(Input@12, Number); + + [<<":"/utf8>> | Input@13] when Number < 24 -> + parse_time_minute(Input@13, Number); + + [<<"."/utf8>> | Input@14] -> + parse_float(Input@14, gleam@int:to_float(Number), Sign, 0.1); + + [<<"e"/utf8>>, <<"+"/utf8>> | Input@15] -> + parse_exponent( + Input@15, + gleam@int:to_float(Number), + Sign, + 0, + positive + ); + + [<<"e"/utf8>>, <<"-"/utf8>> | Input@16] -> + parse_exponent( + Input@16, + gleam@int:to_float(Number), + Sign, + 0, + negative + ); + + [<<"e"/utf8>> | Input@17] -> + parse_exponent( + Input@17, + gleam@int:to_float(Number), + Sign, + 0, + positive + ); + + [<<"E"/utf8>>, <<"+"/utf8>> | Input@18] -> + parse_exponent( + Input@18, + gleam@int:to_float(Number), + Sign, + 0, + positive + ); + + [<<"E"/utf8>>, <<"-"/utf8>> | Input@19] -> + parse_exponent( + Input@19, + gleam@int:to_float(Number), + Sign, + 0, + negative + ); + + [<<"E"/utf8>> | Input@20] -> + parse_exponent( + Input@20, + gleam@int:to_float(Number), + Sign, + 0, + positive + ); + + Input@21 -> + Number@1 = case Sign of + positive -> + Number; + + negative -> + - Number + end, + {ok, {{int, Number@1}, Input@21}} + end. + +-spec reverse_arrays_of_tables(toml()) -> toml(). +reverse_arrays_of_tables(Toml) -> + case Toml of + {array_of_tables, Tables} -> + {array_of_tables, reverse_arrays_of_tables_array(Tables, [])}; + + {table, Table} -> + {table, reverse_arrays_of_tables_table(Table)}; + + _ -> + Toml + end. + +-spec reverse_arrays_of_tables_table(gleam@map:map_(binary(), toml())) -> gleam@map:map_(binary(), toml()). +reverse_arrays_of_tables_table(Table) -> + gleam@map:map_values(Table, fun(_, V) -> reverse_arrays_of_tables(V) end). + +-spec reverse_arrays_of_tables_array( + list(gleam@map:map_(binary(), toml())), + list(gleam@map:map_(binary(), toml())) +) -> list(gleam@map:map_(binary(), toml())). +reverse_arrays_of_tables_array(Array, Acc) -> + case Array of + [] -> + Acc; + + [First | Rest] -> + First@1 = reverse_arrays_of_tables_table(First), + reverse_arrays_of_tables_array(Rest, [First@1 | Acc]) + end. + +-spec parse_inline_table_property( + list(binary()), + gleam@map:map_(binary(), toml()) +) -> {ok, {gleam@map:map_(binary(), toml()), list(binary())}} | + {error, parse_error()}. +parse_inline_table_property(Input, Properties) -> + Input@1 = skip_whitespace(Input), + do( + parse_key(Input@1, []), + fun(Key, Input@2) -> + Input@3 = skip_line_whitespace(Input@2), + expect( + Input@3, + <<"="/utf8>>, + fun(Input@4) -> + Input@5 = skip_line_whitespace(Input@4), + do( + parse_value(Input@5), + fun(Value, Input@6) -> + case insert(Properties, Key, Value) of + {ok, Properties@1} -> + {ok, {Properties@1, Input@6}}; + + {error, E} -> + {error, E} + end + end + ) + end + ) + end + ). + +-spec parse_value(list(binary())) -> {ok, {toml(), list(binary())}} | + {error, parse_error()}. +parse_value(Input) -> + case Input of + [<<"t"/utf8>>, <<"r"/utf8>>, <<"u"/utf8>>, <<"e"/utf8>> | Input@1] -> + {ok, {{bool, true}, Input@1}}; + + [<<"f"/utf8>>, + <<"a"/utf8>>, + <<"l"/utf8>>, + <<"s"/utf8>>, + <<"e"/utf8>> | + Input@2] -> + {ok, {{bool, false}, Input@2}}; + + [<<"n"/utf8>>, <<"a"/utf8>>, <<"n"/utf8>> | Input@3] -> + {ok, {{nan, positive}, Input@3}}; + + [<<"+"/utf8>>, <<"n"/utf8>>, <<"a"/utf8>>, <<"n"/utf8>> | Input@4] -> + {ok, {{nan, positive}, Input@4}}; + + [<<"-"/utf8>>, <<"n"/utf8>>, <<"a"/utf8>>, <<"n"/utf8>> | Input@5] -> + {ok, {{nan, negative}, Input@5}}; + + [<<"i"/utf8>>, <<"n"/utf8>>, <<"f"/utf8>> | Input@6] -> + {ok, {{infinity, positive}, Input@6}}; + + [<<"+"/utf8>>, <<"i"/utf8>>, <<"n"/utf8>>, <<"f"/utf8>> | Input@7] -> + {ok, {{infinity, positive}, Input@7}}; + + [<<"-"/utf8>>, <<"i"/utf8>>, <<"n"/utf8>>, <<"f"/utf8>> | Input@8] -> + {ok, {{infinity, negative}, Input@8}}; + + [<<"["/utf8>> | Input@9] -> + parse_array(Input@9, []); + + [<<"{"/utf8>> | Input@10] -> + parse_inline_table(Input@10, gleam@map:new()); + + [<<"0"/utf8>>, <<"x"/utf8>> | Input@11] -> + parse_hex(Input@11, 0, positive); + + [<<"+"/utf8>>, <<"0"/utf8>>, <<"x"/utf8>> | Input@12] -> + parse_hex(Input@12, 0, positive); + + [<<"-"/utf8>>, <<"0"/utf8>>, <<"x"/utf8>> | Input@13] -> + parse_hex(Input@13, 0, negative); + + [<<"0"/utf8>>, <<"o"/utf8>> | Input@14] -> + parse_octal(Input@14, 0, positive); + + [<<"+"/utf8>>, <<"0"/utf8>>, <<"o"/utf8>> | Input@15] -> + parse_octal(Input@15, 0, positive); + + [<<"-"/utf8>>, <<"0"/utf8>>, <<"o"/utf8>> | Input@16] -> + parse_octal(Input@16, 0, negative); + + [<<"0"/utf8>>, <<"b"/utf8>> | Input@17] -> + parse_binary(Input@17, 0, positive); + + [<<"+"/utf8>>, <<"0"/utf8>>, <<"b"/utf8>> | Input@18] -> + parse_binary(Input@18, 0, positive); + + [<<"-"/utf8>>, <<"0"/utf8>>, <<"b"/utf8>> | Input@19] -> + parse_binary(Input@19, 0, negative); + + [<<"+"/utf8>> | Input@20] -> + parse_number(Input@20, 0, positive); + + [<<"-"/utf8>> | Input@21] -> + parse_number(Input@21, 0, negative); + + [<<"0"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"1"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"2"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"3"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"4"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"5"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"6"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"7"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"8"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"9"/utf8>> | _] -> + parse_number(Input, 0, positive); + + [<<"\""/utf8>>, <<"\""/utf8>>, <<"\""/utf8>> | Input@22] -> + parse_multi_line_string(Input@22, <<""/utf8>>); + + [<<"\""/utf8>> | Input@23] -> + parse_string(Input@23, <<""/utf8>>); + + [<<"'"/utf8>>, <<"'"/utf8>>, <<"'"/utf8>> | Input@24] -> + parse_multi_line_literal_string(Input@24, <<""/utf8>>); + + [<<"'"/utf8>> | Input@25] -> + parse_literal_string(Input@25, <<""/utf8>>); + + [G | _] -> + {error, {unexpected, G, <<"value"/utf8>>}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"value"/utf8>>}} + end. + +-spec parse_inline_table(list(binary()), gleam@map:map_(binary(), toml())) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_inline_table(Input, Properties) -> + Input@1 = skip_whitespace(Input), + case Input@1 of + [<<"}"/utf8>> | Input@2] -> + {ok, {{inline_table, Properties}, Input@2}}; + + _ -> + case parse_inline_table_property(Input@1, Properties) of + {ok, {Properties@1, Input@3}} -> + Input@4 = skip_whitespace(Input@3), + case Input@4 of + [<<"}"/utf8>> | Input@5] -> + {ok, {{inline_table, Properties@1}, Input@5}}; + + [<<","/utf8>> | Input@6] -> + Input@7 = skip_whitespace(Input@6), + parse_inline_table(Input@7, Properties@1); + + [G | _] -> + {error, {unexpected, G, <<"}"/utf8>>}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"}"/utf8>>}} + end; + + {error, E} -> + {error, E} + end + end. + +-spec parse_key_value(list(binary()), gleam@map:map_(binary(), toml())) -> {ok, + {gleam@map:map_(binary(), toml()), list(binary())}} | + {error, parse_error()}. +parse_key_value(Input, Toml) -> + do( + parse_key(Input, []), + fun(Key, Input@1) -> + Input@2 = skip_line_whitespace(Input@1), + expect( + Input@2, + <<"="/utf8>>, + fun(Input@3) -> + Input@4 = skip_line_whitespace(Input@3), + do( + parse_value(Input@4), + fun(Value, Input@5) -> case insert(Toml, Key, Value) of + {ok, Toml@1} -> + {ok, {Toml@1, Input@5}}; + + {error, E} -> + {error, E} + end end + ) + end + ) + end + ). + +-spec parse_table(list(binary()), gleam@map:map_(binary(), toml())) -> {ok, + {gleam@map:map_(binary(), toml()), list(binary())}} | + {error, parse_error()}. +parse_table(Input, Toml) -> + Input@1 = skip_whitespace(Input), + case Input@1 of + [<<"["/utf8>> | _] -> + {ok, {Toml, Input@1}}; + + [] -> + {ok, {Toml, Input@1}}; + + _ -> + case parse_key_value(Input@1, Toml) of + {ok, {Toml@1, Input@2}} -> + case skip_line_whitespace(Input@2) of + [] -> + {ok, {Toml@1, []}}; + + [<<"\n"/utf8>> | In] -> + parse_table(In, Toml@1); + + [<<"\r\n"/utf8>> | In] -> + parse_table(In, Toml@1); + + [G | _] -> + {error, {unexpected, G, <<"\n"/utf8>>}} + end; + + E -> + E + end + end. + +-spec parse_array_of_tables(list(binary())) -> {ok, + {{list(binary()), gleam@map:map_(binary(), toml())}, list(binary())}} | + {error, parse_error()}. +parse_array_of_tables(Input) -> + Input@1 = skip_line_whitespace(Input), + do( + parse_key(Input@1, []), + fun(Key, Input@2) -> + expect( + Input@2, + <<"]"/utf8>>, + fun(Input@3) -> + expect( + Input@3, + <<"]"/utf8>>, + fun(Input@4) -> + do( + parse_table(Input@4, gleam@map:new()), + fun(Table, Input@5) -> + {ok, {{Key, Table}, Input@5}} + end + ) + end + ) + end + ) + end + ). + +-spec parse_table_and_header(list(binary())) -> {ok, + {{list(binary()), gleam@map:map_(binary(), toml())}, list(binary())}} | + {error, parse_error()}. +parse_table_and_header(Input) -> + do( + parse_table_header(Input), + fun(Key, Input@1) -> + do( + parse_table(Input@1, gleam@map:new()), + fun(Table, Input@2) -> {ok, {{Key, Table}, Input@2}} end + ) + end + ). + +-spec parse_tables(list(binary()), gleam@map:map_(binary(), toml())) -> {ok, + gleam@map:map_(binary(), toml())} | + {error, parse_error()}. +parse_tables(Input, Toml) -> + case Input of + [<<"["/utf8>>, <<"["/utf8>> | Input@1] -> + case parse_array_of_tables(Input@1) of + {error, E} -> + {error, E}; + + {ok, {{Key, Table}, Input@2}} -> + case insert(Toml, Key, {array_of_tables, [Table]}) of + {ok, Toml@1} -> + parse_tables(Input@2, Toml@1); + + {error, E@1} -> + {error, E@1} + end + end; + + [<<"["/utf8>> | Input@3] -> + case parse_table_and_header(Input@3) of + {error, E@2} -> + {error, E@2}; + + {ok, {{Key@1, Table@1}, Input@4}} -> + case insert(Toml, Key@1, {table, Table@1}) of + {ok, Toml@2} -> + parse_tables(Input@4, Toml@2); + + {error, E@3} -> + {error, E@3} + end + end; + + [G | _] -> + {error, {unexpected, G, <<"["/utf8>>}}; + + [] -> + {ok, Toml} + end. + +-spec parse(binary()) -> {ok, gleam@map:map_(binary(), toml())} | + {error, parse_error()}. +parse(Input) -> + Input@1 = gleam@string:to_graphemes(Input), + Input@2 = drop_comments(Input@1, []), + Input@3 = skip_whitespace(Input@2), + do( + parse_table(Input@3, gleam@map:new()), + fun(Toml, Input@4) -> case parse_tables(Input@4, Toml) of + {ok, Toml@1} -> + {ok, reverse_arrays_of_tables_table(Toml@1)}; + + {error, E} -> + {error, E} + end end + ). + +-spec parse_array(list(binary()), list(toml())) -> {ok, + {toml(), list(binary())}} | + {error, parse_error()}. +parse_array(Input, Elements) -> + Input@1 = skip_whitespace(Input), + case Input@1 of + [<<"]"/utf8>> | Input@2] -> + {ok, {{array, gleam@list:reverse(Elements)}, Input@2}}; + + _ -> + do( + parse_value(Input@1), + fun(Element, Input@3) -> + Elements@1 = [Element | Elements], + Input@4 = skip_whitespace(Input@3), + case Input@4 of + [<<"]"/utf8>> | Input@5] -> + {ok, + {{array, gleam@list:reverse(Elements@1)}, + Input@5}}; + + [<<","/utf8>> | Input@6] -> + Input@7 = skip_whitespace(Input@6), + parse_array(Input@7, Elements@1); + + [G | _] -> + {error, {unexpected, G, <<"]"/utf8>>}}; + + [] -> + {error, {unexpected, <<"EOF"/utf8>>, <<"]"/utf8>>}} + end + end + ) + end. diff --git a/aoc2023/build/packages/tom/src/tom.gleam b/aoc2023/build/packages/tom/src/tom.gleam new file mode 100644 index 0000000..e19ce3e --- /dev/null +++ b/aoc2023/build/packages/tom/src/tom.gleam @@ -0,0 +1,1317 @@ +//// A pure Gleam TOML parser! +//// +//// ```gleam +//// import tom +//// +//// const config = " +//// [person] +//// name = \"Lucy\" +//// is_cool = true +//// " +//// +//// pub fn main() { +//// // Parse a string of TOML +//// let assert Ok(parsed) = tom.parse(config) +//// +//// // Now you can work with the data directly, or you can use the `get_*` +//// // functions to retrieve values. +//// +//// tom.get_string(parsed, ["person", "name"]) +//// // -> Ok("Lucy") +//// +//// let is_cool = tom.get_bool(parsed, ["person", "is_cool"]) +//// // -> Ok(True) +//// } +//// ``` + +import gleam/int +import gleam/list +import gleam/float +import gleam/string +import gleam/result +import gleam/map.{type Map} + +/// A TOML document. +pub type Toml { + Int(Int) + Float(Float) + /// Infinity is a valid number in TOML but Gleam does not support it, so this + /// variant represents the infinity values. + Infinity(Sign) + /// NaN is a valid number in TOML but Gleam does not support it, so this + /// variant represents the NaN values. + Nan(Sign) + Bool(Bool) + String(String) + Date(Date) + Time(Time) + DateTime(DateTime) + Array(List(Toml)) + ArrayOfTables(List(Map(String, Toml))) + Table(Map(String, Toml)) + InlineTable(Map(String, Toml)) +} + +pub type DateTime { + DateTimeValue(date: Date, time: Time, offset: Offset) +} + +pub type Date { + DateValue(year: Int, month: Int, day: Int) +} + +pub type Time { + TimeValue(hour: Int, minute: Int, second: Int, millisecond: Int) +} + +pub type Offset { + Local + Offset(direction: Sign, hours: Int, minutes: Int) +} + +pub type Sign { + Positive + Negative +} + +/// An error that can occur when parsing a TOML document. +pub type ParseError { + /// An unexpected character was encountered when parsing the document. + Unexpected(got: String, expected: String) + /// More than one items have the same key in the document. + KeyAlreadyInUse(key: List(String)) +} + +type Tokens = + List(String) + +type Parsed(a) = + Result(#(a, Tokens), ParseError) + +/// A number of any kind, returned by the `get_number` function. +pub type Number { + NumberInt(Int) + NumberFloat(Float) + NumberInfinity(Sign) + NumberNan(Sign) +} + +/// An error that can occur when retrieving a value from a TOML document with +/// one of the `get_*` functions. +pub type GetError { + /// There was no value at the given key. + NotFound(key: List(String)) + /// The value at the given key was not of the expected type. + WrongType(key: List(String), expected: String, got: String) +} + +// TODO: test +/// Get a value of any type from a TOML document. +/// +/// ## Examples +/// +/// ```gleam +/// let assert Ok(parsed) = parse("a.b.c = 1") +/// get(parsed, ["a", "b", "c"]) +/// // -> Ok(Int(1)) +/// ``` +/// +pub fn get(toml: Map(String, Toml), key: List(String)) -> Result(Toml, GetError) { + case key { + [] -> Error(NotFound([])) + [k] -> result.replace_error(map.get(toml, k), NotFound([k])) + [k, ..key] -> { + case map.get(toml, k) { + Ok(Table(t)) -> push_key(get(t, key), k) + Ok(other) -> Error(WrongType([k], "Table", classify(other))) + Error(_) -> Error(NotFound([k])) + } + } + } +} + +// TODO: test +/// Get an int from a TOML document. +/// +/// ## Examples +/// +/// ```gleam +/// let assert Ok(parsed) = parse("a.b.c = 1") +/// get_int(parsed, ["a", "b", "c"]) +/// // -> Ok(1) +/// ``` +/// +pub fn get_int( + toml: Map(String, Toml), + key: List(String), +) -> Result(Int, GetError) { + case get(toml, key) { + Ok(Int(i)) -> Ok(i) + Ok(other) -> Error(WrongType(key, "Int", classify(other))) + Error(e) -> Error(e) + } +} + +// TODO: test +/// Get a float from a TOML document. +/// +/// ## Examples +/// +/// ```gleam +/// let assert Ok(parsed) = parse("a.b.c = 1.1") +/// get_float(parsed, ["a", "b", "c"]) +/// // -> Ok(1.1) +/// ``` +/// +pub fn get_float( + toml: Map(String, Toml), + key: List(String), +) -> Result(Float, GetError) { + case get(toml, key) { + Ok(Float(i)) -> Ok(i) + Ok(other) -> Error(WrongType(key, "Float", classify(other))) + Error(e) -> Error(e) + } +} + +// TODO: test +/// Get a bool from a TOML document. +/// +/// ## Examples +/// +/// ```gleam +/// let assert Ok(parsed) = parse("a.b.c = true") +/// get_bool(parsed, ["a", "b", "c"]) +/// // -> Ok(True) +/// ``` +/// +pub fn get_bool( + toml: Map(String, Toml), + key: List(String), +) -> Result(Bool, GetError) { + case get(toml, key) { + Ok(Bool(i)) -> Ok(i) + Ok(other) -> Error(WrongType(key, "Bool", classify(other))) + Error(e) -> Error(e) + } +} + +// TODO: test +/// Get a string from a TOML document. +/// +/// ## Examples +/// +/// ```gleam +/// let assert Ok(parsed) = parse("a.b.c = \"ok\"") +/// get_string(parsed, ["a", "b", "c"]) +/// // -> Ok("ok") +/// ``` +/// +pub fn get_string( + toml: Map(String, Toml), + key: List(String), +) -> Result(String, GetError) { + case get(toml, key) { + Ok(String(i)) -> Ok(i) + Ok(other) -> Error(WrongType(key, "String", classify(other))) + Error(e) -> Error(e) + } +} + +// TODO: test +/// Get a date from a TOML document. +/// +/// ## Examples +/// +/// ```gleam +/// let assert Ok(parsed) = parse("a.b.c = 1979-05-27") +/// get_date(parsed, ["a", "b", "c"]) +/// // -> Ok("1979-05-27") +/// ``` +/// +pub fn get_date( + toml: Map(String, Toml), + key: List(String), +) -> Result(Date, GetError) { + case get(toml, key) { + Ok(Date(i)) -> Ok(i) + Ok(other) -> Error(WrongType(key, "Date", classify(other))) + Error(e) -> Error(e) + } +} + +// TODO: test +/// Get a time from a TOML document. +/// +/// ## Examples +/// +/// ```gleam +/// let assert Ok(parsed) = parse("a.b.c = 07:32:00") +/// get_time(parsed, ["a", "b", "c"]) +/// // -> Ok("07:32:00") +/// ``` +/// +pub fn get_time( + toml: Map(String, Toml), + key: List(String), +) -> Result(Time, GetError) { + case get(toml, key) { + Ok(Time(i)) -> Ok(i) + Ok(other) -> Error(WrongType(key, "Time", classify(other))) + Error(e) -> Error(e) + } +} + +// TODO: test +/// Get a date-time from a TOML document. +/// +/// ## Examples +/// +/// ```gleam +/// let assert Ok(parsed) = parse("a.b.c = 1979-05-27T07:32:00") +/// get_date_time(parsed, ["a", "b", "c"]) +/// // -> Ok("1979-05-27T07:32:00") +/// ``` +/// +pub fn get_date_time( + toml: Map(String, Toml), + key: List(String), +) -> Result(DateTime, GetError) { + case get(toml, key) { + Ok(DateTime(i)) -> Ok(i) + Ok(other) -> Error(WrongType(key, "DateTime", classify(other))) + Error(e) -> Error(e) + } +} + +// TODO: test +/// Get an array from a TOML document. +/// +/// ## Examples +/// +/// ```gleam +/// let assert Ok(parsed) = parse("a.b.c = [1, 2]") +/// get_array(parsed, ["a", "b", "c"]) +/// // -> Ok([Int(1), Int(2)]) +/// ``` +/// +pub fn get_array( + toml: Map(String, Toml), + key: List(String), +) -> Result(List(Toml), GetError) { + case get(toml, key) { + Ok(Array(i)) -> Ok(i) + Ok(ArrayOfTables(i)) -> Ok(list.map(i, Table)) + Ok(other) -> Error(WrongType(key, "Array", classify(other))) + Error(e) -> Error(e) + } +} + +// TODO: test +/// Get a table from a TOML document. +/// +/// ## Examples +/// +/// ```gleam +/// let assert Ok(parsed) = parse("a.b.c = { d = 1 }") +/// get_table(parsed, ["a", "b", "c"]) +/// // -> Ok(map.from_list([#("d", Int(1))])) +/// ``` +/// +pub fn get_table( + toml: Map(String, Toml), + key: List(String), +) -> Result(Map(String, Toml), GetError) { + case get(toml, key) { + Ok(Table(i)) -> Ok(i) + Ok(InlineTable(i)) -> Ok(i) + Ok(other) -> Error(WrongType(key, "Table", classify(other))) + Error(e) -> Error(e) + } +} + +// TODO: test +/// Get a number of any kind from a TOML document. +/// This could be an int, a float, a NaN, or an infinity. +/// +/// ## Examples +/// +/// ```gleam +/// let assert Ok(parsed) = parse("a.b.c = { d = inf }") +/// get_number(parsed, ["a", "b", "c"]) +/// // -> Ok(NumberInfinity(Positive))) +/// ``` +/// +pub fn get_number( + toml: Map(String, Toml), + key: List(String), +) -> Result(Number, GetError) { + case get(toml, key) { + Ok(Int(x)) -> Ok(NumberInt(x)) + Ok(Float(x)) -> Ok(NumberFloat(x)) + Ok(Nan(x)) -> Ok(NumberNan(x)) + Ok(Infinity(x)) -> Ok(NumberInfinity(x)) + Ok(other) -> Error(WrongType(key, "Number", classify(other))) + Error(e) -> Error(e) + } +} + +fn classify(toml: Toml) -> String { + case toml { + Int(_) -> "Int" + Float(_) -> "Float" + Nan(Positive) -> "NaN" + Nan(Negative) -> "Negative NaN" + Infinity(Positive) -> "Infinity" + Infinity(Negative) -> "Negative Infinity" + Bool(_) -> "Bool" + String(_) -> "String" + Date(_) -> "Date" + Time(_) -> "Time" + DateTime(_) -> "DateTime" + Array(_) -> "Array" + ArrayOfTables(_) -> "Array" + Table(_) -> "Table" + InlineTable(_) -> "Table" + } +} + +fn push_key(result: Result(t, GetError), key: String) -> Result(t, GetError) { + case result { + Ok(t) -> Ok(t) + Error(NotFound(path)) -> Error(NotFound([key, ..path])) + Error(WrongType(path, expected, got)) -> + Error(WrongType([key, ..path], expected, got)) + } +} + +pub fn parse(input: String) -> Result(Map(String, Toml), ParseError) { + let input = string.to_graphemes(input) + let input = drop_comments(input, []) + let input = skip_whitespace(input) + use toml, input <- do(parse_table(input, map.new())) + case parse_tables(input, toml) { + Ok(toml) -> Ok(reverse_arrays_of_tables_table(toml)) + Error(e) -> Error(e) + } +} + +fn parse_tables( + input: Tokens, + toml: Map(String, Toml), +) -> Result(Map(String, Toml), ParseError) { + case input { + ["[", "[", ..input] -> { + case parse_array_of_tables(input) { + Error(e) -> Error(e) + Ok(#(#(key, table), input)) -> { + case insert(toml, key, ArrayOfTables([table])) { + Ok(toml) -> parse_tables(input, toml) + Error(e) -> Error(e) + } + } + } + } + ["[", ..input] -> { + case parse_table_and_header(input) { + Error(e) -> Error(e) + Ok(#(#(key, table), input)) -> { + case insert(toml, key, Table(table)) { + Ok(toml) -> parse_tables(input, toml) + Error(e) -> Error(e) + } + } + } + } + [g, ..] -> Error(Unexpected(g, "[")) + [] -> Ok(toml) + } +} + +fn parse_array_of_tables( + input: Tokens, +) -> Parsed(#(List(String), Map(String, Toml))) { + let input = skip_line_whitespace(input) + use key, input <- do(parse_key(input, [])) + use input <- expect(input, "]") + use input <- expect(input, "]") + use table, input <- do(parse_table(input, map.new())) + Ok(#(#(key, table), input)) +} + +fn parse_table_header(input: Tokens) -> Parsed(List(String)) { + let input = skip_line_whitespace(input) + use key, input <- do(parse_key(input, [])) + use input <- expect(input, "]") + let input = skip_line_whitespace(input) + use input <- expect_end_of_line(input) + Ok(#(key, input)) +} + +fn parse_table_and_header( + input: Tokens, +) -> Parsed(#(List(String), Map(String, Toml))) { + use key, input <- do(parse_table_header(input)) + use table, input <- do(parse_table(input, map.new())) + Ok(#(#(key, table), input)) +} + +fn parse_table( + input: Tokens, + toml: Map(String, Toml), +) -> Parsed(Map(String, Toml)) { + let input = skip_whitespace(input) + case input { + ["[", ..] | [] -> Ok(#(toml, input)) + _ -> + case parse_key_value(input, toml) { + Ok(#(toml, input)) -> + case skip_line_whitespace(input) { + [] -> Ok(#(toml, [])) + ["\n", ..in] | ["\r\n", ..in] -> parse_table(in, toml) + [g, ..] -> Error(Unexpected(g, "\n")) + } + e -> e + } + } +} + +fn parse_key_value( + input: Tokens, + toml: Map(String, Toml), +) -> Parsed(Map(String, Toml)) { + use key, input <- do(parse_key(input, [])) + let input = skip_line_whitespace(input) + use input <- expect(input, "=") + let input = skip_line_whitespace(input) + use value, input <- do(parse_value(input)) + case insert(toml, key, value) { + Ok(toml) -> Ok(#(toml, input)) + Error(e) -> Error(e) + } +} + +fn insert( + table: Map(String, Toml), + key: List(String), + value: Toml, +) -> Result(Map(String, Toml), ParseError) { + case insert_loop(table, key, value) { + Ok(table) -> Ok(table) + Error(path) -> Error(KeyAlreadyInUse(path)) + } +} + +fn insert_loop( + table: Map(String, Toml), + key: List(String), + value: Toml, +) -> Result(Map(String, Toml), List(String)) { + case key { + [] -> panic as "unreachable" + [k] -> { + case map.get(table, k) { + Error(Nil) -> Ok(map.insert(table, k, value)) + Ok(old) -> merge(table, k, old, value) + } + } + [k, ..key] -> { + case map.get(table, k) { + Error(Nil) -> { + case insert_loop(map.new(), key, value) { + Ok(inner) -> Ok(map.insert(table, k, Table(inner))) + Error(path) -> Error([k, ..path]) + } + } + Ok(ArrayOfTables([inner, ..rest])) -> { + case insert_loop(inner, key, value) { + Ok(inner) -> + Ok(map.insert(table, k, ArrayOfTables([inner, ..rest]))) + Error(path) -> Error([k, ..path]) + } + } + Ok(Table(inner)) -> { + case insert_loop(inner, key, value) { + Ok(inner) -> Ok(map.insert(table, k, Table(inner))) + Error(path) -> Error([k, ..path]) + } + } + Ok(_) -> Error([k]) + } + } + } +} + +fn merge( + table: Map(String, Toml), + key: String, + old: Toml, + new: Toml, +) -> Result(Map(String, Toml), List(String)) { + case old, new { + // When both are arrays of tables then they are merged together + ArrayOfTables(tables), ArrayOfTables(new) -> + Ok(map.insert(table, key, ArrayOfTables(list.append(new, tables)))) + + _, _ -> Error([key]) + } +} + +fn expect_end_of_line(input: Tokens, next: fn(Tokens) -> Parsed(a)) -> Parsed(a) { + case input { + ["\n", ..input] -> next(input) + ["\r\n", ..input] -> next(input) + [g, ..] -> Error(Unexpected(g, "\n")) + [] -> Error(Unexpected("EOF", "\n")) + } +} + +fn parse_value(input) -> Parsed(Toml) { + case input { + ["t", "r", "u", "e", ..input] -> Ok(#(Bool(True), input)) + ["f", "a", "l", "s", "e", ..input] -> Ok(#(Bool(False), input)) + + ["n", "a", "n", ..input] -> Ok(#(Nan(Positive), input)) + ["+", "n", "a", "n", ..input] -> Ok(#(Nan(Positive), input)) + ["-", "n", "a", "n", ..input] -> Ok(#(Nan(Negative), input)) + + ["i", "n", "f", ..input] -> Ok(#(Infinity(Positive), input)) + ["+", "i", "n", "f", ..input] -> Ok(#(Infinity(Positive), input)) + ["-", "i", "n", "f", ..input] -> Ok(#(Infinity(Negative), input)) + + ["[", ..input] -> parse_array(input, []) + ["{", ..input] -> parse_inline_table(input, map.new()) + + ["0", "x", ..input] -> parse_hex(input, 0, Positive) + ["+", "0", "x", ..input] -> parse_hex(input, 0, Positive) + ["-", "0", "x", ..input] -> parse_hex(input, 0, Negative) + + ["0", "o", ..input] -> parse_octal(input, 0, Positive) + ["+", "0", "o", ..input] -> parse_octal(input, 0, Positive) + ["-", "0", "o", ..input] -> parse_octal(input, 0, Negative) + + ["0", "b", ..input] -> parse_binary(input, 0, Positive) + ["+", "0", "b", ..input] -> parse_binary(input, 0, Positive) + ["-", "0", "b", ..input] -> parse_binary(input, 0, Negative) + + ["+", ..input] -> parse_number(input, 0, Positive) + ["-", ..input] -> parse_number(input, 0, Negative) + ["0", ..] + | ["1", ..] + | ["2", ..] + | ["3", ..] + | ["4", ..] + | ["5", ..] + | ["6", ..] + | ["7", ..] + | ["8", ..] + | ["9", ..] -> parse_number(input, 0, Positive) + + ["\"", "\"", "\"", ..input] -> parse_multi_line_string(input, "") + ["\"", ..input] -> parse_string(input, "") + + ["'", "'", "'", ..input] -> parse_multi_line_literal_string(input, "") + ["'", ..input] -> parse_literal_string(input, "") + + [g, ..] -> Error(Unexpected(g, "value")) + [] -> Error(Unexpected("EOF", "value")) + } +} + +fn parse_key(input: Tokens, segments: List(String)) -> Parsed(List(String)) { + use segment, input <- do(parse_key_segment(input)) + let segments = [segment, ..segments] + let input = skip_line_whitespace(input) + + case input { + [".", ..input] -> parse_key(input, segments) + _ -> Ok(#(list.reverse(segments), input)) + } +} + +fn parse_key_segment(input: Tokens) -> Parsed(String) { + let input = skip_line_whitespace(input) + case input { + ["=", ..] -> Error(Unexpected("=", "Key")) + ["\n", ..] -> Error(Unexpected("\n", "Key")) + ["\r\n", ..] -> Error(Unexpected("\r\n", "Key")) + ["[", ..] -> Error(Unexpected("[", "Key")) + ["\"", ..input] -> parse_key_quoted(input, "\"", "") + ["'", ..input] -> parse_key_quoted(input, "'", "") + _ -> parse_key_bare(input, "") + } +} + +fn parse_key_quoted( + input: Tokens, + close: String, + name: String, +) -> Parsed(String) { + case input { + [g, ..input] if g == close -> Ok(#(name, input)) + [g, ..input] -> parse_key_quoted(input, close, name <> g) + [] -> Error(Unexpected("EOF", close)) + } +} + +fn parse_key_bare(input: Tokens, name: String) -> Parsed(String) { + case input { + [" ", ..input] if name != "" -> Ok(#(name, input)) + ["=", ..] if name != "" -> Ok(#(name, input)) + [".", ..] if name != "" -> Ok(#(name, input)) + ["]", ..] if name != "" -> Ok(#(name, input)) + [",", ..] if name != "" -> Error(Unexpected(",", "=")) + ["\n", ..] if name != "" -> Error(Unexpected("\n", "=")) + ["\r\n", ..] if name != "" -> Error(Unexpected("\r\n", "=")) + ["\n", ..] -> Error(Unexpected("\n", "key")) + ["\r\n", ..] -> Error(Unexpected("\r\n", "key")) + ["]", ..] -> Error(Unexpected("]", "key")) + [",", ..] -> Error(Unexpected(",", "key")) + [g, ..input] -> parse_key_bare(input, name <> g) + [] -> Error(Unexpected("EOF", "key")) + } +} + +fn skip_line_whitespace(input: Tokens) -> Tokens { + list.drop_while(input, fn(g) { g == " " || g == "\t" }) +} + +fn skip_whitespace(input: Tokens) -> Tokens { + case input { + [" ", ..input] -> skip_whitespace(input) + ["\t", ..input] -> skip_whitespace(input) + ["\n", ..input] -> skip_whitespace(input) + ["\r\n", ..input] -> skip_whitespace(input) + input -> input + } +} + +fn drop_comments(input: Tokens, acc: Tokens) -> Tokens { + case input { + ["#", ..input] -> + input + |> list.drop_while(fn(g) { g != "\n" }) + |> drop_comments(acc) + [g, ..input] -> drop_comments(input, [g, ..acc]) + [] -> list.reverse(acc) + } +} + +fn do( + result: Result(#(a, Tokens), ParseError), + next: fn(a, Tokens) -> Result(b, ParseError), +) -> Result(b, ParseError) { + case result { + Ok(#(a, input)) -> next(a, input) + Error(e) -> Error(e) + } +} + +fn expect( + input: Tokens, + expected: String, + next: fn(Tokens) -> Parsed(a), +) -> Parsed(a) { + case input { + [g, ..input] if g == expected -> next(input) + [g, ..] -> Error(Unexpected(g, expected)) + [] -> Error(Unexpected("EOF", expected)) + } +} + +fn parse_inline_table( + input: Tokens, + properties: Map(String, Toml), +) -> Parsed(Toml) { + let input = skip_whitespace(input) + case input { + ["}", ..input] -> Ok(#(InlineTable(properties), input)) + _ -> + case parse_inline_table_property(input, properties) { + Ok(#(properties, input)) -> { + let input = skip_whitespace(input) + case input { + ["}", ..input] -> Ok(#(InlineTable(properties), input)) + [",", ..input] -> { + let input = skip_whitespace(input) + parse_inline_table(input, properties) + } + [g, ..] -> Error(Unexpected(g, "}")) + [] -> Error(Unexpected("EOF", "}")) + } + } + Error(e) -> Error(e) + } + } +} + +fn parse_inline_table_property( + input: Tokens, + properties: Map(String, Toml), +) -> Parsed(Map(String, Toml)) { + let input = skip_whitespace(input) + use key, input <- do(parse_key(input, [])) + let input = skip_line_whitespace(input) + use input <- expect(input, "=") + let input = skip_line_whitespace(input) + use value, input <- do(parse_value(input)) + case insert(properties, key, value) { + Ok(properties) -> Ok(#(properties, input)) + Error(e) -> Error(e) + } +} + +fn parse_array(input: Tokens, elements: List(Toml)) -> Parsed(Toml) { + let input = skip_whitespace(input) + case input { + ["]", ..input] -> Ok(#(Array(list.reverse(elements)), input)) + _ -> { + use element, input <- do(parse_value(input)) + let elements = [element, ..elements] + let input = skip_whitespace(input) + case input { + ["]", ..input] -> Ok(#(Array(list.reverse(elements)), input)) + [",", ..input] -> { + let input = skip_whitespace(input) + parse_array(input, elements) + } + [g, ..] -> Error(Unexpected(g, "]")) + [] -> Error(Unexpected("EOF", "]")) + } + } + } +} + +fn parse_hex(input: Tokens, number: Int, sign: Sign) -> Parsed(Toml) { + case input { + ["_", ..input] -> parse_hex(input, number, sign) + ["0", ..input] -> parse_hex(input, number * 16 + 0, sign) + ["1", ..input] -> parse_hex(input, number * 16 + 1, sign) + ["2", ..input] -> parse_hex(input, number * 16 + 2, sign) + ["3", ..input] -> parse_hex(input, number * 16 + 3, sign) + ["4", ..input] -> parse_hex(input, number * 16 + 4, sign) + ["5", ..input] -> parse_hex(input, number * 16 + 5, sign) + ["6", ..input] -> parse_hex(input, number * 16 + 6, sign) + ["7", ..input] -> parse_hex(input, number * 16 + 7, sign) + ["8", ..input] -> parse_hex(input, number * 16 + 8, sign) + ["9", ..input] -> parse_hex(input, number * 16 + 9, sign) + ["a", ..input] -> parse_hex(input, number * 16 + 10, sign) + ["b", ..input] -> parse_hex(input, number * 16 + 11, sign) + ["c", ..input] -> parse_hex(input, number * 16 + 12, sign) + ["d", ..input] -> parse_hex(input, number * 16 + 13, sign) + ["e", ..input] -> parse_hex(input, number * 16 + 14, sign) + ["f", ..input] -> parse_hex(input, number * 16 + 15, sign) + ["A", ..input] -> parse_hex(input, number * 16 + 10, sign) + ["B", ..input] -> parse_hex(input, number * 16 + 11, sign) + ["C", ..input] -> parse_hex(input, number * 16 + 12, sign) + ["D", ..input] -> parse_hex(input, number * 16 + 13, sign) + ["E", ..input] -> parse_hex(input, number * 16 + 14, sign) + ["F", ..input] -> parse_hex(input, number * 16 + 15, sign) + + // Anything else and the number is terminated + input -> { + let number = case sign { + Positive -> number + Negative -> -number + } + Ok(#(Int(number), input)) + } + } +} + +fn parse_octal(input: Tokens, number: Int, sign: Sign) -> Parsed(Toml) { + case input { + ["_", ..input] -> parse_octal(input, number, sign) + ["0", ..input] -> parse_octal(input, number * 8 + 0, sign) + ["1", ..input] -> parse_octal(input, number * 8 + 1, sign) + ["2", ..input] -> parse_octal(input, number * 8 + 2, sign) + ["3", ..input] -> parse_octal(input, number * 8 + 3, sign) + ["4", ..input] -> parse_octal(input, number * 8 + 4, sign) + ["5", ..input] -> parse_octal(input, number * 8 + 5, sign) + ["6", ..input] -> parse_octal(input, number * 8 + 6, sign) + ["7", ..input] -> parse_octal(input, number * 8 + 7, sign) + + // Anything else and the number is terminated + input -> { + let number = case sign { + Positive -> number + Negative -> -number + } + Ok(#(Int(number), input)) + } + } +} + +fn parse_binary(input: Tokens, number: Int, sign: Sign) -> Parsed(Toml) { + case input { + ["_", ..input] -> parse_binary(input, number, sign) + ["0", ..input] -> parse_binary(input, number * 2 + 0, sign) + ["1", ..input] -> parse_binary(input, number * 2 + 1, sign) + + // Anything else and the number is terminated + input -> { + let number = case sign { + Positive -> number + Negative -> -number + } + Ok(#(Int(number), input)) + } + } +} + +fn parse_number(input: Tokens, number: Int, sign: Sign) -> Parsed(Toml) { + case input { + ["_", ..input] -> parse_number(input, number, sign) + ["0", ..input] -> parse_number(input, number * 10 + 0, sign) + ["1", ..input] -> parse_number(input, number * 10 + 1, sign) + ["2", ..input] -> parse_number(input, number * 10 + 2, sign) + ["3", ..input] -> parse_number(input, number * 10 + 3, sign) + ["4", ..input] -> parse_number(input, number * 10 + 4, sign) + ["5", ..input] -> parse_number(input, number * 10 + 5, sign) + ["6", ..input] -> parse_number(input, number * 10 + 6, sign) + ["7", ..input] -> parse_number(input, number * 10 + 7, sign) + ["8", ..input] -> parse_number(input, number * 10 + 8, sign) + ["9", ..input] -> parse_number(input, number * 10 + 9, sign) + + ["-", ..input] -> parse_date(input, number) + [":", ..input] if number < 24 -> parse_time_minute(input, number) + + [".", ..input] -> parse_float(input, int.to_float(number), sign, 0.1) + + ["e", "+", ..input] -> + parse_exponent(input, int.to_float(number), sign, 0, Positive) + ["e", "-", ..input] -> + parse_exponent(input, int.to_float(number), sign, 0, Negative) + ["e", ..input] -> + parse_exponent(input, int.to_float(number), sign, 0, Positive) + ["E", "+", ..input] -> + parse_exponent(input, int.to_float(number), sign, 0, Positive) + ["E", "-", ..input] -> + parse_exponent(input, int.to_float(number), sign, 0, Negative) + ["E", ..input] -> + parse_exponent(input, int.to_float(number), sign, 0, Positive) + + // Anything else and the number is terminated + input -> { + let number = case sign { + Positive -> number + Negative -> -number + } + Ok(#(Int(number), input)) + } + } +} + +fn parse_exponent( + input: Tokens, + n: Float, + n_sign: Sign, + ex: Int, + ex_sign: Sign, +) -> Parsed(Toml) { + case input { + ["_", ..input] -> parse_exponent(input, n, n_sign, ex, ex_sign) + ["0", ..input] -> parse_exponent(input, n, n_sign, ex * 10, ex_sign) + ["1", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 1, ex_sign) + ["2", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 2, ex_sign) + ["3", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 3, ex_sign) + ["4", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 4, ex_sign) + ["5", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 5, ex_sign) + ["6", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 6, ex_sign) + ["7", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 7, ex_sign) + ["8", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 8, ex_sign) + ["9", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 9, ex_sign) + + // Anything else and the number is terminated + input -> { + let number = case n_sign { + Positive -> n + Negative -> n *. -1.0 + } + let exponent = + int.to_float(case ex_sign { + Positive -> ex + Negative -> -ex + }) + let multiplier = case float.power(10.0, exponent) { + Ok(multiplier) -> multiplier + Error(_) -> 1.0 + } + Ok(#(Float(number *. multiplier), input)) + } + } +} + +fn parse_float( + input: Tokens, + number: Float, + sign: Sign, + unit: Float, +) -> Parsed(Toml) { + case input { + ["_", ..input] -> parse_float(input, number, sign, unit) + ["0", ..input] -> parse_float(input, number, sign, unit *. 0.1) + ["1", ..input] -> + parse_float(input, number +. 1.0 *. unit, sign, unit *. 0.1) + ["2", ..input] -> + parse_float(input, number +. 2.0 *. unit, sign, unit *. 0.1) + ["3", ..input] -> + parse_float(input, number +. 3.0 *. unit, sign, unit *. 0.1) + ["4", ..input] -> + parse_float(input, number +. 4.0 *. unit, sign, unit *. 0.1) + ["5", ..input] -> + parse_float(input, number +. 5.0 *. unit, sign, unit *. 0.1) + ["6", ..input] -> + parse_float(input, number +. 6.0 *. unit, sign, unit *. 0.1) + ["7", ..input] -> + parse_float(input, number +. 7.0 *. unit, sign, unit *. 0.1) + ["8", ..input] -> + parse_float(input, number +. 8.0 *. unit, sign, unit *. 0.1) + ["9", ..input] -> + parse_float(input, number +. 9.0 *. unit, sign, unit *. 0.1) + + ["e", "+", ..input] -> parse_exponent(input, number, sign, 0, Positive) + ["e", "-", ..input] -> parse_exponent(input, number, sign, 0, Negative) + ["e", ..input] -> parse_exponent(input, number, sign, 0, Positive) + ["E", "+", ..input] -> parse_exponent(input, number, sign, 0, Positive) + ["E", "-", ..input] -> parse_exponent(input, number, sign, 0, Negative) + ["E", ..input] -> parse_exponent(input, number, sign, 0, Positive) + + // Anything else and the number is terminated + input -> { + let number = case sign { + Positive -> number + Negative -> number *. -1.0 + } + Ok(#(Float(number), input)) + } + } +} + +fn parse_string(input: Tokens, string: String) -> Parsed(Toml) { + case input { + ["\"", ..input] -> Ok(#(String(string), input)) + ["\\", "t", ..input] -> parse_string(input, string <> "\t") + ["\\", "n", ..input] -> parse_string(input, string <> "\n") + ["\\", "r", ..input] -> parse_string(input, string <> "\r") + ["\\", "\"", ..input] -> parse_string(input, string <> "\"") + ["\\", "\\", ..input] -> parse_string(input, string <> "\\") + [] -> Error(Unexpected("EOF", "\"")) + ["\n", ..] -> Error(Unexpected("\n", "\"")) + ["\r\n", ..] -> Error(Unexpected("\r\n", "\"")) + [g, ..input] -> parse_string(input, string <> g) + } +} + +fn parse_multi_line_string(input: Tokens, string: String) -> Parsed(Toml) { + case input { + ["\"", "\"", "\"", ..input] -> Ok(#(String(string), input)) + ["\\", "\n", ..input] -> + parse_multi_line_string(skip_whitespace(input), string) + ["\\", "\r\n", ..input] -> + parse_multi_line_string(skip_whitespace(input), string) + ["\r\n", ..input] if string == "" -> parse_multi_line_string(input, string) + ["\n", ..input] if string == "" -> parse_multi_line_string(input, string) + ["\r\n", ..input] if string == "" -> parse_multi_line_string(input, string) + ["\\", "t", ..input] -> parse_multi_line_string(input, string <> "\t") + ["\\", "n", ..input] -> parse_multi_line_string(input, string <> "\n") + ["\\", "r", ..input] -> parse_multi_line_string(input, string <> "\r") + ["\\", "\"", ..input] -> parse_multi_line_string(input, string <> "\"") + ["\\", "\\", ..input] -> parse_multi_line_string(input, string <> "\\") + [] -> Error(Unexpected("EOF", "\"")) + [g, ..input] -> parse_multi_line_string(input, string <> g) + } +} + +fn parse_multi_line_literal_string( + input: Tokens, + string: String, +) -> Parsed(Toml) { + case input { + [] -> Error(Unexpected("EOF", "\"")) + ["'", "'", "'", "'", ..] -> Error(Unexpected("''''", "'''")) + ["'", "'", "'", ..input] -> Ok(#(String(string), input)) + ["\n", ..input] if string == "" -> + parse_multi_line_literal_string(input, string) + ["\r\n", ..input] if string == "" -> + parse_multi_line_literal_string(input, string) + [g, ..input] -> parse_multi_line_literal_string(input, string <> g) + } +} + +fn parse_literal_string(input: Tokens, string: String) -> Parsed(Toml) { + case input { + [] -> Error(Unexpected("EOF", "\"")) + ["\n", ..] -> Error(Unexpected("\n", "'")) + ["\r\n", ..] -> Error(Unexpected("\r\n", "'")) + ["'", ..input] -> Ok(#(String(string), input)) + [g, ..input] -> parse_literal_string(input, string <> g) + } +} + +fn reverse_arrays_of_tables(toml: Toml) -> Toml { + case toml { + ArrayOfTables(tables) -> + ArrayOfTables(reverse_arrays_of_tables_array(tables, [])) + + Table(table) -> Table(reverse_arrays_of_tables_table(table)) + + _ -> toml + } +} + +fn reverse_arrays_of_tables_table(table: Map(String, Toml)) -> Map(String, Toml) { + map.map_values(table, fn(_, v) { reverse_arrays_of_tables(v) }) +} + +fn reverse_arrays_of_tables_array( + array: List(Map(String, Toml)), + acc: List(Map(String, Toml)), +) -> List(Map(String, Toml)) { + case array { + [] -> acc + [first, ..rest] -> { + let first = reverse_arrays_of_tables_table(first) + reverse_arrays_of_tables_array(rest, [first, ..acc]) + } + } +} + +fn parse_time_minute(input: Tokens, hours: Int) -> Parsed(Toml) { + use minutes, input <- do(parse_number_under_60(input, "minutes")) + use #(seconds, ms), input <- do(parse_time_s_ms(input)) + let time = TimeValue(hours, minutes, seconds, ms) + Ok(#(Time(time), input)) +} + +fn parse_hour_minute(input: Tokens) -> Parsed(#(Int, Int)) { + use hours, input <- do(case input { + ["0", "0", ":", ..input] -> Ok(#(0, input)) + ["0", "1", ":", ..input] -> Ok(#(1, input)) + ["0", "2", ":", ..input] -> Ok(#(2, input)) + ["0", "3", ":", ..input] -> Ok(#(3, input)) + ["0", "4", ":", ..input] -> Ok(#(4, input)) + ["0", "5", ":", ..input] -> Ok(#(5, input)) + ["0", "6", ":", ..input] -> Ok(#(6, input)) + ["0", "7", ":", ..input] -> Ok(#(7, input)) + ["0", "8", ":", ..input] -> Ok(#(8, input)) + ["0", "9", ":", ..input] -> Ok(#(9, input)) + ["1", "0", ":", ..input] -> Ok(#(10, input)) + ["1", "1", ":", ..input] -> Ok(#(11, input)) + ["1", "2", ":", ..input] -> Ok(#(12, input)) + ["1", "3", ":", ..input] -> Ok(#(13, input)) + ["1", "4", ":", ..input] -> Ok(#(14, input)) + ["1", "5", ":", ..input] -> Ok(#(15, input)) + ["1", "6", ":", ..input] -> Ok(#(16, input)) + ["1", "7", ":", ..input] -> Ok(#(17, input)) + ["1", "8", ":", ..input] -> Ok(#(18, input)) + ["1", "9", ":", ..input] -> Ok(#(19, input)) + ["2", "0", ":", ..input] -> Ok(#(20, input)) + ["2", "1", ":", ..input] -> Ok(#(21, input)) + ["2", "2", ":", ..input] -> Ok(#(22, input)) + ["2", "3", ":", ..input] -> Ok(#(23, input)) + [g, ..] -> Error(Unexpected(g, "time")) + [] -> Error(Unexpected("EOF", "time")) + }) + + use minutes, input <- do(parse_number_under_60(input, "minutes")) + Ok(#(#(hours, minutes), input)) +} + +fn parse_time_value(input: Tokens) -> Parsed(Time) { + use #(hours, minutes), input <- do(parse_hour_minute(input)) + use #(seconds, ms), input <- do(parse_time_s_ms(input)) + let time = TimeValue(hours, minutes, seconds, ms) + Ok(#(time, input)) +} + +fn parse_time_s_ms(input: Tokens) -> Parsed(#(Int, Int)) { + case input { + [":", ..input] -> { + use seconds, input <- do(parse_number_under_60(input, "seconds")) + case input { + [".", ..input] -> parse_time_ms(input, seconds, 0) + _ -> Ok(#(#(seconds, 0), input)) + } + } + + _ -> Ok(#(#(0, 0), input)) + } +} + +fn parse_time_ms(input: Tokens, seconds: Int, ms: Int) -> Parsed(#(Int, Int)) { + case input { + ["0", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 0) + ["1", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 1) + ["2", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 2) + ["3", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 3) + ["4", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 4) + ["5", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 5) + ["6", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 6) + ["7", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 7) + ["8", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 8) + ["9", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 9) + + // Anything else and the number is terminated + _ -> Ok(#(#(seconds, ms), input)) + } +} + +fn parse_number_under_60(input: Tokens, expected: String) -> Parsed(Int) { + case input { + ["0", "0", ..input] -> Ok(#(0, input)) + ["0", "1", ..input] -> Ok(#(1, input)) + ["0", "2", ..input] -> Ok(#(2, input)) + ["0", "3", ..input] -> Ok(#(3, input)) + ["0", "4", ..input] -> Ok(#(4, input)) + ["0", "5", ..input] -> Ok(#(5, input)) + ["0", "6", ..input] -> Ok(#(6, input)) + ["0", "7", ..input] -> Ok(#(7, input)) + ["0", "8", ..input] -> Ok(#(8, input)) + ["0", "9", ..input] -> Ok(#(9, input)) + ["1", "0", ..input] -> Ok(#(10, input)) + ["1", "1", ..input] -> Ok(#(11, input)) + ["1", "2", ..input] -> Ok(#(12, input)) + ["1", "3", ..input] -> Ok(#(13, input)) + ["1", "4", ..input] -> Ok(#(14, input)) + ["1", "5", ..input] -> Ok(#(15, input)) + ["1", "6", ..input] -> Ok(#(16, input)) + ["1", "7", ..input] -> Ok(#(17, input)) + ["1", "8", ..input] -> Ok(#(18, input)) + ["1", "9", ..input] -> Ok(#(19, input)) + ["2", "0", ..input] -> Ok(#(20, input)) + ["2", "1", ..input] -> Ok(#(21, input)) + ["2", "2", ..input] -> Ok(#(22, input)) + ["2", "3", ..input] -> Ok(#(23, input)) + ["2", "4", ..input] -> Ok(#(24, input)) + ["2", "5", ..input] -> Ok(#(25, input)) + ["2", "6", ..input] -> Ok(#(26, input)) + ["2", "7", ..input] -> Ok(#(27, input)) + ["2", "8", ..input] -> Ok(#(28, input)) + ["2", "9", ..input] -> Ok(#(29, input)) + ["3", "0", ..input] -> Ok(#(30, input)) + ["3", "1", ..input] -> Ok(#(31, input)) + ["3", "2", ..input] -> Ok(#(32, input)) + ["3", "3", ..input] -> Ok(#(33, input)) + ["3", "4", ..input] -> Ok(#(34, input)) + ["3", "5", ..input] -> Ok(#(35, input)) + ["3", "6", ..input] -> Ok(#(36, input)) + ["3", "7", ..input] -> Ok(#(37, input)) + ["3", "8", ..input] -> Ok(#(38, input)) + ["3", "9", ..input] -> Ok(#(39, input)) + ["4", "0", ..input] -> Ok(#(40, input)) + ["4", "1", ..input] -> Ok(#(41, input)) + ["4", "2", ..input] -> Ok(#(42, input)) + ["4", "3", ..input] -> Ok(#(43, input)) + ["4", "4", ..input] -> Ok(#(44, input)) + ["4", "5", ..input] -> Ok(#(45, input)) + ["4", "6", ..input] -> Ok(#(46, input)) + ["4", "7", ..input] -> Ok(#(47, input)) + ["4", "8", ..input] -> Ok(#(48, input)) + ["4", "9", ..input] -> Ok(#(49, input)) + ["5", "0", ..input] -> Ok(#(50, input)) + ["5", "1", ..input] -> Ok(#(51, input)) + ["5", "2", ..input] -> Ok(#(52, input)) + ["5", "3", ..input] -> Ok(#(53, input)) + ["5", "4", ..input] -> Ok(#(54, input)) + ["5", "5", ..input] -> Ok(#(55, input)) + ["5", "6", ..input] -> Ok(#(56, input)) + ["5", "7", ..input] -> Ok(#(57, input)) + ["5", "8", ..input] -> Ok(#(58, input)) + ["5", "9", ..input] -> Ok(#(59, input)) + + [g, ..] -> Error(Unexpected(g, expected)) + [] -> Error(Unexpected("EOF", expected)) + } +} + +fn parse_date(input: Tokens, year: Int) -> Parsed(Toml) { + case input { + ["0", "1", "-", ..input] -> parse_date_day(input, year, 1) + ["0", "2", "-", ..input] -> parse_date_day(input, year, 2) + ["0", "3", "-", ..input] -> parse_date_day(input, year, 3) + ["0", "4", "-", ..input] -> parse_date_day(input, year, 4) + ["0", "5", "-", ..input] -> parse_date_day(input, year, 5) + ["0", "6", "-", ..input] -> parse_date_day(input, year, 6) + ["0", "7", "-", ..input] -> parse_date_day(input, year, 7) + ["0", "8", "-", ..input] -> parse_date_day(input, year, 8) + ["0", "9", "-", ..input] -> parse_date_day(input, year, 9) + ["1", "0", "-", ..input] -> parse_date_day(input, year, 10) + ["1", "1", "-", ..input] -> parse_date_day(input, year, 11) + ["1", "2", "-", ..input] -> parse_date_day(input, year, 12) + + [g, ..] -> Error(Unexpected(g, "date month")) + [] -> Error(Unexpected("EOF", "date month")) + } +} + +fn parse_date_day(input: Tokens, year: Int, month: Int) -> Parsed(Toml) { + case input { + ["0", "1", ..input] -> parse_date_end(input, year, month, 1) + ["0", "2", ..input] -> parse_date_end(input, year, month, 2) + ["0", "3", ..input] -> parse_date_end(input, year, month, 3) + ["0", "4", ..input] -> parse_date_end(input, year, month, 4) + ["0", "5", ..input] -> parse_date_end(input, year, month, 5) + ["0", "6", ..input] -> parse_date_end(input, year, month, 6) + ["0", "7", ..input] -> parse_date_end(input, year, month, 7) + ["0", "8", ..input] -> parse_date_end(input, year, month, 8) + ["0", "9", ..input] -> parse_date_end(input, year, month, 9) + ["1", "0", ..input] -> parse_date_end(input, year, month, 10) + ["1", "1", ..input] -> parse_date_end(input, year, month, 11) + ["1", "2", ..input] -> parse_date_end(input, year, month, 12) + ["1", "3", ..input] -> parse_date_end(input, year, month, 13) + ["1", "4", ..input] -> parse_date_end(input, year, month, 14) + ["1", "5", ..input] -> parse_date_end(input, year, month, 15) + ["1", "6", ..input] -> parse_date_end(input, year, month, 16) + ["1", "7", ..input] -> parse_date_end(input, year, month, 17) + ["1", "8", ..input] -> parse_date_end(input, year, month, 18) + ["1", "9", ..input] -> parse_date_end(input, year, month, 19) + ["2", "0", ..input] -> parse_date_end(input, year, month, 20) + ["2", "1", ..input] -> parse_date_end(input, year, month, 21) + ["2", "2", ..input] -> parse_date_end(input, year, month, 22) + ["2", "3", ..input] -> parse_date_end(input, year, month, 23) + ["2", "4", ..input] -> parse_date_end(input, year, month, 24) + ["2", "5", ..input] -> parse_date_end(input, year, month, 25) + ["2", "6", ..input] -> parse_date_end(input, year, month, 26) + ["2", "7", ..input] -> parse_date_end(input, year, month, 27) + ["2", "8", ..input] -> parse_date_end(input, year, month, 28) + ["2", "9", ..input] -> parse_date_end(input, year, month, 29) + ["3", "0", ..input] -> parse_date_end(input, year, month, 30) + ["3", "1", ..input] -> parse_date_end(input, year, month, 31) + + [g, ..] -> Error(Unexpected(g, "date day")) + [] -> Error(Unexpected("EOF", "date day")) + } +} + +fn parse_date_end( + input: Tokens, + year: Int, + month: Int, + day: Int, +) -> Parsed(Toml) { + let date = DateValue(year, month, day) + case input { + [" ", ..input] | ["T", ..input] -> { + use time, input <- do(parse_time_value(input)) + use offset, input <- do(parse_offset(input)) + Ok(#(DateTime(DateTimeValue(date, time, offset)), input)) + } + + _ -> Ok(#(Date(date), input)) + } +} + +fn parse_offset(input: Tokens) -> Parsed(Offset) { + case input { + ["Z", ..input] -> Ok(#(Offset(Positive, 0, 0), input)) + ["+", ..input] -> parse_offset_hours(input, Positive) + ["-", ..input] -> parse_offset_hours(input, Negative) + _ -> Ok(#(Local, input)) + } +} + +fn parse_offset_hours(input: Tokens, sign: Sign) -> Parsed(Offset) { + use #(hours, minutes), input <- do(parse_hour_minute(input)) + Ok(#(Offset(sign, hours, minutes), input)) +} diff --git a/aoc2023/build/prod/erlang/gleam.lock b/aoc2023/build/prod/erlang/gleam.lock new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/aoc2023/build/prod/erlang/gleam.lock diff --git a/aoc2023/build/prod/javascript/gleam.lock b/aoc2023/build/prod/javascript/gleam.lock new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/aoc2023/build/prod/javascript/gleam.lock diff --git a/aoc2023/erl_crash.dump b/aoc2023/erl_crash.dump new file mode 100644 index 0000000..ef1d35a --- /dev/null +++ b/aoc2023/erl_crash.dump @@ -0,0 +1,67195 @@ +=erl_crash_dump:0.5 +Thu Dec 7 01:00:23 2023 +Slogan: Runtime terminating during boot ({,[{showtime@internal@reports@formatter,-create_test_report/1-fun-4-,1,[{_},{_}]},{gleam@list,do_filter_map,3,[{_},{_}]},{showtime@internal@reports@formatter,create_test_report,1,[{_},{_}]},{showtime@internal@erlang@event_handler,-start/0-fun-1-,2,[{_},{_}]},{gleam@otp@actor,loop,1,[{_},{_}]}]}) +System version: Erlang/OTP 26 [erts-14.0.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit] [dtrace] +Taints: +Atoms: 11705 +Calling Thread: scheduler:1 +=scheduler:1 +Scheduler Sleep Info Flags: +Scheduler Sleep Info Aux Work: THR_PRGR_LATER_OP +Current Port: +Run Queue Max Length: 0 +Run Queue High Length: 0 +Run Queue Normal Length: 2 +Run Queue Low Length: 0 +Run Queue Port Length: 0 +Run Queue Flags: NONEMPTY_NORMAL | OUT_OF_WORK | HALFTIME_OUT_OF_WORK | NONEMPTY | EXEC +Current Process: <0.0.0> +Current Process State: Running +Current Process Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | ACTIVE | RUNNING | ACTIVE_SYS +Current Process Program counter: 0x0000000103d889fc (init:boot_loop/2 + 84) +Current Process Limited Stack Trace: +0x0000000105dda900:SReturn addr 0x3D82348 (<terminate process normally>) +=scheduler:2 +Scheduler Sleep Info Flags: SLEEPING | POLL_SLEEPING | TSE_SLEEPING | WAITING +Scheduler Sleep Info Aux Work: +Current Port: +Run Queue Max Length: 0 +Run Queue High Length: 0 +Run Queue Normal Length: 0 +Run Queue Low Length: 0 +Run Queue Port Length: 0 +Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK +Current Process: +=scheduler:3 +Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING +Scheduler Sleep Info Aux Work: +Current Port: +Run Queue Max Length: 0 +Run Queue High Length: 0 +Run Queue Normal Length: 0 +Run Queue Low Length: 0 +Run Queue Port Length: 0 +Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK +Current Process: +=scheduler:4 +Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING +Scheduler Sleep Info Aux Work: +Current Port: +Run Queue Max Length: 0 +Run Queue High Length: 0 +Run Queue Normal Length: 0 +Run Queue Low Length: 0 +Run Queue Port Length: 0 +Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK +Current Process: +=scheduler:5 +Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING +Scheduler Sleep Info Aux Work: +Current Port: +Run Queue Max Length: 0 +Run Queue High Length: 0 +Run Queue Normal Length: 0 +Run Queue Low Length: 0 +Run Queue Port Length: 0 +Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK +Current Process: +=scheduler:6 +Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING +Scheduler Sleep Info Aux Work: +Current Port: +Run Queue Max Length: 0 +Run Queue High Length: 0 +Run Queue Normal Length: 0 +Run Queue Low Length: 0 +Run Queue Port Length: 0 +Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK +Current Process: +=scheduler:7 +Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING +Scheduler Sleep Info Aux Work: +Current Port: +Run Queue Max Length: 0 +Run Queue High Length: 0 +Run Queue Normal Length: 0 +Run Queue Low Length: 0 +Run Queue Port Length: 0 +Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK +Current Process: +=scheduler:8 +Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING +Scheduler Sleep Info Aux Work: +Current Port: +Run Queue Max Length: 0 +Run Queue High Length: 0 +Run Queue Normal Length: 0 +Run Queue Low Length: 0 +Run Queue Port Length: 0 +Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK +Current Process: +=memory +total: 24121588 +processes: 7426424 +processes_used: 7419720 +system: 16695164 +atom: 327857 +atom_used: 307203 +binary: 475240 +code: 6109634 +ets: 600608 +=hash_table:atom_tab +size: 8192 +used: 6198 +objs: 11705 +depth: 8 +=index_table:atom_tab +size: 12288 +limit: 1048576 +entries: 11705 +=hash_table:module_code +size: 128 +used: 106 +objs: 180 +depth: 4 +=index_table:module_code +size: 1024 +limit: 65536 +entries: 180 +=hash_table:export_list +size: 4096 +used: 2753 +objs: 4462 +depth: 7 +=index_table:export_list +size: 5120 +limit: 524288 +entries: 4462 +=hash_table:export_list +size: 4096 +used: 2746 +objs: 4441 +depth: 7 +=hash_table:process_reg +size: 64 +used: 39 +objs: 52 +depth: 5 +=hash_table:fun_table +size: 1024 +used: 641 +objs: 987 +depth: 5 +=hash_table:node_table +size: 16 +used: 1 +objs: 1 +depth: 1 +=hash_table:dist_table +size: 16 +used: 1 +objs: 1 +depth: 1 +=allocated_areas +sys_misc: 57656 +static: 2107456 +atom_space: 163880 143226 +atom_table: 163977 +module_table: 107736 +export_table: 221604 +export_list: 892400 +register_table: 628 +fun_table: 8306 +module_refs: 8592 +loaded_code: 4870996 +dist_table: 691 +node_table: 291 +bits_bufs_size: 0 +bif_timer: 0 +process_table: 3145728 +port_table: 786432 +ets_misc: 131072 +external_alloc: 4870996 +=allocator:sys_alloc +option e: true +option m: libc +=allocator:temp_alloc[0] +versions: 2.1 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 90 +option rsbcmt: 80 +option rmbcmt: 100 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 10485760 +option smbcs: 1048576 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option mbsd: 3 +option as: gf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 5 5 +mbcs blocks[temp_alloc] size: 0 11288 11288 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 131072 131072 131072 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 131072 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +temp_alloc calls: 1067 +temp_free calls: 1067 +temp_realloc calls: 1 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:temp_alloc[1] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 90 +option rsbcmt: 80 +option rmbcmt: 100 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 10485760 +option smbcs: 1048576 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option as: af +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 1 5 5 +mbcs blocks[temp_alloc] size: 65544 655448 655448 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 2 2 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 131072 1179648 1179648 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 131072 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +temp_alloc calls: 9479 +temp_free calls: 9478 +temp_realloc calls: 134 +mseg_alloc calls: 4 +mseg_dealloc calls: 4 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:temp_alloc[2] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 90 +option rsbcmt: 80 +option rmbcmt: 100 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 10485760 +option smbcs: 1048576 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option as: af +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 1 1 +mbcs blocks[temp_alloc] size: 0 56 56 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 131072 131072 131072 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 131072 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +temp_alloc calls: 1 +temp_free calls: 1 +temp_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:temp_alloc[3] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 90 +option rsbcmt: 80 +option rmbcmt: 100 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 10485760 +option smbcs: 1048576 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option as: af +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 1 1 +mbcs blocks[temp_alloc] size: 0 56 56 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 131072 131072 131072 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 131072 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +temp_alloc calls: 1 +temp_free calls: 1 +temp_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:temp_alloc[4] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 90 +option rsbcmt: 80 +option rmbcmt: 100 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 10485760 +option smbcs: 1048576 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option as: af +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 1 1 +mbcs blocks[temp_alloc] size: 0 56 56 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 131072 131072 131072 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 131072 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +temp_alloc calls: 1 +temp_free calls: 1 +temp_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:temp_alloc[5] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 90 +option rsbcmt: 80 +option rmbcmt: 100 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 10485760 +option smbcs: 1048576 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option as: af +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 1 1 +mbcs blocks[temp_alloc] size: 0 56 56 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 131072 131072 131072 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 131072 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +temp_alloc calls: 1 +temp_free calls: 1 +temp_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:temp_alloc[6] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 90 +option rsbcmt: 80 +option rmbcmt: 100 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 10485760 +option smbcs: 1048576 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option as: af +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 4 4 +mbcs blocks[temp_alloc] size: 0 6296 6296 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 131072 131072 131072 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 131072 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +temp_alloc calls: 616 +temp_free calls: 616 +temp_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:temp_alloc[7] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 90 +option rsbcmt: 80 +option rmbcmt: 100 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 10485760 +option smbcs: 1048576 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option as: af +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 5 5 +mbcs blocks[temp_alloc] size: 0 11576 11576 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 131072 131072 131072 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 131072 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +temp_alloc calls: 1049 +temp_free calls: 1049 +temp_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:temp_alloc[8] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 90 +option rsbcmt: 80 +option rmbcmt: 100 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 10485760 +option smbcs: 1048576 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option as: af +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 5 5 +mbcs blocks[temp_alloc] size: 0 6488 6488 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 131072 131072 131072 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 131072 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +temp_alloc calls: 1002 +temp_free calls: 1002 +temp_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:sl_alloc[0] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 80 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 6 81 81 +mbcs blocks[sl_alloc] size: 576 41440 41440 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 2 2 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 294912 294912 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +sl_alloc calls: 665 +sl_free calls: 659 +sl_realloc calls: 0 +mseg_alloc calls: 2 +mseg_dealloc calls: 2 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:sl_alloc[1] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 80 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: S +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 1 6337 6337 +mbcs blocks[sl_alloc] size: 112 1263320 1263320 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 3 3 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 1343488 1343488 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +sl_alloc calls: 11588 +sl_free calls: 11587 +sl_realloc calls: 1 +mseg_alloc calls: 19 +mseg_dealloc calls: 19 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:sl_alloc[2] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 80 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: S +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 1 1 +mbcs blocks[sl_alloc] size: 0 64 64 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +sl_alloc calls: 1 +sl_free calls: 1 +sl_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:sl_alloc[3] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 80 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: S +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +sl_alloc calls: 0 +sl_free calls: 0 +sl_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:sl_alloc[4] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 80 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: S +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +sl_alloc calls: 0 +sl_free calls: 0 +sl_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:sl_alloc[5] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 80 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: S +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +sl_alloc calls: 0 +sl_free calls: 0 +sl_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:sl_alloc[6] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 80 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: S +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 156 156 +mbcs blocks[sl_alloc] size: 0 137448 137448 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 2 2 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 294912 294912 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +sl_alloc calls: 279 +sl_free calls: 279 +sl_realloc calls: 0 +mseg_alloc calls: 1 +mseg_dealloc calls: 1 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:sl_alloc[7] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 80 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: S +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 261 261 +mbcs blocks[sl_alloc] size: 0 214552 214552 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 2 2 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 294912 294912 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +sl_alloc calls: 619 +sl_free calls: 619 +sl_realloc calls: 1 +mseg_alloc calls: 1 +mseg_dealloc calls: 1 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:sl_alloc[8] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 80 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: S +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 166 166 +mbcs blocks[sl_alloc] size: 0 139368 139368 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 2 2 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 294912 294912 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +sl_alloc calls: 411 +sl_free calls: 411 +sl_realloc calls: 0 +mseg_alloc calls: 1 +mseg_dealloc calls: 1 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:std_alloc[0] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 41 45 45 +mbcs blocks[std_alloc] size: 399040 406936 406936 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 2 2 2 +mbcs mseg carriers: 1 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 557056 557056 557056 +mbcs mseg carriers size: 524288 +mbcs sys_alloc carriers size: 32768 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +std_alloc calls: 65 +std_free calls: 24 +std_realloc calls: 1 +mseg_alloc calls: 1 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:std_alloc[1] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: D +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 199 201 201 +mbcs blocks[std_alloc] size: 72664 79840 79840 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 2 2 2 +mbcs mseg carriers: 1 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 294912 294912 294912 +mbcs mseg carriers size: 262144 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +std_alloc calls: 799 +std_free calls: 600 +std_realloc calls: 1 +mseg_alloc calls: 1 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:std_alloc[2] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: D +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 1 1 1 +mbcs blocks[std_alloc] size: 64 64 64 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +std_alloc calls: 1 +std_free calls: 0 +std_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:std_alloc[3] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: D +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 1 1 1 +mbcs blocks[std_alloc] size: 64 64 64 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +std_alloc calls: 1 +std_free calls: 0 +std_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:std_alloc[4] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: D +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 1 1 1 +mbcs blocks[std_alloc] size: 64 64 64 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +std_alloc calls: 1 +std_free calls: 0 +std_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:std_alloc[5] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: D +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 1 1 1 +mbcs blocks[std_alloc] size: 64 64 64 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +std_alloc calls: 1 +std_free calls: 0 +std_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:std_alloc[6] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: D +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 1 2 2 +mbcs blocks[std_alloc] size: 64 7232 7232 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +std_alloc calls: 6 +std_free calls: 5 +std_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:std_alloc[7] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: D +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 1 2 2 +mbcs blocks[std_alloc] size: 64 7232 7232 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +std_alloc calls: 9 +std_free calls: 8 +std_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:std_alloc[8] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: D +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 1 2 2 +mbcs blocks[std_alloc] size: 64 7232 7232 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +std_alloc calls: 11 +std_free calls: 10 +std_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ll_alloc[0] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 18446744073709551615 +option asbcst: 0 +option rsbcst: 0 +option rsbcmt: 0 +option rmbcmt: 0 +option mmbcs: 524288 +option mmsbc: 0 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 3909 3914 3914 +mbcs blocks[ll_alloc] size: 10112144 10146648 10146648 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 4 4 4 +mbcs mseg carriers: 3 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 12058624 12058624 12058624 +mbcs mseg carriers size: 11534336 +mbcs sys_alloc carriers size: 524288 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ll_alloc calls: 3916 +ll_free calls: 7 +ll_realloc calls: 0 +mseg_alloc calls: 3 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ll_alloc[1] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 18446744073709551615 +option asbcst: 0 +option rsbcst: 0 +option rsbcmt: 0 +option rmbcmt: 0 +option mmbcs: 524288 +option mmsbc: 0 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 85 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: L +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 11782 11782 11782 +mbcs blocks[ll_alloc] size: 1693840 1693840 1693840 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 3 3 3 +mbcs mseg carriers: 2 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 1835008 1835008 1835008 +mbcs mseg carriers size: 1310720 +mbcs sys_alloc carriers size: 524288 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ll_alloc calls: 11784 +ll_free calls: 2 +ll_realloc calls: 0 +mseg_alloc calls: 2 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ll_alloc[2] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 18446744073709551615 +option asbcst: 0 +option rsbcst: 0 +option rsbcmt: 0 +option rmbcmt: 0 +option mmbcs: 524288 +option mmsbc: 0 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 85 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: L +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 524288 524288 524288 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 524288 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ll_alloc calls: 0 +ll_free calls: 0 +ll_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ll_alloc[3] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 18446744073709551615 +option asbcst: 0 +option rsbcst: 0 +option rsbcmt: 0 +option rmbcmt: 0 +option mmbcs: 524288 +option mmsbc: 0 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 85 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: L +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 524288 524288 524288 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 524288 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ll_alloc calls: 0 +ll_free calls: 0 +ll_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ll_alloc[4] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 18446744073709551615 +option asbcst: 0 +option rsbcst: 0 +option rsbcmt: 0 +option rmbcmt: 0 +option mmbcs: 524288 +option mmsbc: 0 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 85 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: L +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 524288 524288 524288 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 524288 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ll_alloc calls: 0 +ll_free calls: 0 +ll_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ll_alloc[5] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 18446744073709551615 +option asbcst: 0 +option rsbcst: 0 +option rsbcmt: 0 +option rmbcmt: 0 +option mmbcs: 524288 +option mmsbc: 0 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 85 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: L +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 524288 524288 524288 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 524288 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ll_alloc calls: 0 +ll_free calls: 0 +ll_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ll_alloc[6] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 18446744073709551615 +option asbcst: 0 +option rsbcst: 0 +option rsbcmt: 0 +option rmbcmt: 0 +option mmbcs: 524288 +option mmsbc: 0 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 85 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: L +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 668 668 668 +mbcs blocks[ll_alloc] size: 108808 108808 108808 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 524288 524288 524288 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 524288 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ll_alloc calls: 668 +ll_free calls: 0 +ll_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ll_alloc[7] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 18446744073709551615 +option asbcst: 0 +option rsbcst: 0 +option rsbcmt: 0 +option rmbcmt: 0 +option mmbcs: 524288 +option mmsbc: 0 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 85 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: L +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 1126 1126 1126 +mbcs blocks[ll_alloc] size: 113352 113352 113352 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 524288 524288 524288 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 524288 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ll_alloc calls: 1126 +ll_free calls: 0 +ll_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ll_alloc[8] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 18446744073709551615 +option asbcst: 0 +option rsbcst: 0 +option rsbcmt: 0 +option rmbcmt: 0 +option mmbcs: 524288 +option mmsbc: 0 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 85 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: L +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 620 620 620 +mbcs blocks[ll_alloc] size: 56672 56672 56672 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 524288 524288 524288 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 524288 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ll_alloc calls: 620 +ll_free calls: 0 +ll_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:eheap_alloc[0] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 50 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 23 69 69 +mbcs blocks[eheap_alloc] size: 309312 314576 314576 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 2 2 2 +mbcs mseg carriers: 1 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 393216 393216 393216 +mbcs mseg carriers size: 262144 +mbcs sys_alloc carriers size: 131072 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +eheap_alloc calls: 101 +eheap_free calls: 78 +eheap_realloc calls: 0 +mseg_alloc calls: 1 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:eheap_alloc[1] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 50 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 45 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: H +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 95 104 104 +mbcs blocks[eheap_alloc] size: 1355616 2466824 2466824 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 4 4 4 +mbcs mseg carriers: 3 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 3538944 3538944 3538944 +mbcs mseg carriers size: 3407872 +mbcs sys_alloc carriers size: 131072 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 1 3 3 +sbcs blocks[eheap_alloc] size: 2545504 5091008 5091008 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 1 3 3 +sbcs mseg carriers: 1 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 2555904 5128192 5128192 +sbcs mseg carriers size: 2555904 +sbcs sys_alloc carriers size: 0 +eheap_alloc calls: 1377 +eheap_free calls: 1281 +eheap_realloc calls: 139 +mseg_alloc calls: 8 +mseg_dealloc calls: 4 +mseg_realloc calls: 2 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:eheap_alloc[2] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 50 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 45 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: H +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 131072 131072 131072 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 131072 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +eheap_alloc calls: 0 +eheap_free calls: 0 +eheap_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:eheap_alloc[3] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 50 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 45 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: H +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 131072 131072 131072 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 131072 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +eheap_alloc calls: 0 +eheap_free calls: 0 +eheap_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:eheap_alloc[4] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 50 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 45 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: H +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 131072 131072 131072 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 131072 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +eheap_alloc calls: 0 +eheap_free calls: 0 +eheap_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:eheap_alloc[5] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 50 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 45 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: H +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 131072 131072 131072 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 131072 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +eheap_alloc calls: 0 +eheap_free calls: 0 +eheap_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:eheap_alloc[6] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 50 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 45 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: H +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 2 2 +mbcs blocks[eheap_alloc] size: 0 55336 55336 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 131072 131072 131072 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 131072 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +eheap_alloc calls: 2 +eheap_free calls: 2 +eheap_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:eheap_alloc[7] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 50 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 45 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: H +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 1 2 2 +mbcs blocks[eheap_alloc] size: 72 2800 2800 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 131072 131072 131072 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 131072 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +eheap_alloc calls: 3 +eheap_free calls: 2 +eheap_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:eheap_alloc[8] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 50 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 131072 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 45 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: H +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 13 13 +mbcs blocks[eheap_alloc] size: 0 651688 651688 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 3 3 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 131072 1441792 1441792 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 131072 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +eheap_alloc calls: 30 +eheap_free calls: 30 +eheap_realloc calls: 1 +mseg_alloc calls: 2 +mseg_dealloc calls: 2 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ets_alloc[0] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 0 0 0 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 0 +mbcs carriers size: 0 0 0 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ets_alloc calls: 0 +ets_free calls: 0 +ets_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 0 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ets_alloc[1] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: E +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 633 633 633 +mbcs blocks[ets_alloc] size: 469536 469536 469536 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 3 3 3 +mbcs mseg carriers: 2 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 1343488 1343488 1343488 +mbcs mseg carriers size: 1310720 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ets_alloc calls: 634 +ets_free calls: 1 +ets_realloc calls: 9 +mseg_alloc calls: 2 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ets_alloc[2] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: E +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ets_alloc calls: 0 +ets_free calls: 0 +ets_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ets_alloc[3] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: E +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ets_alloc calls: 0 +ets_free calls: 0 +ets_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ets_alloc[4] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: E +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ets_alloc calls: 0 +ets_free calls: 0 +ets_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ets_alloc[5] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: E +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ets_alloc calls: 0 +ets_free calls: 0 +ets_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ets_alloc[6] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: E +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ets_alloc calls: 0 +ets_free calls: 0 +ets_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ets_alloc[7] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: E +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ets_alloc calls: 0 +ets_free calls: 0 +ets_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:ets_alloc[8] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: E +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +ets_alloc calls: 0 +ets_free calls: 0 +ets_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:fix_alloc[0] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option as: aoffcbf +fix type: enif_select_data_state 0 0 +fix type: driver_select_data_state 0 0 +fix type: link 0 0 +fix type: monitor 0 0 +fix type: sl_thr_q_element 448 0 +fix type: process_signal_queue_buffers 0 0 +fix type: magic_indirection 0 0 +fix type: nsched_pid_ref_entry 0 0 +fix type: nsched_magic_ref_entry 0 0 +fix type: bif_timer 0 0 +fix type: hl_ptimer 0 0 +fix type: ll_ptimer 0 0 +fix type: msg_ref 48 48 +fix type: receive_marker_block 0 0 +fix type: proc 4704 4704 +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 35 35 35 +mbcs blocks[fix_alloc] size: 6608 6608 6608 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +fix_alloc calls: 189 +fix_free calls: 182 +fix_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:fix_alloc[1] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: F +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 267 267 267 +mbcs blocks[fix_alloc] size: 71072 71072 71072 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 2 2 2 +mbcs mseg carriers: 1 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 294912 294912 294912 +mbcs mseg carriers size: 262144 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +fix_alloc calls: 629 +fix_free calls: 399 +fix_realloc calls: 0 +mseg_alloc calls: 1 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:fix_alloc[2] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: F +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +fix_alloc calls: 0 +fix_free calls: 0 +fix_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:fix_alloc[3] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: F +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +fix_alloc calls: 0 +fix_free calls: 0 +fix_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:fix_alloc[4] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: F +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +fix_alloc calls: 0 +fix_free calls: 0 +fix_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:fix_alloc[5] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: F +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +fix_alloc calls: 0 +fix_free calls: 0 +fix_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:fix_alloc[6] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: F +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +fix_alloc calls: 0 +fix_free calls: 0 +fix_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:fix_alloc[7] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: F +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +fix_alloc calls: 0 +fix_free calls: 0 +fix_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:fix_alloc[8] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: false +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: F +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +fix_alloc calls: 0 +fix_free calls: 0 +fix_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:literal_alloc +versions: 0.9 3.0 +option e: true +option t: false +option ramv: false +option atags: false +option sbct: 18446744073709551615 +option asbcst: 0 +option rsbcst: 0 +option rsbcmt: 0 +option rmbcmt: 0 +option mmbcs: 1048576 +option mmsbc: 0 +option mmmbc: 18446744073709551615 +option lmbcs: 10485760 +option smbcs: 1048576 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option as: aobf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 209 209 209 +mbcs blocks[literal_alloc] size: 1447384 1447384 1447384 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 2 2 2 +mbcs mseg carriers: 2 +mbcs sys_alloc carriers: 0 +mbcs carriers size: 2097152 2097152 2097152 +mbcs mseg carriers size: 2097152 +mbcs sys_alloc carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +literal_alloc calls: 212 +literal_free calls: 3 +literal_realloc calls: 0 +mseg_alloc calls: 2 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 0 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:binary_alloc[0] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 40 76 76 +mbcs blocks[binary_alloc] size: 459064 1258696 1258696 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 3 3 3 +mbcs mseg carriers: 2 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 1343488 1343488 1343488 +mbcs mseg carriers size: 1310720 +mbcs sys_alloc carriers size: 32768 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 1 1 +sbcs blocks[binary_alloc] size: 0 823888 823888 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 1 1 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 835584 835584 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +binary_alloc calls: 409 +binary_free calls: 369 +binary_realloc calls: 4 +mseg_alloc calls: 9 +mseg_dealloc calls: 7 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:binary_alloc[1] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: B +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 30 143 143 +mbcs blocks[binary_alloc] size: 13056 47272 47272 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 2 2 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 294912 294912 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 15 +mbcs_pool blocks[binary_alloc] size: 3120 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 1 +mbcs_pool carriers size: 262144 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +binary_alloc calls: 3105 +binary_free calls: 3060 +binary_realloc calls: 23 +mseg_alloc calls: 1 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:binary_alloc[2] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: B +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +binary_alloc calls: 0 +binary_free calls: 0 +binary_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:binary_alloc[3] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: B +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +binary_alloc calls: 0 +binary_free calls: 0 +binary_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:binary_alloc[4] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: B +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +binary_alloc calls: 0 +binary_free calls: 0 +binary_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:binary_alloc[5] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: B +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +binary_alloc calls: 0 +binary_free calls: 0 +binary_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:binary_alloc[6] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: B +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 78 78 +mbcs blocks[binary_alloc] size: 0 12416 12416 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +binary_alloc calls: 82 +binary_free calls: 82 +binary_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:binary_alloc[7] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: B +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 26 26 +mbcs blocks[binary_alloc] size: 0 6568 6568 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +binary_alloc calls: 32 +binary_free calls: 32 +binary_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:binary_alloc[8] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: B +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 143 143 +mbcs blocks[binary_alloc] size: 0 21808 21808 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +binary_alloc calls: 204 +binary_free calls: 204 +binary_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:driver_alloc[0] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 0 +option acful: 0 +option acnl: 0 +option acfml: 0 +option cp: undefined +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 37 37 37 +mbcs blocks[driver_alloc] size: 8096 8096 8096 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +driver_alloc calls: 38 +driver_free calls: 1 +driver_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:driver_alloc[1] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: R +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 17 18 18 +mbcs blocks[driver_alloc] size: 4496 15456 15456 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +driver_alloc calls: 26 +driver_free calls: 9 +driver_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:driver_alloc[2] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: R +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +driver_alloc calls: 0 +driver_free calls: 0 +driver_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:driver_alloc[3] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: R +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +driver_alloc calls: 0 +driver_free calls: 0 +driver_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:driver_alloc[4] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: R +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +driver_alloc calls: 0 +driver_free calls: 0 +driver_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:driver_alloc[5] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: R +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +driver_alloc calls: 0 +driver_free calls: 0 +driver_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:driver_alloc[6] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: R +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +driver_alloc calls: 0 +driver_free calls: 0 +driver_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:driver_alloc[7] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: R +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +driver_alloc calls: 0 +driver_free calls: 0 +driver_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:driver_alloc[8] +versions: 0.9 3.0 +option e: true +option t: 9 +option ramv: false +option atags: true +option sbct: 524288 +option asbcst: 4145152 +option rsbcst: 20 +option rsbcmt: 80 +option rmbcmt: 50 +option mmbcs: 32768 +option mmsbc: 256 +option mmmbc: 18446744073709551615 +option lmbcs: 5242880 +option smbcs: 262144 +option mbcgs: 10 +option acul: 60 +option acful: 0 +option acnl: 1000 +option acfml: 0 +option cp: R +option as: aoffcbf +mbcs blocks[sys_alloc] count: 0 0 0 +mbcs blocks[sys_alloc] size: 0 0 0 +mbcs blocks[temp_alloc] count: 0 0 0 +mbcs blocks[temp_alloc] size: 0 0 0 +mbcs blocks[sl_alloc] count: 0 0 0 +mbcs blocks[sl_alloc] size: 0 0 0 +mbcs blocks[std_alloc] count: 0 0 0 +mbcs blocks[std_alloc] size: 0 0 0 +mbcs blocks[ll_alloc] count: 0 0 0 +mbcs blocks[ll_alloc] size: 0 0 0 +mbcs blocks[eheap_alloc] count: 0 0 0 +mbcs blocks[eheap_alloc] size: 0 0 0 +mbcs blocks[ets_alloc] count: 0 0 0 +mbcs blocks[ets_alloc] size: 0 0 0 +mbcs blocks[fix_alloc] count: 0 0 0 +mbcs blocks[fix_alloc] size: 0 0 0 +mbcs blocks[literal_alloc] count: 0 0 0 +mbcs blocks[literal_alloc] size: 0 0 0 +mbcs blocks[binary_alloc] count: 0 0 0 +mbcs blocks[binary_alloc] size: 0 0 0 +mbcs blocks[driver_alloc] count: 0 0 0 +mbcs blocks[driver_alloc] size: 0 0 0 +mbcs blocks[test_alloc] count: 0 0 0 +mbcs blocks[test_alloc] size: 0 0 0 +mbcs carriers: 1 1 1 +mbcs mseg carriers: 0 +mbcs sys_alloc carriers: 1 +mbcs carriers size: 32768 32768 32768 +mbcs mseg carriers size: 0 +mbcs sys_alloc carriers size: 32768 +mbcs_pool blocks[sys_alloc] count: 0 +mbcs_pool blocks[sys_alloc] size: 0 +mbcs_pool blocks[temp_alloc] count: 0 +mbcs_pool blocks[temp_alloc] size: 0 +mbcs_pool blocks[sl_alloc] count: 0 +mbcs_pool blocks[sl_alloc] size: 0 +mbcs_pool blocks[std_alloc] count: 0 +mbcs_pool blocks[std_alloc] size: 0 +mbcs_pool blocks[ll_alloc] count: 0 +mbcs_pool blocks[ll_alloc] size: 0 +mbcs_pool blocks[eheap_alloc] count: 0 +mbcs_pool blocks[eheap_alloc] size: 0 +mbcs_pool blocks[ets_alloc] count: 0 +mbcs_pool blocks[ets_alloc] size: 0 +mbcs_pool blocks[fix_alloc] count: 0 +mbcs_pool blocks[fix_alloc] size: 0 +mbcs_pool blocks[literal_alloc] count: 0 +mbcs_pool blocks[literal_alloc] size: 0 +mbcs_pool blocks[binary_alloc] count: 0 +mbcs_pool blocks[binary_alloc] size: 0 +mbcs_pool blocks[driver_alloc] count: 0 +mbcs_pool blocks[driver_alloc] size: 0 +mbcs_pool blocks[test_alloc] count: 0 +mbcs_pool blocks[test_alloc] size: 0 +mbcs_pool carriers: 0 +mbcs_pool carriers size: 0 +sbcs blocks[sys_alloc] count: 0 0 0 +sbcs blocks[sys_alloc] size: 0 0 0 +sbcs blocks[temp_alloc] count: 0 0 0 +sbcs blocks[temp_alloc] size: 0 0 0 +sbcs blocks[sl_alloc] count: 0 0 0 +sbcs blocks[sl_alloc] size: 0 0 0 +sbcs blocks[std_alloc] count: 0 0 0 +sbcs blocks[std_alloc] size: 0 0 0 +sbcs blocks[ll_alloc] count: 0 0 0 +sbcs blocks[ll_alloc] size: 0 0 0 +sbcs blocks[eheap_alloc] count: 0 0 0 +sbcs blocks[eheap_alloc] size: 0 0 0 +sbcs blocks[ets_alloc] count: 0 0 0 +sbcs blocks[ets_alloc] size: 0 0 0 +sbcs blocks[fix_alloc] count: 0 0 0 +sbcs blocks[fix_alloc] size: 0 0 0 +sbcs blocks[literal_alloc] count: 0 0 0 +sbcs blocks[literal_alloc] size: 0 0 0 +sbcs blocks[binary_alloc] count: 0 0 0 +sbcs blocks[binary_alloc] size: 0 0 0 +sbcs blocks[driver_alloc] count: 0 0 0 +sbcs blocks[driver_alloc] size: 0 0 0 +sbcs blocks[test_alloc] count: 0 0 0 +sbcs blocks[test_alloc] size: 0 0 0 +sbcs carriers: 0 0 0 +sbcs mseg carriers: 0 +sbcs sys_alloc carriers: 0 +sbcs carriers size: 0 0 0 +sbcs mseg carriers size: 0 +sbcs sys_alloc carriers size: 0 +driver_alloc calls: 0 +driver_free calls: 0 +driver_realloc calls: 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +sys_alloc calls: 1 +sys_free calls: 0 +sys_realloc calls: 0 +=allocator:test_alloc +option e: false +=allocator:mseg_alloc[0] +version: 0.9 +option amcbf: 4194304 +option rmcbf: 20 +option mcs: 10 +memory kind: all memory +cached_segments: 2 +cache_hits: 7 +segments: 7 8 8 +segments_watermark: 8 +segments_size: 13631488 14467072 14467072 +mseg_alloc calls: 16 +mseg_dealloc calls: 9 +mseg_realloc calls: 0 +mseg_create calls: 9 +mseg_create_resize calls: 0 +mseg_destroy calls: 0 +mseg_recreate calls: 0 +mseg_clear_cache calls: 0 +mseg_check_cache calls: 0 +=allocator:mseg_alloc[1] +version: 0.9 +option amcbf: 4194304 +option rmcbf: 20 +option mcs: 10 +memory kind: all memory +cached_segments: 5 +cache_hits: 23 +segments: 11 13 13 +segments_watermark: 13 +segments_size: 9371648 11681792 11681792 +mseg_alloc calls: 38 +mseg_dealloc calls: 27 +mseg_realloc calls: 2 +mseg_create calls: 15 +mseg_create_resize calls: 0 +mseg_destroy calls: 1 +mseg_recreate calls: 1 +mseg_clear_cache calls: 0 +mseg_check_cache calls: 0 +=allocator:mseg_alloc[2] +version: 0.9 +option amcbf: 4194304 +option rmcbf: 20 +option mcs: 10 +memory kind: all memory +cached_segments: 0 +cache_hits: 0 +segments: 0 0 0 +segments_watermark: 0 +segments_size: 0 0 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +mseg_create calls: 0 +mseg_create_resize calls: 0 +mseg_destroy calls: 0 +mseg_recreate calls: 0 +mseg_clear_cache calls: 0 +mseg_check_cache calls: 0 +=allocator:mseg_alloc[3] +version: 0.9 +option amcbf: 4194304 +option rmcbf: 20 +option mcs: 10 +memory kind: all memory +cached_segments: 0 +cache_hits: 0 +segments: 0 0 0 +segments_watermark: 0 +segments_size: 0 0 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +mseg_create calls: 0 +mseg_create_resize calls: 0 +mseg_destroy calls: 0 +mseg_recreate calls: 0 +mseg_clear_cache calls: 0 +mseg_check_cache calls: 0 +=allocator:mseg_alloc[4] +version: 0.9 +option amcbf: 4194304 +option rmcbf: 20 +option mcs: 10 +memory kind: all memory +cached_segments: 0 +cache_hits: 0 +segments: 0 0 0 +segments_watermark: 0 +segments_size: 0 0 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +mseg_create calls: 0 +mseg_create_resize calls: 0 +mseg_destroy calls: 0 +mseg_recreate calls: 0 +mseg_clear_cache calls: 0 +mseg_check_cache calls: 0 +=allocator:mseg_alloc[5] +version: 0.9 +option amcbf: 4194304 +option rmcbf: 20 +option mcs: 10 +memory kind: all memory +cached_segments: 0 +cache_hits: 0 +segments: 0 0 0 +segments_watermark: 0 +segments_size: 0 0 0 +mseg_alloc calls: 0 +mseg_dealloc calls: 0 +mseg_realloc calls: 0 +mseg_create calls: 0 +mseg_create_resize calls: 0 +mseg_destroy calls: 0 +mseg_recreate calls: 0 +mseg_clear_cache calls: 0 +mseg_check_cache calls: 0 +=allocator:mseg_alloc[6] +version: 0.9 +option amcbf: 4194304 +option rmcbf: 20 +option mcs: 10 +memory kind: all memory +cached_segments: 1 +cache_hits: 0 +segments: 0 1 1 +segments_watermark: 1 +segments_size: 0 262144 262144 +mseg_alloc calls: 1 +mseg_dealloc calls: 1 +mseg_realloc calls: 0 +mseg_create calls: 1 +mseg_create_resize calls: 0 +mseg_destroy calls: 0 +mseg_recreate calls: 0 +mseg_clear_cache calls: 0 +mseg_check_cache calls: 0 +=allocator:mseg_alloc[7] +version: 0.9 +option amcbf: 4194304 +option rmcbf: 20 +option mcs: 10 +memory kind: all memory +cached_segments: 1 +cache_hits: 0 +segments: 0 1 1 +segments_watermark: 1 +segments_size: 0 262144 262144 +mseg_alloc calls: 1 +mseg_dealloc calls: 1 +mseg_realloc calls: 0 +mseg_create calls: 1 +mseg_create_resize calls: 0 +mseg_destroy calls: 0 +mseg_recreate calls: 0 +mseg_clear_cache calls: 0 +mseg_check_cache calls: 0 +=allocator:mseg_alloc[8] +version: 0.9 +option amcbf: 4194304 +option rmcbf: 20 +option mcs: 10 +memory kind: all memory +cached_segments: 3 +cache_hits: 0 +segments: 0 3 3 +segments_watermark: 3 +segments_size: 0 1572864 1572864 +mseg_alloc calls: 3 +mseg_dealloc calls: 3 +mseg_realloc calls: 0 +mseg_create calls: 3 +mseg_create_resize calls: 0 +mseg_destroy calls: 0 +mseg_recreate calls: 0 +mseg_clear_cache calls: 0 +mseg_check_cache calls: 0 +=allocator:erts_mmap.default_mmap +option scs: 0 +os mmap size used: 29966336 +=allocator:erts_mmap.literal_mmap +option scs: 1073676288 +option sco: true +option scrpm: false +option scrfsd: 1024 +supercarrier total size: 1073741824 +supercarrier total sa size: 2097152 +supercarrier total sua size: 0 +supercarrier used size: 2162688 +supercarrier used sa size: 2097152 +supercarrier used sua size: 0 +supercarrier used free segs: 0 +supercarrier max free segs: 0 +supercarrier allocated free segs: 0 +supercarrier reserved free segs: 1024 +supercarrier sa free segs: 0 +supercarrier sua free segs: 0 +=allocator:alloc_util +option mmc: 18446744073709551615 +option ycs: 1048576 +option sac: true +=allocator:instr +=proc:<0.0.0> +State: Running +Name: init +Spawned as: erl_init:start/2 +Spawned by: [] +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.10.0>, <0.44.0>, <0.42.0>] +Reductions: 10269 +Stack+heap: 2586 +OldHeap: 4185 +Heap unused: 1928 +OldHeap unused: 2458 +BinVHeap: 0 +OldBinVHeap: 169 +BinVHeap unused: 46422 +OldBinVHeap unused: 46253 +Memory: 55072 +Program counter: 0x0000000103d889fc (init:boot_loop/2 + 84) +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | ACTIVE | RUNNING | ACTIVE_SYS +=proc:<0.1.0> +State: Waiting +Name: erts_code_purger +Spawned as: erts_code_purger:start/0 +Spawned by: <0.0.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 11 +Reductions: 23 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 228 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2736 +Program counter: 0x0000000103d82874 (erts_code_purger:wait_for_request/0 + 68) +arity = 0 +Internal State: ACT_PRIO_HIGH | USR_PRIO_HIGH | PRQ_PRIO_HIGH | OFF_HEAP_MSGQ +=proc:<0.2.0> +State: Waiting +Spawned as: erts_literal_area_collector:start/0 +Spawned by: <0.0.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Reductions: 7 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 233 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2648 +Program counter: 0x0000000103e01368 (erts_literal_area_collector:msg_loop/4 + 136) +arity = 0 +Internal State: ACT_PRIO_HIGH | USR_PRIO_HIGH | PRQ_PRIO_HIGH | OFF_HEAP_MSGQ +=proc:<0.3.0> +State: Waiting +Spawned as: erts_dirty_process_signal_handler:start/0 +Spawned by: <0.0.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Reductions: 7 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 233 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2648 +Program counter: 0x0000000103e025f8 (erts_dirty_process_signal_handler:msg_loop/0 + 80) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | OFF_HEAP_MSGQ +=proc:<0.4.0> +State: Waiting +Spawned as: erts_dirty_process_signal_handler:start/0 +Spawned by: <0.0.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Reductions: 7 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 233 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2648 +Program counter: 0x0000000103e025f8 (erts_dirty_process_signal_handler:msg_loop/0 + 80) +arity = 0 +Internal State: ACT_PRIO_HIGH | USR_PRIO_HIGH | PRQ_PRIO_HIGH | OFF_HEAP_MSGQ +=proc:<0.5.0> +State: Waiting +Spawned as: erts_dirty_process_signal_handler:start/0 +Spawned by: <0.0.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Reductions: 7 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 233 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2648 +Program counter: 0x0000000103e025f8 (erts_dirty_process_signal_handler:msg_loop/0 + 80) +arity = 0 +Internal State: ACT_PRIO_MAX | USR_PRIO_MAX | PRQ_PRIO_MAX | OFF_HEAP_MSGQ +=proc:<0.6.0> +State: Waiting +Spawned as: prim_file:start/0 +Spawned by: <0.0.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Reductions: 6 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 233 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2648 +Program counter: 0x0000000103daf94c (prim_file:helper_loop/0 + 68) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.7.0> +State: Waiting +Name: socket_registry +Spawned as: socket_registry:start/0 +Spawned by: <0.0.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Reductions: 8 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 233 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2648 +Program counter: 0x0000000103dbe314 (socket_registry:loop/1 + 84) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.10.0> +State: Waiting +Name: erl_prim_loader +Spawned as: erlang:apply/2 +Spawned by: <0.9.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.0.0>] +Reductions: 468281 +Stack+heap: 6772 +OldHeap: 10958 +Heap unused: 3381 +OldHeap unused: 5568 +BinVHeap: 313 +OldBinVHeap: 0 +BinVHeap unused: 46109 +OldBinVHeap unused: 46422 +Memory: 142752 +Program counter: 0x0000000103dd7c4c (erl_prim_loader:loop/3 + 100) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.42.0> +State: Waiting +Name: logger +Spawned as: proc_lib:init_p/5 +Spawned by: <0.9.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.0.0>] +Reductions: 883 +Stack+heap: 1598 +OldHeap: 376 +Heap unused: 1120 +OldHeap unused: 331 +BinVHeap: 100 +OldBinVHeap: 4 +BinVHeap unused: 46322 +OldBinVHeap unused: 46418 +Memory: 16792 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.44.0> +State: Waiting +Name: application_controller +Spawned as: erlang:apply/2 +Spawned by: <0.9.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 8 +Link list: [<0.0.0>, <0.90.0>, <0.102.0>, <0.46.0>] +Reductions: 92245 +Stack+heap: 28690 +OldHeap: 46422 +Heap unused: 12854 +OldHeap unused: 17270 +BinVHeap: 24 +OldBinVHeap: 0 +BinVHeap unused: 46398 +OldBinVHeap unused: 46422 +Memory: 602080 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.46.0> +State: Waiting +Spawned as: proc_lib:init_p/5 +Spawned by: <0.45.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.44.0>, <0.47.0>] +Reductions: 40 +Stack+heap: 376 +OldHeap: 0 +Heap unused: 29 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 3960 +Program counter: 0x0000000103eb6264 (application_master:main_loop/2 + 76) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.47.0> +State: Waiting +Spawned as: application_master:start_it/4 +Spawned by: <0.46.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.49.0>, <0.46.0>] +Reductions: 545 +Stack+heap: 376 +OldHeap: 376 +Heap unused: 336 +OldHeap unused: 370 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 6880 +Program counter: 0x0000000103eb7b08 (application_master:loop_it/4 + 88) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.49.0> +State: Waiting +Name: kernel_sup +Spawned as: proc_lib:init_p/5 +Spawned by: <0.47.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 4 +Link list: [<0.47.0>, <0.51.0>, <0.50.0>, <0.55.0>, <0.58.0>, <0.56.0>, <0.63.0>, <0.70.0>, <0.75.0>, <0.74.0>, <0.73.0>, <0.64.0>, <0.61.0>, <0.53.0>] +Reductions: 3772 +Stack+heap: 2586 +OldHeap: 2586 +Heap unused: 618 +OldHeap unused: 2304 +BinVHeap: 8812 +OldBinVHeap: 0 +BinVHeap unused: 37610 +OldBinVHeap unused: 46422 +Memory: 42840 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.50.0> +State: Waiting +Name: code_server +Spawned as: erlang:apply/2 +Spawned by: <0.49.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.49.0>] +Reductions: 221248 +Stack+heap: 28690 +OldHeap: 318187 +Heap unused: 24392 +OldHeap unused: 271366 +BinVHeap: 3930 +OldBinVHeap: 0 +BinVHeap unused: 42492 +OldBinVHeap unused: 46422 +Memory: 2775928 +Program counter: 0x0000000103ee8404 (code_server:loop/1 + 132) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.51.0> +State: Waiting +Name: standard_error_sup +Spawned as: proc_lib:init_p/5 +Spawned by: <0.49.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.52.0>, <0.49.0>] +Reductions: 57 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 128 +OldHeap unused: 0 +BinVHeap: 20 +OldBinVHeap: 0 +BinVHeap unused: 46402 +OldBinVHeap unused: 46422 +Memory: 2816 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.52.0> +State: Waiting +Name: standard_error +Spawned as: erlang:apply/2 +Spawned by: <0.51.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [#Port<0.1>, <0.51.0>] +Reductions: 134 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 118 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2816 +Program counter: 0x0000000103fbbafc (standard_error:server_loop/1 + 76) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.53.0> +State: Waiting +Name: file_server_2 +Spawned as: proc_lib:init_p/5 +Spawned by: <0.49.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.49.0>] +Reductions: 1025 +Stack+heap: 987 +OldHeap: 610 +Heap unused: 685 +OldHeap unused: 575 +BinVHeap: 7 +OldBinVHeap: 0 +BinVHeap unused: 46415 +OldBinVHeap unused: 46422 +Memory: 13776 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.55.0> +State: Waiting +Name: inet_db +Spawned as: proc_lib:init_p/5 +Spawned by: <0.49.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.49.0>] +Reductions: 420 +Stack+heap: 376 +OldHeap: 610 +Heap unused: 108 +OldHeap unused: 562 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 8888 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.56.0> +State: Waiting +Name: rex +Spawned as: proc_lib:init_p/5 +Spawned by: <0.49.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.49.0>, {to,<0.57.0>,#Ref<0.3756053351.4210294785.45059>}] +Reductions: 41 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 149 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2840 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | OFF_HEAP_MSGQ +=proc:<0.57.0> +State: Waiting +Spawned as: erlang:apply/2 +Spawned by: <0.56.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 6 +Link list: [{from,<0.56.0>,#Ref<0.3756053351.4210294785.45059>}] +Reductions: 69 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 12 +OldHeap unused: 0 +BinVHeap: 11010 +OldBinVHeap: 0 +BinVHeap unused: 35412 +OldBinVHeap unused: 46422 +Memory: 2908 +Program counter: 0x0000000103ff2290 (rpc:nodes_observer_loop/1 + 88) +arity = 0 +Internal State: ACT_PRIO_HIGH | USR_PRIO_HIGH | PRQ_PRIO_HIGH | MAYBE_SELF_SIGS +=proc:<0.58.0> +State: Waiting +Name: global_name_server +Spawned as: proc_lib:init_p/5 +Spawned by: <0.49.0> +Message queue length: 0 +Number of heap fragments: 1 +Heap fragment data: 4 +Link list: [<0.49.0>, <0.60.0>, <0.59.0>] +Reductions: 318 +Stack+heap: 610 +OldHeap: 610 +Heap unused: 345 +OldHeap unused: 559 +BinVHeap: 3003 +OldBinVHeap: 0 +BinVHeap unused: 43419 +OldBinVHeap unused: 46422 +Memory: 10932 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.59.0> +State: Waiting +Spawned as: erlang:apply/2 +Spawned by: <0.58.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.58.0>] +Reductions: 39 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 177 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2688 +Program counter: 0x0000000104002e4c (global:loop_the_locker/1 + 484) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.60.0> +State: Waiting +Spawned as: erlang:apply/2 +Spawned by: <0.58.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.58.0>] +Reductions: 7 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 231 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2688 +Program counter: 0x0000000104009898 (global:loop_the_registrar/0 + 80) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.61.0> +State: Waiting +Name: global_group +Spawned as: proc_lib:init_p/5 +Spawned by: <0.49.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.62.0>, <0.49.0>] +Reductions: 112 +Stack+heap: 376 +OldHeap: 0 +Heap unused: 94 +OldHeap unused: 0 +BinVHeap: 4276 +OldBinVHeap: 0 +BinVHeap unused: 42146 +OldBinVHeap unused: 46422 +Memory: 4020 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_MAX | USR_PRIO_MAX | PRQ_PRIO_MAX +=proc:<0.62.0> +State: Waiting +Name: global_group_check +Spawned as: erlang:apply/2 +Spawned by: <0.61.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.61.0>] +Reductions: 6 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 231 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2688 +Program counter: 0x0000000104040eec (global_group:global_group_check_dispatcher/0 + 68) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.63.0> +State: Waiting +Name: erl_signal_server +Spawned as: proc_lib:init_p/5 +Spawned by: <0.49.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.49.0>] +Reductions: 48 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 157 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2776 +Program counter: 0x0000000103edb214 (gen_event:fetch_msg/6 + 84) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.64.0> +State: Waiting +Spawned as: proc_lib:init_p/5 +Spawned by: <0.49.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.69.0>, <0.49.0>] +Reductions: 213 +Stack+heap: 4185 +OldHeap: 0 +Heap unused: 387 +OldHeap unused: 0 +BinVHeap: 15452 +OldBinVHeap: 0 +BinVHeap unused: 30970 +OldBinVHeap unused: 46422 +Memory: 34432 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.65.0> +State: Waiting +Name: user_drv +Spawned as: proc_lib:init_p/5 +Spawned by: <0.64.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.67.0>, <0.69.0>, <0.68.0>] +Reductions: 655 +Stack+heap: 610 +OldHeap: 610 +Heap unused: 208 +OldHeap unused: 487 +BinVHeap: 0 +OldBinVHeap: 82 +BinVHeap unused: 46422 +OldBinVHeap unused: 46340 +Memory: 10752 +Program counter: 0x000000010405efc0 (gen_statem:loop_receive/3 + 136) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.67.0> +State: Waiting +Name: user_drv_writer +Spawned as: proc_lib:init_p/5 +Spawned by: <0.65.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.65.0>] +Reductions: 36 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 164 +OldHeap unused: 0 +BinVHeap: 2 +OldBinVHeap: 0 +BinVHeap unused: 46420 +OldBinVHeap unused: 46422 +Memory: 2864 +Program counter: 0x000000010406d4b4 (prim_tty:writer_loop/2 + 84) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.68.0> +State: Waiting +Name: user_drv_reader +Spawned as: proc_lib:init_p/5 +Spawned by: <0.65.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.65.0>, {from,{prim_tty,tty},#Ref<0.3756053351.4210294785.45124>}] +Reductions: 33 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 165 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2848 +Program counter: 0x000000010406c5f4 (prim_tty:reader_loop/6 + 92) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.69.0> +State: Waiting +Name: user +Spawned as: group:server/4 +Spawned by: <0.65.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.64.0>, <0.65.0>] +Reductions: 287 +Stack+heap: 376 +OldHeap: 376 +Heap unused: 35 +OldHeap unused: 365 +BinVHeap: 2703 +OldBinVHeap: 0 +BinVHeap unused: 43719 +OldBinVHeap unused: 46422 +Memory: 6984 +Program counter: 0x0000000104081600 (group:server_loop/3 + 80) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.70.0> +State: Waiting +Name: logger_sup +Spawned as: proc_lib:init_p/5 +Spawned by: <0.49.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.49.0>, <0.72.0>, <0.105.0>, <0.77.0>, <0.71.0>] +Reductions: 556 +Stack+heap: 376 +OldHeap: 376 +Heap unused: 144 +OldHeap unused: 279 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 7088 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.71.0> +State: Waiting +Name: logger_handler_watcher +Spawned as: proc_lib:init_p/5 +Spawned by: <0.70.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.70.0>, {to,<0.105.0>,#Ref<0.3756053351.4210294785.45416>}, {to,<0.77.0>,#Ref<0.3756053351.4210294785.45193>}] +Reductions: 81 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 84 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2904 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.72.0> +State: Scheduled +Name: logger_proxy +Spawned as: proc_lib:init_p/5 +Current call: logger_olp:handle_info/2 +Spawned by: <0.70.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 1494 +Link list: [<0.70.0>] +Reductions: 104 +Stack+heap: 376 +OldHeap: 0 +Heap unused: 211 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 15872 +Program counter: 0x0000000103f753c0 (logger_olp:handle_info/2 + 48) +arity = 2 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | IN_PRQ_NORMAL | ACTIVE | IN_RUNQ | OFF_HEAP_MSGQ +=proc:<0.73.0> +State: Waiting +Spawned as: proc_lib:init_p/5 +Spawned by: <0.49.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.49.0>] +Reductions: 59 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 143 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2776 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.74.0> +State: Waiting +Name: kernel_refc +Spawned as: proc_lib:init_p/5 +Spawned by: <0.49.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 3 +Link list: [<0.49.0>] +Reductions: 72 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 140 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2800 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.75.0> +State: Waiting +Name: kernel_safe_sup +Spawned as: proc_lib:init_p/5 +Current call: erlang:hibernate/3 +Spawned by: <0.49.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.49.0>] +Reductions: 90 +Stack+heap: 52 +OldHeap: 0 +Heap unused: 4 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 1328 +Program counter: 0x0000000103d822c8 (unknown function) +arity = 3 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.77.0> +State: Waiting +Name: logger_std_h_default +Spawned as: proc_lib:init_p/5 +Spawned by: <0.70.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.78.0>, <0.70.0>, {from,<0.71.0>,#Ref<0.3756053351.4210294785.45193>}] +Reductions: 181 +Stack+heap: 610 +OldHeap: 610 +Heap unused: 546 +OldHeap unused: 516 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 10776 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | OFF_HEAP_MSGQ +=proc:<0.78.0> +State: Waiting +Spawned as: erlang:apply/2 +Spawned by: <0.77.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.77.0>] +Reductions: 9 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 209 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2688 +Program counter: 0x00000001040ba3ac (logger_std_h:file_ctrl_loop/1 + 84) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.90.0> +State: Waiting +Spawned as: proc_lib:init_p/5 +Spawned by: <0.89.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.44.0>, <0.91.0>] +Reductions: 41 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 12 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2816 +Program counter: 0x0000000103eb6264 (application_master:main_loop/2 + 76) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.91.0> +State: Waiting +Spawned as: application_master:start_it/4 +Spawned by: <0.90.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.92.0>, <0.90.0>] +Reductions: 141 +Stack+heap: 610 +OldHeap: 987 +Heap unused: 358 +OldHeap unused: 984 +BinVHeap: 504 +OldBinVHeap: 0 +BinVHeap unused: 45918 +OldBinVHeap unused: 46422 +Memory: 13640 +Program counter: 0x0000000103eb7b08 (application_master:loop_it/4 + 88) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.92.0> +State: Waiting +Name: inets_sup +Spawned as: proc_lib:init_p/5 +Current call: erlang:hibernate/3 +Spawned by: <0.91.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.91.0>, <0.97.0>, <0.93.0>] +Reductions: 347 +Stack+heap: 96 +OldHeap: 0 +Heap unused: 4 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 1760 +Program counter: 0x0000000103d822c8 (unknown function) +arity = 3 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.93.0> +State: Waiting +Name: httpc_sup +Spawned as: proc_lib:init_p/5 +Current call: erlang:hibernate/3 +Spawned by: <0.92.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.92.0>, <0.96.0>, <0.94.0>] +Reductions: 336 +Stack+heap: 94 +OldHeap: 0 +Heap unused: 4 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 1744 +Program counter: 0x0000000103d822c8 (unknown function) +arity = 3 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.94.0> +State: Waiting +Name: httpc_profile_sup +Spawned as: proc_lib:init_p/5 +Current call: erlang:hibernate/3 +Spawned by: <0.93.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.95.0>, <0.93.0>] +Reductions: 260 +Stack+heap: 84 +OldHeap: 0 +Heap unused: 4 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 1624 +Program counter: 0x0000000103d822c8 (unknown function) +arity = 3 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.95.0> +State: Waiting +Name: httpc_manager +Spawned as: proc_lib:init_p/5 +Spawned by: <0.94.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.94.0>] +Reductions: 174 +Stack+heap: 610 +OldHeap: 610 +Heap unused: 217 +OldHeap unused: 568 +BinVHeap: 2781 +OldBinVHeap: 0 +BinVHeap unused: 43641 +OldBinVHeap unused: 46422 +Memory: 10760 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.96.0> +State: Waiting +Name: httpc_handler_sup +Spawned as: proc_lib:init_p/5 +Spawned by: <0.93.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.93.0>] +Reductions: 94 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 37 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2776 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.97.0> +State: Waiting +Name: httpd_sup +Spawned as: proc_lib:init_p/5 +Current call: erlang:hibernate/3 +Spawned by: <0.92.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.92.0>] +Reductions: 71 +Stack+heap: 54 +OldHeap: 0 +Heap unused: 4 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 1344 +Program counter: 0x0000000103d822c8 (unknown function) +arity = 3 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.102.0> +State: Waiting +Spawned as: proc_lib:init_p/5 +Spawned by: <0.101.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.44.0>, <0.103.0>] +Reductions: 59 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 26 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2816 +Program counter: 0x0000000103eb6264 (application_master:main_loop/2 + 76) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.103.0> +State: Waiting +Spawned as: application_master:start_it/4 +Spawned by: <0.102.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.107.0>, <0.102.0>] +Reductions: 325 +Stack+heap: 987 +OldHeap: 987 +Heap unused: 741 +OldHeap unused: 984 +BinVHeap: 317 +OldBinVHeap: 0 +BinVHeap unused: 46105 +OldBinVHeap unused: 46422 +Memory: 16656 +Program counter: 0x0000000103eb7b08 (application_master:loop_it/4 + 88) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.105.0> +State: Waiting +Name: logger_std_h_ssl_handler +Spawned as: proc_lib:init_p/5 +Spawned by: <0.70.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.106.0>, <0.70.0>, {from,<0.71.0>,#Ref<0.3756053351.4210294785.45416>}] +Reductions: 183 +Stack+heap: 610 +OldHeap: 610 +Heap unused: 496 +OldHeap unused: 516 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 10776 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | OFF_HEAP_MSGQ +=proc:<0.106.0> +State: Waiting +Spawned as: erlang:apply/2 +Spawned by: <0.105.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.105.0>] +Reductions: 9 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 209 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2688 +Program counter: 0x00000001040ba3ac (logger_std_h:file_ctrl_loop/1 + 84) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.107.0> +State: Waiting +Name: ssl_sup +Spawned as: proc_lib:init_p/5 +Current call: erlang:hibernate/3 +Spawned by: <0.103.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.103.0>, <0.112.0>, <0.108.0>] +Reductions: 342 +Stack+heap: 82 +OldHeap: 0 +Heap unused: 4 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 1648 +Program counter: 0x0000000103d822c8 (unknown function) +arity = 3 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.108.0> +State: Waiting +Name: ssl_admin_sup +Spawned as: proc_lib:init_p/5 +Current call: erlang:hibernate/3 +Spawned by: <0.107.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.107.0>, <0.111.0>, <0.110.0>, <0.109.0>] +Reductions: 487 +Stack+heap: 112 +OldHeap: 0 +Heap unused: 4 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 1928 +Program counter: 0x0000000103d822c8 (unknown function) +arity = 3 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.109.0> +State: Waiting +Name: ssl_pem_cache +Spawned as: proc_lib:init_p/5 +Spawned by: <0.108.0> +Message queue length: 0 +Number of heap fragments: 1 +Heap fragment data: 0 +Link list: [<0.108.0>] +Reductions: 99 +Stack+heap: 376 +OldHeap: 0 +Heap unused: 101 +OldHeap unused: 0 +BinVHeap: 3373 +OldBinVHeap: 0 +BinVHeap unused: 43049 +OldBinVHeap unused: 46422 +Memory: 4008 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.110.0> +State: Waiting +Name: ssl_manager +Spawned as: proc_lib:init_p/5 +Spawned by: <0.108.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.108.0>] +Reductions: 179 +Stack+heap: 610 +OldHeap: 987 +Heap unused: 288 +OldHeap unused: 944 +BinVHeap: 1821 +OldBinVHeap: 0 +BinVHeap unused: 44601 +OldBinVHeap unused: 46422 +Memory: 13776 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.111.0> +State: Waiting +Name: tls_client_ticket_store +Spawned as: proc_lib:init_p/5 +Spawned by: <0.108.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.108.0>] +Reductions: 42 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 147 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2776 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.112.0> +State: Waiting +Name: ssl_connection_sup +Spawned as: proc_lib:init_p/5 +Current call: erlang:hibernate/3 +Spawned by: <0.107.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.107.0>, <0.120.0>, <0.113.0>] +Reductions: 321 +Stack+heap: 84 +OldHeap: 0 +Heap unused: 4 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 1664 +Program counter: 0x0000000103d822c8 (unknown function) +arity = 3 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.113.0> +State: Waiting +Name: tls_sup +Spawned as: proc_lib:init_p/5 +Current call: erlang:hibernate/3 +Spawned by: <0.112.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.112.0>, <0.115.0>, <0.114.0>] +Reductions: 330 +Stack+heap: 86 +OldHeap: 0 +Heap unused: 4 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 1680 +Program counter: 0x0000000103d822c8 (unknown function) +arity = 3 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.114.0> +State: Waiting +Name: tls_connection_sup +Spawned as: proc_lib:init_p/5 +Spawned by: <0.113.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.113.0>] +Reductions: 92 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 62 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2776 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.115.0> +State: Waiting +Name: tls_server_sup +Spawned as: proc_lib:init_p/5 +Current call: erlang:hibernate/3 +Spawned by: <0.113.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.113.0>, <0.117.0>, <0.119.0>, <0.118.0>, <0.116.0>] +Reductions: 653 +Stack+heap: 116 +OldHeap: 0 +Heap unused: 4 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2000 +Program counter: 0x0000000103d822c8 (unknown function) +arity = 3 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.116.0> +State: Waiting +Name: ssl_listen_tracker_sup +Spawned as: proc_lib:init_p/5 +Spawned by: <0.115.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.115.0>] +Reductions: 92 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 62 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2776 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.117.0> +State: Waiting +Name: tls_server_session_ticket_sup +Spawned as: proc_lib:init_p/5 +Spawned by: <0.115.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.115.0>] +Reductions: 92 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 62 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2776 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.118.0> +State: Waiting +Name: ssl_server_session_cache_sup +Spawned as: proc_lib:init_p/5 +Spawned by: <0.115.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.115.0>] +Reductions: 92 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 62 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2776 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.119.0> +State: Waiting +Name: ssl_upgrade_server_session_cache_sup +Spawned as: proc_lib:init_p/5 +Spawned by: <0.115.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.115.0>] +Reductions: 92 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 62 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2776 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.120.0> +State: Waiting +Name: dtls_sup +Spawned as: proc_lib:init_p/5 +Current call: erlang:hibernate/3 +Spawned by: <0.112.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.112.0>, <0.122.0>, <0.121.0>] +Reductions: 330 +Stack+heap: 86 +OldHeap: 0 +Heap unused: 4 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 1680 +Program counter: 0x0000000103d822c8 (unknown function) +arity = 3 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.121.0> +State: Waiting +Name: dtls_connection_sup +Spawned as: proc_lib:init_p/5 +Spawned by: <0.120.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.120.0>] +Reductions: 95 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 64 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2776 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.122.0> +State: Waiting +Name: dtls_server_sup +Spawned as: proc_lib:init_p/5 +Current call: erlang:hibernate/3 +Spawned by: <0.120.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.120.0>, <0.124.0>, <0.123.0>] +Reductions: 331 +Stack+heap: 88 +OldHeap: 0 +Heap unused: 4 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 1696 +Program counter: 0x0000000103d822c8 (unknown function) +arity = 3 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.123.0> +State: Waiting +Name: dtls_listener_sup +Spawned as: proc_lib:init_p/5 +Spawned by: <0.122.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.122.0>] +Reductions: 93 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 62 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2864 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.124.0> +State: Waiting +Name: dtls_server_session_cache_sup +Spawned as: proc_lib:init_p/5 +Spawned by: <0.122.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.122.0>] +Reductions: 92 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 62 +OldHeap unused: 0 +BinVHeap: 0 +OldBinVHeap: 0 +BinVHeap unused: 46422 +OldBinVHeap unused: 46422 +Memory: 2776 +Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL +=proc:<0.135.0> +State: Scheduled +Spawned as: erlang:apply/2 +Spawned by: <0.9.0> +Message queue length: 0 +Number of heap fragments: 0 +Heap fragment data: 0 +Link list: [<0.9.0>] +Reductions: 111 +Stack+heap: 233 +OldHeap: 0 +Heap unused: 55 +OldHeap unused: 0 +BinVHeap: 1 +OldBinVHeap: 0 +BinVHeap unused: 46421 +OldBinVHeap unused: 46422 +Memory: 13976 +Program counter: 0x00000001041ff698 (gleam_erlang_ffi:select/2 + 192) +arity = 0 +Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | IN_PRQ_NORMAL | IN_RUNQ | SIG_IN_Q | ACTIVE_SYS +=port:#Port<0.0> +State: CONNECTED +Slot: 0 +Connected: <0.0.0> +Port controls forker process: forker +Input: 0 +Output: 0 +Queue: 0 +=port:#Port<0.1> +State: CONNECTED|BINARY_IO +Slot: 8 +Connected: <0.52.0> +Links: <0.52.0> +Port is UNIX fd not opened by emulator: 2/2 +Input: 0 +Output: 0 +Queue: 0 +=ets:<0.42.0> +Slot: 5110497728 +Table: logger +Name: logger +Buckets: 256 +Chain Length Avg: 0.015625 +Chain Length Max: 1 +Chain Length Min: 0 +Chain Length Std Dev: 0.124020 +Chain Length Expected Std Dev: 0.124756 +Fixed: false +Objects: 4 +Words: 6813 +Type: set +Protection: protected +Compressed: false +Write Concurrency: true +Read Concurrency: true +=ets:<0.44.0> +Slot: 5110509560 +Table: ac_tab +Name: ac_tab +Buckets: 256 +Chain Length Avg: 0.136719 +Chain Length Max: 3 +Chain Length Min: 0 +Chain Length Std Dev: 0.386363 +Chain Length Expected Std Dev: 0.369032 +Fixed: false +Objects: 35 +Words: 4094 +Type: set +Protection: public +Compressed: false +Write Concurrency: false +Read Concurrency: true +=ets:<0.50.0> +Slot: 5110518176 +Table: code_server +Name: code_server +Buckets: 448 +Chain Length Avg: 1.000000 +Chain Length Max: 8 +Chain Length Min: 0 +Chain Length Std Dev: 1.198958 +Chain Length Expected Std Dev: 0.998883 +Fixed: false +Objects: 448 +Words: 34781 +Type: set +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.50.0> +Slot: 4396206480 +Table: code_names +Name: code_names +Buckets: 256 +Chain Length Avg: 0.203125 +Chain Length Max: 3 +Chain Length Min: 0 +Chain Length Std Dev: 0.456881 +Chain Length Expected Std Dev: 0.449813 +Fixed: false +Objects: 52 +Words: 9409 +Type: set +Protection: public +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.55.0> +Slot: 4396326720 +Table: inet_db +Name: inet_db +Buckets: 256 +Chain Length Avg: 0.121094 +Chain Length Max: 3 +Chain Length Min: 0 +Chain Length Std Dev: 0.360371 +Chain Length Expected Std Dev: 0.347305 +Fixed: false +Objects: 31 +Words: 622 +Type: set +Protection: public +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.55.0> +Slot: 4396330840 +Table: inet_cache +Name: inet_cache +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: bag +Protection: public +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.55.0> +Slot: 4396333344 +Table: inet_hosts_byname +Name: inet_hosts_byname +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: set +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.55.0> +Slot: 4396335848 +Table: inet_hosts_byaddr +Name: inet_hosts_byaddr +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: set +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.55.0> +Slot: 4396338352 +Table: inet_hosts_file_byname +Name: inet_hosts_file_byname +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: set +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.55.0> +Slot: 4396340856 +Table: inet_hosts_file_byaddr +Name: inet_hosts_file_byaddr +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: set +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.55.0> +Slot: 4396343360 +Table: inet_sockets +Name: inet_sockets +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: set +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.57.0> +Slot: 4396353768 +Table: #Ref<0.3756053351.4210425857.45060> +Name: rex_nodes_observer +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 391 +Type: set +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: true +=ets:<0.58.0> +Slot: 4396358992 +Table: global_locks +Name: global_locks +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: set +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.58.0> +Slot: 4396361496 +Table: global_names +Name: global_names +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 391 +Type: set +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: true +=ets:<0.58.0> +Slot: 4396364000 +Table: global_names_ext +Name: global_names_ext +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: set +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.58.0> +Slot: 4396366504 +Table: global_pid_names +Name: global_pid_names +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: bag +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.58.0> +Slot: 4396369008 +Table: global_pid_ids +Name: global_pid_ids +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: bag +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.58.0> +Slot: 4396371512 +Table: global_lost_connections +Name: global_lost_connections +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: set +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.58.0> +Slot: 4396374016 +Table: global_node_resources +Name: global_node_resources +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: set +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.95.0> +Slot: 4412439352 +Table: httpc_manager__session_db +Name: httpc_manager__session_db +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: set +Protection: public +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.95.0> +Slot: 4412441856 +Table: httpc_manager__handler_db +Name: httpc_manager__handler_db +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: set +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.95.0> +Slot: 4412445768 +Table: #Ref<0.3756053351.4210425857.45356> +Name: httpc_manager__session_cookie_db +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: bag +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.109.0> +Slot: 4412458184 +Table: ssl_pem_cache +Name: ssl_pem_cache +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: set +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.110.0> +Slot: 4412471664 +Table: #Ref<0.3756053351.4210425857.45462> +Name: client_ssl_otp_session_cache +Ordered set (AVL tree), Elements: 0 +Objects: 0 +Words: 145 +Type: ordered_set +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.110.0> +Slot: 4412472840 +Table: #Ref<0.3756053351.4210425857.45463> +Name: ssl_otp_cacertificate_db +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: set +Protection: public +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.110.0> +Slot: 4412475344 +Table: #Ref<0.3756053351.4210425857.45464> +Name: ssl_otp_ca_file_ref +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: set +Protection: public +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.110.0> +Slot: 4412477848 +Table: #Ref<0.3756053351.4210425857.45465> +Name: ssl_otp_ca_ref_file_mapping +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: set +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.110.0> +Slot: 4412480352 +Table: #Ref<0.3756053351.4210425857.45466> +Name: ssl_otp_crl_cache +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: set +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.110.0> +Slot: 4412482856 +Table: #Ref<0.3756053351.4210425857.45467> +Name: ssl_otp_crl_issuer_mapping +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: bag +Protection: protected +Compressed: false +Write Concurrency: false +Read Concurrency: false +=ets:<0.123.0> +Slot: 4412505024 +Table: dtls_listener_sup +Name: dtls_listener_sup +Buckets: 256 +Chain Length Avg: 0.000000 +Chain Length Max: 0 +Chain Length Min: 0 +Chain Length Std Dev: 0.000000 +Chain Length Expected Std Dev: 0.000000 +Fixed: false +Objects: 0 +Words: 311 +Type: set +Protection: public +Compressed: false +Write Concurrency: false +Read Concurrency: false +=timer:<0.55.0> +Message: refresh_timeout +Time left: 3599689 +=timer:<0.111.0> +Message: remove_invalid_tickets +Time left: 7199821 +=timer:<0.110.0> +Message: validate_sessions +Time left: 86404820 +=timer:<0.109.0> +Message: clear_pem_cache +Time left: 119817 +=node:'nonode@nohost' +=no_distribution +=loaded_modules +Current code: 6279844 +Old code: 0 +=mod:erts_code_purger +Current size: 13296 +=mod:erl_init +Current size: 2480 +=mod:init +Current size: 65275 +=mod:prim_buffer +Current size: 4936 +=mod:prim_eval +Current size: 1336 +=mod:prim_inet +Current size: 108445 +=mod:prim_file +Current size: 40897 +=mod:zlib +Current size: 19904 +=mod:socket_registry +Current size: 22176 +=mod:prim_socket +Current size: 50952 +=mod:prim_net +Current size: 10816 +=mod:prim_zip +Current size: 24400 +=mod:erl_prim_loader +Current size: 55760 +=mod:erlang +Current size: 102432 +=mod:erts_internal +Current size: 23968 +=mod:erl_tracer +Current size: 1664 +=mod:erts_literal_area_collector +Current size: 4856 +=mod:erts_dirty_process_signal_handler +Current size: 2296 +=mod:atomics +Current size: 3424 +=mod:counters +Current size: 4112 +=mod:persistent_term +Current size: 1456 +=mod:erl_parse +Current size: 324787 +Current attributes: g2wAAAQxaAJ3A3ZzbmwAAAABbhAAWZz93qXsCLw4KSJjM+fEbWpoAncHcmVtb3ZlZGwAAAADaAN3CHNldF9saW5lYQJrABd1c2UgZXJsX2Fubm86c2V0X2xpbmUvMmgDdw5nZXRfYXR0cmlidXRlc2EBawAuZXJsX2Fubm86e2NvbHVtbixsaW5lLGxvY2F0aW9uLHRleHR9LzEgaW5zdGVhZGgDdw1nZXRfYXR0cmlidXRlYQJrAC5lcmxfYW5ubzp7Y29sdW1uLGxpbmUsbG9jYXRpb24sdGV4dH0vMSBpbnN0ZWFkamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwl5ZWNjcGFyczJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzEwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8xMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMTJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzEzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8xNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMTZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzE3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8xOGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMTlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzIwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8yMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMjJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzI0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8yNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMjZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzI3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8yOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMzBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzMxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8zMmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMzNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzM0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8zNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMzZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzM4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8zOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNDBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzQxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl80M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNDRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzQ1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl80NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNDdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzQ4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl80OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNTBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzUxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl81MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNTNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzU0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl81NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNTZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzU3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl81OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNTlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzY2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl83MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNzJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzc0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl83OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNzlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzgwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl84MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfODNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzg3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl85MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfOTFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzkyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl85M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfOTRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzk1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl85NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfOTdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzk5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMDBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEwMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTAyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMDNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEwNGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTA1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMDdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEwOGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTA5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMTBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzExMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTEyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMTNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzExNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTE3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMThhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzExOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTIxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMjJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEyM2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTI0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMjVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEyNmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTI3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMzBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEzMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTMyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMzNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEzNGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTM1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMzZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEzN2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTM4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMzlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE0MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTQxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNDJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE0M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTQ0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNDVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE0NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTQ3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNDhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE0OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTUwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNTFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE1MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTUzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNTRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE1NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTU2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNTdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE1OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTU5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNjBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE2MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTYzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNjRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE2NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTY2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNjhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE2OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTcwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNzFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE3MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTczYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNzRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE3NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTc2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNzdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE3OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTc5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xODBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE4MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTgyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xODNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE4NGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTg1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xODZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE4OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTkwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xOTFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE5MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTkzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xOTRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE5NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTk2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xOTdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE5OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTk5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMDBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIwMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjAyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMDNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIwNGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjA1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMDZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIwN2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjA4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMDlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIxMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjEyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMTNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIxNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjE2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMTdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIxOGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjIwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMjFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIyMmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjIzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMjRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIyN2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjI4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMjlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIzMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjMyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMzNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIzNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjM3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMzhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI0MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjQxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNDJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI0M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjQ0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNDVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI0NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjQ4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNDlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI1MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjUxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNTNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI1NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjU2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNTdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI1OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjYwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNjFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI2MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjYzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNjRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI2NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjY2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNjdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI2OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjY5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNzBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI3MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjczYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNzRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI3NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjc2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNzdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI3OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjc5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yODBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI4MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjgyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yODNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI4NGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjg2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yODdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI5MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjk0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yOTVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI5NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjk3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yOThhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI5OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzAxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMDNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMwNGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzA2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMDhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMxMGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzEyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMTNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMxNGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzE1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMTZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMxN2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzE5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMjBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMyMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzIzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMjVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMyNmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzI3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMjhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMyOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzMyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMzNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMzNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzM3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMzhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMzOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzQwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNDFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM0M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzQ1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNDZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM0N2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzQ4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNDlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM1MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzUxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNTJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM1M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzU1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNTZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM1N2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzU4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNTlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM2MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzYxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNjJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM2M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzY0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNjVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM2NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzY3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNjlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM3MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzcyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNzVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM3NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzc3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNzhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM4MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzgxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zODNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM4NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzg3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zODhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM4OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzkwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zOTFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM5M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzk1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zOTdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM5OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDAwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MDJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQwNGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDA2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MDhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQwOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDEwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MTFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQxMmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDEzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MTVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQxNmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDE3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MTlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQyMGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDIyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MjRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQyNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDI2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MjdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQyOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDMwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MzFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQzMmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDMzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MzRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQzNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDM2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MzdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQzOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDQxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NDJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ0M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDQ1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NDZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ0N2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDQ5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NTBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ1MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDUyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NTNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ1NGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDU2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NTdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ1OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDU5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NjBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ2MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDYzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NjRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ2NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDY2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NjhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ3MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDcxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NzJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ3M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDc0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NzZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ3N2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDc5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80ODBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ4MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDgzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80ODRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ4NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDg2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80ODhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ4OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDkwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80OTFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ5MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDkzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80OTRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ5NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDk2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80OTdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ5OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDk5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MDBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUwM2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTA0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MDVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUwNmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTA3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MDhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUxMGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTExYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MTJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUxNGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTE2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MThhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUxOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTIwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MjFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUyMmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTIzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MjVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUyNmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTI3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MjhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUyOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTMwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MzFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUzM2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTM0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MzZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUzN2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTM4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NDBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU0MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTQyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NDNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU0NGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTQ2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NDdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU0OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTUwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NTFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU1MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTUzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NTRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU1NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTU3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NTlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU2MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTYxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NjJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU2M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTY0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NjVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU2NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTY3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NjhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU2OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTcwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NzFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU3MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTczYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NzRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU3NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTc3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NzlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU4MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTg0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81ODVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU4NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTg3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81ODhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU4OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTkwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81OTFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU5MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTkzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81OTRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU5NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTk3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81OTlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYwMGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjAxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MDJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYwNGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjA1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MDZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYwN2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjA5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MTBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYxM2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjE0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MTVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYxNmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjE3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MThhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYxOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjIxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MjJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYyM2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjI0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MjVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYyN2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjI4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MzBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYzMmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjMzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MzRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYzNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjM2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MzdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYzOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjQxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NDJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY0NGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjQ2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NDdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY0OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjQ5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NTBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY1MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjUyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NTRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY1OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjU5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NjBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY2MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjYzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NjRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY2N2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjY4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NzBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY3MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjcyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NzNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY3NGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjc2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NzdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY3OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjc5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82ODBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncPeWVjY2dvdG9fYWRkX29wYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FnllY2Nnb3RvX2FyZ3VtZW50X2xpc3RhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncUeWVjY2dvdG9fYXRvbV9vcl92YXJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncPeWVjY2dvdG9fYXRvbWljYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EXllY2Nnb3RvX2F0dHJfdmFsYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EnllY2Nnb3RvX2F0dHJpYnV0ZWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxZ5ZWNjZ290b19iaW5fYmFzZV90eXBlYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FHllY2Nnb3RvX2Jpbl9lbGVtZW50YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FXllY2Nnb3RvX2Jpbl9lbGVtZW50c2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxZ5ZWNjZ290b19iaW5fdW5pdF90eXBlYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3D3llY2Nnb3RvX2JpbmFyeWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdx15ZWNjZ290b19iaW5hcnlfY29tcHJlaGVuc2lvbmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxR5ZWNjZ290b19iaW5hcnlfdHlwZWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxF5ZWNjZ290b19iaXRfZXhwcmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxZ5ZWNjZ290b19iaXRfc2l6ZV9leHByYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EXllY2Nnb3RvX2JpdF90eXBlYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FnllY2Nnb3RvX2JpdF90eXBlX2xpc3RhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncSeWVjY2dvdG9fY2FzZV9leHByYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FHllY2Nnb3RvX2NsYXVzZV9hcmdzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FHllY2Nnb3RvX2NsYXVzZV9ib2R5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3GnllY2Nnb3RvX2NsYXVzZV9ib2R5X2V4cHJzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FXllY2Nnb3RvX2NsYXVzZV9ndWFyZGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxB5ZWNjZ290b19jb21wX29wYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EnllY2Nnb3RvX2NyX2NsYXVzZWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxN5ZWNjZ290b19jcl9jbGF1c2VzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2Nnb3RvX2V4cHJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncReWVjY2dvdG9fZXhwcl9tYXhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncUeWVjY2dvdG9fZXhwcl9yZW1vdGVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncOeWVjY2dvdG9fZXhwcnNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncTeWVjY2dvdG9fZmllbGRfdHlwZWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxR5ZWNjZ290b19maWVsZF90eXBlc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjZ290b19mb3JtYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3E3llY2Nnb3RvX2Z1bl9jbGF1c2VhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncUeWVjY2dvdG9fZnVuX2NsYXVzZXNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncReWVjY2dvdG9fZnVuX2V4cHJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncReWVjY2dvdG9fZnVuX3R5cGVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncReWVjY2dvdG9fZnVuY3Rpb25hB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncWeWVjY2dvdG9fZnVuY3Rpb25fY2FsbGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxh5ZWNjZ290b19mdW5jdGlvbl9jbGF1c2VhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncZeWVjY2dvdG9fZnVuY3Rpb25fY2xhdXNlc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjZ290b19ndWFyZGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxJ5ZWNjZ290b19pZl9jbGF1c2VhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncTeWVjY2dvdG9faWZfY2xhdXNlc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxB5ZWNjZ290b19pZl9leHByYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3F3llY2Nnb3RvX2ludGVnZXJfb3JfdmFyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EHllY2Nnb3RvX2xjX2V4cHJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncReWVjY2dvdG9fbGNfZXhwcnNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY2dvdG9fbGlzdGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxt5ZWNjZ290b19saXN0X2NvbXByZWhlbnNpb25hB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY2dvdG9fbGlzdF9vcGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxp5ZWNjZ290b19tYXBfY29tcHJlaGVuc2lvbmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxF5ZWNjZ290b19tYXBfZXhwcmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxJ5ZWNjZ290b19tYXBfZmllbGRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncYeWVjY2dvdG9fbWFwX2ZpZWxkX2Fzc29jYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3GHllY2Nnb3RvX21hcF9maWVsZF9leGFjdGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxN5ZWNjZ290b19tYXBfZmllbGRzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EHllY2Nnb3RvX21hcF9rZXlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncWeWVjY2dvdG9fbWFwX3BhaXJfdHlwZWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxd5ZWNjZ290b19tYXBfcGFpcl90eXBlc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxV5ZWNjZ290b19tYXBfcGF0X2V4cHJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncSeWVjY2dvdG9fbWFwX3R1cGxlYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3E3llY2Nnb3RvX21heWJlX2V4cHJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncUeWVjY2dvdG9fbWF5YmVfbWF0Y2hhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncaeWVjY2dvdG9fbWF5YmVfbWF0Y2hfZXhwcnNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY2dvdG9fbXVsdF9vcGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxp5ZWNjZ290b19vcHRfYml0X3NpemVfZXhwcmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxp5ZWNjZ290b19vcHRfYml0X3R5cGVfbGlzdGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxp5ZWNjZ290b19wYXRfYXJndW1lbnRfbGlzdGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxF5ZWNjZ290b19wYXRfZXhwcmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxV5ZWNjZ290b19wYXRfZXhwcl9tYXhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncSeWVjY2dvdG9fcGF0X2V4cHJzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EnllY2Nnb3RvX3ByZWZpeF9vcGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxV5ZWNjZ290b19yZWNlaXZlX2V4cHJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncUeWVjY2dvdG9fcmVjb3JkX2V4cHJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncVeWVjY2dvdG9fcmVjb3JkX2ZpZWxkYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FnllY2Nnb3RvX3JlY29yZF9maWVsZHNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncYeWVjY2dvdG9fcmVjb3JkX3BhdF9leHByYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FXllY2Nnb3RvX3JlY29yZF90dXBsZWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxF5ZWNjZ290b19zcGVjX2Z1bmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxd5ZWNjZ290b19zc2FfY2hlY2tfYW5ub2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdx55ZWNjZ290b19zc2FfY2hlY2tfYW5ub19jbGF1c2VhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncfeWVjY2dvdG9fc3NhX2NoZWNrX2Fubm9fY2xhdXNlc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxd5ZWNjZ290b19zc2FfY2hlY2tfYXJnc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdx15ZWNjZ290b19zc2FfY2hlY2tfYmluYXJ5X2xpdGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdyZ5ZWNjZ290b19zc2FfY2hlY2tfYmluYXJ5X2xpdF9ieXRlc19sc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdyJ5ZWNjZ290b19zc2FfY2hlY2tfYmluYXJ5X2xpdF9yZXN0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3HnllY2Nnb3RvX3NzYV9jaGVja19jbGF1c2VfYXJnc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdyF5ZWNjZ290b19zc2FfY2hlY2tfY2xhdXNlX2FyZ3NfbHNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncXeWVjY2dvdG9fc3NhX2NoZWNrX2V4cHJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncYeWVjY2dvdG9fc3NhX2NoZWNrX2V4cHJzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3GnllY2Nnb3RvX3NzYV9jaGVja19mdW5fcmVmYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3G3llY2Nnb3RvX3NzYV9jaGVja19saXN0X2xpdGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdx55ZWNjZ290b19zc2FfY2hlY2tfbGlzdF9saXRfbHNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncaeWVjY2dvdG9fc3NhX2NoZWNrX21hcF9rZXlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncieWVjY2dvdG9fc3NhX2NoZWNrX21hcF9rZXlfZWxlbWVudGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdyN5ZWNjZ290b19zc2FfY2hlY2tfbWFwX2tleV9lbGVtZW50c2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdx95ZWNjZ290b19zc2FfY2hlY2tfbWFwX2tleV9saXN0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3KXllY2Nnb3RvX3NzYV9jaGVja19tYXBfa2V5X3R1cGxlX2VsZW1lbnRzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FnllY2Nnb3RvX3NzYV9jaGVja19wYXRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncXeWVjY2dvdG9fc3NhX2NoZWNrX3BhdHNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAnceeWVjY2dvdG9fc3NhX2NoZWNrX3doZW5fY2xhdXNlYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3H3llY2Nnb3RvX3NzYV9jaGVja193aGVuX2NsYXVzZXNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY2dvdG9fc3RyaW5nc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjZ290b190YWlsYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EXllY2Nnb3RvX3RvcF90eXBlYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EnllY2Nnb3RvX3RvcF90eXBlc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxJ5ZWNjZ290b190cnlfY2F0Y2hhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncTeWVjY2dvdG9fdHJ5X2NsYXVzZWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxR5ZWNjZ290b190cnlfY2xhdXNlc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxF5ZWNjZ290b190cnlfZXhwcmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxt5ZWNjZ290b190cnlfb3B0X3N0YWNrdHJhY2VhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncOeWVjY2dvdG9fdHVwbGVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY2dvdG9fdHlwZWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxN5ZWNjZ290b190eXBlX2d1YXJkYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FHllY2Nnb3RvX3R5cGVfZ3VhcmRzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EXllY2Nnb3RvX3R5cGVfc2lnYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EnllY2Nnb3RvX3R5cGVfc2lnc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxJ5ZWNjZ290b190eXBlX3NwZWNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncXeWVjY2dvdG9fdHlwZWRfYXR0cl92YWxhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncTeWVjY2dvdG9fdHlwZWRfZXhwcmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxR5ZWNjZ290b190eXBlZF9leHByc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxx5ZWNjZ290b190eXBlZF9yZWNvcmRfZmllbGRzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8xX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMl9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl85X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMl9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xN19hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMF9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNV9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMF9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zM19hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNl9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MF9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NF9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80N19hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MF9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NF9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81N19hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNzFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl83Ml9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzc0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNzhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl84MF9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzgyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfODNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl85MF9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzkxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfOTJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl85M19hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzk0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfOTVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl85Nl9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzk3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfOTlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMTBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMTJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMTVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMTdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMThfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMTlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMjFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMjJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMjNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMjRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMjVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMjZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMjdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMzBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMzFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMzJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNDJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNDdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNTRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNTVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNTZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNThfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNjJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNjNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNjVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNjZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNzBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNzFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNzJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNzhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNzlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xODJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xODNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xODVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xODZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xODlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xOTBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xOTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xOTRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xOTVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xOThfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xOTlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMDBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMDFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMDJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMDNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMDZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMDhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMTJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMTVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMTdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMThfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMjBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMjFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMjNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMjRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMjdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMjhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMjlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMzJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMzNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMzVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMzdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMzhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNDBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNDFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNDJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNDNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNDRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNDVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNDZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNTBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNTVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNTZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNTdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNTlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNjBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNjJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNjRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNjZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNjdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNjhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNjlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNzRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNzVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNzZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3D3llY2NwYXJzMl8yNzdfIWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw95ZWNjcGFyczJfMjc3XylhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncPeWVjY3BhcnMyXzI3N18sYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EHllY2NwYXJzMl8yNzdfLT5hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY3BhcnMyXzI3N186OmEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxB5ZWNjcGFyczJfMjc3Xzo9YQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3D3llY2NwYXJzMl8yNzdfO2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxB5ZWNjcGFyczJfMjc3XzwtYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3D3llY2NwYXJzMl8yNzdfPWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxB5ZWNjcGFyczJfMjc3Xz0+YQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EHllY2NwYXJzMl8yNzdfPj5hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY3BhcnMyXzI3N18/PWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw95ZWNjcGFyczJfMjc3X11hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncTeWVjY3BhcnMyXzI3N19hZnRlcmEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxV5ZWNjcGFyczJfMjc3X2FuZGFsc29hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncTeWVjY3BhcnMyXzI3N19jYXRjaGEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxF5ZWNjcGFyczJfMjc3X2RvdGEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxJ5ZWNjcGFyczJfMjc3X2Vsc2VhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncReWVjY3BhcnMyXzI3N19lbmRhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY3BhcnMyXzI3N19vZmEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxR5ZWNjcGFyczJfMjc3X29yZWxzZWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxJ5ZWNjcGFyczJfMjc3X3doZW5hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncPeWVjY3BhcnMyXzI3N198YQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EHllY2NwYXJzMl8yNzdffHxhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncPeWVjY3BhcnMyXzI3N199YQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNzhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNzlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yODFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yODJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yODNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yODRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yODZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yODdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yOTRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yOTVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yOTZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3D3llY2NwYXJzMl8yOTdfKWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw95ZWNjcGFyczJfMjk3XyxhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY3BhcnMyXzI5N18tPmEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw95ZWNjcGFyczJfMjk3XzphAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncPeWVjY3BhcnMyXzI5N189YQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EnllY2NwYXJzMl8yOTdfd2hlbmEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMjk4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMjk5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzAxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzAzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzA0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzA2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzA4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzEwX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzEyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzE0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzE2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzIxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzIzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzI2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzI4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzI5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzMyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzMzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzM1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzM3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzM5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzQxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzQzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzQ1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzQ2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzQ3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzQ5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzUxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzUyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzUzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzU1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzU3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzYwX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzYxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzYzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzY0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzY1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzY3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzY5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzcxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzcyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzc2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzc4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzgwX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzgxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzgzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzg5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw95ZWNjcGFyczJfMzkwXyxhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY3BhcnMyXzM5MF8+PmEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw95ZWNjcGFyczJfMzkwX11hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncPeWVjY3BhcnMyXzM5MF99YQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8zOTBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8zOTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8zOTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8zOTVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8zOTdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8zOThfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MDBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MDJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MDRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MDZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MDhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MDlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MTdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MjBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MjJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MjRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MjVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MjZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MjdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MjlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MzBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MzFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MzNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MzRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MzVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MzdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MzlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NDJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NDNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NDVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NDZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NTJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NTRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NTZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NTdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NThfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NTlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NjNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NjZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NjhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NzBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NzJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NzNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NzRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NzZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NzlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80ODBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80ODNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80ODVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80ODZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80ODlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80OTBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80OTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80OTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80OTRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80OTdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80OTlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MDBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MDNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MDRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MDZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MDhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MTBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MTJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MTRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MThfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MjFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MjNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MjZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MjdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MjlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MzFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MzNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NDBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NDFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NDNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NDRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NDdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NDhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NTBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NTRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NjBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NjFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NjNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NjRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NjZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NjhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NzBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NzNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NzZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NzdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NzlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81ODBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3D3llY2NwYXJzMl81ODRfKWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw95ZWNjcGFyczJfNTg0XyxhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY3BhcnMyXzU4NF86PWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw95ZWNjcGFyczJfNTg0XzthAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY3BhcnMyXzU4NF89PmEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxB5ZWNjcGFyczJfNTg0Xz4+YQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3D3llY2NwYXJzMl81ODRfXWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxF5ZWNjcGFyczJfNTg0X2RvdGEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxJ5ZWNjcGFyczJfNTg0X3doZW5hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncPeWVjY3BhcnMyXzU4NF98YQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3D3llY2NwYXJzMl81ODRffWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNTg1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNTg2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNTg4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNTkzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNTk0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNTk3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNTk5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjAxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjA2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjA3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjA5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjEwX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjEzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjE0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjE3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjE5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjIxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjIzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjI0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjI1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjI3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjMwX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjMyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjM0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjM1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjM5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjQyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjQ0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjQ2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjQ3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjQ4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjQ5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjUwX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjUxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjUyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjU4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjU5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjYzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjY0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjY3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjY4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjcwX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjcxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjcyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjczX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjc0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjc2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjc3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjc4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjgwX2EBamo= +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACsvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lcmxfcGFyc2UuZXJsag== +=mod:gen_server +Current size: 63325 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAn6RHe9GB6oWz+pkuBfW8K2poAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwdtY19zZW5kYQZqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACwvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9nZW5fc2VydmVyLmVybGo= +=mod:lists +Current size: 99909 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAOC+znQeEHQ4VS7RSlxghx2poAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwp1a2V5bWVyZ2VsYQNqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACcvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9saXN0cy5lcmxq +=mod:logger_config +Current size: 10240 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAb9Y3k+aGr3hN5q3KdYRHtWpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALy9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9jb25maWcuZXJsag== +=mod:logger_simple_h +Current size: 14726 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAZpGbBxoDz/i1DSNMxmWqyWpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAMS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9zaW1wbGVfaC5lcmxq +=mod:logger_filters +Current size: 4971 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAzwk48RcCYOF3ih2/kJrSm2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAMC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9maWx0ZXJzLmVybGo= +=mod:error_logger +Current size: 18021 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA9gWmGAB8sC+HfxKvyFw6Impq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2Vycm9yX2xvZ2dlci5lcmxq +=mod:code_server +Current size: 63936 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAALWQXUe7tZIQ9G/1/MX9D1Gpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2NvZGVfc2VydmVyLmVybGo= +=mod:heart +Current size: 15601 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAyNN9gP1SxPnm7mbH8bBrLmpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdw5zZW5kX2hlYXJ0X2NtZGECamo= +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAJy9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2hlYXJ0LmVybGo= +=mod:gen_event +Current size: 54224 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAbZDZYq2ZehgrVmXuTdC9R2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACsvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9nZW5fZXZlbnQuZXJsag== +=mod:logger +Current size: 53655 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAhEpn4LkeE+Ww1jrqwO/DAmpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlci5lcmxq +=mod:application_controller +Current size: 112719 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA8aNg4vAvqQ7+MnTc6uXOCWpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAOC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2FwcGxpY2F0aW9uX2NvbnRyb2xsZXIuZXJsag== +=mod:application_master +Current size: 17949 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAFPdt+BWDgI08/IO4pGy/Lmpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsANC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2FwcGxpY2F0aW9uX21hc3Rlci5lcmxq +=mod:erl_eval +Current size: 90511 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAK4B/QUWPpeHDqFA51B7m72pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACovYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lcmxfZXZhbC5lcmxq +=mod:kernel +Current size: 16434 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAG5SBkG5rwhqTCCPgosVpj2poAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2tlcm5lbC5lcmxq +=mod:proc_lib +Current size: 44783 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAHPr2dE+lcIfVFaldy2suaGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACovYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9wcm9jX2xpYi5lcmxq +=mod:file_io_server +Current size: 45573 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA37XXQKgVyzgAhQMymk22nGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAMC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2ZpbGVfaW9fc2VydmVyLmVybGo= +=mod:logger_server +Current size: 31925 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA6Q4YfPDTeP55K3VJGDToJGpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALy9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9zZXJ2ZXIuZXJsag== +=mod:erl_lint +Current size: 310700 +Current attributes: g2wAAAAFaAJ3A3ZzbmwAAAABbhAAZov2Nvzfuz6qcuUHe4NKempoAncHcmVtb3ZlZGwAAAABaAN3C21vZGlmeV9saW5lYQJrACB1c2UgZXJsX3BhcnNlOm1hcF9hbm5vLzIgaW5zdGVhZGpoAncIZGlhbHl6ZXJsAAAAAWgCdwhub19tYXRjaGgCdwh0eXBlX2RlZmEGamgCdwhkaWFseXplcmwAAAABaAJ3CG5vX21hdGNoaAJ3E2RlcHJlY2F0ZWRfZnVuY3Rpb25hBWpoAncIZGlhbHl6ZXJsAAAAAWgCdwhub19tYXRjaGgCdw9kZXByZWNhdGVkX3R5cGVhBWpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACovYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lcmxfbGludC5lcmxq +=mod:supervisor +Current size: 78800 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAvy8OsDDanMrThS86JgsLempoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACwvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9zdXBlcnZpc29yLmVybGo= +=mod:ets +Current size: 58700 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAegV/9YrrRq9A7VQccwP0Ompq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACUvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9ldHMuZXJsag== +=mod:filename +Current size: 42212 +Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAxfgNPRE4P/8E8mNjf3nXyGpoAncHcmVtb3ZlZGwAAAABaAN3CGZpbmRfc3JjdwFfawAjdXNlIGZpbGVsaWI6ZmluZF9zb3VyY2UvMSwzIGluc3RlYWRqaAJ3B3JlbW92ZWRsAAAAAWgDdxJzYWZlX3JlbGF0aXZlX3BhdGhhAWsAKHVzZSBmaWxlbGliOnNhZmVfcmVsYXRpdmVfcGF0aC8yIGluc3RlYWRqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACovYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9maWxlbmFtZS5lcmxq +=mod:application +Current size: 15002 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAO3mC1yO32EqVKdQkgma7DGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2FwcGxpY2F0aW9uLmVybGo= +=mod:code +Current size: 45920 +Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAA1rkrrsCyRltM8IqivNv2SWpoAncHcmVtb3ZlZGwAAAABaAN3BnJlaGFzaGEAawAsdGhlIGNvZGUgcGF0aCBjYWNoZSBmZWF0dXJlIGhhcyBiZWVuIHJlbW92ZWRqaAJ3B3JlbW92ZWRsAAAAAWgDdxBpc19tb2R1bGVfbmF0aXZlYQFrABVIaVBFIGhhcyBiZWVuIHJlbW92ZWRqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAJi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2NvZGUuZXJsag== +=mod:file +Current size: 44191 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAphblwlDFWwErKfvQJHHIAmpoAncKZGVwcmVjYXRlZGwAAAABaAN3CHBpZDJuYW1lYQFrACl0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAJi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2ZpbGUuZXJsag== +=mod:gen +Current size: 30362 +Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAKKwsTHEn6t3sqSA1qygYyWpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwdkb19jYWxsYQRqaAJ3CGRpYWx5emVybAAAAAFoAncRbm9faW1wcm9wZXJfbGlzdHNoAncPZG9fc2VuZF9yZXF1ZXN0YQNqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACUvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9nZW4uZXJsag== +=mod:error_handler +Current size: 5146 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA4HX9MacsLFi2Dumg+HZ9nWpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALy9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2Vycm9yX2hhbmRsZXIuZXJsag== +=mod:logger_backend +Current size: 7115 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAoZ+yGJmvZZw2G+8fUAejtmpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAMC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9iYWNrZW5kLmVybGo= +=mod:file_server +Current size: 13379 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAS7N4uM27g+5Rn3kNnsFYOWpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2ZpbGVfc2VydmVyLmVybGo= +=mod:logger_proxy +Current size: 8857 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAZduPYGozFFaJ/GMceJxnQWpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9wcm94eS5lcmxq +=mod:logger_olp +Current size: 24420 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAhELBVPfG1AFHg6Hw3ACHYmpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9vbHAuZXJsag== +=mod:queue +Current size: 26237 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA+pdK0iaAqDWnRiWIegfYd2poAncKZGVwcmVjYXRlZGwAAAABaAN3BGxhaXRhAWsAGHVzZSBxdWV1ZTpsaWF0LzEgaW5zdGVhZGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACcvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9xdWV1ZS5lcmxq +=mod:proplists +Current size: 13618 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA3DEXDWFyP/1Am4oxQYybO2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACsvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9wcm9wbGlzdHMuZXJsag== +=mod:peer +Current size: 56511 +Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAA2E9Rc/B6+K6No16io4F+QWpoAncGYXV0aG9yawASbWF4aW1mY2FAZ21haWwuY29taAJ3CWJlaGF2aW91cmwAAAABdwpnZW5fc2VydmVyamo= +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACYvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9wZWVyLmVybGo= +=mod:beam_lib +Current size: 65994 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAGAqMJUP/V7MaDY2WDvcZVmpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACovYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9iZWFtX2xpYi5lcmxq +=mod:binary +Current size: 21293 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAjusm/cmFBBM4V7Pu9tlybmpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACgvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9iaW5hcnkuZXJsag== +=mod:gb_sets +Current size: 22658 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAjJKuKbdSxi4KHdHBwvnc2mpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACkvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9nYl9zZXRzLmVybGo= +=mod:gb_trees +Current size: 15903 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA/9kxl1ANy9kH79Yem0U5aGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACovYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9nYl90cmVlcy5lcmxq +=mod:os +Current size: 17693 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAe2HUBCvqya+anjsKRMYUTGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAJC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL29zLmVybGo= +=mod:unicode +Current size: 41929 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAq+fzNG8vRL24dz9E5ZlDaGpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwxkb19vX2JpbmFyeTJhAmpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACkvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy91bmljb2RlLmVybGo= +=mod:erl_features +Current size: 41135 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAYXEynt+8kTRkG8V/OHR0VGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrAC4vYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lcmxfZmVhdHVyZXMuZXJsag== +=mod:standard_error +Current size: 10663 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAkMo760coteTN1xzpRgHT6mpoAncJYmVoYXZpb3VybAAAAAF3EXN1cGVydmlzb3JfYnJpZGdlamo= +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAMC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL3N0YW5kYXJkX2Vycm9yLmVybGo= +=mod:supervisor_bridge +Current size: 19251 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA+ZJzPQgBcV7sQuq/XPk182poAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrADMvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9zdXBlcnZpc29yX2JyaWRnZS5lcmxq +=mod:inet_db +Current size: 68294 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAvdtm5APLt4opHuq1WdBdWGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAKS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2luZXRfZGIuZXJsag== +=mod:inet_config +Current size: 25206 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAlZNV6TqRS7nNxz74j7FCe2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2luZXRfY29uZmlnLmVybGo= +=mod:inet_udp +Current size: 6941 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAhrzZ8+DOe1LKVcGE3RxIN2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAKi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2luZXRfdWRwLmVybGo= +=mod:inet +Current size: 81321 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAATt4eXjFDEUu+qumuN+EMfWpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAJi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2luZXQuZXJsag== +=mod:inet_parse +Current size: 38147 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAEf7OexUeePpkEPPFZJPf+mpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2luZXRfcGFyc2UuZXJsag== +=mod:rpc +Current size: 29484 +Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAA6VB2VShMOzVQaYOrBGnThmpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqaAJ3B3JlbW92ZWRsAAAAAmgDdxZzYWZlX211bHRpX3NlcnZlcl9jYWxsYQJrACN1c2UgcnBjOm11bHRpX3NlcnZlcl9jYWxsLzIgaW5zdGVhZGgDdxZzYWZlX211bHRpX3NlcnZlcl9jYWxsYQNrACN1c2UgcnBjOm11bHRpX3NlcnZlcl9jYWxsLzMgaW5zdGVhZGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAJS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL3JwYy5lcmxq +=mod:global +Current size: 117570 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA3Un4q7IE1kKFWWXOqg1fv2poAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2dsb2JhbC5lcmxq +=mod:net_kernel +Current size: 95518 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAARVYlffpB+M9gMCitj2vQyGpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL25ldF9rZXJuZWwuZXJsag== +=mod:rand +Current size: 82048 +Current attributes: g2wAAAAMaAJ3A3ZzbmwAAAABbhAASiW5LD/Qej4GU+MSRZDXfWpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwxleHNwbHVzX3NlZWRhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwpleHNzc19zZWVkYQFqaAJ3CGRpYWx5emVybAAAAAFoAncRbm9faW1wcm9wZXJfbGlzdHNoAncJZXhzcF9uZXh0YQFqaAJ3CGRpYWx5emVybAAAAAFoAncRbm9faW1wcm9wZXJfbGlzdHNoAncKZXhzc3NfbmV4dGEBamgCdwhkaWFseXplcmwAAAABaAJ3EW5vX2ltcHJvcGVyX2xpc3RzaAJ3DGV4c3BsdXNfanVtcGEBamgCdwhkaWFseXplcmwAAAABaAJ3EW5vX2ltcHJvcGVyX2xpc3RzaAJ3CWV4c3BfanVtcGEBamgCdwhkaWFseXplcmwAAAABaAJ3EW5vX2ltcHJvcGVyX2xpc3RzaAJ3DGV4c3BsdXNfanVtcGEEamgCdwhkaWFseXplcmwAAAABaAJ3EW5vX2ltcHJvcGVyX2xpc3RzaAJ3CmV4cm9wX3NlZWRhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwxleHJvcF9uZXh0X3NhAmpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwpleHJvcF9uZXh0YQFqaAJ3CGRpYWx5emVybAAAAAFoAncRbm9faW1wcm9wZXJfbGlzdHNoAncKZXhyb3BfanVtcGEFamo= +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACYvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9yYW5kLmVybGo= +=mod:maps +Current size: 22152 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA74KFUusq6FvLJdXoy86SW2poAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2wAAAACaAJ3CGl0ZXJhdG9yYQFoAncIaXRlcmF0b3JhAmpqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACYvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9tYXBzLmVybGo= +=mod:erl_distribution +Current size: 6886 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAADU5yO8e4eK+9kI484ejKXGpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2VybF9kaXN0cmlidXRpb24uZXJsag== +=mod:global_group +Current size: 54044 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAh7yoy6UVXzAVQ4pFGW90/2poAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2dsb2JhbF9ncm91cC5lcmxq +=mod:erpc +Current size: 42486 +Current attributes: g2wAAAALaAJ3A3ZzbmwAAAABbhAAE8Ii4JDYcOGscJTGZx5vtmpoAncIZGlhbHl6ZXJsAAAAAmgCdw9ub3dhcm5fZnVuY3Rpb25oAncEY2FsbGEFdwlub19yZXR1cm5qaAJ3CGRpYWx5emVybAAAAAFoAncRbm9faW1wcm9wZXJfbGlzdHNoAncMc2VuZF9yZXF1ZXN0YQRqaAJ3CGRpYWx5emVybAAAAAFoAncRbm9faW1wcm9wZXJfbGlzdHNoAncMc2VuZF9yZXF1ZXN0YQZqaAJ3CGRpYWx5emVybAAAAAJoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EHJlY2VpdmVfcmVzcG9uc2VhAncJbm9fcmV0dXJuamgCdwhkaWFseXplcmwAAAACaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxByZWNlaXZlX3Jlc3BvbnNlYQN3CW5vX3JldHVybmpoAncIZGlhbHl6ZXJsAAAAAmgCdw9ub3dhcm5fZnVuY3Rpb25oAncNd2FpdF9yZXNwb25zZWECdwlub19yZXR1cm5qaAJ3CGRpYWx5emVybAAAAAJoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DmNoZWNrX3Jlc3BvbnNlYQJ3CW5vX3JldHVybmpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwpyZXFpZHNfYWRkYQNqaAJ3CGRpYWx5emVybAAAAAFoAncRbm9faW1wcm9wZXJfbGlzdHNoAncOcmVxaWRzX3RvX2xpc3RhAWpoAncIZGlhbHl6ZXJsAAAAAmgCdw9ub3dhcm5fZnVuY3Rpb25oAncGcmVzdWx0YQR3CW5vX3JldHVybmpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAJi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2VycGMuZXJsag== +=mod:user_sup +Current size: 5411 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAZjtvFsHpi2oYJNyK+BJegmpoAncJYmVoYXZpb3VybAAAAAF3EXN1cGVydmlzb3JfYnJpZGdlamo= +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAKi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL3VzZXJfc3VwLmVybGo= +=mod:user_drv +Current size: 50600 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAV06qfcXDHq1HAw73vMm622poAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zdGF0ZW1qag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAKi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL3VzZXJfZHJ2LmVybGo= +=mod:gen_statem +Current size: 78929 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA0LgXEqMkSoYlnYjTV7wab2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACwvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9nZW5fc3RhdGVtLmVybGo= +=mod:prim_tty +Current size: 71017 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAAqFwI4sYbIil9FhV3gj2j2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAKi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL3ByaW1fdHR5LmVybGo= +=mod:io +Current size: 24369 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAApRaglMWA2VsOdFJPVz133Gpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACQvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9pby5lcmxq +=mod:group +Current size: 43672 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA851sQvKFjbfq7qcvrtJnqGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAJy9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2dyb3VwLmVybGo= +=mod:edlin +Current size: 38096 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAHOkgEIAXEUgr+NtGF+NeWmpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACcvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lZGxpbi5lcmxq +=mod:io_lib +Current size: 37231 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAFFeN9kWE1DsEb/D+MxWXDGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACgvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9pb19saWIuZXJsag== +=mod:logger_sup +Current size: 1730 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAviM55aoW6hCnDVjE2ajfCGpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9zdXAuZXJsag== +=mod:group_history +Current size: 40520 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAArNDTXjp3PaP6UETyYRPOCWpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALy9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2dyb3VwX2hpc3RvcnkuZXJsag== +=mod:io_lib_format +Current size: 36306 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAzwUVMCw5gpCCMKijxfMqt2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrAC8vYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9pb19saWJfZm9ybWF0LmVybGo= +=mod:logger_handler_watcher +Current size: 3686 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAUSb4uQDBVYdufFjEDGNpDWpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAOC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9oYW5kbGVyX3dhdGNoZXIuZXJsag== +=mod:timer +Current size: 19608 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA8aNh9jNZ5oP9N/HqUh4WWWpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACcvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy90aW1lci5lcmxq +=mod:kernel_config +Current size: 7013 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAKNVWveNYHE/lG53RxdAyrWpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALy9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2tlcm5lbF9jb25maWcuZXJsag== +=mod:kernel_refc +Current size: 6107 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAP51mX3wVLHv5Wt44rH/VNWpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2tlcm5lbF9yZWZjLmVybGo= +=mod:erl_signal_handler +Current size: 3791 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA49r9WmTF+h6BuvDW6CLhI2poAncJYmVoYXZpb3VybAAAAAF3CWdlbl9ldmVudGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsANC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2VybF9zaWduYWxfaGFuZGxlci5lcmxq +=mod:logger_formatter +Current size: 27269 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA3DgK6nIfXOBrGY11b3Ebc2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9mb3JtYXR0ZXIuZXJsag== +=mod:logger_std_h +Current size: 29691 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAHZBnbQf+yJ3LNQvEEyzqCGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9zdGRfaC5lcmxq +=mod:logger_h_common +Current size: 27015 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA8gXXQTDseI2RwAfchg+PjGpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAMS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9oX2NvbW1vbi5lcmxq +=mod:c +Current size: 55738 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAx9sEY92lk5eCgdpeFRvl7Wpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACMvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9jLmVybGo= +=mod:orddict +Current size: 9632 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAjVNEV8MyenfougmvyJOIn2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACkvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9vcmRkaWN0LmVybGo= +=mod:raw_file_io +Current size: 3544 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAAfByFOutd4XmaTTyQZS+wGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL3Jhd19maWxlX2lvLmVybGo= +=mod:erl_scan +Current size: 80286 +Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAcWizQoku/ar098CvlBYw3GpoAncHcmVtb3ZlZGwAAAADaAN3DXNldF9hdHRyaWJ1dGVhA2sAH3VzZSBlcmxfYW5ubzpzZXRfbGluZS8yIGluc3RlYWRoA3cPYXR0cmlidXRlc19pbmZvdwFfawAydXNlIGVybF9hbm5vOntjb2x1bW4sbGluZSxsb2NhdGlvbix0ZXh0fS8xIGluc3RlYWRoA3cKdG9rZW5faW5mb3cBX2sAQnVzZSBlcmxfc2Nhbjp7Y2F0ZWdvcnksY29sdW1uLGxpbmUsbG9jYXRpb24sc3ltYm9sLHRleHR9LzEgaW5zdGVhZGpoAncMcmVtb3ZlZF90eXBlbAAAAANoA3cGY29sdW1uYQBrAB11c2UgZXJsX2Fubm86Y29sdW1uKCkgaW5zdGVhZGgDdwRsaW5lYQBrABt1c2UgZXJsX2Fubm86bGluZSgpIGluc3RlYWRoA3cIbG9jYXRpb25hAGsAH3VzZSBlcmxfYW5ubzpsb2NhdGlvbigpIGluc3RlYWRqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACovYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lcmxfc2Nhbi5lcmxq +=mod:erl_anno +Current size: 10627 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAkayPNmhEhCtPmVnzA+f9ompq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACovYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lcmxfYW5uby5lcmxq +=mod:ordsets +Current size: 5786 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAe8kg2+9uOF1cs2tFmVktbGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACkvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9vcmRzZXRzLmVybGo= +=mod:otp_internal +Current size: 74930 +Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAgb4GzSRirByHf+zgWa/J7mpoAncIZGlhbHl6ZXJsAAAAAWgCdwhub19tYXRjaGgCdwhvYnNvbGV0ZWEDamgCdwhkaWFseXplcmwAAAABaAJ3CG5vX21hdGNoaAJ3DW9ic29sZXRlX3R5cGVhA2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrAC4vYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9vdHBfaW50ZXJuYWwuZXJsag== +=mod:erl_internal +Current size: 12465 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAH3E66VDgOMxAJ3swqD+T7Wpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrAC4vYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lcmxfaW50ZXJuYWwuZXJsag== +=mod:'aoc2023@@main' +Current size: 4742 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAPugzxohB3mrGKcTr3YDYhmpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAby9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FvYzIwMjMvX2dsZWFtX2FydGVmYWN0cy9hb2MyMDIzQEBtYWluLmVybGo= +=mod:epp +Current size: 96168 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAB23d4tmH4coUKKRIT0Ew7Wpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACUvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lcHAuZXJsag== +=mod:inets_app +Current size: 1391 +Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAA4PrNF10KpcErAmiRnvRGo2poAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xaAJ3CWJlaGF2aW91cmwAAAABdwthcHBsaWNhdGlvbmpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawA0L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9pbmV0c19hcHAvaW5ldHNfYXBwLmVybGo= +=mod:inets_sup +Current size: 4174 +Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAZYq0pFoYUy98UilKMAgr/2poAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xaAJ3CWJlaGF2aW91cmwAAAABdwpzdXBlcnZpc29yamo= +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawA0L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9pbmV0c19hcHAvaW5ldHNfc3VwLmVybGo= +=mod:httpc_sup +Current size: 2503 +Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAgy7v3K4IkDuZDOu8Nwe8CGpoAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xaAJ3CWJlaGF2aW91cmwAAAABdwpzdXBlcnZpc29yamo= +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAZ3CmRlYnVnX2luZm9oAncBaWsANi9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vLi4vaW5jbHVkZWgCdwFpawA1L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC8uLi9pbmV0c19hcHBoAncBaWsANC9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vaHR0cF9saWJoAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawA2L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC9odHRwY19zdXAuZXJsag== +=mod:httpc_profile_sup +Current size: 3949 +Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAARi0bgARtwsiompJMTfZqgGpoAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xaAJ3CWJlaGF2aW91cmwAAAABdwpzdXBlcnZpc29yamo= +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAZ3CmRlYnVnX2luZm9oAncBaWsANi9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vLi4vaW5jbHVkZWgCdwFpawA1L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC8uLi9pbmV0c19hcHBoAncBaWsANC9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vaHR0cF9saWJoAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawA+L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC9odHRwY19wcm9maWxlX3N1cC5lcmxq +=mod:httpc +Current size: 51321 +Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAQJGijj06WciIsf9zWi9RRWpoAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xaAJ3CWJlaGF2aW91cmwAAAABdw1pbmV0c19zZXJ2aWNlamo= +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAZ3CmRlYnVnX2luZm9oAncBaWsANi9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vLi4vaW5jbHVkZWgCdwFpawA1L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC8uLi9pbmV0c19hcHBoAncBaWsANC9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vaHR0cF9saWJoAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawAyL2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC9odHRwYy5lcmxq +=mod:httpc_manager +Current size: 45805 +Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAzA6/cmiSsI/VuMRE+DH5q2poAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xaAJ3CWJlaGF2aW91cmwAAAABdwpnZW5fc2VydmVyamo= +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAZ3CmRlYnVnX2luZm9oAncBaWsANi9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vLi4vaW5jbHVkZWgCdwFpawA1L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC8uLi9pbmV0c19hcHBoAncBaWsANC9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vaHR0cF9saWJoAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawA6L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC9odHRwY19tYW5hZ2VyLmVybGo= +=mod:inets_trace +Current size: 16599 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA13W3kiQ3DajF6u1MEp8wcGpoAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawA2L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9pbmV0c19hcHAvaW5ldHNfdHJhY2UuZXJsag== +=mod:httpc_cookie +Current size: 26127 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAj0Py8LgBp/5GCHesApuGKmpoAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAZ3CmRlYnVnX2luZm9oAncBaWsANi9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vLi4vaW5jbHVkZWgCdwFpawA1L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC8uLi9pbmV0c19hcHBoAncBaWsANC9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vaHR0cF9saWJoAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawA5L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC9odHRwY19jb29raWUuZXJsag== +=mod:httpc_handler_sup +Current size: 2111 +Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAATMTRW8HC2a2GvzQjWwLttGpoAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xaAJ3CWJlaGF2aW91cmwAAAABdwpzdXBlcnZpc29yamo= +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAZ3CmRlYnVnX2luZm9oAncBaWsANi9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vLi4vaW5jbHVkZWgCdwFpawA1L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC8uLi9pbmV0c19hcHBoAncBaWsANC9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vaHR0cF9saWJoAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawA+L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC9odHRwY19oYW5kbGVyX3N1cC5lcmxq +=mod:httpd_sup +Current size: 10999 +Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAtKUXEBjK/e98uHvMb3rrF2poAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xaAJ3CWJlaGF2aW91cmwAAAABdwpzdXBlcnZpc29yamo= +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAZ3CmRlYnVnX2luZm9oA3cBZHcPU0VSVkVSX1NPRlRXQVJFawALaW5ldHMvOS4wLjFoAncBaWsANS9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9zZXJ2ZXIvLi4vaW5ldHNfYXBwaAJ3AWlrADQvYnVpbGRyb290L290cC9saWIvaW5ldHMvc3JjL2h0dHBfc2VydmVyLy4uL2h0dHBfbGliaAJ3D3BhcnNlX3RyYW5zZm9ybXcSc3lzX3ByZV9hdHRyaWJ1dGVzaAR3CWF0dHJpYnV0ZXcGaW5zZXJ0dwdhcHBfdnNuawALaW5ldHMtOS4wLjFqaAJ3BnNvdXJjZWsANi9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9zZXJ2ZXIvaHR0cGRfc3VwLmVybGo= +=mod:ssl_app +Current size: 2100 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbg8A0DC0t7URrYxQKjqz0ymfamgCdwliZWhhdmlvdXJsAAAAAXcLYXBwbGljYXRpb25qag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAmL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX2FwcC5lcmxq +=mod:ssl_logger +Current size: 40894 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA9nZNLNkysVW+ZQmCjJHduWpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawApL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX2xvZ2dlci5lcmxq +=mod:ssl_sup +Current size: 2196 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAo3LCwydF/2W9pRiIxy3DjmpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAmL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX3N1cC5lcmxq +=mod:ssl_admin_sup +Current size: 4152 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA9wr0ynjnPAnTVBgUTNkR0mpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAsL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX2FkbWluX3N1cC5lcmxq +=mod:ssl_pem_cache +Current size: 6752 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAinKSIwX0SCBgGNnR5VuBb2poAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAsL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX3BlbV9jYWNoZS5lcmxq +=mod:ssl_pkix_db +Current size: 19921 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAUN9wTKLXhUyfxv7o/6pFYmpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAqL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX3BraXhfZGIuZXJsag== +=mod:ssl_manager +Current size: 20578 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAXyE921kAFR6srVwQYOzMTGpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAqL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX21hbmFnZXIuZXJsag== +=mod:ssl_config +Current size: 19916 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA6GmieDGRPQVKnnM+8AnHe2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawApL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX2NvbmZpZy5lcmxq +=mod:ssl_client_session_cache_db +Current size: 4099 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAADmgKYfPII/p5bEqiJ5mcpWpoAncJYmVoYXZpb3VybAAAAAF3FXNzbF9zZXNzaW9uX2NhY2hlX2FwaWpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawA6L2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX2NsaWVudF9zZXNzaW9uX2NhY2hlX2RiLmVybGo= +=mod:tls_client_ticket_store +Current size: 13052 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAxBJUXnCWGs2oPQjBp6L9A2poAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawA2L2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvdGxzX2NsaWVudF90aWNrZXRfc3RvcmUuZXJsag== +=mod:ssl_connection_sup +Current size: 2373 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA5ryHccs+ohUp1ydgfH9YvWpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAxL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX2Nvbm5lY3Rpb25fc3VwLmVybGo= +=mod:tls_sup +Current size: 2186 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAALTAE2+O6t5PW4UO1HK8EwWpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAmL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvdGxzX3N1cC5lcmxq +=mod:tls_connection_sup +Current size: 2221 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAJvmM1aYsddPoTZrW98XRumpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAxL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvdGxzX2Nvbm5lY3Rpb25fc3VwLmVybGo= +=mod:tls_server_sup +Current size: 2971 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAz0U8v3nIm1ZY5f3kum4r5WpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAtL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvdGxzX3NlcnZlcl9zdXAuZXJsag== +=mod:ssl_listen_tracker_sup +Current size: 2635 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAOGJZxWhtwUTvf1bKcQvuyGpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawA1L2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX2xpc3Rlbl90cmFja2VyX3N1cC5lcmxq +=mod:tls_server_session_ticket_sup +Current size: 2770 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAARMHYqHUw2NS1m1UIvB3reGpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawA8L2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvdGxzX3NlcnZlcl9zZXNzaW9uX3RpY2tldF9zdXAuZXJsag== +=mod:ssl_server_session_cache_sup +Current size: 2269 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAByPBY6olcmybwiutwebctWpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawA7L2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX3NlcnZlcl9zZXNzaW9uX2NhY2hlX3N1cC5lcmxq +=mod:ssl_upgrade_server_session_cache_sup +Current size: 3355 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAMxn80z9MoSuZx9BdUpz512poAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawBDL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX3VwZ3JhZGVfc2VydmVyX3Nlc3Npb25fY2FjaGVfc3VwLmVybGo= +=mod:dtls_sup +Current size: 2203 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAzEhJZ7CGB/FJN8cXbhi9UWpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAnL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvZHRsc19zdXAuZXJsag== +=mod:dtls_connection_sup +Current size: 2302 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAARTy7MXOOcU51LrywTcn5CWpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAyL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvZHRsc19jb25uZWN0aW9uX3N1cC5lcmxq +=mod:dtls_server_sup +Current size: 2332 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA1ajQs9tDRTHhujDcDcscHmpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAuL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvZHRsc19zZXJ2ZXJfc3VwLmVybGo= +=mod:dtls_listener_sup +Current size: 3390 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAMsV5mY/deSztKjjCFxfzBWpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAwL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvZHRsc19saXN0ZW5lcl9zdXAuZXJsag== +=mod:dtls_server_session_cache_sup +Current size: 2286 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAYQzAm4CTe8XSrf2cwuhLS2poAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawA8L2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvZHRsc19zZXJ2ZXJfc2Vzc2lvbl9jYWNoZV9zdXAuZXJsag== +=mod:aoc2023_test +Current size: 3021 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAIDzQyy7+ohaS/lZYEnHV6mpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAbi9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FvYzIwMjMvX2dsZWFtX2FydGVmYWN0cy9hb2MyMDIzX3Rlc3QuZXJsag== +=mod:showtime +Current size: 7589 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAASs9ziZ84gk8YQPJee7zfKmpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAai9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZS5lcmxq +=mod:'gleam@erlang' +Current size: 5630 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAtN0gkiNwSV+DDvuhn5+jrGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX2VybGFuZy9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGVybGFuZy5lcmxq +=mod:'gleam@list' +Current size: 33260 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAnSllczgawr65cI3tzxLzUGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcS9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGxpc3QuZXJsag== +=mod:'glint@flag' +Current size: 25019 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAWH/YkAkx0LbtUA424nvbMGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAai9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsaW50L19nbGVhbV9hcnRlZmFjdHMvZ2xpbnRAZmxhZy5lcmxq +=mod:'glint@flag@constraint' +Current size: 7000 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAqroPg4gdgq3ImnzPTggyoGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAdS9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsaW50L19nbGVhbV9hcnRlZmFjdHMvZ2xpbnRAZmxhZ0Bjb25zdHJhaW50LmVybGo= +=mod:'gleam@set' +Current size: 6639 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAZnB2CU+bKlUidhVR0LnxHWpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcC9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQHNldC5lcmxq +=mod:'gleam@dict' +Current size: 6120 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAAUASYtitXRdExDDzR4vPOGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcS9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGRpY3QuZXJsag== +=mod:glint +Current size: 18505 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA8af8T+Jw5viRaaFGJe+TImpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAZS9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsaW50L19nbGVhbV9hcnRlZmFjdHMvZ2xpbnQuZXJsag== +=mod:'gleam@map' +Current size: 5055 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAbOLYAgbwbyWo2C1h7jpfH2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcC9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQG1hcC5lcmxq +=mod:'gleam_community@colour' +Current size: 24404 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAljaAlIiPJ6KY0wAzgFEHsGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAhy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX2NvbW11bml0eV9jb2xvdXIvX2dsZWFtX2FydGVmYWN0cy9nbGVhbV9jb21tdW5pdHlAY29sb3VyLmVybGo= +=mod:'gleam@int' +Current size: 11239 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAvfyk3FUpUDfPJUBGvGzaM2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcC9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGludC5lcmxq +=mod:'gleam@float' +Current size: 8605 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAwvf3WDPwF8eL3tZjwLdPvGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAci9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGZsb2F0LmVybGo= +=mod:'gleam@result' +Current size: 8298 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAdINyuhBKzZsZG3pV5EZaVWpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQHJlc3VsdC5lcmxq +=mod:'gleam@function' +Current size: 10100 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAABwPVPBZqz4aY1ziaTMPL82pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAdS9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGZ1bmN0aW9uLmVybGo= +=mod:'gleam@string' +Current size: 12638 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAbnTY1/YcMIh38pIxTgLMm2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQHN0cmluZy5lcmxq +=mod:gleam_stdlib +Current size: 35605 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAfiGJYP8AkzvoXZ0YMrXSlmpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtX3N0ZGxpYi5lcmxq +=mod:string +Current size: 113669 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAWQd6Le8JB4/gRSVlV2lBNWpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2wAAAACaAJ3BXN0YWNrYQJoAncIbGVuZ3RoX2JhA2pqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACgvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9zdHJpbmcuZXJsag== +=mod:unicode_util +Current size: 1073461 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbg8AXORlGYYDsuY+eHtBuoYFamgCdwhkaWFseXplcmwAAAABaAJ3EW5vX2ltcHJvcGVyX2xpc3RzbAAAAANoAncCY3BhAWgCdwJnY2EBaAJ3CmdjX3ByZXBlbmRhAmpqag== +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrAC4vYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy91bmljb2RlX3V0aWwuZXJsag== +=mod:snag +Current size: 4922 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAG5uviABLq1rTj5x/VJZ0uGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAYy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL3NuYWcvX2dsZWFtX2FydGVmYWN0cy9zbmFnLmVybGo= +=mod:'gleam@string_builder' +Current size: 5894 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA60rqd/vw/4Yk1Xn9mUIvUGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAey9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQHN0cmluZ19idWlsZGVyLmVybGo= +=mod:'showtime@internal@erlang@event_handler' +Current size: 6427 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAesteT6kF6RvqO2kV/0gQ7Wpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAiC9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZUBpbnRlcm5hbEBlcmxhbmdAZXZlbnRfaGFuZGxlci5lcmxq +=mod:'gleam@otp@actor' +Current size: 10710 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAiu2xMkLOQbtFaM3BzoGdrGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX290cC9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQG90cEBhY3Rvci5lcmxq +=mod:'gleam@erlang@process' +Current size: 15774 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAtSkhind80R8EMukoR6vkNWpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAey9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX2VybGFuZy9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGVybGFuZ0Bwcm9jZXNzLmVybGo= +=mod:gleam_erlang_ffi +Current size: 18854 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAMiyJ/P+Ak/snrkTct7KA+Wpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAdy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX2VybGFuZy9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtX2VybGFuZ19mZmkuZXJsag== +=mod:sys +Current size: 25414 +Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAqJumm2a32a1+cgYA+0oFeGpoAncKZGVwcmVjYXRlZGwAAAABaAN3CWdldF9kZWJ1Z2EDawBaaW5jb3JyZWN0bHkgZG9jdW1lbnRlZCBhbmQgb25seSBmb3IgaW50ZXJuYWwgdXNlLiBDYW4gb2Z0ZW4gYmUgcmVwbGFjZWQgd2l0aCBzeXM6Z2V0X2xvZy8xamo= +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACUvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9zeXMuZXJsag== +=mod:'showtime@internal@erlang@module_handler' +Current size: 5600 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA266xv4+Y/ZBeOm9hxQclbWpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAiS9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZUBpbnRlcm5hbEBlcmxhbmdAbW9kdWxlX2hhbmRsZXIuZXJsag== +=mod:'showtime@internal@erlang@discover' +Current size: 10957 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAACiFC4pbvgv+igrT/QELa0Wpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAgy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZUBpbnRlcm5hbEBlcmxhbmdAZGlzY292ZXIuZXJsag== +=mod:'showtime@internal@common@common_event_handler' +Current size: 6222 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAATc4tRrLUrjDY13p3a0mfM2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAjy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZUBpbnRlcm5hbEBjb21tb25AY29tbW9uX2V2ZW50X2hhbmRsZXIuZXJsag== +=mod:simplifile +Current size: 11471 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAg7QYQ/6hEp7KUPQeePbxIGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAby9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL3NpbXBsaWZpbGUvX2dsZWFtX2FydGVmYWN0cy9zaW1wbGlmaWxlLmVybGo= +=mod:'gleam@option' +Current size: 6842 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA7ba+EZRfQIRK4LJH6y8VQGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQG9wdGlvbi5lcmxq +=mod:simplifile_erl +Current size: 6790 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAALrwXLSXXrQUhBuYY6MoxsWpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL3NpbXBsaWZpbGUvX2dsZWFtX2FydGVmYWN0cy9zaW1wbGlmaWxlX2VybC5lcmxq +=mod:filelib +Current size: 31796 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA3TrIJYJQZ31EtFlP1T81tGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACkvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9maWxlbGliLmVybGo= +=mod:'gleam@dynamic' +Current size: 38851 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAl/t9vhYnIwY0q12jzqtah2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAdC9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGR5bmFtaWMuZXJsag== +=mod:'day7@day7_test' +Current size: 4223 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAJPCDfy0Jji3eOEeobotB3Gpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcC9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FvYzIwMjMvX2dsZWFtX2FydGVmYWN0cy9kYXk3QGRheTdfdGVzdC5lcmxq +=mod:'showtime@internal@erlang@runner' +Current size: 4500 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAADg32TsjXMXKsJRgK3TDrDGpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAgS9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZUBpbnRlcm5hbEBlcmxhbmdAcnVubmVyLmVybGo= +=mod:showtime_ffi +Current size: 10209 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAkt2yuDpHeMFcxuk1dvnE6Gpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAbi9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZV9mZmkuZXJsag== +=mod:'showtime@tests@should' +Current size: 6938 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAARbeuMDVpt+ZmkAn+XaYh8mpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAdy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZUB0ZXN0c0BzaG91bGQuZXJsag== +=mod:'day7@solve' +Current size: 10243 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAArXGXSdtYEewD099OEybQ4mpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAbC9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FvYzIwMjMvX2dsZWFtX2FydGVmYWN0cy9kYXk3QHNvbHZlLmVybGo= +=mod:'showtime@internal@reports@formatter' +Current size: 23921 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAbZh74abXA6ppaWvDUqdhA2pq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAhS9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZUBpbnRlcm5hbEByZXBvcnRzQGZvcm1hdHRlci5lcmxq +=mod:'gleam@io' +Current size: 3562 +Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAZbMfKh/MIOHz0dIn+IIj+Gpq +Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAby9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGlvLmVybGo= +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 39 +Address: 0x000000010421c3a4 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 30 +Address: 0x0000000103e76f50 +Refc: 1 +=fun +Module: unicode +Uniq: 54664399 +Index: 22 +Address: 0x0000000103fb4fe8 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 3 +Address: 0x000000010400c9a0 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 34 +Address: 0x000000010414b9c8 +Refc: 1 +=fun +Module: socket_registry +Uniq: 8180509 +Index: 0 +Address: 0x0000000103dc1758 +Refc: 1 +=fun +Module: logger_formatter +Uniq: 60349323 +Index: 1 +Address: 0x00000001040b64c0 +Refc: 2 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 0 +Address: 0x00000001040d26b0 +Refc: 2 +=fun +Module: ets +Uniq: 30908443 +Index: 5 +Address: 0x0000000103e3c140 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 1 +Address: 0x0000000103eb2d08 +Refc: 1 +=fun +Module: glint +Uniq: 18128761 +Index: 5 +Address: 0x00000001041524d0 +Refc: 2 +=fun +Module: raw_file_io +Uniq: 101053602 +Index: 4 +Address: 0x00000001040d0540 +Refc: 2 +=fun +Module: 'glint@flag@constraint' +Uniq: 83988546 +Index: 3 +Address: 0x000000010414e3d8 +Refc: 2 +=fun +Module: 'gleam@set' +Uniq: 15699406 +Index: 2 +Address: 0x000000010414fa68 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 56 +Address: 0x0000000103e759e8 +Refc: 1 +=fun +Module: maps +Uniq: 48010870 +Index: 2 +Address: 0x0000000104036d98 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 29 +Address: 0x000000010414abf0 +Refc: 2 +=fun +Module: rand +Uniq: 65977474 +Index: 5 +Address: 0x0000000104029d10 +Refc: 2 +=fun +Module: 'showtime@internal@erlang@event_handler' +Uniq: 124289607 +Index: 2 +Address: 0x00000001041f7afc +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 33 +Address: 0x0000000104009d20 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 48 +Address: 0x000000010421d078 +Refc: 2 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 10 +Address: 0x0000000104160d88 +Refc: 1 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 6 +Address: 0x0000000104158cb8 +Refc: 1 +=fun +Module: gen_event +Uniq: 37613186 +Index: 6 +Address: 0x0000000103ee1738 +Refc: 2 +=fun +Module: 'gleam@erlang@process' +Uniq: 28255578 +Index: 7 +Address: 0x00000001041fc1d4 +Refc: 1 +=fun +Module: erl_features +Uniq: 44278689 +Index: 4 +Address: 0x0000000103fb9ee0 +Refc: 1 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 17 +Address: 0x0000000104146dc4 +Refc: 1 +=fun +Module: init +Uniq: 72673429 +Index: 13 +Address: 0x0000000103d93480 +Refc: 1 +=fun +Module: inet_parse +Uniq: 131529883 +Index: 11 +Address: 0x0000000103feda78 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 90 +Address: 0x0000000103e71d70 +Refc: 1 +=fun +Module: gen +Uniq: 105431365 +Index: 0 +Address: 0x0000000103e0ff18 +Refc: 3 +=fun +Module: supervisor +Uniq: 63985753 +Index: 5 +Address: 0x0000000103e4cad8 +Refc: 1 +=fun +Module: erl_parse +Uniq: 57550649 +Index: 1 +Address: 0x0000000103f5a008 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 62 +Address: 0x0000000103eaf540 +Refc: 2 +=fun +Module: ssl_pkix_db +Uniq: 51522903 +Index: 5 +Address: 0x0000000104129d98 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 13 +Address: 0x0000000103e79bc0 +Refc: 2 +=fun +Module: httpc +Uniq: 36342138 +Index: 10 +Address: 0x0000000104109c18 +Refc: 2 +=fun +Module: 'showtime@internal@erlang@module_handler' +Uniq: 57223230 +Index: 0 +Address: 0x0000000104207ad4 +Refc: 2 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 3 +Address: 0x0000000103dcd620 +Refc: 1 +=fun +Module: code +Uniq: 38778589 +Index: 2 +Address: 0x0000000103e22d70 +Refc: 2 +=fun +Module: rand +Uniq: 65977474 +Index: 16 +Address: 0x000000010402d478 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 100 +Address: 0x0000000103e710f4 +Refc: 1 +=fun +Module: inet_db +Uniq: 46329474 +Index: 2 +Address: 0x0000000103fc4e40 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 14 +Address: 0x000000010400bb80 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 29 +Address: 0x000000010421a968 +Refc: 1 +=fun +Module: simplifile +Uniq: 17272755 +Index: 5 +Address: 0x000000010420b330 +Refc: 2 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 21 +Address: 0x00000001040dd8c0 +Refc: 2 +=fun +Module: application_controller +Uniq: 5142319 +Index: 8 +Address: 0x0000000103ecbb40 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 28 +Address: 0x0000000103eb0d18 +Refc: 1 +=fun +Module: logger_server +Uniq: 19349920 +Index: 3 +Address: 0x0000000103e87d70 +Refc: 1 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 4 +Address: 0x0000000104147168 +Refc: 1 +=fun +Module: beam_lib +Uniq: 45141944 +Index: 1 +Address: 0x0000000103f99ba0 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 47 +Address: 0x0000000103e76020 +Refc: 2 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 8 +Address: 0x000000010414c680 +Refc: 1 +=fun +Module: code_server +Uniq: 111287289 +Index: 0 +Address: 0x0000000103ef3d3c +Refc: 1 +=fun +Module: logger +Uniq: 1449854 +Index: 0 +Address: 0x0000000103ed6110 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 43 +Address: 0x0000000103eb0110 +Refc: 1 +=fun +Module: 'showtime@internal@reports@formatter' +Uniq: 1772858 +Index: 1 +Address: 0x0000000104227bd0 +Refc: 2 +=fun +Module: inet +Uniq: 65562377 +Index: 3 +Address: 0x0000000103fe5680 +Refc: 2 +=fun +Module: 'showtime@internal@erlang@discover' +Uniq: 110023186 +Index: 1 +Address: 0x0000000104209460 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 22 +Address: 0x0000000103e77d2c +Refc: 1 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 17 +Address: 0x0000000104159158 +Refc: 1 +=fun +Module: 'gleam@erlang@process' +Uniq: 28255578 +Index: 8 +Address: 0x00000001041fc094 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 73 +Address: 0x0000000103e73e08 +Refc: 2 +=fun +Module: epp +Uniq: 124355082 +Index: 4 +Address: 0x00000001040fc6a4 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 42 +Address: 0x000000010414c798 +Refc: 2 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 8 +Address: 0x00000001040d58b8 +Refc: 2 +=fun +Module: ets +Uniq: 30908443 +Index: 13 +Address: 0x0000000103e3b694 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 9 +Address: 0x0000000103eb2130 +Refc: 1 +=fun +Module: 'gleam@otp@actor' +Uniq: 90500110 +Index: 5 +Address: 0x00000001041f9860 +Refc: 2 +=fun +Module: c +Uniq: 124725464 +Index: 11 +Address: 0x00000001040cb508 +Refc: 2 +=fun +Module: httpc +Uniq: 36342138 +Index: 7 +Address: 0x0000000104109e38 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 48 +Address: 0x0000000103e75fc8 +Refc: 2 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 16 +Address: 0x0000000103dcce18 +Refc: 1 +=fun +Module: unicode +Uniq: 54664399 +Index: 12 +Address: 0x0000000103fb5258 +Refc: 2 +=fun +Module: prim_zip +Uniq: 66112146 +Index: 6 +Address: 0x0000000103dd5abc +Refc: 1 +=fun +Module: rand +Uniq: 65977474 +Index: 29 +Address: 0x000000010402c4c8 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 107 +Address: 0x0000000103e74414 +Refc: 1 +=fun +Module: global +Uniq: 100333677 +Index: 25 +Address: 0x000000010400a4c0 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 8 +Address: 0x000000010421ce60 +Refc: 2 +=fun +Module: file +Uniq: 1459081 +Index: 2 +Address: 0x0000000103e19554 +Refc: 1 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 2 +Address: 0x0000000104161598 +Refc: 1 +=fun +Module: init +Uniq: 72673429 +Index: 5 +Address: 0x0000000103d9445c +Refc: 1 +=fun +Module: inet_parse +Uniq: 131529883 +Index: 3 +Address: 0x0000000103feec90 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 82 +Address: 0x0000000103e7253c +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 7 +Address: 0x000000010414c598 +Refc: 1 +=fun +Module: showtime +Uniq: 22478307 +Index: 2 +Address: 0x000000010413fa10 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 38 +Address: 0x0000000103eb03ac +Refc: 1 +=fun +Module: sys +Uniq: 62925399 +Index: 1 +Address: 0x00000001042065c8 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 42 +Address: 0x000000010421c860 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 5 +Address: 0x0000000103e7b940 +Refc: 2 +=fun +Module: rpc +Uniq: 70687560 +Index: 4 +Address: 0x0000000103ff5e84 +Refc: 1 +=fun +Module: inet_config +Uniq: 64624012 +Index: 3 +Address: 0x0000000103fd3b08 +Refc: 2 +=fun +Module: 'day7@solve' +Uniq: 118915376 +Index: 6 +Address: 0x0000000104224028 +Refc: 2 +=fun +Module: unicode +Uniq: 54664399 +Index: 17 +Address: 0x0000000103fb4f78 +Refc: 2 +=fun +Module: net_kernel +Uniq: 105284444 +Index: 7 +Address: 0x0000000104020c40 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 6 +Address: 0x000000010400c558 +Refc: 2 +=fun +Module: gen_statem +Uniq: 58250722 +Index: 2 +Address: 0x0000000104068118 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 21 +Address: 0x000000010421a340 +Refc: 1 +=fun +Module: ets +Uniq: 30908443 +Index: 0 +Address: 0x0000000103e3c5e8 +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 0 +Address: 0x0000000103ecc63c +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 4 +Address: 0x0000000103eb2810 +Refc: 1 +=fun +Module: glint +Uniq: 18128761 +Index: 8 +Address: 0x0000000104153980 +Refc: 2 +=fun +Module: showtime_ffi +Uniq: 122038219 +Index: 2 +Address: 0x0000000104221120 +Refc: 2 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 12 +Address: 0x0000000104146a10 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 39 +Address: 0x0000000103e76350 +Refc: 2 +=fun +Module: maps +Uniq: 48010870 +Index: 5 +Address: 0x0000000104036b58 +Refc: 2 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 16 +Address: 0x000000010414c028 +Refc: 2 +=fun +Module: 'showtime@internal@reports@formatter' +Uniq: 1772858 +Index: 9 +Address: 0x0000000104226a80 +Refc: 2 +=fun +Module: rand +Uniq: 65977474 +Index: 14 +Address: 0x000000010402cfa0 +Refc: 2 +=fun +Module: peer +Uniq: 34337805 +Index: 3 +Address: 0x0000000103f8cfbc +Refc: 1 +=fun +Module: global +Uniq: 100333677 +Index: 36 +Address: 0x000000010400bd1c +Refc: 1 +=fun +Module: 'showtime@internal@erlang@discover' +Uniq: 110023186 +Index: 9 +Address: 0x0000000104209508 +Refc: 1 +=fun +Module: inet +Uniq: 65562377 +Index: 11 +Address: 0x0000000103fe5150 +Refc: 2 +=fun +Module: prim_tty +Uniq: 75477062 +Index: 2 +Address: 0x00000001040782a0 +Refc: 2 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 9 +Address: 0x0000000104158850 +Refc: 2 +=fun +Module: ssl_config +Uniq: 64895055 +Index: 3 +Address: 0x0000000104134118 +Refc: 2 +=fun +Module: 'gleam@erlang@process' +Uniq: 28255578 +Index: 0 +Address: 0x00000001041fc8ec +Refc: 1 +=fun +Module: erl_features +Uniq: 44278689 +Index: 9 +Address: 0x0000000103fb9d10 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 65 +Address: 0x0000000103e74fa4 +Refc: 1 +=fun +Module: logger_simple_h +Uniq: 105730862 +Index: 2 +Address: 0x0000000103efcd88 +Refc: 1 +=fun +Module: supervisor +Uniq: 63985753 +Index: 10 +Address: 0x0000000103e4c31c +Refc: 1 +=fun +Module: erl_parse +Uniq: 57550649 +Index: 10 +Address: 0x0000000103f59190 +Refc: 5 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 49 +Address: 0x0000000103eafcc0 +Refc: 1 +=fun +Module: gleam_stdlib +Uniq: 79074729 +Index: 0 +Address: 0x000000010416a914 +Refc: 1 +=fun +Module: erl_prim_loader +Uniq: 11574866 +Index: 1 +Address: 0x0000000103ddb680 +Refc: 1 +=fun +Module: c +Uniq: 124725464 +Index: 3 +Address: 0x00000001040c5c88 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 8 +Address: 0x0000000103e7b18c +Refc: 1 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 8 +Address: 0x0000000103dcd328 +Refc: 1 +=fun +Module: global_group +Uniq: 133931896 +Index: 7 +Address: 0x00000001040437d0 +Refc: 2 +=fun +Module: rand +Uniq: 65977474 +Index: 21 +Address: 0x000000010402c8b0 +Refc: 2 +=fun +Module: unicode +Uniq: 54664399 +Index: 4 +Address: 0x0000000103fb4000 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 99 +Address: 0x0000000103e71188 +Refc: 1 +=fun +Module: global +Uniq: 100333677 +Index: 17 +Address: 0x000000010400b6e4 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 0 +Address: 0x000000010421d9c8 +Refc: 1 +=fun +Module: simplifile +Uniq: 17272755 +Index: 8 +Address: 0x000000010420bda8 +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 21 +Address: 0x0000000103ecb0cc +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 23 +Address: 0x0000000103eb1430 +Refc: 1 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 18 +Address: 0x00000001040dcf28 +Refc: 2 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 1 +Address: 0x0000000104147318 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 42 +Address: 0x0000000103e761b0 +Refc: 1 +=fun +Module: user_drv +Uniq: 115201613 +Index: 1 +Address: 0x0000000104059384 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 15 +Address: 0x000000010414c0a8 +Refc: 2 +=fun +Module: code_server +Uniq: 111287289 +Index: 13 +Address: 0x0000000103ef2658 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 46 +Address: 0x0000000103eafed0 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 34 +Address: 0x000000010421ab28 +Refc: 1 +=fun +Module: inet +Uniq: 65562377 +Index: 4 +Address: 0x0000000103fe55e8 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 29 +Address: 0x0000000103e771f8 +Refc: 1 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 20 +Address: 0x0000000104159980 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 33 +Address: 0x000000010414b230 +Refc: 2 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 5 +Address: 0x00000001040d3c90 +Refc: 2 +=fun +Module: ets +Uniq: 30908443 +Index: 8 +Address: 0x0000000103e3bf04 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 12 +Address: 0x0000000103eb1dc0 +Refc: 1 +=fun +Module: glint +Uniq: 18128761 +Index: 0 +Address: 0x0000000104153d7c +Refc: 1 +=fun +Module: logger_h_common +Uniq: 73693308 +Index: 0 +Address: 0x00000001040c2750 +Refc: 1 +=fun +Module: 'glint@flag@constraint' +Uniq: 83988546 +Index: 0 +Address: 0x000000010414e7f0 +Refc: 1 +=fun +Module: 'gleam@otp@actor' +Uniq: 90500110 +Index: 0 +Address: 0x00000001041f9a98 +Refc: 2 +=fun +Module: zlib +Uniq: 85031762 +Index: 0 +Address: 0x0000000103db9dc8 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 63 +Address: 0x0000000103e75178 +Refc: 1 +=fun +Module: group +Uniq: 88293013 +Index: 0 +Address: 0x00000001040897e8 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 24 +Address: 0x000000010414a200 +Refc: 2 +=fun +Module: code_server +Uniq: 111287289 +Index: 16 +Address: 0x0000000103ef1a64 +Refc: 1 +=fun +Module: global_group +Uniq: 133931896 +Index: 10 +Address: 0x0000000104042da4 +Refc: 1 +=fun +Module: rand +Uniq: 65977474 +Index: 6 +Address: 0x00000001040297f0 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 28 +Address: 0x000000010400a1c0 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 15 +Address: 0x000000010421bd5c +Refc: 1 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 9 +Address: 0x0000000104160cdc +Refc: 1 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 1 +Address: 0x0000000104159538 +Refc: 2 +=fun +Module: gen_event +Uniq: 37613186 +Index: 3 +Address: 0x0000000103ee1f10 +Refc: 1 +=fun +Module: init +Uniq: 72673429 +Index: 10 +Address: 0x0000000103d921e8 +Refc: 1 +=fun +Module: erl_features +Uniq: 44278689 +Index: 1 +Address: 0x0000000103fba0a0 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 89 +Address: 0x0000000103e71e70 +Refc: 1 +=fun +Module: supervisor +Uniq: 63985753 +Index: 2 +Address: 0x0000000103e4cbd8 +Refc: 2 +=fun +Module: erl_parse +Uniq: 57550649 +Index: 2 +Address: 0x0000000103f59a88 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 57 +Address: 0x0000000103eaf984 +Refc: 1 +=fun +Module: erl_prim_loader +Uniq: 11574866 +Index: 9 +Address: 0x0000000103de1a30 +Refc: 1 +=fun +Module: ssl_pkix_db +Uniq: 51522903 +Index: 0 +Address: 0x000000010412acf0 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 64 +Address: 0x0000000103eaf3d8 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 0 +Address: 0x0000000103e7c3ac +Refc: 1 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 0 +Address: 0x0000000103dcd720 +Refc: 1 +=fun +Module: code +Uniq: 38778589 +Index: 5 +Address: 0x0000000103e22b18 +Refc: 1 +=fun +Module: inet_db +Uniq: 46329474 +Index: 7 +Address: 0x0000000103fce5f0 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 9 +Address: 0x000000010400c1b4 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 24 +Address: 0x0000000104219808 +Refc: 1 +=fun +Module: simplifile +Uniq: 17272755 +Index: 0 +Address: 0x000000010420bfc0 +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 13 +Address: 0x0000000103ecb610 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 31 +Address: 0x0000000103eb0988 +Refc: 1 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 18 +Address: 0x000000010416143c +Refc: 1 +=fun +Module: beam_lib +Uniq: 45141944 +Index: 2 +Address: 0x0000000103f998f8 +Refc: 1 +=fun +Module: logger_server +Uniq: 19349920 +Index: 0 +Address: 0x0000000103e87ec0 +Refc: 2 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 9 +Address: 0x0000000104146bf4 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 34 +Address: 0x0000000103e768a0 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 23 +Address: 0x000000010414b9f8 +Refc: 2 +=fun +Module: code_server +Uniq: 111287289 +Index: 5 +Address: 0x0000000103ef2d4c +Refc: 1 +=fun +Module: 'showtime@internal@reports@formatter' +Uniq: 1772858 +Index: 4 +Address: 0x0000000104227980 +Refc: 2 +=fun +Module: 'showtime@internal@erlang@discover' +Uniq: 110023186 +Index: 2 +Address: 0x00000001042090a0 +Refc: 1 +=fun +Module: inet +Uniq: 65562377 +Index: 12 +Address: 0x0000000103fe4ee8 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 21 +Address: 0x0000000103e77fc8 +Refc: 1 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 12 +Address: 0x0000000104158bdc +Refc: 1 +=fun +Module: io_lib +Uniq: 6600873 +Index: 2 +Address: 0x0000000104096d28 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 76 +Address: 0x0000000103e7355c +Refc: 1 +=fun +Module: epp +Uniq: 124355082 +Index: 7 +Address: 0x00000001040fbf48 +Refc: 2 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 41 +Address: 0x000000010414c6b0 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 52 +Address: 0x0000000103eafc48 +Refc: 1 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 13 +Address: 0x00000001040d8740 +Refc: 2 +=fun +Module: erl_prim_loader +Uniq: 11574866 +Index: 4 +Address: 0x0000000103de2530 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 55 +Address: 0x0000000103e75b8c +Refc: 1 +=fun +Module: httpc +Uniq: 36342138 +Index: 4 +Address: 0x000000010410a0d0 +Refc: 2 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 13 +Address: 0x0000000103dcd0e8 +Refc: 1 +=fun +Module: standard_error +Uniq: 123115530 +Index: 0 +Address: 0x0000000103fbd440 +Refc: 3 +=fun +Module: global_group +Uniq: 133931896 +Index: 2 +Address: 0x0000000104043a78 +Refc: 2 +=fun +Module: 'showtime@internal@erlang@runner' +Uniq: 6773126 +Index: 0 +Address: 0x000000010421fad4 +Refc: 1 +=fun +Module: prim_zip +Uniq: 66112146 +Index: 3 +Address: 0x0000000103dd2aa8 +Refc: 1 +=fun +Module: unicode +Uniq: 54664399 +Index: 15 +Address: 0x0000000103fb4dd8 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 110 +Address: 0x0000000103e78be0 +Refc: 1 +=fun +Module: global +Uniq: 100333677 +Index: 20 +Address: 0x000000010400b098 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 7 +Address: 0x000000010421ced8 +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 18 +Address: 0x0000000103ecb2a8 +Refc: 2 +=fun +Module: 'gleam@erlang' +Uniq: 90512636 +Index: 0 +Address: 0x0000000104140c68 +Refc: 1 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 1 +Address: 0x0000000104161788 +Refc: 1 +=fun +Module: init +Uniq: 72673429 +Index: 2 +Address: 0x0000000103d87ad8 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 81 +Address: 0x0000000103e725a4 +Refc: 1 +=fun +Module: inet_parse +Uniq: 131529883 +Index: 6 +Address: 0x0000000103feea70 +Refc: 2 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 2 +Address: 0x000000010414cae0 +Refc: 2 +=fun +Module: code_server +Uniq: 111287289 +Index: 10 +Address: 0x0000000103ef2908 +Refc: 4 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 33 +Address: 0x0000000103eb0788 +Refc: 1 +=fun +Module: gleam_erlang_ffi +Uniq: 130811285 +Index: 0 +Address: 0x0000000104200600 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 41 +Address: 0x000000010421c80c +Refc: 1 +=fun +Module: rpc +Uniq: 70687560 +Index: 7 +Address: 0x0000000103ff6040 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 24 +Address: 0x0000000103e77798 +Refc: 2 +=fun +Module: 'day7@solve' +Uniq: 118915376 +Index: 3 +Address: 0x00000001042242c8 +Refc: 2 +=fun +Module: unicode +Uniq: 54664399 +Index: 20 +Address: 0x0000000103fb4c40 +Refc: 2 +=fun +Module: net_kernel +Uniq: 105284444 +Index: 4 +Address: 0x0000000104020d10 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 1 +Address: 0x000000010400cca4 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 36 +Address: 0x000000010414c228 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 16 +Address: 0x000000010421b89c +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 5 +Address: 0x0000000103ecc038 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 7 +Address: 0x0000000103eb23c0 +Refc: 1 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 2 +Address: 0x00000001040dff84 +Refc: 2 +=fun +Module: glint +Uniq: 18128761 +Index: 7 +Address: 0x00000001041539e0 +Refc: 2 +=fun +Module: ets +Uniq: 30908443 +Index: 7 +Address: 0x0000000103e3c024 +Refc: 1 +=fun +Module: 'gleam@set' +Uniq: 15699406 +Index: 0 +Address: 0x000000010414fb38 +Refc: 2 +=fun +Module: logger_server +Uniq: 19349920 +Index: 8 +Address: 0x0000000103e87cd8 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 58 +Address: 0x0000000103e62720 +Refc: 2 +=fun +Module: maps +Uniq: 48010870 +Index: 0 +Address: 0x0000000104032b40 +Refc: 2 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 31 +Address: 0x000000010414af10 +Refc: 2 +=fun +Module: 'showtime@internal@reports@formatter' +Uniq: 1772858 +Index: 12 +Address: 0x00000001042275b0 +Refc: 1 +=fun +Module: rand +Uniq: 65977474 +Index: 11 +Address: 0x000000010402b4c8 +Refc: 2 +=fun +Module: peer +Uniq: 34337805 +Index: 6 +Address: 0x0000000103f8cb00 +Refc: 1 +=fun +Module: 'showtime@internal@erlang@event_handler' +Uniq: 124289607 +Index: 0 +Address: 0x00000001041f7b88 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 50 +Address: 0x000000010421d448 +Refc: 2 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 12 +Address: 0x0000000104160f04 +Refc: 1 +=fun +Module: prim_tty +Uniq: 75477062 +Index: 1 +Address: 0x0000000104078348 +Refc: 2 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 4 +Address: 0x0000000104159260 +Refc: 1 +=fun +Module: 'gleam@erlang@process' +Uniq: 28255578 +Index: 5 +Address: 0x00000001041fc3ec +Refc: 1 +=fun +Module: erl_features +Uniq: 44278689 +Index: 10 +Address: 0x0000000103fb9b58 +Refc: 2 +=fun +Module: inet_parse +Uniq: 131529883 +Index: 9 +Address: 0x0000000103fee730 +Refc: 2 +=fun +Module: 'day7@day7_test' +Uniq: 115477595 +Index: 1 +Address: 0x000000010421f230 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 68 +Address: 0x0000000103e744c0 +Refc: 2 +=fun +Module: logger_simple_h +Uniq: 105730862 +Index: 1 +Address: 0x0000000103efcdb8 +Refc: 2 +=fun +Module: gen +Uniq: 105431365 +Index: 2 +Address: 0x0000000103e0fdd8 +Refc: 2 +=fun +Module: supervisor +Uniq: 63985753 +Index: 7 +Address: 0x0000000103e4c6cc +Refc: 1 +=fun +Module: erl_parse +Uniq: 57550649 +Index: 7 +Address: 0x0000000103f59580 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 60 +Address: 0x0000000103eaf6f4 +Refc: 1 +=fun +Module: gleam_stdlib +Uniq: 79074729 +Index: 3 +Address: 0x0000000104168768 +Refc: 2 +=fun +Module: erl_prim_loader +Uniq: 11574866 +Index: 12 +Address: 0x0000000103de1748 +Refc: 1 +=fun +Module: c +Uniq: 124725464 +Index: 6 +Address: 0x00000001040cba20 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 15 +Address: 0x0000000103e798c0 +Refc: 1 +=fun +Module: httpc +Uniq: 36342138 +Index: 12 +Address: 0x0000000104109a58 +Refc: 2 +=fun +Module: 'showtime@internal@erlang@module_handler' +Uniq: 57223230 +Index: 2 +Address: 0x0000000104207cbc +Refc: 2 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 5 +Address: 0x0000000103dcd260 +Refc: 1 +=fun +Module: rand +Uniq: 65977474 +Index: 22 +Address: 0x000000010402cb28 +Refc: 2 +=fun +Module: unicode +Uniq: 54664399 +Index: 7 +Address: 0x0000000103fb2e48 +Refc: 2 +=fun +Module: code +Uniq: 38778589 +Index: 0 +Address: 0x0000000103e22fd0 +Refc: 2 +=fun +Module: net_kernel +Uniq: 105284444 +Index: 9 +Address: 0x0000000104020c0c +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 102 +Address: 0x0000000103e6cfb8 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 12 +Address: 0x000000010400bed4 +Refc: 1 +=fun +Module: simplifile +Uniq: 17272755 +Index: 11 +Address: 0x000000010420c44c +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 31 +Address: 0x000000010421aba8 +Refc: 2 +=fun +Module: application_controller +Uniq: 5142319 +Index: 10 +Address: 0x0000000103ecba6c +Refc: 3 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 18 +Address: 0x0000000103eb1868 +Refc: 1 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 6 +Address: 0x0000000104146f78 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 41 +Address: 0x0000000103e762a8 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 10 +Address: 0x000000010414c4b0 +Refc: 1 +=fun +Module: code_server +Uniq: 111287289 +Index: 2 +Address: 0x0000000103ef3684 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 41 +Address: 0x0000000103eb01fc +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 33 +Address: 0x000000010421ab58 +Refc: 2 +=fun +Module: inet +Uniq: 65562377 +Index: 1 +Address: 0x0000000103fe5720 +Refc: 2 +=fun +Module: 'showtime@internal@erlang@discover' +Uniq: 110023186 +Index: 7 +Address: 0x0000000104208948 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 16 +Address: 0x0000000103e79598 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 75 +Address: 0x0000000103e736a0 +Refc: 2 +=fun +Module: epp +Uniq: 124355082 +Index: 2 +Address: 0x00000001040fca1c +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 15 +Address: 0x0000000103eb1ad8 +Refc: 1 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 10 +Address: 0x00000001040d6ab8 +Refc: 2 +=fun +Module: ets +Uniq: 30908443 +Index: 15 +Address: 0x0000000103e3b54c +Refc: 1 +=fun +Module: 'gleam@otp@actor' +Uniq: 90500110 +Index: 7 +Address: 0x00000001041f97b0 +Refc: 1 +=fun +Module: c +Uniq: 124725464 +Index: 9 +Address: 0x00000001040cb7a8 +Refc: 2 +=fun +Module: raw_file_io +Uniq: 101053602 +Index: 2 +Address: 0x00000001040d0480 +Refc: 2 +=fun +Module: 'aoc2023@@main' +Uniq: 70697990 +Index: 0 +Address: 0x00000001040ea8a8 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 50 +Address: 0x0000000103e75dd0 +Refc: 2 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 18 +Address: 0x0000000103dccb70 +Refc: 1 +=fun +Module: global_group +Uniq: 133931896 +Index: 9 +Address: 0x000000010404301c +Refc: 1 +=fun +Module: unicode +Uniq: 54664399 +Index: 10 +Address: 0x0000000103fb29c8 +Refc: 2 +=fun +Module: prim_zip +Uniq: 66112146 +Index: 4 +Address: 0x0000000103dd5b84 +Refc: 1 +=fun +Module: rand +Uniq: 65977474 +Index: 3 +Address: 0x000000010402a9d8 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 31 +Address: 0x0000000104009e40 +Refc: 1 +=fun +Module: file +Uniq: 1459081 +Index: 0 +Address: 0x0000000103e1963c +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 10 +Address: 0x000000010421cbb8 +Refc: 1 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 4 +Address: 0x0000000104160fb0 +Refc: 1 +=fun +Module: gen_event +Uniq: 37613186 +Index: 0 +Address: 0x0000000103edc348 +Refc: 2 +=fun +Module: erl_features +Uniq: 44278689 +Index: 2 +Address: 0x0000000103fb9ff8 +Refc: 2 +=fun +Module: init +Uniq: 72673429 +Index: 7 +Address: 0x0000000103d943f8 +Refc: 1 +=fun +Module: inet_parse +Uniq: 131529883 +Index: 1 +Address: 0x0000000103fef0d8 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 92 +Address: 0x0000000103e71a78 +Refc: 2 +=fun +Module: file_io_server +Uniq: 82162284 +Index: 1 +Address: 0x0000000103e92898 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 36 +Address: 0x0000000103eb0500 +Refc: 1 +=fun +Module: showtime +Uniq: 22478307 +Index: 0 +Address: 0x000000010413fce0 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 44 +Address: 0x000000010421cae0 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 67 +Address: 0x0000000103eaec10 +Refc: 2 +=fun +Module: rpc +Uniq: 70687560 +Index: 2 +Address: 0x0000000103ff60e0 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 7 +Address: 0x0000000103e54ed8 +Refc: 2 +=fun +Module: 'day7@solve' +Uniq: 118915376 +Index: 4 +Address: 0x0000000104224220 +Refc: 1 +=fun +Module: code +Uniq: 38778589 +Index: 8 +Address: 0x0000000103e22568 +Refc: 1 +=fun +Module: net_kernel +Uniq: 105284444 +Index: 1 +Address: 0x0000000104020fd8 +Refc: 2 +=fun +Module: gen_server +Uniq: 22931368 +Index: 0 +Address: 0x0000000103f1edb0 +Refc: 2 +=fun +Module: inet_db +Uniq: 46329474 +Index: 4 +Address: 0x0000000103fcec9c +Refc: 1 +=fun +Module: global +Uniq: 100333677 +Index: 4 +Address: 0x000000010400c8e0 +Refc: 1 +=fun +Module: gen_statem +Uniq: 58250722 +Index: 0 +Address: 0x000000010405e830 +Refc: 2 +=fun +Module: simplifile +Uniq: 17272755 +Index: 3 +Address: 0x000000010420bac4 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 23 +Address: 0x0000000104219c6c +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 2 +Address: 0x0000000103ecc36c +Refc: 1 +=fun +Module: httpc_manager +Uniq: 90163599 +Index: 0 +Address: 0x0000000104112eb0 +Refc: 2 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 17 +Address: 0x000000010416139c +Refc: 1 +=fun +Module: ets +Uniq: 30908443 +Index: 2 +Address: 0x0000000103e3c300 +Refc: 1 +=fun +Module: erl_init +Uniq: 96508615 +Index: 0 +Address: 0x0000000103d860a8 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 26 +Address: 0x0000000103eb0fc0 +Refc: 1 +=fun +Module: glint +Uniq: 18128761 +Index: 10 +Address: 0x00000001041538c0 +Refc: 2 +=fun +Module: showtime_ffi +Uniq: 122038219 +Index: 0 +Address: 0x0000000104221598 +Refc: 1 +=fun +Module: logger_server +Uniq: 19349920 +Index: 5 +Address: 0x0000000103e87ab8 +Refc: 1 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 14 +Address: 0x0000000104146950 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 33 +Address: 0x0000000103e768d8 +Refc: 2 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 18 +Address: 0x000000010414bf00 +Refc: 2 +=fun +Module: 'showtime@internal@reports@formatter' +Uniq: 1772858 +Index: 7 +Address: 0x00000001042275e0 +Refc: 2 +=fun +Module: rand +Uniq: 65977474 +Index: 12 +Address: 0x000000010402b830 +Refc: 2 +=fun +Module: inets_trace +Uniq: 58819832 +Index: 0 +Address: 0x00000001041156c8 +Refc: 2 +=fun +Module: peer +Uniq: 34337805 +Index: 1 +Address: 0x0000000103f8cd98 +Refc: 1 +=fun +Module: inet +Uniq: 65562377 +Index: 9 +Address: 0x0000000103fe53f8 +Refc: 2 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 15 +Address: 0x0000000104158f14 +Refc: 1 +=fun +Module: ssl_config +Uniq: 64895055 +Index: 1 +Address: 0x00000001041346a8 +Refc: 1 +=fun +Module: erl_features +Uniq: 44278689 +Index: 15 +Address: 0x0000000103fb92a8 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 67 +Address: 0x0000000103e74538 +Refc: 2 +=fun +Module: logger_simple_h +Uniq: 105730862 +Index: 4 +Address: 0x0000000103efca28 +Refc: 2 +=fun +Module: supervisor +Uniq: 63985753 +Index: 12 +Address: 0x0000000103e4c178 +Refc: 1 +=fun +Module: erl_parse +Uniq: 57550649 +Index: 8 +Address: 0x0000000103f594f8 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 55 +Address: 0x0000000103eafa10 +Refc: 2 +=fun +Module: erl_prim_loader +Uniq: 11574866 +Index: 7 +Address: 0x0000000103de1ee4 +Refc: 1 +=fun +Module: c +Uniq: 124725464 +Index: 1 +Address: 0x00000001040cbe68 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 10 +Address: 0x0000000103e7a4b8 +Refc: 2 +=fun +Module: httpc +Uniq: 36342138 +Index: 1 +Address: 0x000000010410a4b0 +Refc: 2 +=fun +Module: httpc_cookie +Uniq: 22295768 +Index: 0 +Address: 0x000000010411a790 +Refc: 1 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 10 +Address: 0x0000000103dcd230 +Refc: 1 +=fun +Module: global_group +Uniq: 133931896 +Index: 1 +Address: 0x0000000104043b68 +Refc: 2 +=fun +Module: unicode +Uniq: 54664399 +Index: 2 +Address: 0x0000000103fb3be0 +Refc: 2 +=fun +Module: rand +Uniq: 65977474 +Index: 27 +Address: 0x000000010402e088 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 109 +Address: 0x0000000103e77eb8 +Refc: 2 +=fun +Module: inet_db +Uniq: 46329474 +Index: 9 +Address: 0x0000000103fcdf74 +Refc: 1 +=fun +Module: global +Uniq: 100333677 +Index: 23 +Address: 0x000000010400a8f0 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 2 +Address: 0x000000010421d758 +Refc: 1 +=fun +Module: ets +Uniq: 30908443 +Index: 17 +Address: 0x0000000103e3bd88 +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 23 +Address: 0x0000000103eca998 +Refc: 3 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 21 +Address: 0x0000000103eb1560 +Refc: 2 +=fun +Module: 'gleam@result' +Uniq: 44749367 +Index: 2 +Address: 0x000000010415f9b8 +Refc: 2 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 3 +Address: 0x00000001041471d0 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 84 +Address: 0x0000000103e723f0 +Refc: 2 +=fun +Module: user_drv +Uniq: 115201613 +Index: 3 +Address: 0x00000001040592e4 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 1 +Address: 0x000000010414cb60 +Refc: 2 +=fun +Module: code_server +Uniq: 111287289 +Index: 15 +Address: 0x0000000103ef1c90 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 44 +Address: 0x0000000103eb1528 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 36 +Address: 0x000000010421b7b8 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 31 +Address: 0x0000000103e76b60 +Refc: 1 +=fun +Module: unicode +Uniq: 54664399 +Index: 23 +Address: 0x0000000103fb5138 +Refc: 2 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 35 +Address: 0x000000010414b970 +Refc: 1 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 7 +Address: 0x00000001040d56d0 +Refc: 2 +=fun +Module: ets +Uniq: 30908443 +Index: 10 +Address: 0x0000000103e3bde4 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 2 +Address: 0x0000000103eb2b58 +Refc: 1 +=fun +Module: glint +Uniq: 18128761 +Index: 2 +Address: 0x0000000104153bb8 +Refc: 2 +=fun +Module: 'gleam@otp@actor' +Uniq: 90500110 +Index: 2 +Address: 0x00000001041f9998 +Refc: 2 +=fun +Module: raw_file_io +Uniq: 101053602 +Index: 5 +Address: 0x00000001040d05d8 +Refc: 2 +=fun +Module: 'glint@flag@constraint' +Uniq: 83988546 +Index: 2 +Address: 0x000000010414e0bc +Refc: 1 +=fun +Module: maps +Uniq: 48010870 +Index: 3 +Address: 0x0000000104036d10 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 57 +Address: 0x0000000103e75a64 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 26 +Address: 0x000000010414b78c +Refc: 1 +=fun +Module: rand +Uniq: 65977474 +Index: 4 +Address: 0x0000000104029ad8 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 34 +Address: 0x0000000104009cd8 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 49 +Address: 0x000000010421d33c +Refc: 1 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 11 +Address: 0x0000000104160e30 +Refc: 1 +=fun +Module: erpc +Uniq: 95647987 +Index: 1 +Address: 0x000000010404df68 +Refc: 2 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 7 +Address: 0x0000000104158980 +Refc: 1 +=fun +Module: gen_event +Uniq: 37613186 +Index: 5 +Address: 0x0000000103ee1788 +Refc: 2 +=fun +Module: 'gleam@erlang@process' +Uniq: 28255578 +Index: 6 +Address: 0x00000001041fc2f0 +Refc: 1 +=fun +Module: erl_features +Uniq: 44278689 +Index: 7 +Address: 0x0000000103fb6db8 +Refc: 2 +=fun +Module: init +Uniq: 72673429 +Index: 12 +Address: 0x0000000103d93630 +Refc: 1 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 16 +Address: 0x0000000104146e7c +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 91 +Address: 0x0000000103e71be8 +Refc: 2 +=fun +Module: supervisor +Uniq: 63985753 +Index: 4 +Address: 0x0000000103e4cb28 +Refc: 2 +=fun +Module: erl_parse +Uniq: 57550649 +Index: 0 +Address: 0x0000000103f5a090 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 63 +Address: 0x0000000103eaf504 +Refc: 1 +=fun +Module: ssl_pkix_db +Uniq: 51522903 +Index: 2 +Address: 0x000000010412a870 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 2 +Address: 0x0000000103e7c1f8 +Refc: 1 +=fun +Module: httpc +Uniq: 36342138 +Index: 9 +Address: 0x0000000104109cb8 +Refc: 2 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 2 +Address: 0x0000000103dcd680 +Refc: 1 +=fun +Module: code +Uniq: 38778589 +Index: 3 +Address: 0x0000000103e22c68 +Refc: 2 +=fun +Module: rand +Uniq: 65977474 +Index: 19 +Address: 0x000000010402bf98 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 101 +Address: 0x0000000103e70dac +Refc: 1 +=fun +Module: inet_db +Uniq: 46329474 +Index: 1 +Address: 0x0000000103fc5178 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 15 +Address: 0x000000010400babc +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 26 +Address: 0x0000000104218d3c +Refc: 1 +=fun +Module: simplifile +Uniq: 17272755 +Index: 6 +Address: 0x000000010420b210 +Refc: 2 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 20 +Address: 0x00000001040dd5c0 +Refc: 2 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 20 +Address: 0x0000000104161634 +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 15 +Address: 0x0000000103ecb4a8 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 29 +Address: 0x0000000103eb0bc8 +Refc: 1 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 11 +Address: 0x0000000104146b10 +Refc: 1 +=fun +Module: beam_lib +Uniq: 45141944 +Index: 0 +Address: 0x0000000103f9a288 +Refc: 2 +=fun +Module: logger_server +Uniq: 19349920 +Index: 2 +Address: 0x0000000103e87e28 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 44 +Address: 0x0000000103e5ecd8 +Refc: 2 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 9 +Address: 0x000000010414c2e0 +Refc: 1 +=fun +Module: code_server +Uniq: 111287289 +Index: 7 +Address: 0x0000000103ef2cd0 +Refc: 1 +=fun +Module: logger +Uniq: 1449854 +Index: 1 +Address: 0x0000000103ed5f00 +Refc: 2 +=fun +Module: 'showtime@internal@reports@formatter' +Uniq: 1772858 +Index: 2 +Address: 0x0000000104227ad0 +Refc: 2 +=fun +Module: prim_inet +Uniq: 37477703 +Index: 0 +Address: 0x0000000103dae580 +Refc: 1 +=fun +Module: 'showtime@internal@erlang@discover' +Uniq: 110023186 +Index: 0 +Address: 0x0000000104209538 +Refc: 2 +=fun +Module: inet +Uniq: 65562377 +Index: 2 +Address: 0x0000000103fe56d0 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 23 +Address: 0x0000000103e77810 +Refc: 2 +=fun +Module: io_lib +Uniq: 6600873 +Index: 0 +Address: 0x000000010409b660 +Refc: 2 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 18 +Address: 0x0000000104159368 +Refc: 1 +=fun +Module: ssl_config +Uniq: 64895055 +Index: 4 +Address: 0x0000000104133f60 +Refc: 2 +=fun +Module: 'gleam@erlang@process' +Uniq: 28255578 +Index: 11 +Address: 0x00000001041fbc98 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 78 +Address: 0x0000000103e728a0 +Refc: 2 +=fun +Module: epp +Uniq: 124355082 +Index: 5 +Address: 0x00000001040fc2c0 +Refc: 1 +=fun +Module: erl_parse +Uniq: 57550649 +Index: 13 +Address: 0x0000000103f58ee8 +Refc: 2 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 15 +Address: 0x00000001040dbbb0 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 10 +Address: 0x0000000103eb2000 +Refc: 1 +=fun +Module: httpc +Uniq: 36342138 +Index: 6 +Address: 0x0000000104109ee0 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 49 +Address: 0x0000000103e75ed8 +Refc: 1 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 15 +Address: 0x0000000103dccfd0 +Refc: 1 +=fun +Module: rand +Uniq: 65977474 +Index: 28 +Address: 0x00000001040304f0 +Refc: 2 +=fun +Module: unicode +Uniq: 54664399 +Index: 13 +Address: 0x0000000103fb4bd0 +Refc: 2 +=fun +Module: prim_zip +Uniq: 66112146 +Index: 1 +Address: 0x0000000103dd5be4 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 104 +Address: 0x0000000103e70bf4 +Refc: 1 +=fun +Module: global +Uniq: 100333677 +Index: 26 +Address: 0x000000010400a490 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 9 +Address: 0x000000010421cd80 +Refc: 2 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 3 +Address: 0x0000000104161300 +Refc: 1 +=fun +Module: init +Uniq: 72673429 +Index: 4 +Address: 0x0000000103d944c8 +Refc: 1 +=fun +Module: inet_parse +Uniq: 131529883 +Index: 4 +Address: 0x0000000103feeba8 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 83 +Address: 0x0000000103e724d0 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 4 +Address: 0x000000010414ca0c +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 39 +Address: 0x0000000103eb0314 +Refc: 1 +=fun +Module: showtime +Uniq: 22478307 +Index: 3 +Address: 0x000000010413f9dc +Refc: 1 +=fun +Module: ssl_manager +Uniq: 40265571 +Index: 0 +Address: 0x000000010412e528 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 43 +Address: 0x000000010421ca70 +Refc: 1 +=fun +Module: sys +Uniq: 62925399 +Index: 0 +Address: 0x0000000104205128 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 26 +Address: 0x0000000103e774f8 +Refc: 1 +=fun +Module: rpc +Uniq: 70687560 +Index: 5 +Address: 0x0000000103ff5d60 +Refc: 1 +=fun +Module: inet_config +Uniq: 64624012 +Index: 0 +Address: 0x0000000103fd3dd0 +Refc: 1 +=fun +Module: 'day7@solve' +Uniq: 118915376 +Index: 1 +Address: 0x0000000104223388 +Refc: 2 +=fun +Module: unicode +Uniq: 54664399 +Index: 18 +Address: 0x0000000103fb4d58 +Refc: 2 +=fun +Module: net_kernel +Uniq: 105284444 +Index: 6 +Address: 0x0000000104020cc8 +Refc: 1 +=fun +Module: global +Uniq: 100333677 +Index: 7 +Address: 0x000000010400c340 +Refc: 2 +=fun +Module: epp +Uniq: 124355082 +Index: 8 +Address: 0x00000001040fbef4 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 38 +Address: 0x000000010414c3f8 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 18 +Address: 0x000000010421acac +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 7 +Address: 0x0000000103ecbfe0 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 5 +Address: 0x0000000103eb2690 +Refc: 1 +=fun +Module: glint +Uniq: 18128761 +Index: 9 +Address: 0x0000000104153920 +Refc: 2 +=fun +Module: ets +Uniq: 30908443 +Index: 1 +Address: 0x0000000103e3c6d0 +Refc: 1 +=fun +Module: logger_server +Uniq: 19349920 +Index: 10 +Address: 0x0000000103e8764c +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 36 +Address: 0x0000000103e5b808 +Refc: 2 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 17 +Address: 0x000000010414bf80 +Refc: 2 +=fun +Module: 'showtime@internal@reports@formatter' +Uniq: 1772858 +Index: 10 +Address: 0x0000000104226a30 +Refc: 2 +=fun +Module: rand +Uniq: 65977474 +Index: 9 +Address: 0x0000000104029660 +Refc: 2 +=fun +Module: peer +Uniq: 34337805 +Index: 4 +Address: 0x0000000103f8b3e0 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 37 +Address: 0x000000010400be2c +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 52 +Address: 0x000000010421d538 +Refc: 2 +=fun +Module: 'showtime@internal@erlang@discover' +Uniq: 110023186 +Index: 8 +Address: 0x00000001042088c8 +Refc: 2 +=fun +Module: inet +Uniq: 65562377 +Index: 10 +Address: 0x0000000103fe53a4 +Refc: 1 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 14 +Address: 0x00000001041610ec +Refc: 1 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 10 +Address: 0x0000000104158a58 +Refc: 1 +=fun +Module: 'gleam@erlang@process' +Uniq: 28255578 +Index: 3 +Address: 0x00000001041fc574 +Refc: 1 +=fun +Module: erl_features +Uniq: 44278689 +Index: 8 +Address: 0x0000000103fb9db8 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 70 +Address: 0x0000000103e74448 +Refc: 2 +=fun +Module: logger_simple_h +Uniq: 105730862 +Index: 3 +Address: 0x0000000103efcb50 +Refc: 2 +=fun +Module: supervisor +Uniq: 63985753 +Index: 9 +Address: 0x0000000103e4c41c +Refc: 2 +=fun +Module: erl_parse +Uniq: 57550649 +Index: 5 +Address: 0x0000000103f597f0 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 50 +Address: 0x0000000103eafd50 +Refc: 1 +=fun +Module: gleam_stdlib +Uniq: 79074729 +Index: 1 +Address: 0x000000010416a8b4 +Refc: 1 +=fun +Module: erl_prim_loader +Uniq: 11574866 +Index: 2 +Address: 0x0000000103dd9180 +Refc: 1 +=fun +Module: c +Uniq: 124725464 +Index: 4 +Address: 0x00000001040c5bf8 +Refc: 2 +=fun +Module: file_server +Uniq: 30066188 +Index: 0 +Address: 0x0000000103e07538 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 9 +Address: 0x0000000103e7a9d0 +Refc: 2 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 7 +Address: 0x0000000103dcd4b0 +Refc: 1 +=fun +Module: global_group +Uniq: 133931896 +Index: 4 +Address: 0x00000001040431a4 +Refc: 1 +=fun +Module: rand +Uniq: 65977474 +Index: 20 +Address: 0x000000010402c790 +Refc: 2 +=fun +Module: unicode +Uniq: 54664399 +Index: 5 +Address: 0x0000000103fb3798 +Refc: 2 +=fun +Module: net_kernel +Uniq: 105284444 +Index: 11 +Address: 0x00000001040209b0 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 96 +Address: 0x0000000103e71560 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 18 +Address: 0x000000010400b33c +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 1 +Address: 0x000000010421d950 +Refc: 1 +=fun +Module: simplifile +Uniq: 17272755 +Index: 9 +Address: 0x000000010420c390 +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 20 +Address: 0x0000000103ecb100 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 16 +Address: 0x0000000103eb19fc +Refc: 1 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 17 +Address: 0x00000001040dcbb8 +Refc: 2 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 0 +Address: 0x00000001041474f8 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 43 +Address: 0x0000000103e7622c +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 12 +Address: 0x000000010414c3c8 +Refc: 1 +=fun +Module: code_server +Uniq: 111287289 +Index: 12 +Address: 0x0000000103ef26a8 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 47 +Address: 0x0000000103eafea0 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 35 +Address: 0x000000010421b220 +Refc: 1 +=fun +Module: 'showtime@internal@erlang@discover' +Uniq: 110023186 +Index: 5 +Address: 0x0000000104208d28 +Refc: 2 +=fun +Module: inet +Uniq: 65562377 +Index: 7 +Address: 0x0000000103fe54b0 +Refc: 1 +=fun +Module: error_logger +Uniq: 17945318 +Index: 1 +Address: 0x0000000103ef8a30 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 18 +Address: 0x0000000103e78da8 +Refc: 2 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 21 +Address: 0x0000000104159a88 +Refc: 1 +=fun +Module: epp +Uniq: 124355082 +Index: 0 +Address: 0x00000001040fcb94 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 13 +Address: 0x0000000103eb1cc0 +Refc: 1 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 4 +Address: 0x00000001040d3908 +Refc: 2 +=fun +Module: glint +Uniq: 18128761 +Index: 1 +Address: 0x0000000104153c40 +Refc: 2 +=fun +Module: snag +Uniq: 96707762 +Index: 0 +Address: 0x00000001041f6298 +Refc: 2 +=fun +Module: ets +Uniq: 30908443 +Index: 9 +Address: 0x0000000103e3be68 +Refc: 1 +=fun +Module: logger_h_common +Uniq: 73693308 +Index: 1 +Address: 0x00000001040c26f0 +Refc: 1 +=fun +Module: raw_file_io +Uniq: 101053602 +Index: 0 +Address: 0x00000001040d0390 +Refc: 2 +=fun +Module: 'gleam@otp@actor' +Uniq: 90500110 +Index: 1 +Address: 0x00000001041f9a18 +Refc: 2 +=fun +Module: zlib +Uniq: 85031762 +Index: 1 +Address: 0x0000000103dba870 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 60 +Address: 0x0000000103e75970 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 25 +Address: 0x000000010414b8c4 +Refc: 1 +=fun +Module: global_group +Uniq: 133931896 +Index: 11 +Address: 0x0000000104042be0 +Refc: 1 +=fun +Module: rand +Uniq: 65977474 +Index: 1 +Address: 0x000000010402a178 +Refc: 2 +=fun +Module: unicode +Uniq: 54664399 +Index: 8 +Address: 0x0000000103fb2560 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 29 +Address: 0x0000000104009ed8 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 12 +Address: 0x000000010421c4cc +Refc: 1 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 6 +Address: 0x0000000104160b08 +Refc: 1 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 2 +Address: 0x0000000104159450 +Refc: 2 +=fun +Module: gen_event +Uniq: 37613186 +Index: 2 +Address: 0x0000000103ee2098 +Refc: 1 +=fun +Module: init +Uniq: 72673429 +Index: 9 +Address: 0x0000000103d936e0 +Refc: 1 +=fun +Module: erl_features +Uniq: 44278689 +Index: 0 +Address: 0x0000000103fba268 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 94 +Address: 0x0000000103e71898 +Refc: 2 +=fun +Module: supervisor +Uniq: 63985753 +Index: 1 +Address: 0x0000000103e4cdc0 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 58 +Address: 0x0000000103eaf914 +Refc: 1 +=fun +Module: erl_prim_loader +Uniq: 11574866 +Index: 10 +Address: 0x0000000103de19a8 +Refc: 1 +=fun +Module: ssl_pkix_db +Uniq: 51522903 +Index: 1 +Address: 0x000000010412aae4 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 46 +Address: 0x000000010421cd28 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 65 +Address: 0x0000000103eaed88 +Refc: 2 +=fun +Module: rpc +Uniq: 70687560 +Index: 0 +Address: 0x0000000103ff63cc +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 1 +Address: 0x0000000103e7c2c4 +Refc: 1 +=fun +Module: timer +Uniq: 46706930 +Index: 0 +Address: 0x00000001040ad688 +Refc: 2 +=fun +Module: code +Uniq: 38778589 +Index: 6 +Address: 0x0000000103e22a3c +Refc: 1 +=fun +Module: net_kernel +Uniq: 105284444 +Index: 3 +Address: 0x0000000104020ea0 +Refc: 1 +=fun +Module: inet_db +Uniq: 46329474 +Index: 6 +Address: 0x0000000103fce7a8 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 10 +Address: 0x000000010400c24c +Refc: 1 +=fun +Module: simplifile +Uniq: 17272755 +Index: 1 +Address: 0x000000010420bce4 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 25 +Address: 0x00000001042192f8 +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 12 +Address: 0x0000000103ecb760 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 24 +Address: 0x0000000103eb12a8 +Refc: 1 +=fun +Module: glint +Uniq: 18128761 +Index: 12 +Address: 0x0000000104153800 +Refc: 2 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 19 +Address: 0x00000001041614f8 +Refc: 1 +=fun +Module: logger_server +Uniq: 19349920 +Index: 7 +Address: 0x0000000103e87988 +Refc: 2 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 8 +Address: 0x0000000104146c28 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 35 +Address: 0x0000000103e76810 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 20 +Address: 0x000000010414bde8 +Refc: 2 +=fun +Module: code_server +Uniq: 111287289 +Index: 4 +Address: 0x0000000103ef3178 +Refc: 2 +=fun +Module: 'showtime@internal@reports@formatter' +Uniq: 1772858 +Index: 5 +Address: 0x0000000104227878 +Refc: 2 +=fun +Module: lists +Uniq: 104401092 +Index: 0 +Address: 0x0000000103f04578 +Refc: 2 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 13 +Address: 0x0000000104158d90 +Refc: 1 +=fun +Module: erl_features +Uniq: 44278689 +Index: 13 +Address: 0x0000000103fb9958 +Refc: 1 +=fun +Module: proc_lib +Uniq: 54621022 +Index: 1 +Address: 0x0000000103e9c360 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 77 +Address: 0x0000000103e72ef0 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 53 +Address: 0x0000000103eafaa0 +Refc: 1 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 12 +Address: 0x00000001040d6f90 +Refc: 2 +=fun +Module: erl_prim_loader +Uniq: 11574866 +Index: 5 +Address: 0x0000000103de24b4 +Refc: 1 +=fun +Module: logger_std_h +Uniq: 4673888 +Index: 0 +Address: 0x00000001040bcb10 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 52 +Address: 0x0000000103e75c80 +Refc: 1 +=fun +Module: httpc +Uniq: 36342138 +Index: 3 +Address: 0x000000010410a278 +Refc: 2 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 12 +Address: 0x0000000103dcd0b4 +Refc: 1 +=fun +Module: global_group +Uniq: 133931896 +Index: 3 +Address: 0x0000000104043968 +Refc: 2 +=fun +Module: rand +Uniq: 65977474 +Index: 25 +Address: 0x000000010402dfb0 +Refc: 2 +=fun +Module: unicode +Uniq: 54664399 +Index: 0 +Address: 0x0000000103fb5938 +Refc: 1 +=fun +Module: prim_zip +Uniq: 66112146 +Index: 2 +Address: 0x0000000103dd3288 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 111 +Address: 0x0000000103e7b8d8 +Refc: 2 +=fun +Module: inet_db +Uniq: 46329474 +Index: 11 +Address: 0x0000000103fceb98 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 21 +Address: 0x000000010400ad48 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 4 +Address: 0x000000010421d590 +Refc: 2 +=fun +Module: proplists +Uniq: 31251554 +Index: 0 +Address: 0x0000000103f81c80 +Refc: 2 +=fun +Module: application_controller +Uniq: 5142319 +Index: 17 +Address: 0x0000000103ecb320 +Refc: 2 +=fun +Module: 'gleam@result' +Uniq: 44749367 +Index: 0 +Address: 0x000000010415fa58 +Refc: 2 +=fun +Module: init +Uniq: 72673429 +Index: 1 +Address: 0x0000000103d87dd0 +Refc: 1 +=fun +Module: inet_parse +Uniq: 131529883 +Index: 7 +Address: 0x0000000103fee9a0 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 86 +Address: 0x0000000103e72310 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 3 +Address: 0x000000010414ca40 +Refc: 2 +=fun +Module: code_server +Uniq: 111287289 +Index: 9 +Address: 0x0000000103ef2b3c +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 34 +Address: 0x0000000103eb06a0 +Refc: 1 +=fun +Module: gleam_erlang_ffi +Uniq: 130811285 +Index: 1 +Address: 0x00000001042004e0 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 38 +Address: 0x000000010421c07c +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 25 +Address: 0x0000000103e77528 +Refc: 2 +=fun +Module: ssl_pem_cache +Uniq: 58460895 +Index: 0 +Address: 0x0000000104126cb0 +Refc: 2 +=fun +Module: 'day7@solve' +Uniq: 118915376 +Index: 2 +Address: 0x0000000104223980 +Refc: 2 +=fun +Module: unicode +Uniq: 54664399 +Index: 21 +Address: 0x0000000103fb4e48 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 2 +Address: 0x000000010400ca50 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 37 +Address: 0x000000010414c310 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 17 +Address: 0x000000010421b310 +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 4 +Address: 0x0000000103ecc138 +Refc: 2 +=fun +Module: logger_formatter +Uniq: 60349323 +Index: 0 +Address: 0x00000001040b6520 +Refc: 2 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 1 +Address: 0x00000001040d1f00 +Refc: 2 +=fun +Module: glint +Uniq: 18128761 +Index: 4 +Address: 0x0000000104152148 +Refc: 2 +=fun +Module: ets +Uniq: 30908443 +Index: 4 +Address: 0x0000000103e3bf88 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 0 +Address: 0x0000000103eb2ec8 +Refc: 1 +=fun +Module: 'gleam@set' +Uniq: 15699406 +Index: 3 +Address: 0x000000010414f218 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 59 +Address: 0x0000000103e60180 +Refc: 2 +=fun +Module: maps +Uniq: 48010870 +Index: 1 +Address: 0x0000000104032ae8 +Refc: 2 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 28 +Address: 0x000000010414aa60 +Refc: 2 +=fun +Module: 'showtime@internal@reports@formatter' +Uniq: 1772858 +Index: 13 +Address: 0x00000001042277f0 +Refc: 1 +=fun +Module: rand +Uniq: 65977474 +Index: 10 +Address: 0x00000001040290b8 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 32 +Address: 0x0000000104009d98 +Refc: 2 +=fun +Module: 'showtime@internal@erlang@event_handler' +Uniq: 124289607 +Index: 3 +Address: 0x00000001041f7648 +Refc: 2 +=fun +Module: edlin +Uniq: 47380248 +Index: 0 +Address: 0x0000000104092d50 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 51 +Address: 0x000000010421d3a8 +Refc: 2 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 13 +Address: 0x000000010416104c +Refc: 1 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 5 +Address: 0x0000000104158fe4 +Refc: 1 +=fun +Module: gen_event +Uniq: 37613186 +Index: 7 +Address: 0x0000000103ee1450 +Refc: 1 +=fun +Module: 'gleam@erlang@process' +Uniq: 28255578 +Index: 4 +Address: 0x00000001041fc4c8 +Refc: 2 +=fun +Module: erl_features +Uniq: 44278689 +Index: 5 +Address: 0x0000000103fb7ea0 +Refc: 2 +=fun +Module: inet_parse +Uniq: 131529883 +Index: 10 +Address: 0x0000000103fee650 +Refc: 2 +=fun +Module: 'day7@day7_test' +Uniq: 115477595 +Index: 0 +Address: 0x000000010421f2e0 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 69 +Address: 0x0000000103e74238 +Refc: 1 +=fun +Module: gen +Uniq: 105431365 +Index: 1 +Address: 0x0000000103e0fec0 +Refc: 1 +=fun +Module: supervisor +Uniq: 63985753 +Index: 6 +Address: 0x0000000103e4c92c +Refc: 1 +=fun +Module: erl_parse +Uniq: 57550649 +Index: 6 +Address: 0x0000000103f596b8 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 61 +Address: 0x0000000103eaf688 +Refc: 1 +=fun +Module: gleam_stdlib +Uniq: 79074729 +Index: 4 +Address: 0x000000010416a708 +Refc: 2 +=fun +Module: ssl_pkix_db +Uniq: 51522903 +Index: 4 +Address: 0x000000010412a3d0 +Refc: 1 +=fun +Module: c +Uniq: 124725464 +Index: 7 +Address: 0x00000001040cb9c0 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 12 +Address: 0x0000000103e79d04 +Refc: 1 +=fun +Module: httpc +Uniq: 36342138 +Index: 11 +Address: 0x0000000104109ae0 +Refc: 2 +=fun +Module: 'showtime@internal@erlang@module_handler' +Uniq: 57223230 +Index: 1 +Address: 0x00000001042079e0 +Refc: 1 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 4 +Address: 0x0000000103dcd5d0 +Refc: 1 +=fun +Module: rand +Uniq: 65977474 +Index: 17 +Address: 0x000000010402d8b8 +Refc: 2 +=fun +Module: code +Uniq: 38778589 +Index: 1 +Address: 0x0000000103e22f08 +Refc: 2 +=fun +Module: net_kernel +Uniq: 105284444 +Index: 8 +Address: 0x000000010401ec90 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 103 +Address: 0x0000000103e70c28 +Refc: 2 +=fun +Module: inet_db +Uniq: 46329474 +Index: 3 +Address: 0x0000000103fcbd60 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 13 +Address: 0x000000010400bd68 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 28 +Address: 0x000000010421a77c +Refc: 1 +=fun +Module: simplifile +Uniq: 17272755 +Index: 4 +Address: 0x000000010420bf18 +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 9 +Address: 0x0000000103ecbab0 +Refc: 2 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 22 +Address: 0x00000001040ddba0 +Refc: 2 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 22 +Address: 0x0000000104161834 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 19 +Address: 0x0000000103eb17a0 +Refc: 1 +=fun +Module: erl_features +Uniq: 44278689 +Index: 16 +Address: 0x0000000103fb9a90 +Refc: 1 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 5 +Address: 0x0000000104147070 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 46 +Address: 0x0000000103e76148 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 11 +Address: 0x000000010414c1f8 +Refc: 1 +=fun +Module: code_server +Uniq: 111287289 +Index: 1 +Address: 0x0000000103ef3cdc +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 42 +Address: 0x0000000103eb0180 +Refc: 1 +=fun +Module: 'showtime@internal@reports@formatter' +Uniq: 1772858 +Index: 0 +Address: 0x0000000104228478 +Refc: 1 +=fun +Module: inet +Uniq: 65562377 +Index: 0 +Address: 0x0000000103fe5770 +Refc: 2 +=fun +Module: 'showtime@internal@erlang@discover' +Uniq: 110023186 +Index: 6 +Address: 0x00000001042089a0 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 17 +Address: 0x0000000103e79568 +Refc: 1 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 16 +Address: 0x00000001041590ac +Refc: 1 +=fun +Module: 'gleam@erlang@process' +Uniq: 28255578 +Index: 9 +Address: 0x00000001041fbf24 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 72 +Address: 0x0000000103e74008 +Refc: 2 +=fun +Module: epp +Uniq: 124355082 +Index: 3 +Address: 0x00000001040fc6d8 +Refc: 2 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 9 +Address: 0x00000001040d68d8 +Refc: 2 +=fun +Module: ets +Uniq: 30908443 +Index: 12 +Address: 0x0000000103e3b9c8 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 8 +Address: 0x0000000103eb2270 +Refc: 1 +=fun +Module: 'gleam@otp@actor' +Uniq: 90500110 +Index: 4 +Address: 0x00000001041f9900 +Refc: 1 +=fun +Module: c +Uniq: 124725464 +Index: 10 +Address: 0x00000001040cb5a0 +Refc: 2 +=fun +Module: raw_file_io +Uniq: 101053602 +Index: 3 +Address: 0x00000001040d078c +Refc: 1 +=fun +Module: 'glint@flag@constraint' +Uniq: 83988546 +Index: 4 +Address: 0x000000010414e828 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 51 +Address: 0x0000000103e75da0 +Refc: 1 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 17 +Address: 0x0000000103dccca4 +Refc: 1 +=fun +Module: unicode +Uniq: 54664399 +Index: 11 +Address: 0x0000000103fb20f8 +Refc: 2 +=fun +Module: rand +Uniq: 65977474 +Index: 2 +Address: 0x000000010402a688 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 106 +Address: 0x0000000103e71bb4 +Refc: 1 +=fun +Module: global +Uniq: 100333677 +Index: 24 +Address: 0x000000010400a70c +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 11 +Address: 0x000000010421c938 +Refc: 1 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 5 +Address: 0x0000000104160ba0 +Refc: 1 +=fun +Module: init +Uniq: 72673429 +Index: 6 +Address: 0x0000000103d94344 +Refc: 1 +=fun +Module: inet_parse +Uniq: 131529883 +Index: 2 +Address: 0x0000000103feef48 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 93 +Address: 0x0000000103e719a8 +Refc: 2 +=fun +Module: file_io_server +Uniq: 82162284 +Index: 0 +Address: 0x0000000103e92c3c +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 6 +Address: 0x000000010414c8a0 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 37 +Address: 0x0000000103eb044c +Refc: 1 +=fun +Module: showtime +Uniq: 22478307 +Index: 1 +Address: 0x000000010413fc90 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 45 +Address: 0x000000010421ccac +Refc: 1 +=fun +Module: rpc +Uniq: 70687560 +Index: 3 +Address: 0x0000000103ff5ec0 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 4 +Address: 0x0000000103e7bd08 +Refc: 2 +=fun +Module: inet_config +Uniq: 64624012 +Index: 2 +Address: 0x0000000103fd3bd8 +Refc: 2 +=fun +Module: 'day7@solve' +Uniq: 118915376 +Index: 7 +Address: 0x0000000104224294 +Refc: 1 +=fun +Module: code +Uniq: 38778589 +Index: 9 +Address: 0x0000000103e224e8 +Refc: 1 +=fun +Module: unicode +Uniq: 54664399 +Index: 16 +Address: 0x0000000103fb50c8 +Refc: 2 +=fun +Module: net_kernel +Uniq: 105284444 +Index: 0 +Address: 0x0000000104021170 +Refc: 2 +=fun +Module: gen_server +Uniq: 22931368 +Index: 1 +Address: 0x0000000103f22dc0 +Refc: 1 +=fun +Module: global +Uniq: 100333677 +Index: 5 +Address: 0x000000010400c698 +Refc: 2 +=fun +Module: gen_statem +Uniq: 58250722 +Index: 1 +Address: 0x0000000104068198 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 20 +Address: 0x000000010421a5b4 +Refc: 1 +=fun +Module: ets +Uniq: 30908443 +Index: 3 +Address: 0x0000000103e3c4b4 +Refc: 1 +=fun +Module: erl_init +Uniq: 96508615 +Index: 1 +Address: 0x0000000103d86030 +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 1 +Address: 0x0000000103ecc578 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 27 +Address: 0x0000000103eb0e60 +Refc: 1 +=fun +Module: glint +Uniq: 18128761 +Index: 11 +Address: 0x0000000104153890 +Refc: 1 +=fun +Module: 'gleam@set' +Uniq: 15699406 +Index: 4 +Address: 0x000000010414f0e8 +Refc: 2 +=fun +Module: showtime_ffi +Uniq: 122038219 +Index: 3 +Address: 0x0000000104221048 +Refc: 2 +=fun +Module: logger_server +Uniq: 19349920 +Index: 4 +Address: 0x0000000103e87b6c +Refc: 1 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 13 +Address: 0x00000001041469c0 +Refc: 2 +=fun +Module: maps +Uniq: 48010870 +Index: 4 +Address: 0x0000000104036c00 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 38 +Address: 0x0000000103e76410 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 19 +Address: 0x000000010414be68 +Refc: 2 +=fun +Module: 'showtime@internal@reports@formatter' +Uniq: 1772858 +Index: 8 +Address: 0x00000001042272b0 +Refc: 2 +=fun +Module: rand +Uniq: 65977474 +Index: 15 +Address: 0x000000010402d1b8 +Refc: 2 +=fun +Module: peer +Uniq: 34337805 +Index: 2 +Address: 0x0000000103f8d1bc +Refc: 1 +=fun +Module: inet +Uniq: 65562377 +Index: 8 +Address: 0x0000000103fe5440 +Refc: 2 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 8 +Address: 0x0000000104158898 +Refc: 2 +=fun +Module: ssl_config +Uniq: 64895055 +Index: 2 +Address: 0x00000001041342d0 +Refc: 2 +=fun +Module: 'gleam@erlang@process' +Uniq: 28255578 +Index: 1 +Address: 0x00000001041fc674 +Refc: 3 +=fun +Module: proc_lib +Uniq: 54621022 +Index: 2 +Address: 0x0000000103e9c318 +Refc: 1 +=fun +Module: erl_features +Uniq: 44278689 +Index: 14 +Address: 0x0000000103fb9744 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 64 +Address: 0x0000000103e7502c +Refc: 1 +=fun +Module: supervisor +Uniq: 63985753 +Index: 11 +Address: 0x0000000103e4c1a8 +Refc: 2 +=fun +Module: erl_parse +Uniq: 57550649 +Index: 11 +Address: 0x0000000103f59038 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 48 +Address: 0x0000000103eafe0c +Refc: 1 +=fun +Module: erl_prim_loader +Uniq: 11574866 +Index: 0 +Address: 0x0000000103de2638 +Refc: 1 +=fun +Module: c +Uniq: 124725464 +Index: 2 +Address: 0x00000001040cbd30 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 11 +Address: 0x0000000103e79e60 +Refc: 1 +=fun +Module: httpc +Uniq: 36342138 +Index: 0 +Address: 0x000000010410a6ac +Refc: 1 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 9 +Address: 0x0000000103dcd540 +Refc: 1 +=fun +Module: global_group +Uniq: 133931896 +Index: 6 +Address: 0x00000001040436c4 +Refc: 1 +=fun +Module: unicode +Uniq: 54664399 +Index: 3 +Address: 0x0000000103fb3328 +Refc: 2 +=fun +Module: rand +Uniq: 65977474 +Index: 26 +Address: 0x000000010402de38 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 98 +Address: 0x0000000103e711b8 +Refc: 2 +=fun +Module: inet_db +Uniq: 46329474 +Index: 8 +Address: 0x0000000103fce290 +Refc: 1 +=fun +Module: global +Uniq: 100333677 +Index: 16 +Address: 0x000000010400ba50 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 3 +Address: 0x0000000104217380 +Refc: 2 +=fun +Module: application_controller +Uniq: 5142319 +Index: 22 +Address: 0x0000000103ecae38 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 22 +Address: 0x0000000103eb0038 +Refc: 2 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 19 +Address: 0x00000001040dd0d8 +Refc: 2 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 2 +Address: 0x00000001041415b0 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 85 +Address: 0x0000000103e723b0 +Refc: 1 +=fun +Module: user_drv +Uniq: 115201613 +Index: 0 +Address: 0x0000000104059448 +Refc: 2 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 14 +Address: 0x000000010414c140 +Refc: 2 +=fun +Module: code_server +Uniq: 111287289 +Index: 14 +Address: 0x0000000103ef2608 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 45 +Address: 0x0000000103eb14b8 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 37 +Address: 0x000000010421bc80 +Refc: 1 +=fun +Module: inet +Uniq: 65562377 +Index: 5 +Address: 0x0000000103fe55b0 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 28 +Address: 0x0000000103e773b4 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 32 +Address: 0x000000010414b0a0 +Refc: 2 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 6 +Address: 0x00000001040d54e8 +Refc: 2 +=fun +Module: ets +Uniq: 30908443 +Index: 11 +Address: 0x0000000103e3bce8 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 3 +Address: 0x0000000103eb29a8 +Refc: 1 +=fun +Module: glint +Uniq: 18128761 +Index: 3 +Address: 0x0000000104153b80 +Refc: 1 +=fun +Module: 'glint@flag@constraint' +Uniq: 83988546 +Index: 1 +Address: 0x000000010414e3a0 +Refc: 1 +=fun +Module: 'gleam@otp@actor' +Uniq: 90500110 +Index: 3 +Address: 0x00000001041f9964 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 62 +Address: 0x0000000103e751d8 +Refc: 2 +=fun +Module: group +Uniq: 88293013 +Index: 1 +Address: 0x00000001040889e8 +Refc: 2 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 27 +Address: 0x000000010414a8d0 +Refc: 2 +=fun +Module: rand +Uniq: 65977474 +Index: 7 +Address: 0x0000000104029fb8 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 35 +Address: 0x000000010400b0f4 +Refc: 1 +=fun +Module: kernel_refc +Uniq: 28224509 +Index: 0 +Address: 0x00000001040b0eb8 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 14 +Address: 0x000000010421c150 +Refc: 1 +=fun +Module: filelib +Uniq: 94480894 +Index: 0 +Address: 0x0000000104214c18 +Refc: 2 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 8 +Address: 0x0000000104160c3c +Refc: 1 +=fun +Module: erpc +Uniq: 95647987 +Index: 0 +Address: 0x000000010404e068 +Refc: 2 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 0 +Address: 0x0000000104159620 +Refc: 2 +=fun +Module: gen_event +Uniq: 37613186 +Index: 4 +Address: 0x0000000103ee1870 +Refc: 1 +=fun +Module: init +Uniq: 72673429 +Index: 11 +Address: 0x0000000103d9368c +Refc: 1 +=fun +Module: erl_features +Uniq: 44278689 +Index: 6 +Address: 0x0000000103fb7f58 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 88 +Address: 0x0000000103e7205c +Refc: 1 +=fun +Module: supervisor +Uniq: 63985753 +Index: 3 +Address: 0x0000000103e4cdf8 +Refc: 2 +=fun +Module: erl_parse +Uniq: 57550649 +Index: 3 +Address: 0x0000000103f599d0 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 56 +Address: 0x0000000103eaf9dc +Refc: 1 +=fun +Module: erl_prim_loader +Uniq: 11574866 +Index: 8 +Address: 0x0000000103de1c68 +Refc: 1 +=fun +Module: ssl_pkix_db +Uniq: 51522903 +Index: 3 +Address: 0x000000010412a708 +Refc: 1 +=fun +Module: httpc +Uniq: 36342138 +Index: 8 +Address: 0x0000000104109d90 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 3 +Address: 0x0000000103e7bde0 +Refc: 2 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 1 +Address: 0x0000000103dcd6f0 +Refc: 1 +=fun +Module: rand +Uniq: 65977474 +Index: 18 +Address: 0x000000010402ccb8 +Refc: 2 +=fun +Module: code +Uniq: 38778589 +Index: 4 +Address: 0x0000000103e22bf0 +Refc: 2 +=fun +Module: inet_db +Uniq: 46329474 +Index: 0 +Address: 0x0000000103fcf1a0 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 8 +Address: 0x000000010400c2f4 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 27 +Address: 0x00000001042186d4 +Refc: 1 +=fun +Module: simplifile +Uniq: 17272755 +Index: 7 +Address: 0x000000010420b558 +Refc: 2 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 21 +Address: 0x00000001041616e8 +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 14 +Address: 0x0000000103ecb5dc +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 30 +Address: 0x0000000103eb0aa0 +Refc: 1 +=fun +Module: beam_lib +Uniq: 45141944 +Index: 3 +Address: 0x0000000103f99718 +Refc: 1 +=fun +Module: logger_server +Uniq: 19349920 +Index: 1 +Address: 0x0000000103e87e60 +Refc: 2 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 10 +Address: 0x0000000104146b40 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 45 +Address: 0x0000000103e5db08 +Refc: 2 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 22 +Address: 0x000000010414bcc0 +Refc: 2 +=fun +Module: 'showtime@internal@reports@formatter' +Uniq: 1772858 +Index: 3 +Address: 0x0000000104227a80 +Refc: 2 +=fun +Module: code_server +Uniq: 111287289 +Index: 6 +Address: 0x0000000103ef2c18 +Refc: 1 +=fun +Module: prim_inet +Uniq: 37477703 +Index: 1 +Address: 0x0000000103dae5d8 +Refc: 1 +=fun +Module: 'showtime@internal@erlang@discover' +Uniq: 110023186 +Index: 3 +Address: 0x0000000104208f10 +Refc: 2 +=fun +Module: inet +Uniq: 65562377 +Index: 13 +Address: 0x0000000103fe4d74 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 20 +Address: 0x0000000103e78078 +Refc: 1 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 19 +Address: 0x0000000104159418 +Refc: 1 +=fun +Module: io_lib +Uniq: 6600873 +Index: 1 +Address: 0x0000000104096af8 +Refc: 2 +=fun +Module: 'gleam@erlang@process' +Uniq: 28255578 +Index: 10 +Address: 0x00000001041fbd40 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 79 +Address: 0x0000000103e727e8 +Refc: 2 +=fun +Module: epp +Uniq: 124355082 +Index: 6 +Address: 0x00000001040fc194 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 40 +Address: 0x000000010414c5c8 +Refc: 2 +=fun +Module: erl_parse +Uniq: 57550649 +Index: 12 +Address: 0x0000000103f58f90 +Refc: 2 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 14 +Address: 0x00000001040d8d20 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 11 +Address: 0x0000000103eb1ee0 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 54 +Address: 0x0000000103e75b08 +Refc: 1 +=fun +Module: httpc +Uniq: 36342138 +Index: 5 +Address: 0x0000000104109fe8 +Refc: 2 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 14 +Address: 0x0000000103dccf78 +Refc: 1 +=fun +Module: standard_error +Uniq: 123115530 +Index: 1 +Address: 0x0000000103fbd320 +Refc: 2 +=fun +Module: prim_zip +Uniq: 66112146 +Index: 0 +Address: 0x0000000103dd5c18 +Refc: 1 +=fun +Module: unicode +Uniq: 54664399 +Index: 14 +Address: 0x0000000103fb4a80 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 105 +Address: 0x0000000103e70d50 +Refc: 1 +=fun +Module: global +Uniq: 100333677 +Index: 27 +Address: 0x000000010400a268 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 6 +Address: 0x000000010421cf98 +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 19 +Address: 0x0000000103ec7778 +Refc: 2 +=fun +Module: 'gleam@erlang' +Uniq: 90512636 +Index: 1 +Address: 0x0000000104140be8 +Refc: 1 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 0 +Address: 0x0000000104161920 +Refc: 1 +=fun +Module: init +Uniq: 72673429 +Index: 3 +Address: 0x0000000103d94690 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 80 +Address: 0x0000000103e727a8 +Refc: 1 +=fun +Module: inet_parse +Uniq: 131529883 +Index: 5 +Address: 0x0000000103feeb18 +Refc: 2 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 5 +Address: 0x000000010414c954 +Refc: 1 +=fun +Module: code_server +Uniq: 111287289 +Index: 11 +Address: 0x0000000103ef26f8 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 32 +Address: 0x0000000103eb0880 +Refc: 1 +=fun +Module: showtime +Uniq: 22478307 +Index: 4 +Address: 0x000000010413f850 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 40 +Address: 0x000000010421c70c +Refc: 1 +=fun +Module: rpc +Uniq: 70687560 +Index: 6 +Address: 0x0000000103ff5c50 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 27 +Address: 0x0000000103e773e8 +Refc: 2 +=fun +Module: inet_config +Uniq: 64624012 +Index: 1 +Address: 0x0000000103fd3c68 +Refc: 2 +=fun +Module: 'day7@solve' +Uniq: 118915376 +Index: 0 +Address: 0x00000001042230d8 +Refc: 2 +=fun +Module: unicode +Uniq: 54664399 +Index: 19 +Address: 0x0000000103fb4af0 +Refc: 2 +=fun +Module: net_kernel +Uniq: 105284444 +Index: 5 +Address: 0x0000000104020da8 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 0 +Address: 0x0000000104006d40 +Refc: 2 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 39 +Address: 0x000000010414c4e0 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 19 +Address: 0x000000010421a688 +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 6 +Address: 0x0000000103ecc408 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 6 +Address: 0x0000000103eb2520 +Refc: 1 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 3 +Address: 0x00000001040dfb40 +Refc: 2 +=fun +Module: glint +Uniq: 18128761 +Index: 6 +Address: 0x0000000104153a40 +Refc: 2 +=fun +Module: ets +Uniq: 30908443 +Index: 6 +Address: 0x0000000103e3c0b4 +Refc: 1 +=fun +Module: showtime_ffi +Uniq: 122038219 +Index: 4 +Address: 0x0000000104221600 +Refc: 1 +=fun +Module: 'gleam@set' +Uniq: 15699406 +Index: 1 +Address: 0x000000010414fb08 +Refc: 1 +=fun +Module: logger_server +Uniq: 19349920 +Index: 9 +Address: 0x0000000103e87c4c +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 37 +Address: 0x0000000103e766d4 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 30 +Address: 0x000000010414ad80 +Refc: 2 +=fun +Module: rand +Uniq: 65977474 +Index: 8 +Address: 0x000000010402a380 +Refc: 2 +=fun +Module: 'showtime@internal@reports@formatter' +Uniq: 1772858 +Index: 11 +Address: 0x00000001042267c0 +Refc: 2 +=fun +Module: peer +Uniq: 34337805 +Index: 5 +Address: 0x0000000103f8cbb8 +Refc: 1 +=fun +Module: 'showtime@internal@erlang@event_handler' +Uniq: 124289607 +Index: 1 +Address: 0x00000001041f7b38 +Refc: 2 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 53 +Address: 0x000000010421d498 +Refc: 2 +=fun +Module: prim_tty +Uniq: 75477062 +Index: 0 +Address: 0x0000000104078e08 +Refc: 2 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 15 +Address: 0x0000000104161198 +Refc: 1 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 11 +Address: 0x0000000104158b30 +Refc: 1 +=fun +Module: 'gleam@erlang@process' +Uniq: 28255578 +Index: 2 +Address: 0x00000001041fc5a8 +Refc: 2 +=fun +Module: erl_features +Uniq: 44278689 +Index: 11 +Address: 0x0000000103fb9ac0 +Refc: 2 +=fun +Module: inet_parse +Uniq: 131529883 +Index: 8 +Address: 0x0000000103fee890 +Refc: 2 +=fun +Module: gen +Uniq: 105431365 +Index: 3 +Address: 0x0000000103e0fda0 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 71 +Address: 0x0000000103e740a8 +Refc: 2 +=fun +Module: logger_simple_h +Uniq: 105730862 +Index: 0 +Address: 0x0000000103efcfa8 +Refc: 1 +=fun +Module: application_master +Uniq: 24509285 +Index: 0 +Address: 0x0000000103eb8b40 +Refc: 2 +=fun +Module: supervisor +Uniq: 63985753 +Index: 8 +Address: 0x0000000103e4c450 +Refc: 2 +=fun +Module: erl_parse +Uniq: 57550649 +Index: 4 +Address: 0x0000000103f5999c +Refc: 1 +=fun +Module: logger_olp +Uniq: 51656710 +Index: 0 +Address: 0x0000000103f785c4 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 51 +Address: 0x0000000103eafbb8 +Refc: 1 +=fun +Module: gleam_stdlib +Uniq: 79074729 +Index: 2 +Address: 0x000000010416a7d0 +Refc: 2 +=fun +Module: erl_prim_loader +Uniq: 11574866 +Index: 3 +Address: 0x0000000103de25dc +Refc: 1 +=fun +Module: c +Uniq: 124725464 +Index: 5 +Address: 0x00000001040cbd00 +Refc: 1 +=fun +Module: file_server +Uniq: 30066188 +Index: 1 +Address: 0x0000000103e075a8 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 14 +Address: 0x0000000103e798f0 +Refc: 2 +=fun +Module: httpc +Uniq: 36342138 +Index: 13 +Address: 0x00000001041099c0 +Refc: 2 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 6 +Address: 0x0000000103dcd3f0 +Refc: 1 +=fun +Module: global_group +Uniq: 133931896 +Index: 5 +Address: 0x000000010404343c +Refc: 1 +=fun +Module: rand +Uniq: 65977474 +Index: 23 +Address: 0x000000010402bd10 +Refc: 2 +=fun +Module: unicode +Uniq: 54664399 +Index: 6 +Address: 0x0000000103fb52d0 +Refc: 2 +=fun +Module: net_kernel +Uniq: 105284444 +Index: 10 +Address: 0x0000000104020afc +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 97 +Address: 0x0000000103e71348 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 19 +Address: 0x000000010400b128 +Refc: 2 +=fun +Module: simplifile +Uniq: 17272755 +Index: 10 +Address: 0x000000010420c3f4 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 30 +Address: 0x000000010421a7b0 +Refc: 2 +=fun +Module: application_controller +Uniq: 5142319 +Index: 11 +Address: 0x0000000103ecb8ec +Refc: 1 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 16 +Address: 0x00000001040dc390 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 17 +Address: 0x0000000103eb193c +Refc: 1 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 7 +Address: 0x0000000104146d4c +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 40 +Address: 0x0000000103e7630c +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 13 +Address: 0x000000010414c768 +Refc: 1 +=fun +Module: code_server +Uniq: 111287289 +Index: 3 +Address: 0x0000000103eea438 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 40 +Address: 0x0000000103eb0284 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 32 +Address: 0x000000010421aa88 +Refc: 1 +=fun +Module: inet +Uniq: 65562377 +Index: 6 +Address: 0x0000000103fe54e8 +Refc: 2 +=fun +Module: 'showtime@internal@erlang@discover' +Uniq: 110023186 +Index: 4 +Address: 0x0000000104208edc +Refc: 1 +=fun +Module: error_logger +Uniq: 17945318 +Index: 0 +Address: 0x0000000103ef7a38 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 19 +Address: 0x0000000103e78a98 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 74 +Address: 0x0000000103e73c34 +Refc: 1 +=fun +Module: epp +Uniq: 124355082 +Index: 1 +Address: 0x00000001040fcb34 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 14 +Address: 0x0000000103eb1bc4 +Refc: 1 +=fun +Module: erl_scan +Uniq: 115441844 +Index: 11 +Address: 0x00000001040d6c98 +Refc: 2 +=fun +Module: ets +Uniq: 30908443 +Index: 14 +Address: 0x0000000103e3b5e4 +Refc: 1 +=fun +Module: raw_file_io +Uniq: 101053602 +Index: 1 +Address: 0x00000001040d03f8 +Refc: 2 +=fun +Module: 'gleam@otp@actor' +Uniq: 90500110 +Index: 6 +Address: 0x00000001041f97e0 +Refc: 2 +=fun +Module: c +Uniq: 124725464 +Index: 8 +Address: 0x00000001040cb948 +Refc: 2 +=fun +Module: 'aoc2023@@main' +Uniq: 70697990 +Index: 1 +Address: 0x00000001040ea940 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 61 +Address: 0x0000000103e75758 +Refc: 1 +=fun +Module: group +Uniq: 88293013 +Index: 2 +Address: 0x00000001040888b8 +Refc: 2 +=fun +Module: global_group +Uniq: 133931896 +Index: 8 +Address: 0x0000000104043710 +Refc: 2 +=fun +Module: rand +Uniq: 65977474 +Index: 0 +Address: 0x0000000104029e40 +Refc: 2 +=fun +Module: unicode +Uniq: 54664399 +Index: 9 +Address: 0x0000000103fb1c48 +Refc: 2 +=fun +Module: prim_zip +Uniq: 66112146 +Index: 5 +Address: 0x0000000103dd5b24 +Refc: 1 +=fun +Module: global +Uniq: 100333677 +Index: 30 +Address: 0x0000000104009ea4 +Refc: 1 +=fun +Module: file +Uniq: 1459081 +Index: 1 +Address: 0x0000000103e195bc +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 13 +Address: 0x000000010421c3f8 +Refc: 1 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 7 +Address: 0x0000000104160a5c +Refc: 1 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 3 +Address: 0x0000000104155ac0 +Refc: 2 +=fun +Module: gen_event +Uniq: 37613186 +Index: 1 +Address: 0x0000000103ee21ac +Refc: 1 +=fun +Module: init +Uniq: 72673429 +Index: 8 +Address: 0x0000000103d939d8 +Refc: 1 +=fun +Module: erl_features +Uniq: 44278689 +Index: 3 +Address: 0x0000000103fb9fc4 +Refc: 1 +=fun +Module: inet_parse +Uniq: 131529883 +Index: 0 +Address: 0x0000000103fef1a0 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 95 +Address: 0x0000000103e715a8 +Refc: 2 +=fun +Module: supervisor +Uniq: 63985753 +Index: 0 +Address: 0x0000000103e4d260 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 59 +Address: 0x0000000103eaf728 +Refc: 2 +=fun +Module: erl_prim_loader +Uniq: 11574866 +Index: 11 +Address: 0x0000000103de1958 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 47 +Address: 0x000000010421d030 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 66 +Address: 0x0000000103eaeca8 +Refc: 2 +=fun +Module: rpc +Uniq: 70687560 +Index: 1 +Address: 0x0000000103ff617c +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 6 +Address: 0x0000000103e7b800 +Refc: 2 +=fun +Module: timer +Uniq: 46706930 +Index: 1 +Address: 0x00000001040ad644 +Refc: 1 +=fun +Module: inet_config +Uniq: 64624012 +Index: 4 +Address: 0x0000000103fd3ab8 +Refc: 2 +=fun +Module: kernel_config +Uniq: 90805894 +Index: 0 +Address: 0x00000001040af678 +Refc: 2 +=fun +Module: 'day7@solve' +Uniq: 118915376 +Index: 5 +Address: 0x00000001042240b8 +Refc: 2 +=fun +Module: code +Uniq: 38778589 +Index: 7 +Address: 0x0000000103e225d8 +Refc: 1 +=fun +Module: net_kernel +Uniq: 105284444 +Index: 2 +Address: 0x0000000104020ed0 +Refc: 2 +=fun +Module: inet_db +Uniq: 46329474 +Index: 5 +Address: 0x0000000103fce8b0 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 11 +Address: 0x000000010400c078 +Refc: 2 +=fun +Module: simplifile +Uniq: 17272755 +Index: 2 +Address: 0x000000010420bb20 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 22 +Address: 0x000000010421a02c +Refc: 1 +=fun +Module: application_controller +Uniq: 5142319 +Index: 3 +Address: 0x0000000103ecc3d4 +Refc: 1 +=fun +Module: httpc_manager +Uniq: 90163599 +Index: 1 +Address: 0x0000000104112fb0 +Refc: 2 +=fun +Module: glint +Uniq: 18128761 +Index: 13 +Address: 0x00000001041514f0 +Refc: 2 +=fun +Module: 'gleam@function' +Uniq: 127819290 +Index: 16 +Address: 0x000000010416125c +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 25 +Address: 0x0000000103eb1130 +Refc: 1 +=fun +Module: showtime_ffi +Uniq: 122038219 +Index: 1 +Address: 0x0000000104221320 +Refc: 2 +=fun +Module: logger_server +Uniq: 19349920 +Index: 6 +Address: 0x0000000103e87a20 +Refc: 1 +=fun +Module: 'gleam@list' +Uniq: 42440854 +Index: 15 +Address: 0x0000000104146890 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 32 +Address: 0x0000000103e7697c +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 21 +Address: 0x000000010414bd40 +Refc: 2 +=fun +Module: 'showtime@internal@reports@formatter' +Uniq: 1772858 +Index: 6 +Address: 0x0000000104227820 +Refc: 2 +=fun +Module: rand +Uniq: 65977474 +Index: 13 +Address: 0x000000010402ae18 +Refc: 2 +=fun +Module: peer +Uniq: 34337805 +Index: 0 +Address: 0x0000000103f8df08 +Refc: 2 +=fun +Module: inet +Uniq: 65562377 +Index: 14 +Address: 0x0000000103fe494c +Refc: 1 +=fun +Module: 'gleam_community@colour' +Uniq: 92289676 +Index: 14 +Address: 0x0000000104158e68 +Refc: 1 +=fun +Module: ssl_config +Uniq: 64895055 +Index: 0 +Address: 0x0000000104134808 +Refc: 1 +=fun +Module: erl_features +Uniq: 44278689 +Index: 12 +Address: 0x0000000103fb9988 +Refc: 2 +=fun +Module: proc_lib +Uniq: 54621022 +Index: 0 +Address: 0x0000000103e9c590 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 66 +Address: 0x0000000103e745b0 +Refc: 2 +=fun +Module: supervisor +Uniq: 63985753 +Index: 13 +Address: 0x0000000103e4c0e8 +Refc: 1 +=fun +Module: erl_parse +Uniq: 57550649 +Index: 9 +Address: 0x0000000103f59274 +Refc: 1 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 54 +Address: 0x0000000103eafb40 +Refc: 1 +=fun +Module: erl_prim_loader +Uniq: 11574866 +Index: 6 +Address: 0x0000000103de2310 +Refc: 1 +=fun +Module: logger_std_h +Uniq: 4673888 +Index: 1 +Address: 0x00000001040bcad8 +Refc: 3 +=fun +Module: c +Uniq: 124725464 +Index: 0 +Address: 0x00000001040cbe98 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 53 +Address: 0x0000000103e75c2c +Refc: 1 +=fun +Module: httpc +Uniq: 36342138 +Index: 2 +Address: 0x000000010410a368 +Refc: 2 +=fun +Module: httpc_cookie +Uniq: 22295768 +Index: 1 +Address: 0x000000010411a368 +Refc: 1 +=fun +Module: prim_socket +Uniq: 51104894 +Index: 11 +Address: 0x0000000103dcd030 +Refc: 1 +=fun +Module: global_group +Uniq: 133931896 +Index: 0 +Address: 0x0000000104040ec0 +Refc: 2 +=fun +Module: unicode +Uniq: 54664399 +Index: 1 +Address: 0x0000000103fb4488 +Refc: 2 +=fun +Module: rand +Uniq: 65977474 +Index: 24 +Address: 0x000000010402df10 +Refc: 2 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 108 +Address: 0x0000000103e75f08 +Refc: 2 +=fun +Module: inet_db +Uniq: 46329474 +Index: 10 +Address: 0x0000000103fcd590 +Refc: 2 +=fun +Module: global +Uniq: 100333677 +Index: 22 +Address: 0x000000010400aa90 +Refc: 1 +=fun +Module: 'gleam@dynamic' +Uniq: 70964574 +Index: 5 +Address: 0x000000010421d170 +Refc: 1 +=fun +Module: ets +Uniq: 30908443 +Index: 16 +Address: 0x0000000103e39768 +Refc: 2 +=fun +Module: application_controller +Uniq: 5142319 +Index: 16 +Address: 0x0000000103ecb478 +Refc: 2 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 20 +Address: 0x0000000103eb16e8 +Refc: 1 +=fun +Module: 'gleam@result' +Uniq: 44749367 +Index: 1 +Address: 0x000000010415fa08 +Refc: 2 +=fun +Module: init +Uniq: 72673429 +Index: 0 +Address: 0x0000000103d87d10 +Refc: 1 +=fun +Module: user_drv +Uniq: 115201613 +Index: 2 +Address: 0x0000000104059414 +Refc: 1 +=fun +Module: erl_lint +Uniq: 64115739 +Index: 87 +Address: 0x0000000103e72264 +Refc: 1 +=fun +Module: 'glint@flag' +Uniq: 25615327 +Index: 0 +Address: 0x000000010414cbe0 +Refc: 2 +=fun +Module: code_server +Uniq: 111287289 +Index: 8 +Address: 0x0000000103ef2aa8 +Refc: 4 +=fun +Module: erl_eval +Uniq: 125776118 +Index: 35 +Address: 0x0000000103eb05c8 +Refc: 1 +=fun +Module: gleam_erlang_ffi +Uniq: 130811285 +Index: 2 +Address: 0x00000001042005cc +Refc: 1 +=proc_stack:<0.0.0> +y0:H105DD6AD8 +y1:SCatch 0x3DE8204 (erlang:halt/1 + 156) +0x0000000105dda900:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.0.0> +105DD6AD8:lI82|H105DD6AE8 +105DD6AE8:lI117|H105DD6AF8 +105DD6AF8:lI110|H105DD6B08 +105DD6B08:lI116|H105DD6B18 +105DD6B18:lI105|H105DD6B28 +105DD6B28:lI109|H105DD6B38 +105DD6B38:lI101|H105DD6B48 +105DD6B48:lI32|H105DD6B58 +105DD6B58:lI116|H105DD6B68 +105DD6B68:lI101|H105DD6B78 +105DD6B78:lI114|H105DD6B88 +105DD6B88:lI109|H105DD6B98 +105DD6B98:lI105|H105DD6BA8 +105DD6BA8:lI110|H105DD6BB8 +105DD6BB8:lI97|H105DD6BC8 +105DD6BC8:lI116|H105DD6BD8 +105DD6BD8:lI105|H105DD6BE8 +105DD6BE8:lI110|H105DD6BF8 +105DD6BF8:lI103|H105DD6C08 +105DD6C08:lI32|H105DD6C18 +105DD6C18:lI100|H105DD6C28 +105DD6C28:lI117|H105DD6C38 +105DD6C38:lI114|H105DD6C48 +105DD6C48:lI105|H105DD6C58 +105DD6C58:lI110|H105DD6C68 +105DD6C68:lI103|H105DD6C78 +105DD6C78:lI32|H105DD6C88 +105DD6C88:lI98|H105DD6C98 +105DD6C98:lI111|H105DD6CA8 +105DD6CA8:lI111|H105DD6CB8 +105DD6CB8:lI116|H105DD6AC8 +105DD6AC8:lI32|H105DD6AB8 +105DD6AB8:lI40|H105DD5838 +105DD5838:lI123|H105DD5848 +105DD5848:lI44|H105DD5858 +105DD5858:lI91|H105DD5868 +105DD5868:lI123|H105DD5878 +105DD5878:lI115|H105DD5888 +105DD5888:lI104|H105DD5898 +105DD5898:lI111|H105DD58A8 +105DD58A8:lI119|H105DD58B8 +105DD58B8:lI116|H105DD58C8 +105DD58C8:lI105|H105DD58D8 +105DD58D8:lI109|H105DD58E8 +105DD58E8:lI101|H105DD58F8 +105DD58F8:lI64|H105DD5908 +105DD5908:lI105|H105DD5918 +105DD5918:lI110|H105DD5928 +105DD5928:lI116|H105DD5938 +105DD5938:lI101|H105DD5948 +105DD5948:lI114|H105DD5958 +105DD5958:lI110|H105DD5968 +105DD5968:lI97|H105DD5978 +105DD5978:lI108|H105DD5988 +105DD5988:lI64|H105DD5998 +105DD5998:lI114|H105DD59A8 +105DD59A8:lI101|H105DD59B8 +105DD59B8:lI112|H105DD59C8 +105DD59C8:lI111|H105DD59D8 +105DD59D8:lI114|H105DD59E8 +105DD59E8:lI116|H105DD59F8 +105DD59F8:lI115|H105DD5A08 +105DD5A08:lI64|H105DD5A18 +105DD5A18:lI102|H105DD5A28 +105DD5A28:lI111|H105DD5A38 +105DD5A38:lI114|H105DD5A48 +105DD5A48:lI109|H105DD5A58 +105DD5A58:lI97|H105DD5A68 +105DD5A68:lI116|H105DD5A78 +105DD5A78:lI116|H105DD5A88 +105DD5A88:lI101|H105DD5A98 +105DD5A98:lI114|H105DD5AA8 +105DD5AA8:lI44|H105DD5AB8 +105DD5AB8:lI45|H105DD5AC8 +105DD5AC8:lI99|H105DD5AD8 +105DD5AD8:lI114|H105DD5AE8 +105DD5AE8:lI101|H105DD5AF8 +105DD5AF8:lI97|H105DD5B08 +105DD5B08:lI116|H105DD5B18 +105DD5B18:lI101|H105DD5B28 +105DD5B28:lI95|H105DD5B38 +105DD5B38:lI116|H105DD5B48 +105DD5B48:lI101|H105DD5B58 +105DD5B58:lI115|H105DD5B68 +105DD5B68:lI116|H105DD5B78 +105DD5B78:lI95|H105DD5B88 +105DD5B88:lI114|H105DD5B98 +105DD5B98:lI101|H105DD5BA8 +105DD5BA8:lI112|H105DD5BB8 +105DD5BB8:lI111|H105DD5BC8 +105DD5BC8:lI114|H105DD5BD8 +105DD5BD8:lI116|H105DD5BE8 +105DD5BE8:lI47|H105DD5BF8 +105DD5BF8:lI49|H105DD5C08 +105DD5C08:lI45|H105DD5C18 +105DD5C18:lI102|H105DD5C28 +105DD5C28:lI117|H105DD5C38 +105DD5C38:lI110|H105DD5C48 +105DD5C48:lI45|H105DD5C58 +105DD5C58:lI52|H105DD5C68 +105DD5C68:lI45|H105DD5C78 +105DD5C78:lI44|H105DD5C88 +105DD5C88:lI49|H105DD5C98 +105DD5C98:lI44|H105DD5CA8 +105DD5CA8:lI91|H105DD5CB8 +105DD5CB8:lI123|H105DD5CC8 +105DD5CC8:lI95|H105DD5CD8 +105DD5CD8:lI125|H105DD5CE8 +105DD5CE8:lI44|H105DD5CF8 +105DD5CF8:lI123|H105DD5D08 +105DD5D08:lI95|H105DD5D18 +105DD5D18:lI125|H105DD5D28 +105DD5D28:lI93|H105DD5D38 +105DD5D38:lI125|H105DD5D48 +105DD5D48:lI44|H105DD5D58 +105DD5D58:lI123|H105DD5D68 +105DD5D68:lI103|H105DD5D78 +105DD5D78:lI108|H105DD5D88 +105DD5D88:lI101|H105DD5D98 +105DD5D98:lI97|H105DD5DA8 +105DD5DA8:lI109|H105DD5DB8 +105DD5DB8:lI64|H105DD5DC8 +105DD5DC8:lI108|H105DD5DD8 +105DD5DD8:lI105|H105DD5DE8 +105DD5DE8:lI115|H105DD5DF8 +105DD5DF8:lI116|H105DD5E08 +105DD5E08:lI44|H105DD5E18 +105DD5E18:lI100|H105DD5E28 +105DD5E28:lI111|H105DD5E38 +105DD5E38:lI95|H105DD5E48 +105DD5E48:lI102|H105DD5E58 +105DD5E58:lI105|H105DD5E68 +105DD5E68:lI108|H105DD5E78 +105DD5E78:lI116|H105DD5E88 +105DD5E88:lI101|H105DD5E98 +105DD5E98:lI114|H105DD5EA8 +105DD5EA8:lI95|H105DD5EB8 +105DD5EB8:lI109|H105DD5EC8 +105DD5EC8:lI97|H105DD5ED8 +105DD5ED8:lI112|H105DD5EE8 +105DD5EE8:lI44|H105DD5EF8 +105DD5EF8:lI51|H105DD5F08 +105DD5F08:lI44|H105DD5F18 +105DD5F18:lI91|H105DD5F28 +105DD5F28:lI123|H105DD5F38 +105DD5F38:lI95|H105DD5F48 +105DD5F48:lI125|H105DD5F58 +105DD5F58:lI44|H105DD5F68 +105DD5F68:lI123|H105DD5F78 +105DD5F78:lI95|H105DD5F88 +105DD5F88:lI125|H105DD5F98 +105DD5F98:lI93|H105DD5FA8 +105DD5FA8:lI125|H105DD5FB8 +105DD5FB8:lI44|H105DD5FC8 +105DD5FC8:lI123|H105DD5FD8 +105DD5FD8:lI115|H105DD5FE8 +105DD5FE8:lI104|H105DD5FF8 +105DD5FF8:lI111|H105DD6008 +105DD6008:lI119|H105DD6018 +105DD6018:lI116|H105DD6028 +105DD6028:lI105|H105DD6038 +105DD6038:lI109|H105DD6048 +105DD6048:lI101|H105DD6058 +105DD6058:lI64|H105DD6068 +105DD6068:lI105|H105DD6078 +105DD6078:lI110|H105DD6088 +105DD6088:lI116|H105DD6098 +105DD6098:lI101|H105DD60A8 +105DD60A8:lI114|H105DD60B8 +105DD60B8:lI110|H105DD60C8 +105DD60C8:lI97|H105DD60D8 +105DD60D8:lI108|H105DD60E8 +105DD60E8:lI64|H105DD60F8 +105DD60F8:lI114|H105DD6108 +105DD6108:lI101|H105DD6118 +105DD6118:lI112|H105DD6128 +105DD6128:lI111|H105DD6138 +105DD6138:lI114|H105DD6148 +105DD6148:lI116|H105DD6158 +105DD6158:lI115|H105DD6168 +105DD6168:lI64|H105DD6178 +105DD6178:lI102|H105DD6188 +105DD6188:lI111|H105DD6198 +105DD6198:lI114|H105DD61A8 +105DD61A8:lI109|H105DD61B8 +105DD61B8:lI97|H105DD61C8 +105DD61C8:lI116|H105DD61D8 +105DD61D8:lI116|H105DD61E8 +105DD61E8:lI101|H105DD61F8 +105DD61F8:lI114|H105DD6208 +105DD6208:lI44|H105DD6218 +105DD6218:lI99|H105DD6228 +105DD6228:lI114|H105DD6238 +105DD6238:lI101|H105DD6248 +105DD6248:lI97|H105DD6258 +105DD6258:lI116|H105DD6268 +105DD6268:lI101|H105DD6278 +105DD6278:lI95|H105DD6288 +105DD6288:lI116|H105DD6298 +105DD6298:lI101|H105DD62A8 +105DD62A8:lI115|H105DD62B8 +105DD62B8:lI116|H105DD62C8 +105DD62C8:lI95|H105DD62D8 +105DD62D8:lI114|H105DD62E8 +105DD62E8:lI101|H105DD62F8 +105DD62F8:lI112|H105DD6308 +105DD6308:lI111|H105DD6318 +105DD6318:lI114|H105DD6328 +105DD6328:lI116|H105DD6338 +105DD6338:lI44|H105DD6348 +105DD6348:lI49|H105DD6358 +105DD6358:lI44|H105DD6368 +105DD6368:lI91|H105DD6378 +105DD6378:lI123|H105DD6388 +105DD6388:lI95|H105DD6398 +105DD6398:lI125|H105DD63A8 +105DD63A8:lI44|H105DD63B8 +105DD63B8:lI123|H105DD63C8 +105DD63C8:lI95|H105DD63D8 +105DD63D8:lI125|H105DD63E8 +105DD63E8:lI93|H105DD63F8 +105DD63F8:lI125|H105DD6408 +105DD6408:lI44|H105DD6418 +105DD6418:lI123|H105DD6428 +105DD6428:lI115|H105DD6438 +105DD6438:lI104|H105DD6448 +105DD6448:lI111|H105DD6458 +105DD6458:lI119|H105DD6468 +105DD6468:lI116|H105DD6478 +105DD6478:lI105|H105DD6488 +105DD6488:lI109|H105DD6498 +105DD6498:lI101|H105DD64A8 +105DD64A8:lI64|H105DD64B8 +105DD64B8:lI105|H105DD64C8 +105DD64C8:lI110|H105DD64D8 +105DD64D8:lI116|H105DD64E8 +105DD64E8:lI101|H105DD64F8 +105DD64F8:lI114|H105DD6508 +105DD6508:lI110|H105DD6518 +105DD6518:lI97|H105DD6528 +105DD6528:lI108|H105DD6538 +105DD6538:lI64|H105DD6548 +105DD6548:lI101|H105DD6558 +105DD6558:lI114|H105DD6568 +105DD6568:lI108|H105DD6578 +105DD6578:lI97|H105DD6588 +105DD6588:lI110|H105DD6598 +105DD6598:lI103|H105DD65A8 +105DD65A8:lI64|H105DD65B8 +105DD65B8:lI101|H105DD65C8 +105DD65C8:lI118|H105DD65D8 +105DD65D8:lI101|H105DD65E8 +105DD65E8:lI110|H105DD65F8 +105DD65F8:lI116|H105DD6608 +105DD6608:lI95|H105DD6618 +105DD6618:lI104|H105DD6628 +105DD6628:lI97|H105DD6638 +105DD6638:lI110|H105DD6648 +105DD6648:lI100|H105DD6658 +105DD6658:lI108|H105DD6668 +105DD6668:lI101|H105DD6678 +105DD6678:lI114|H105DD6688 +105DD6688:lI44|H105DD6698 +105DD6698:lI45|H105DD66A8 +105DD66A8:lI115|H105DD66B8 +105DD66B8:lI116|H105DD66C8 +105DD66C8:lI97|H105DD66D8 +105DD66D8:lI114|H105DD66E8 +105DD66E8:lI116|H105DD66F8 +105DD66F8:lI47|H105DD6708 +105DD6708:lI48|H105DD6718 +105DD6718:lI45|H105DD6728 +105DD6728:lI102|H105DD6738 +105DD6738:lI117|H105DD6748 +105DD6748:lI110|H105DD6758 +105DD6758:lI45|H105DD6768 +105DD6768:lI49|H105DD6778 +105DD6778:lI45|H105DD6788 +105DD6788:lI44|H105DD6798 +105DD6798:lI50|H105DD67A8 +105DD67A8:lI44|H105DD67B8 +105DD67B8:lI91|H105DD67C8 +105DD67C8:lI123|H105DD67D8 +105DD67D8:lI95|H105DD67E8 +105DD67E8:lI125|H105DD67F8 +105DD67F8:lI44|H105DD6808 +105DD6808:lI123|H105DD6818 +105DD6818:lI95|H105DD6828 +105DD6828:lI125|H105DD6838 +105DD6838:lI93|H105DD6848 +105DD6848:lI125|H105DD6858 +105DD6858:lI44|H105DD6868 +105DD6868:lI123|H105DD6878 +105DD6878:lI103|H105DD6888 +105DD6888:lI108|H105DD6898 +105DD6898:lI101|H105DD68A8 +105DD68A8:lI97|H105DD68B8 +105DD68B8:lI109|H105DD68C8 +105DD68C8:lI64|H105DD68D8 +105DD68D8:lI111|H105DD68E8 +105DD68E8:lI116|H105DD68F8 +105DD68F8:lI112|H105DD6908 +105DD6908:lI64|H105DD6918 +105DD6918:lI97|H105DD6928 +105DD6928:lI99|H105DD6938 +105DD6938:lI116|H105DD6948 +105DD6948:lI111|H105DD6958 +105DD6958:lI114|H105DD6968 +105DD6968:lI44|H105DD6978 +105DD6978:lI108|H105DD6988 +105DD6988:lI111|H105DD6998 +105DD6998:lI111|H105DD69A8 +105DD69A8:lI112|H105DD69B8 +105DD69B8:lI44|H105DD69C8 +105DD69C8:lI49|H105DD69D8 +105DD69D8:lI44|H105DD69E8 +105DD69E8:lI91|H105DD69F8 +105DD69F8:lI123|H105DD6A08 +105DD6A08:lI95|H105DD6A18 +105DD6A18:lI125|H105DD6A28 +105DD6A28:lI44|H105DD6A38 +105DD6A38:lI123|H105DD6A48 +105DD6A48:lI95|H105DD6A58 +105DD6A58:lI125|H105DD6A68 +105DD6A68:lI93|H105DD6A78 +105DD6A78:lI125|H105DD6A88 +105DD6A88:lI93|H105DD6A98 +105DD6A98:lI125|H105DD6AA8 +105DD6AA8:lI41|N +=proc_stack:<0.1.0> +0x0000000103149508:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.1.0> +=proc_stack:<0.2.0> +y0:N +y1:I0 +y2:I60000 +y3:N +y4:I0 +y5:H280017B40 +y6:A9:undefined +0x0000000103149c58:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.2.0> +=proc_stack:<0.3.0> +y0:N +0x000000010314b430:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.3.0> +=proc_stack:<0.4.0> +y0:N +0x000000010314bb80:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.4.0> +=proc_stack:<0.5.0> +y0:N +0x000000010314c2d0:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.5.0> +=proc_stack:<0.6.0> +0x00000001307d0900:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.6.0> +=proc_stack:<0.7.0> +y0:N +y1:N +y2:H280013CD0 +0x00000001307d1c18:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.7.0> +=proc_stack:<0.10.0> +y0:N +y1:I360000 +y2:H105E9B3B8 +y3:P<0.9.0> +y4:H105E9B368 +0x0000000105ebdd58:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.10.0> +105E9B3B8:lH105E9B3D8|H105E9B3E8 +105E9B3D8:lI47|H105E9B408 +105E9B408:lI85|H105E9B448 +105E9B448:lI115|H105E9B498 +105E9B498:lI101|H105E9B4F8 +105E9B4F8:lI114|H105E9B568 +105E9B568:lI115|H105E9B5E8 +105E9B5E8:lI47|H105E9B678 +105E9B678:lI110|H105E9B718 +105E9B718:lI105|H105E9B7C8 +105E9B7C8:lI99|H105E9B888 +105E9B888:lI104|H105E9B958 +105E9B958:lI111|H105E9BA38 +105E9BA38:lI108|H105E9BB28 +105E9BB28:lI97|H105E9BC28 +105E9BC28:lI115|H105E9BD38 +105E9BD38:lI99|H105E9BE58 +105E9BE58:lI97|H105E9BF88 +105E9BF88:lI114|H105E9C0C8 +105E9C0C8:lI108|H105E9C208 +105E9C208:lI115|H105E9C348 +105E9C348:lI111|H105E9C488 +105E9C488:lI110|H105E9C5C8 +105E9C5C8:lI47|H105E9C708 +105E9C708:lI86|H105E9C848 +105E9C848:lI83|H105E9C988 +105E9C988:lI32|H105E9CAC8 +105E9CAC8:lI67|H105E9CC08 +105E9CC08:lI111|H105E9CD48 +105E9CD48:lI100|H105E9CE88 +105E9CE88:lI101|H105E9CFC8 +105E9CFC8:lI47|H105E9D108 +105E9D108:lI65|H105E9D248 +105E9D248:lI100|H105E9D388 +105E9D388:lI118|H105E9D4C8 +105E9D4C8:lI101|H105E9D608 +105E9D608:lI110|H105E9D748 +105E9D748:lI116|H105E9D888 +105E9D888:lI79|H105E9D9C8 +105E9D9C8:lI102|H105E9DB08 +105E9DB08:lI67|H105E9DC48 +105E9DC48:lI111|H105E9DD88 +105E9DD88:lI100|H105E9DEC8 +105E9DEC8:lI101|H105E9E008 +105E9E008:lI47|H105E9E148 +105E9E148:lI97|H105E9E288 +105E9E288:lI111|H105E9E3C8 +105E9E3C8:lI99|H105E9E508 +105E9E508:lI50|H105E9E648 +105E9E648:lI48|H105E9E788 +105E9E788:lI50|H105E9E8C8 +105E9E8C8:lI51|H105E9EA08 +105E9EA08:lI47|H105E9EB48 +105E9EB48:lI98|H105E9EC88 +105E9EC88:lI117|H105E9EDC8 +105E9EDC8:lI105|H105E9EF08 +105E9EF08:lI108|H105E9F048 +105E9F048:lI100|H105E9F188 +105E9F188:lI47|H105E9F2C8 +105E9F2C8:lI100|H105E9F408 +105E9F408:lI101|H105E9F548 +105E9F548:lI118|H105E9F678 +105E9F678:lI47|H105E9F7A8 +105E9F7A8:lI101|H105E9F8D8 +105E9F8D8:lI114|H105E9FA08 +105E9FA08:lI108|H105E9FB38 +105E9FB38:lI97|H105E9FC68 +105E9FC68:lI110|H105E9FD98 +105E9FD98:lI103|H105E9FEC8 +105E9FEC8:lI47|H105E9FFF8 +105E9FFF8:lI103|H105EA0128 +105EA0128:lI108|H105EA0258 +105EA0258:lI101|H105EA0388 +105EA0388:lI97|H105EA04B8 +105EA04B8:lI109|H105EA05E8 +105EA05E8:lI95|H105EA0718 +105EA0718:lI99|H105EA0848 +105EA0848:lI111|H105EA0978 +105EA0978:lI109|H105EA0AA8 +105EA0AA8:lI109|H105EA0BD8 +105EA0BD8:lI117|H105EA0D08 +105EA0D08:lI110|H105EA0E38 +105EA0E38:lI105|H105EA0F68 +105EA0F68:lI116|H105EA1098 +105EA1098:lI121|H105EA1198 +105EA1198:lI95|H105EA1288 +105EA1288:lI97|H105EA1368 +105EA1368:lI110|H105EA1448 +105EA1448:lI115|H105EA1528 +105EA1528:lI105|H105EA15F8 +105EA15F8:lI47|H105EA16A8 +105EA16A8:lI101|H105EA1748 +105EA1748:lI98|H105EA17C8 +105EA17C8:lI105|H105EA1848 +105EA1848:lI110|N +105E9B3E8:lH105E9B418|H105E9B428 +105E9B418:lI47|H105E9B458 +105E9B458:lI85|H105E9B4A8 +105E9B4A8:lI115|H105E9B508 +105E9B508:lI101|H105E9B578 +105E9B578:lI114|H105E9B5F8 +105E9B5F8:lI115|H105E9B688 +105E9B688:lI47|H105E9B728 +105E9B728:lI110|H105E9B7D8 +105E9B7D8:lI105|H105E9B898 +105E9B898:lI99|H105E9B968 +105E9B968:lI104|H105E9BA48 +105E9BA48:lI111|H105E9BB38 +105E9BB38:lI108|H105E9BC38 +105E9BC38:lI97|H105E9BD48 +105E9BD48:lI115|H105E9BE68 +105E9BE68:lI99|H105E9BF98 +105E9BF98:lI97|H105E9C0D8 +105E9C0D8:lI114|H105E9C218 +105E9C218:lI108|H105E9C358 +105E9C358:lI115|H105E9C498 +105E9C498:lI111|H105E9C5D8 +105E9C5D8:lI110|H105E9C718 +105E9C718:lI47|H105E9C858 +105E9C858:lI86|H105E9C998 +105E9C998:lI83|H105E9CAD8 +105E9CAD8:lI32|H105E9CC18 +105E9CC18:lI67|H105E9CD58 +105E9CD58:lI111|H105E9CE98 +105E9CE98:lI100|H105E9CFD8 +105E9CFD8:lI101|H105E9D118 +105E9D118:lI47|H105E9D258 +105E9D258:lI65|H105E9D398 +105E9D398:lI100|H105E9D4D8 +105E9D4D8:lI118|H105E9D618 +105E9D618:lI101|H105E9D758 +105E9D758:lI110|H105E9D898 +105E9D898:lI116|H105E9D9D8 +105E9D9D8:lI79|H105E9DB18 +105E9DB18:lI102|H105E9DC58 +105E9DC58:lI67|H105E9DD98 +105E9DD98:lI111|H105E9DED8 +105E9DED8:lI100|H105E9E018 +105E9E018:lI101|H105E9E158 +105E9E158:lI47|H105E9E298 +105E9E298:lI97|H105E9E3D8 +105E9E3D8:lI111|H105E9E518 +105E9E518:lI99|H105E9E658 +105E9E658:lI50|H105E9E798 +105E9E798:lI48|H105E9E8D8 +105E9E8D8:lI50|H105E9EA18 +105E9EA18:lI51|H105E9EB58 +105E9EB58:lI47|H105E9EC98 +105E9EC98:lI98|H105E9EDD8 +105E9EDD8:lI117|H105E9EF18 +105E9EF18:lI105|H105E9F058 +105E9F058:lI108|H105E9F198 +105E9F198:lI100|H105E9F2D8 +105E9F2D8:lI47|H105E9F418 +105E9F418:lI100|H105E9F558 +105E9F558:lI101|H105E9F688 +105E9F688:lI118|H105E9F7B8 +105E9F7B8:lI47|H105E9F8E8 +105E9F8E8:lI101|H105E9FA18 +105E9FA18:lI114|H105E9FB48 +105E9FB48:lI108|H105E9FC78 +105E9FC78:lI97|H105E9FDA8 +105E9FDA8:lI110|H105E9FED8 +105E9FED8:lI103|H105EA0008 +105EA0008:lI47|H105EA0138 +105EA0138:lI103|H105EA0268 +105EA0268:lI108|H105EA0398 +105EA0398:lI101|H105EA04C8 +105EA04C8:lI97|H105EA05F8 +105EA05F8:lI109|H105EA0728 +105EA0728:lI95|H105EA0858 +105EA0858:lI118|H105EA0988 +105EA0988:lI101|H105EA0AB8 +105EA0AB8:lI114|H105EA0BE8 +105EA0BE8:lI115|H105EA0D18 +105EA0D18:lI105|H105EA0E48 +105EA0E48:lI111|H105EA0F78 +105EA0F78:lI110|H105EA10A8 +105EA10A8:lI47|H105EA11A8 +105EA11A8:lI101|H105EA1298 +105EA1298:lI98|H105EA1378 +105EA1378:lI105|H105EA1458 +105EA1458:lI110|N +105E9B428:lH105E9B468|H105E9B478 +105E9B468:lI47|H105E9B4B8 +105E9B4B8:lI85|H105E9B518 +105E9B518:lI115|H105E9B588 +105E9B588:lI101|H105E9B608 +105E9B608:lI114|H105E9B698 +105E9B698:lI115|H105E9B738 +105E9B738:lI47|H105E9B7E8 +105E9B7E8:lI110|H105E9B8A8 +105E9B8A8:lI105|H105E9B978 +105E9B978:lI99|H105E9BA58 +105E9BA58:lI104|H105E9BB48 +105E9BB48:lI111|H105E9BC48 +105E9BC48:lI108|H105E9BD58 +105E9BD58:lI97|H105E9BE78 +105E9BE78:lI115|H105E9BFA8 +105E9BFA8:lI99|H105E9C0E8 +105E9C0E8:lI97|H105E9C228 +105E9C228:lI114|H105E9C368 +105E9C368:lI108|H105E9C4A8 +105E9C4A8:lI115|H105E9C5E8 +105E9C5E8:lI111|H105E9C728 +105E9C728:lI110|H105E9C868 +105E9C868:lI47|H105E9C9A8 +105E9C9A8:lI86|H105E9CAE8 +105E9CAE8:lI83|H105E9CC28 +105E9CC28:lI32|H105E9CD68 +105E9CD68:lI67|H105E9CEA8 +105E9CEA8:lI111|H105E9CFE8 +105E9CFE8:lI100|H105E9D128 +105E9D128:lI101|H105E9D268 +105E9D268:lI47|H105E9D3A8 +105E9D3A8:lI65|H105E9D4E8 +105E9D4E8:lI100|H105E9D628 +105E9D628:lI118|H105E9D768 +105E9D768:lI101|H105E9D8A8 +105E9D8A8:lI110|H105E9D9E8 +105E9D9E8:lI116|H105E9DB28 +105E9DB28:lI79|H105E9DC68 +105E9DC68:lI102|H105E9DDA8 +105E9DDA8:lI67|H105E9DEE8 +105E9DEE8:lI111|H105E9E028 +105E9E028:lI100|H105E9E168 +105E9E168:lI101|H105E9E2A8 +105E9E2A8:lI47|H105E9E3E8 +105E9E3E8:lI97|H105E9E528 +105E9E528:lI111|H105E9E668 +105E9E668:lI99|H105E9E7A8 +105E9E7A8:lI50|H105E9E8E8 +105E9E8E8:lI48|H105E9EA28 +105E9EA28:lI50|H105E9EB68 +105E9EB68:lI51|H105E9ECA8 +105E9ECA8:lI47|H105E9EDE8 +105E9EDE8:lI98|H105E9EF28 +105E9EF28:lI117|H105E9F068 +105E9F068:lI105|H105E9F1A8 +105E9F1A8:lI108|H105E9F2E8 +105E9F2E8:lI100|H105E9F428 +105E9F428:lI47|H105E9F568 +105E9F568:lI100|H105E9F698 +105E9F698:lI101|H105E9F7C8 +105E9F7C8:lI118|H105E9F8F8 +105E9F8F8:lI47|H105E9FA28 +105E9FA28:lI101|H105E9FB58 +105E9FB58:lI114|H105E9FC88 +105E9FC88:lI108|H105E9FDB8 +105E9FDB8:lI97|H105E9FEE8 +105E9FEE8:lI110|H105EA0018 +105EA0018:lI103|H105EA0148 +105EA0148:lI47|H105EA0278 +105EA0278:lI97|H105EA03A8 +105EA03A8:lI100|H105EA04D8 +105EA04D8:lI103|H105EA0608 +105EA0608:lI108|H105EA0738 +105EA0738:lI101|H105EA0868 +105EA0868:lI110|H105EA0998 +105EA0998:lI116|H105EA0AC8 +105EA0AC8:lI47|H105EA0BF8 +105EA0BF8:lI101|H105EA0D28 +105EA0D28:lI98|H105EA0E58 +105EA0E58:lI105|H105EA0F88 +105EA0F88:lI110|N +105E9B478:lH105E9B4C8|H105E9B4D8 +105E9B4C8:lI47|H105E9B528 +105E9B528:lI85|H105E9B598 +105E9B598:lI115|H105E9B618 +105E9B618:lI101|H105E9B6A8 +105E9B6A8:lI114|H105E9B748 +105E9B748:lI115|H105E9B7F8 +105E9B7F8:lI47|H105E9B8B8 +105E9B8B8:lI110|H105E9B988 +105E9B988:lI105|H105E9BA68 +105E9BA68:lI99|H105E9BB58 +105E9BB58:lI104|H105E9BC58 +105E9BC58:lI111|H105E9BD68 +105E9BD68:lI108|H105E9BE88 +105E9BE88:lI97|H105E9BFB8 +105E9BFB8:lI115|H105E9C0F8 +105E9C0F8:lI99|H105E9C238 +105E9C238:lI97|H105E9C378 +105E9C378:lI114|H105E9C4B8 +105E9C4B8:lI108|H105E9C5F8 +105E9C5F8:lI115|H105E9C738 +105E9C738:lI111|H105E9C878 +105E9C878:lI110|H105E9C9B8 +105E9C9B8:lI47|H105E9CAF8 +105E9CAF8:lI86|H105E9CC38 +105E9CC38:lI83|H105E9CD78 +105E9CD78:lI32|H105E9CEB8 +105E9CEB8:lI67|H105E9CFF8 +105E9CFF8:lI111|H105E9D138 +105E9D138:lI100|H105E9D278 +105E9D278:lI101|H105E9D3B8 +105E9D3B8:lI47|H105E9D4F8 +105E9D4F8:lI65|H105E9D638 +105E9D638:lI100|H105E9D778 +105E9D778:lI118|H105E9D8B8 +105E9D8B8:lI101|H105E9D9F8 +105E9D9F8:lI110|H105E9DB38 +105E9DB38:lI116|H105E9DC78 +105E9DC78:lI79|H105E9DDB8 +105E9DDB8:lI102|H105E9DEF8 +105E9DEF8:lI67|H105E9E038 +105E9E038:lI111|H105E9E178 +105E9E178:lI100|H105E9E2B8 +105E9E2B8:lI101|H105E9E3F8 +105E9E3F8:lI47|H105E9E538 +105E9E538:lI97|H105E9E678 +105E9E678:lI111|H105E9E7B8 +105E9E7B8:lI99|H105E9E8F8 +105E9E8F8:lI50|H105E9EA38 +105E9EA38:lI48|H105E9EB78 +105E9EB78:lI50|H105E9ECB8 +105E9ECB8:lI51|H105E9EDF8 +105E9EDF8:lI47|H105E9EF38 +105E9EF38:lI98|H105E9F078 +105E9F078:lI117|H105E9F1B8 +105E9F1B8:lI105|H105E9F2F8 +105E9F2F8:lI108|H105E9F438 +105E9F438:lI100|H105E9F578 +105E9F578:lI47|H105E9F6A8 +105E9F6A8:lI100|H105E9F7D8 +105E9F7D8:lI101|H105E9F908 +105E9F908:lI118|H105E9FA38 +105E9FA38:lI47|H105E9FB68 +105E9FB68:lI101|H105E9FC98 +105E9FC98:lI114|H105E9FDC8 +105E9FDC8:lI108|H105E9FEF8 +105E9FEF8:lI97|H105EA0028 +105EA0028:lI110|H105EA0158 +105EA0158:lI103|H105EA0288 +105EA0288:lI47|H105EA03B8 +105EA03B8:lI103|H105EA04E8 +105EA04E8:lI108|H105EA0618 +105EA0618:lI101|H105EA0748 +105EA0748:lI97|H105EA0878 +105EA0878:lI109|H105EA09A8 +105EA09A8:lI95|H105EA0AD8 +105EA0AD8:lI101|H105EA0C08 +105EA0C08:lI114|H105EA0D38 +105EA0D38:lI108|H105EA0E68 +105EA0E68:lI97|H105EA0F98 +105EA0F98:lI110|H105EA10B8 +105EA10B8:lI103|H105EA11B8 +105EA11B8:lI47|H105EA12A8 +105EA12A8:lI101|H105EA1388 +105EA1388:lI98|H105EA1468 +105EA1468:lI105|H105EA1538 +105EA1538:lI110|N +105E9B4D8:lH105E9B538|H105E9B548 +105E9B538:lI47|H105E9B5A8 +105E9B5A8:lI85|H105E9B628 +105E9B628:lI115|H105E9B6B8 +105E9B6B8:lI101|H105E9B758 +105E9B758:lI114|H105E9B808 +105E9B808:lI115|H105E9B8C8 +105E9B8C8:lI47|H105E9B998 +105E9B998:lI110|H105E9BA78 +105E9BA78:lI105|H105E9BB68 +105E9BB68:lI99|H105E9BC68 +105E9BC68:lI104|H105E9BD78 +105E9BD78:lI111|H105E9BE98 +105E9BE98:lI108|H105E9BFC8 +105E9BFC8:lI97|H105E9C108 +105E9C108:lI115|H105E9C248 +105E9C248:lI99|H105E9C388 +105E9C388:lI97|H105E9C4C8 +105E9C4C8:lI114|H105E9C608 +105E9C608:lI108|H105E9C748 +105E9C748:lI115|H105E9C888 +105E9C888:lI111|H105E9C9C8 +105E9C9C8:lI110|H105E9CB08 +105E9CB08:lI47|H105E9CC48 +105E9CC48:lI86|H105E9CD88 +105E9CD88:lI83|H105E9CEC8 +105E9CEC8:lI32|H105E9D008 +105E9D008:lI67|H105E9D148 +105E9D148:lI111|H105E9D288 +105E9D288:lI100|H105E9D3C8 +105E9D3C8:lI101|H105E9D508 +105E9D508:lI47|H105E9D648 +105E9D648:lI65|H105E9D788 +105E9D788:lI100|H105E9D8C8 +105E9D8C8:lI118|H105E9DA08 +105E9DA08:lI101|H105E9DB48 +105E9DB48:lI110|H105E9DC88 +105E9DC88:lI116|H105E9DDC8 +105E9DDC8:lI79|H105E9DF08 +105E9DF08:lI102|H105E9E048 +105E9E048:lI67|H105E9E188 +105E9E188:lI111|H105E9E2C8 +105E9E2C8:lI100|H105E9E408 +105E9E408:lI101|H105E9E548 +105E9E548:lI47|H105E9E688 +105E9E688:lI97|H105E9E7C8 +105E9E7C8:lI111|H105E9E908 +105E9E908:lI99|H105E9EA48 +105E9EA48:lI50|H105E9EB88 +105E9EB88:lI48|H105E9ECC8 +105E9ECC8:lI50|H105E9EE08 +105E9EE08:lI51|H105E9EF48 +105E9EF48:lI47|H105E9F088 +105E9F088:lI98|H105E9F1C8 +105E9F1C8:lI117|H105E9F308 +105E9F308:lI105|H105E9F448 +105E9F448:lI108|H105E9F588 +105E9F588:lI100|H105E9F6B8 +105E9F6B8:lI47|H105E9F7E8 +105E9F7E8:lI100|H105E9F918 +105E9F918:lI101|H105E9FA48 +105E9FA48:lI118|H105E9FB78 +105E9FB78:lI47|H105E9FCA8 +105E9FCA8:lI101|H105E9FDD8 +105E9FDD8:lI114|H105E9FF08 +105E9FF08:lI108|H105EA0038 +105EA0038:lI97|H105EA0168 +105EA0168:lI110|H105EA0298 +105EA0298:lI103|H105EA03C8 +105EA03C8:lI47|H105EA04F8 +105EA04F8:lI103|H105EA0628 +105EA0628:lI108|H105EA0758 +105EA0758:lI105|H105EA0888 +105EA0888:lI110|H105EA09B8 +105EA09B8:lI116|H105EA0AE8 +105EA0AE8:lI47|H105EA0C18 +105EA0C18:lI101|H105EA0D48 +105EA0D48:lI98|H105EA0E78 +105EA0E78:lI105|H105EA0FA8 +105EA0FA8:lI110|N +105E9B548:lH105E9B5B8|H105E9B5C8 +105E9B5B8:lI47|H105E9B638 +105E9B638:lI85|H105E9B6C8 +105E9B6C8:lI115|H105E9B768 +105E9B768:lI101|H105E9B818 +105E9B818:lI114|H105E9B8D8 +105E9B8D8:lI115|H105E9B9A8 +105E9B9A8:lI47|H105E9BA88 +105E9BA88:lI110|H105E9BB78 +105E9BB78:lI105|H105E9BC78 +105E9BC78:lI99|H105E9BD88 +105E9BD88:lI104|H105E9BEA8 +105E9BEA8:lI111|H105E9BFD8 +105E9BFD8:lI108|H105E9C118 +105E9C118:lI97|H105E9C258 +105E9C258:lI115|H105E9C398 +105E9C398:lI99|H105E9C4D8 +105E9C4D8:lI97|H105E9C618 +105E9C618:lI114|H105E9C758 +105E9C758:lI108|H105E9C898 +105E9C898:lI115|H105E9C9D8 +105E9C9D8:lI111|H105E9CB18 +105E9CB18:lI110|H105E9CC58 +105E9CC58:lI47|H105E9CD98 +105E9CD98:lI86|H105E9CED8 +105E9CED8:lI83|H105E9D018 +105E9D018:lI32|H105E9D158 +105E9D158:lI67|H105E9D298 +105E9D298:lI111|H105E9D3D8 +105E9D3D8:lI100|H105E9D518 +105E9D518:lI101|H105E9D658 +105E9D658:lI47|H105E9D798 +105E9D798:lI65|H105E9D8D8 +105E9D8D8:lI100|H105E9DA18 +105E9DA18:lI118|H105E9DB58 +105E9DB58:lI101|H105E9DC98 +105E9DC98:lI110|H105E9DDD8 +105E9DDD8:lI116|H105E9DF18 +105E9DF18:lI79|H105E9E058 +105E9E058:lI102|H105E9E198 +105E9E198:lI67|H105E9E2D8 +105E9E2D8:lI111|H105E9E418 +105E9E418:lI100|H105E9E558 +105E9E558:lI101|H105E9E698 +105E9E698:lI47|H105E9E7D8 +105E9E7D8:lI97|H105E9E918 +105E9E918:lI111|H105E9EA58 +105E9EA58:lI99|H105E9EB98 +105E9EB98:lI50|H105E9ECD8 +105E9ECD8:lI48|H105E9EE18 +105E9EE18:lI50|H105E9EF58 +105E9EF58:lI51|H105E9F098 +105E9F098:lI47|H105E9F1D8 +105E9F1D8:lI98|H105E9F318 +105E9F318:lI117|H105E9F458 +105E9F458:lI105|H105E9F598 +105E9F598:lI108|H105E9F6C8 +105E9F6C8:lI100|H105E9F7F8 +105E9F7F8:lI47|H105E9F928 +105E9F928:lI100|H105E9FA58 +105E9FA58:lI101|H105E9FB88 +105E9FB88:lI118|H105E9FCB8 +105E9FCB8:lI47|H105E9FDE8 +105E9FDE8:lI101|H105E9FF18 +105E9FF18:lI114|H105EA0048 +105EA0048:lI108|H105EA0178 +105EA0178:lI97|H105EA02A8 +105EA02A8:lI110|H105EA03D8 +105EA03D8:lI103|H105EA0508 +105EA0508:lI47|H105EA0638 +105EA0638:lI103|H105EA0768 +105EA0768:lI108|H105EA0898 +105EA0898:lI101|H105EA09C8 +105EA09C8:lI97|H105EA0AF8 +105EA0AF8:lI109|H105EA0C28 +105EA0C28:lI95|H105EA0D58 +105EA0D58:lI104|H105EA0E88 +105EA0E88:lI116|H105EA0FB8 +105EA0FB8:lI116|H105EA10C8 +105EA10C8:lI112|H105EA11C8 +105EA11C8:lI47|H105EA12B8 +105EA12B8:lI101|H105EA1398 +105EA1398:lI98|H105EA1478 +105EA1478:lI105|H105EA1548 +105EA1548:lI110|N +105E9B5C8:lH105E9B648|H105E9B658 +105E9B648:lI47|H105E9B6D8 +105E9B6D8:lI85|H105E9B778 +105E9B778:lI115|H105E9B828 +105E9B828:lI101|H105E9B8E8 +105E9B8E8:lI114|H105E9B9B8 +105E9B9B8:lI115|H105E9BA98 +105E9BA98:lI47|H105E9BB88 +105E9BB88:lI110|H105E9BC88 +105E9BC88:lI105|H105E9BD98 +105E9BD98:lI99|H105E9BEB8 +105E9BEB8:lI104|H105E9BFE8 +105E9BFE8:lI111|H105E9C128 +105E9C128:lI108|H105E9C268 +105E9C268:lI97|H105E9C3A8 +105E9C3A8:lI115|H105E9C4E8 +105E9C4E8:lI99|H105E9C628 +105E9C628:lI97|H105E9C768 +105E9C768:lI114|H105E9C8A8 +105E9C8A8:lI108|H105E9C9E8 +105E9C9E8:lI115|H105E9CB28 +105E9CB28:lI111|H105E9CC68 +105E9CC68:lI110|H105E9CDA8 +105E9CDA8:lI47|H105E9CEE8 +105E9CEE8:lI86|H105E9D028 +105E9D028:lI83|H105E9D168 +105E9D168:lI32|H105E9D2A8 +105E9D2A8:lI67|H105E9D3E8 +105E9D3E8:lI111|H105E9D528 +105E9D528:lI100|H105E9D668 +105E9D668:lI101|H105E9D7A8 +105E9D7A8:lI47|H105E9D8E8 +105E9D8E8:lI65|H105E9DA28 +105E9DA28:lI100|H105E9DB68 +105E9DB68:lI118|H105E9DCA8 +105E9DCA8:lI101|H105E9DDE8 +105E9DDE8:lI110|H105E9DF28 +105E9DF28:lI116|H105E9E068 +105E9E068:lI79|H105E9E1A8 +105E9E1A8:lI102|H105E9E2E8 +105E9E2E8:lI67|H105E9E428 +105E9E428:lI111|H105E9E568 +105E9E568:lI100|H105E9E6A8 +105E9E6A8:lI101|H105E9E7E8 +105E9E7E8:lI47|H105E9E928 +105E9E928:lI97|H105E9EA68 +105E9EA68:lI111|H105E9EBA8 +105E9EBA8:lI99|H105E9ECE8 +105E9ECE8:lI50|H105E9EE28 +105E9EE28:lI48|H105E9EF68 +105E9EF68:lI50|H105E9F0A8 +105E9F0A8:lI51|H105E9F1E8 +105E9F1E8:lI47|H105E9F328 +105E9F328:lI98|H105E9F468 +105E9F468:lI117|H105E9F5A8 +105E9F5A8:lI105|H105E9F6D8 +105E9F6D8:lI108|H105E9F808 +105E9F808:lI100|H105E9F938 +105E9F938:lI47|H105E9FA68 +105E9FA68:lI100|H105E9FB98 +105E9FB98:lI101|H105E9FCC8 +105E9FCC8:lI118|H105E9FDF8 +105E9FDF8:lI47|H105E9FF28 +105E9FF28:lI101|H105EA0058 +105EA0058:lI114|H105EA0188 +105EA0188:lI108|H105EA02B8 +105EA02B8:lI97|H105EA03E8 +105EA03E8:lI110|H105EA0518 +105EA0518:lI103|H105EA0648 +105EA0648:lI47|H105EA0778 +105EA0778:lI103|H105EA08A8 +105EA08A8:lI97|H105EA09D8 +105EA09D8:lI112|H105EA0B08 +105EA0B08:lI47|H105EA0C38 +105EA0C38:lI101|H105EA0D68 +105EA0D68:lI98|H105EA0E98 +105EA0E98:lI105|H105EA0FC8 +105EA0FC8:lI110|N +105E9B658:lH105E9B6E8|H105E9B6F8 +105E9B6E8:lI47|H105E9B788 +105E9B788:lI85|H105E9B838 +105E9B838:lI115|H105E9B8F8 +105E9B8F8:lI101|H105E9B9C8 +105E9B9C8:lI114|H105E9BAA8 +105E9BAA8:lI115|H105E9BB98 +105E9BB98:lI47|H105E9BC98 +105E9BC98:lI110|H105E9BDA8 +105E9BDA8:lI105|H105E9BEC8 +105E9BEC8:lI99|H105E9BFF8 +105E9BFF8:lI104|H105E9C138 +105E9C138:lI111|H105E9C278 +105E9C278:lI108|H105E9C3B8 +105E9C3B8:lI97|H105E9C4F8 +105E9C4F8:lI115|H105E9C638 +105E9C638:lI99|H105E9C778 +105E9C778:lI97|H105E9C8B8 +105E9C8B8:lI114|H105E9C9F8 +105E9C9F8:lI108|H105E9CB38 +105E9CB38:lI115|H105E9CC78 +105E9CC78:lI111|H105E9CDB8 +105E9CDB8:lI110|H105E9CEF8 +105E9CEF8:lI47|H105E9D038 +105E9D038:lI86|H105E9D178 +105E9D178:lI83|H105E9D2B8 +105E9D2B8:lI32|H105E9D3F8 +105E9D3F8:lI67|H105E9D538 +105E9D538:lI111|H105E9D678 +105E9D678:lI100|H105E9D7B8 +105E9D7B8:lI101|H105E9D8F8 +105E9D8F8:lI47|H105E9DA38 +105E9DA38:lI65|H105E9DB78 +105E9DB78:lI100|H105E9DCB8 +105E9DCB8:lI118|H105E9DDF8 +105E9DDF8:lI101|H105E9DF38 +105E9DF38:lI110|H105E9E078 +105E9E078:lI116|H105E9E1B8 +105E9E1B8:lI79|H105E9E2F8 +105E9E2F8:lI102|H105E9E438 +105E9E438:lI67|H105E9E578 +105E9E578:lI111|H105E9E6B8 +105E9E6B8:lI100|H105E9E7F8 +105E9E7F8:lI101|H105E9E938 +105E9E938:lI47|H105E9EA78 +105E9EA78:lI97|H105E9EBB8 +105E9EBB8:lI111|H105E9ECF8 +105E9ECF8:lI99|H105E9EE38 +105E9EE38:lI50|H105E9EF78 +105E9EF78:lI48|H105E9F0B8 +105E9F0B8:lI50|H105E9F1F8 +105E9F1F8:lI51|H105E9F338 +105E9F338:lI47|H105E9F478 +105E9F478:lI98|H105E9F5B8 +105E9F5B8:lI117|H105E9F6E8 +105E9F6E8:lI105|H105E9F818 +105E9F818:lI108|H105E9F948 +105E9F948:lI100|H105E9FA78 +105E9FA78:lI47|H105E9FBA8 +105E9FBA8:lI100|H105E9FCD8 +105E9FCD8:lI101|H105E9FE08 +105E9FE08:lI118|H105E9FF38 +105E9FF38:lI47|H105EA0068 +105EA0068:lI101|H105EA0198 +105EA0198:lI114|H105EA02C8 +105EA02C8:lI108|H105EA03F8 +105EA03F8:lI97|H105EA0528 +105EA0528:lI110|H105EA0658 +105EA0658:lI103|H105EA0788 +105EA0788:lI47|H105EA08B8 +105EA08B8:lI103|H105EA09E8 +105EA09E8:lI108|H105EA0B18 +105EA0B18:lI101|H105EA0C48 +105EA0C48:lI97|H105EA0D78 +105EA0D78:lI109|H105EA0EA8 +105EA0EA8:lI95|H105EA0FD8 +105EA0FD8:lI111|H105EA10D8 +105EA10D8:lI116|H105EA11D8 +105EA11D8:lI112|H105EA12C8 +105EA12C8:lI47|H105EA13A8 +105EA13A8:lI101|H105EA1488 +105EA1488:lI98|H105EA1558 +105EA1558:lI105|H105EA1608 +105EA1608:lI110|N +105E9B6F8:lH105E9B798|H105E9B7A8 +105E9B798:lI47|H105E9B848 +105E9B848:lI85|H105E9B908 +105E9B908:lI115|H105E9B9D8 +105E9B9D8:lI101|H105E9BAB8 +105E9BAB8:lI114|H105E9BBA8 +105E9BBA8:lI115|H105E9BCA8 +105E9BCA8:lI47|H105E9BDB8 +105E9BDB8:lI110|H105E9BED8 +105E9BED8:lI105|H105E9C008 +105E9C008:lI99|H105E9C148 +105E9C148:lI104|H105E9C288 +105E9C288:lI111|H105E9C3C8 +105E9C3C8:lI108|H105E9C508 +105E9C508:lI97|H105E9C648 +105E9C648:lI115|H105E9C788 +105E9C788:lI99|H105E9C8C8 +105E9C8C8:lI97|H105E9CA08 +105E9CA08:lI114|H105E9CB48 +105E9CB48:lI108|H105E9CC88 +105E9CC88:lI115|H105E9CDC8 +105E9CDC8:lI111|H105E9CF08 +105E9CF08:lI110|H105E9D048 +105E9D048:lI47|H105E9D188 +105E9D188:lI86|H105E9D2C8 +105E9D2C8:lI83|H105E9D408 +105E9D408:lI32|H105E9D548 +105E9D548:lI67|H105E9D688 +105E9D688:lI111|H105E9D7C8 +105E9D7C8:lI100|H105E9D908 +105E9D908:lI101|H105E9DA48 +105E9DA48:lI47|H105E9DB88 +105E9DB88:lI65|H105E9DCC8 +105E9DCC8:lI100|H105E9DE08 +105E9DE08:lI118|H105E9DF48 +105E9DF48:lI101|H105E9E088 +105E9E088:lI110|H105E9E1C8 +105E9E1C8:lI116|H105E9E308 +105E9E308:lI79|H105E9E448 +105E9E448:lI102|H105E9E588 +105E9E588:lI67|H105E9E6C8 +105E9E6C8:lI111|H105E9E808 +105E9E808:lI100|H105E9E948 +105E9E948:lI101|H105E9EA88 +105E9EA88:lI47|H105E9EBC8 +105E9EBC8:lI97|H105E9ED08 +105E9ED08:lI111|H105E9EE48 +105E9EE48:lI99|H105E9EF88 +105E9EF88:lI50|H105E9F0C8 +105E9F0C8:lI48|H105E9F208 +105E9F208:lI50|H105E9F348 +105E9F348:lI51|H105E9F488 +105E9F488:lI47|H105E9F5C8 +105E9F5C8:lI98|H105E9F6F8 +105E9F6F8:lI117|H105E9F828 +105E9F828:lI105|H105E9F958 +105E9F958:lI108|H105E9FA88 +105E9FA88:lI100|H105E9FBB8 +105E9FBB8:lI47|H105E9FCE8 +105E9FCE8:lI100|H105E9FE18 +105E9FE18:lI101|H105E9FF48 +105E9FF48:lI118|H105EA0078 +105EA0078:lI47|H105EA01A8 +105EA01A8:lI101|H105EA02D8 +105EA02D8:lI114|H105EA0408 +105EA0408:lI108|H105EA0538 +105EA0538:lI97|H105EA0668 +105EA0668:lI110|H105EA0798 +105EA0798:lI103|H105EA08C8 +105EA08C8:lI47|H105EA09F8 +105EA09F8:lI103|H105EA0B28 +105EA0B28:lI108|H105EA0C58 +105EA0C58:lI101|H105EA0D88 +105EA0D88:lI97|H105EA0EB8 +105EA0EB8:lI109|H105EA0FE8 +105EA0FE8:lI95|H105EA10E8 +105EA10E8:lI99|H105EA11E8 +105EA11E8:lI111|H105EA12D8 +105EA12D8:lI109|H105EA13B8 +105EA13B8:lI109|H105EA1498 +105EA1498:lI117|H105EA1568 +105EA1568:lI110|H105EA1618 +105EA1618:lI105|H105EA16B8 +105EA16B8:lI116|H105EA1758 +105EA1758:lI121|H105EA17D8 +105EA17D8:lI95|H105EA1858 +105EA1858:lI99|H105EA18B8 +105EA18B8:lI111|H105EA1908 +105EA1908:lI108|H105EA1958 +105EA1958:lI111|H105EA1978 +105EA1978:lI117|H105EA1998 +105EA1998:lI114|H105EA19B8 +105EA19B8:lI47|H105EA19D8 +105EA19D8:lI101|H105EA19E8 +105EA19E8:lI98|H105EA19F8 +105EA19F8:lI105|H105EA1A08 +105EA1A08:lI110|N +105E9B7A8:lH105E9B858|H105E9B868 +105E9B858:lI47|H105E9B918 +105E9B918:lI85|H105E9B9E8 +105E9B9E8:lI115|H105E9BAC8 +105E9BAC8:lI101|H105E9BBB8 +105E9BBB8:lI114|H105E9BCB8 +105E9BCB8:lI115|H105E9BDC8 +105E9BDC8:lI47|H105E9BEE8 +105E9BEE8:lI110|H105E9C018 +105E9C018:lI105|H105E9C158 +105E9C158:lI99|H105E9C298 +105E9C298:lI104|H105E9C3D8 +105E9C3D8:lI111|H105E9C518 +105E9C518:lI108|H105E9C658 +105E9C658:lI97|H105E9C798 +105E9C798:lI115|H105E9C8D8 +105E9C8D8:lI99|H105E9CA18 +105E9CA18:lI97|H105E9CB58 +105E9CB58:lI114|H105E9CC98 +105E9CC98:lI108|H105E9CDD8 +105E9CDD8:lI115|H105E9CF18 +105E9CF18:lI111|H105E9D058 +105E9D058:lI110|H105E9D198 +105E9D198:lI47|H105E9D2D8 +105E9D2D8:lI86|H105E9D418 +105E9D418:lI83|H105E9D558 +105E9D558:lI32|H105E9D698 +105E9D698:lI67|H105E9D7D8 +105E9D7D8:lI111|H105E9D918 +105E9D918:lI100|H105E9DA58 +105E9DA58:lI101|H105E9DB98 +105E9DB98:lI47|H105E9DCD8 +105E9DCD8:lI65|H105E9DE18 +105E9DE18:lI100|H105E9DF58 +105E9DF58:lI118|H105E9E098 +105E9E098:lI101|H105E9E1D8 +105E9E1D8:lI110|H105E9E318 +105E9E318:lI116|H105E9E458 +105E9E458:lI79|H105E9E598 +105E9E598:lI102|H105E9E6D8 +105E9E6D8:lI67|H105E9E818 +105E9E818:lI111|H105E9E958 +105E9E958:lI100|H105E9EA98 +105E9EA98:lI101|H105E9EBD8 +105E9EBD8:lI47|H105E9ED18 +105E9ED18:lI97|H105E9EE58 +105E9EE58:lI111|H105E9EF98 +105E9EF98:lI99|H105E9F0D8 +105E9F0D8:lI50|H105E9F218 +105E9F218:lI48|H105E9F358 +105E9F358:lI50|H105E9F498 +105E9F498:lI51|H105E9F5D8 +105E9F5D8:lI47|H105E9F708 +105E9F708:lI98|H105E9F838 +105E9F838:lI117|H105E9F968 +105E9F968:lI105|H105E9FA98 +105E9FA98:lI108|H105E9FBC8 +105E9FBC8:lI100|H105E9FCF8 +105E9FCF8:lI47|H105E9FE28 +105E9FE28:lI100|H105E9FF58 +105E9FF58:lI101|H105EA0088 +105EA0088:lI118|H105EA01B8 +105EA01B8:lI47|H105EA02E8 +105EA02E8:lI101|H105EA0418 +105EA0418:lI114|H105EA0548 +105EA0548:lI108|H105EA0678 +105EA0678:lI97|H105EA07A8 +105EA07A8:lI110|H105EA08D8 +105EA08D8:lI103|H105EA0A08 +105EA0A08:lI47|H105EA0B38 +105EA0B38:lI103|H105EA0C68 +105EA0C68:lI108|H105EA0D98 +105EA0D98:lI101|H105EA0EC8 +105EA0EC8:lI97|H105EA0FF8 +105EA0FF8:lI109|H105EA10F8 +105EA10F8:lI95|H105EA11F8 +105EA11F8:lI104|H105EA12E8 +105EA12E8:lI116|H105EA13C8 +105EA13C8:lI116|H105EA14A8 +105EA14A8:lI112|H105EA1578 +105EA1578:lI99|H105EA1628 +105EA1628:lI47|H105EA16C8 +105EA16C8:lI101|H105EA1768 +105EA1768:lI98|H105EA17E8 +105EA17E8:lI105|H105EA1868 +105EA1868:lI110|N +105E9B868:lH105E9B928|H105E9B938 +105E9B928:lI47|H105E9B9F8 +105E9B9F8:lI85|H105E9BAD8 +105E9BAD8:lI115|H105E9BBC8 +105E9BBC8:lI101|H105E9BCC8 +105E9BCC8:lI114|H105E9BDD8 +105E9BDD8:lI115|H105E9BEF8 +105E9BEF8:lI47|H105E9C028 +105E9C028:lI110|H105E9C168 +105E9C168:lI105|H105E9C2A8 +105E9C2A8:lI99|H105E9C3E8 +105E9C3E8:lI104|H105E9C528 +105E9C528:lI111|H105E9C668 +105E9C668:lI108|H105E9C7A8 +105E9C7A8:lI97|H105E9C8E8 +105E9C8E8:lI115|H105E9CA28 +105E9CA28:lI99|H105E9CB68 +105E9CB68:lI97|H105E9CCA8 +105E9CCA8:lI114|H105E9CDE8 +105E9CDE8:lI108|H105E9CF28 +105E9CF28:lI115|H105E9D068 +105E9D068:lI111|H105E9D1A8 +105E9D1A8:lI110|H105E9D2E8 +105E9D2E8:lI47|H105E9D428 +105E9D428:lI86|H105E9D568 +105E9D568:lI83|H105E9D6A8 +105E9D6A8:lI32|H105E9D7E8 +105E9D7E8:lI67|H105E9D928 +105E9D928:lI111|H105E9DA68 +105E9DA68:lI100|H105E9DBA8 +105E9DBA8:lI101|H105E9DCE8 +105E9DCE8:lI47|H105E9DE28 +105E9DE28:lI65|H105E9DF68 +105E9DF68:lI100|H105E9E0A8 +105E9E0A8:lI118|H105E9E1E8 +105E9E1E8:lI101|H105E9E328 +105E9E328:lI110|H105E9E468 +105E9E468:lI116|H105E9E5A8 +105E9E5A8:lI79|H105E9E6E8 +105E9E6E8:lI102|H105E9E828 +105E9E828:lI67|H105E9E968 +105E9E968:lI111|H105E9EAA8 +105E9EAA8:lI100|H105E9EBE8 +105E9EBE8:lI101|H105E9ED28 +105E9ED28:lI47|H105E9EE68 +105E9EE68:lI97|H105E9EFA8 +105E9EFA8:lI111|H105E9F0E8 +105E9F0E8:lI99|H105E9F228 +105E9F228:lI50|H105E9F368 +105E9F368:lI48|H105E9F4A8 +105E9F4A8:lI50|H105E9F5E8 +105E9F5E8:lI51|H105E9F718 +105E9F718:lI47|H105E9F848 +105E9F848:lI98|H105E9F978 +105E9F978:lI117|H105E9FAA8 +105E9FAA8:lI105|H105E9FBD8 +105E9FBD8:lI108|H105E9FD08 +105E9FD08:lI100|H105E9FE38 +105E9FE38:lI47|H105E9FF68 +105E9FF68:lI100|H105EA0098 +105EA0098:lI101|H105EA01C8 +105EA01C8:lI118|H105EA02F8 +105EA02F8:lI47|H105EA0428 +105EA0428:lI101|H105EA0558 +105EA0558:lI114|H105EA0688 +105EA0688:lI108|H105EA07B8 +105EA07B8:lI97|H105EA08E8 +105EA08E8:lI110|H105EA0A18 +105EA0A18:lI103|H105EA0B48 +105EA0B48:lI47|H105EA0C78 +105EA0C78:lI103|H105EA0DA8 +105EA0DA8:lI108|H105EA0ED8 +105EA0ED8:lI101|H105EA1008 +105EA1008:lI97|H105EA1108 +105EA1108:lI109|H105EA1208 +105EA1208:lI95|H105EA12F8 +105EA12F8:lI115|H105EA13D8 +105EA13D8:lI116|H105EA14B8 +105EA14B8:lI100|H105EA1588 +105EA1588:lI108|H105EA1638 +105EA1638:lI105|H105EA16D8 +105EA16D8:lI98|H105EA1778 +105EA1778:lI47|H105EA17F8 +105EA17F8:lI101|H105EA1878 +105EA1878:lI98|H105EA18C8 +105EA18C8:lI105|H105EA1918 +105EA1918:lI110|N +105E9B938:lH105E9BA08|H105E9BA18 +105E9BA08:lI47|H105E9BAE8 +105E9BAE8:lI85|H105E9BBD8 +105E9BBD8:lI115|H105E9BCD8 +105E9BCD8:lI101|H105E9BDE8 +105E9BDE8:lI114|H105E9BF08 +105E9BF08:lI115|H105E9C038 +105E9C038:lI47|H105E9C178 +105E9C178:lI110|H105E9C2B8 +105E9C2B8:lI105|H105E9C3F8 +105E9C3F8:lI99|H105E9C538 +105E9C538:lI104|H105E9C678 +105E9C678:lI111|H105E9C7B8 +105E9C7B8:lI108|H105E9C8F8 +105E9C8F8:lI97|H105E9CA38 +105E9CA38:lI115|H105E9CB78 +105E9CB78:lI99|H105E9CCB8 +105E9CCB8:lI97|H105E9CDF8 +105E9CDF8:lI114|H105E9CF38 +105E9CF38:lI108|H105E9D078 +105E9D078:lI115|H105E9D1B8 +105E9D1B8:lI111|H105E9D2F8 +105E9D2F8:lI110|H105E9D438 +105E9D438:lI47|H105E9D578 +105E9D578:lI86|H105E9D6B8 +105E9D6B8:lI83|H105E9D7F8 +105E9D7F8:lI32|H105E9D938 +105E9D938:lI67|H105E9DA78 +105E9DA78:lI111|H105E9DBB8 +105E9DBB8:lI100|H105E9DCF8 +105E9DCF8:lI101|H105E9DE38 +105E9DE38:lI47|H105E9DF78 +105E9DF78:lI65|H105E9E0B8 +105E9E0B8:lI100|H105E9E1F8 +105E9E1F8:lI118|H105E9E338 +105E9E338:lI101|H105E9E478 +105E9E478:lI110|H105E9E5B8 +105E9E5B8:lI116|H105E9E6F8 +105E9E6F8:lI79|H105E9E838 +105E9E838:lI102|H105E9E978 +105E9E978:lI67|H105E9EAB8 +105E9EAB8:lI111|H105E9EBF8 +105E9EBF8:lI100|H105E9ED38 +105E9ED38:lI101|H105E9EE78 +105E9EE78:lI47|H105E9EFB8 +105E9EFB8:lI97|H105E9F0F8 +105E9F0F8:lI111|H105E9F238 +105E9F238:lI99|H105E9F378 +105E9F378:lI50|H105E9F4B8 +105E9F4B8:lI48|H105E9F5F8 +105E9F5F8:lI50|H105E9F728 +105E9F728:lI51|H105E9F858 +105E9F858:lI47|H105E9F988 +105E9F988:lI98|H105E9FAB8 +105E9FAB8:lI117|H105E9FBE8 +105E9FBE8:lI105|H105E9FD18 +105E9FD18:lI108|H105E9FE48 +105E9FE48:lI100|H105E9FF78 +105E9FF78:lI47|H105EA00A8 +105EA00A8:lI100|H105EA01D8 +105EA01D8:lI101|H105EA0308 +105EA0308:lI118|H105EA0438 +105EA0438:lI47|H105EA0568 +105EA0568:lI101|H105EA0698 +105EA0698:lI114|H105EA07C8 +105EA07C8:lI108|H105EA08F8 +105EA08F8:lI97|H105EA0A28 +105EA0A28:lI110|H105EA0B58 +105EA0B58:lI103|H105EA0C88 +105EA0C88:lI47|H105EA0DB8 +105EA0DB8:lI103|H105EA0EE8 +105EA0EE8:lI108|H105EA1018 +105EA1018:lI101|H105EA1118 +105EA1118:lI101|H105EA1218 +105EA1218:lI117|H105EA1308 +105EA1308:lI110|H105EA13E8 +105EA13E8:lI105|H105EA14C8 +105EA14C8:lI116|H105EA1598 +105EA1598:lI47|H105EA1648 +105EA1648:lI101|H105EA16E8 +105EA16E8:lI98|H105EA1788 +105EA1788:lI105|H105EA1808 +105EA1808:lI110|N +105E9BA18:lH105E9BAF8|H105E9BB08 +105E9BAF8:lI47|H105E9BBE8 +105E9BBE8:lI85|H105E9BCE8 +105E9BCE8:lI115|H105E9BDF8 +105E9BDF8:lI101|H105E9BF18 +105E9BF18:lI114|H105E9C048 +105E9C048:lI115|H105E9C188 +105E9C188:lI47|H105E9C2C8 +105E9C2C8:lI110|H105E9C408 +105E9C408:lI105|H105E9C548 +105E9C548:lI99|H105E9C688 +105E9C688:lI104|H105E9C7C8 +105E9C7C8:lI111|H105E9C908 +105E9C908:lI108|H105E9CA48 +105E9CA48:lI97|H105E9CB88 +105E9CB88:lI115|H105E9CCC8 +105E9CCC8:lI99|H105E9CE08 +105E9CE08:lI97|H105E9CF48 +105E9CF48:lI114|H105E9D088 +105E9D088:lI108|H105E9D1C8 +105E9D1C8:lI115|H105E9D308 +105E9D308:lI111|H105E9D448 +105E9D448:lI110|H105E9D588 +105E9D588:lI47|H105E9D6C8 +105E9D6C8:lI86|H105E9D808 +105E9D808:lI83|H105E9D948 +105E9D948:lI32|H105E9DA88 +105E9DA88:lI67|H105E9DBC8 +105E9DBC8:lI111|H105E9DD08 +105E9DD08:lI100|H105E9DE48 +105E9DE48:lI101|H105E9DF88 +105E9DF88:lI47|H105E9E0C8 +105E9E0C8:lI65|H105E9E208 +105E9E208:lI100|H105E9E348 +105E9E348:lI118|H105E9E488 +105E9E488:lI101|H105E9E5C8 +105E9E5C8:lI110|H105E9E708 +105E9E708:lI116|H105E9E848 +105E9E848:lI79|H105E9E988 +105E9E988:lI102|H105E9EAC8 +105E9EAC8:lI67|H105E9EC08 +105E9EC08:lI111|H105E9ED48 +105E9ED48:lI100|H105E9EE88 +105E9EE88:lI101|H105E9EFC8 +105E9EFC8:lI47|H105E9F108 +105E9F108:lI97|H105E9F248 +105E9F248:lI111|H105E9F388 +105E9F388:lI99|H105E9F4C8 +105E9F4C8:lI50|H105E9F608 +105E9F608:lI48|H105E9F738 +105E9F738:lI50|H105E9F868 +105E9F868:lI51|H105E9F998 +105E9F998:lI47|H105E9FAC8 +105E9FAC8:lI98|H105E9FBF8 +105E9FBF8:lI117|H105E9FD28 +105E9FD28:lI105|H105E9FE58 +105E9FE58:lI108|H105E9FF88 +105E9FF88:lI100|H105EA00B8 +105EA00B8:lI47|H105EA01E8 +105EA01E8:lI100|H105EA0318 +105EA0318:lI101|H105EA0448 +105EA0448:lI118|H105EA0578 +105EA0578:lI47|H105EA06A8 +105EA06A8:lI101|H105EA07D8 +105EA07D8:lI114|H105EA0908 +105EA0908:lI108|H105EA0A38 +105EA0A38:lI97|H105EA0B68 +105EA0B68:lI110|H105EA0C98 +105EA0C98:lI103|H105EA0DC8 +105EA0DC8:lI47|H105EA0EF8 +105EA0EF8:lI103|H105EA1028 +105EA1028:lI108|H105EA1128 +105EA1128:lI101|H105EA1228 +105EA1228:lI97|H105EA1318 +105EA1318:lI109|H105EA13F8 +105EA13F8:lI46|H105EA14D8 +105EA14D8:lI108|H105EA15A8 +105EA15A8:lI111|H105EA1658 +105EA1658:lI99|H105EA16F8 +105EA16F8:lI107|H105EA1798 +105EA1798:lI47|H105EA1818 +105EA1818:lI101|H105EA1888 +105EA1888:lI98|H105EA18D8 +105EA18D8:lI105|H105EA1928 +105EA1928:lI110|N +105E9BB08:lH105E9BBF8|H105E9BC08 +105E9BBF8:lI47|H105E9BCF8 +105E9BCF8:lI85|H105E9BE08 +105E9BE08:lI115|H105E9BF28 +105E9BF28:lI101|H105E9C058 +105E9C058:lI114|H105E9C198 +105E9C198:lI115|H105E9C2D8 +105E9C2D8:lI47|H105E9C418 +105E9C418:lI110|H105E9C558 +105E9C558:lI105|H105E9C698 +105E9C698:lI99|H105E9C7D8 +105E9C7D8:lI104|H105E9C918 +105E9C918:lI111|H105E9CA58 +105E9CA58:lI108|H105E9CB98 +105E9CB98:lI97|H105E9CCD8 +105E9CCD8:lI115|H105E9CE18 +105E9CE18:lI99|H105E9CF58 +105E9CF58:lI97|H105E9D098 +105E9D098:lI114|H105E9D1D8 +105E9D1D8:lI108|H105E9D318 +105E9D318:lI115|H105E9D458 +105E9D458:lI111|H105E9D598 +105E9D598:lI110|H105E9D6D8 +105E9D6D8:lI47|H105E9D818 +105E9D818:lI86|H105E9D958 +105E9D958:lI83|H105E9DA98 +105E9DA98:lI32|H105E9DBD8 +105E9DBD8:lI67|H105E9DD18 +105E9DD18:lI111|H105E9DE58 +105E9DE58:lI100|H105E9DF98 +105E9DF98:lI101|H105E9E0D8 +105E9E0D8:lI47|H105E9E218 +105E9E218:lI65|H105E9E358 +105E9E358:lI100|H105E9E498 +105E9E498:lI118|H105E9E5D8 +105E9E5D8:lI101|H105E9E718 +105E9E718:lI110|H105E9E858 +105E9E858:lI116|H105E9E998 +105E9E998:lI79|H105E9EAD8 +105E9EAD8:lI102|H105E9EC18 +105E9EC18:lI67|H105E9ED58 +105E9ED58:lI111|H105E9EE98 +105E9EE98:lI100|H105E9EFD8 +105E9EFD8:lI101|H105E9F118 +105E9F118:lI47|H105E9F258 +105E9F258:lI97|H105E9F398 +105E9F398:lI111|H105E9F4D8 +105E9F4D8:lI99|H105E9F618 +105E9F618:lI50|H105E9F748 +105E9F748:lI48|H105E9F878 +105E9F878:lI50|H105E9F9A8 +105E9F9A8:lI51|H105E9FAD8 +105E9FAD8:lI47|H105E9FC08 +105E9FC08:lI98|H105E9FD38 +105E9FD38:lI117|H105E9FE68 +105E9FE68:lI105|H105E9FF98 +105E9FF98:lI108|H105EA00C8 +105EA00C8:lI100|H105EA01F8 +105EA01F8:lI47|H105EA0328 +105EA0328:lI100|H105EA0458 +105EA0458:lI101|H105EA0588 +105EA0588:lI118|H105EA06B8 +105EA06B8:lI47|H105EA07E8 +105EA07E8:lI101|H105EA0918 +105EA0918:lI114|H105EA0A48 +105EA0A48:lI108|H105EA0B78 +105EA0B78:lI97|H105EA0CA8 +105EA0CA8:lI110|H105EA0DD8 +105EA0DD8:lI103|H105EA0F08 +105EA0F08:lI47|H105EA1038 +105EA1038:lI115|H105EA1138 +105EA1138:lI110|H105EA1238 +105EA1238:lI97|H105EA1328 +105EA1328:lI103|H105EA1408 +105EA1408:lI47|H105EA14E8 +105EA14E8:lI101|H105EA15B8 +105EA15B8:lI98|H105EA1668 +105EA1668:lI105|H105EA1708 +105EA1708:lI110|N +105E9BC08:lH105E9BD08|H105E9BD18 +105E9BD08:lI47|H105E9BE18 +105E9BE18:lI85|H105E9BF38 +105E9BF38:lI115|H105E9C068 +105E9C068:lI101|H105E9C1A8 +105E9C1A8:lI114|H105E9C2E8 +105E9C2E8:lI115|H105E9C428 +105E9C428:lI47|H105E9C568 +105E9C568:lI110|H105E9C6A8 +105E9C6A8:lI105|H105E9C7E8 +105E9C7E8:lI99|H105E9C928 +105E9C928:lI104|H105E9CA68 +105E9CA68:lI111|H105E9CBA8 +105E9CBA8:lI108|H105E9CCE8 +105E9CCE8:lI97|H105E9CE28 +105E9CE28:lI115|H105E9CF68 +105E9CF68:lI99|H105E9D0A8 +105E9D0A8:lI97|H105E9D1E8 +105E9D1E8:lI114|H105E9D328 +105E9D328:lI108|H105E9D468 +105E9D468:lI115|H105E9D5A8 +105E9D5A8:lI111|H105E9D6E8 +105E9D6E8:lI110|H105E9D828 +105E9D828:lI47|H105E9D968 +105E9D968:lI86|H105E9DAA8 +105E9DAA8:lI83|H105E9DBE8 +105E9DBE8:lI32|H105E9DD28 +105E9DD28:lI67|H105E9DE68 +105E9DE68:lI111|H105E9DFA8 +105E9DFA8:lI100|H105E9E0E8 +105E9E0E8:lI101|H105E9E228 +105E9E228:lI47|H105E9E368 +105E9E368:lI65|H105E9E4A8 +105E9E4A8:lI100|H105E9E5E8 +105E9E5E8:lI118|H105E9E728 +105E9E728:lI101|H105E9E868 +105E9E868:lI110|H105E9E9A8 +105E9E9A8:lI116|H105E9EAE8 +105E9EAE8:lI79|H105E9EC28 +105E9EC28:lI102|H105E9ED68 +105E9ED68:lI67|H105E9EEA8 +105E9EEA8:lI111|H105E9EFE8 +105E9EFE8:lI100|H105E9F128 +105E9F128:lI101|H105E9F268 +105E9F268:lI47|H105E9F3A8 +105E9F3A8:lI97|H105E9F4E8 +105E9F4E8:lI111|H105E9F628 +105E9F628:lI99|H105E9F758 +105E9F758:lI50|H105E9F888 +105E9F888:lI48|H105E9F9B8 +105E9F9B8:lI50|H105E9FAE8 +105E9FAE8:lI51|H105E9FC18 +105E9FC18:lI47|H105E9FD48 +105E9FD48:lI98|H105E9FE78 +105E9FE78:lI117|H105E9FFA8 +105E9FFA8:lI105|H105EA00D8 +105EA00D8:lI108|H105EA0208 +105EA0208:lI100|H105EA0338 +105EA0338:lI47|H105EA0468 +105EA0468:lI100|H105EA0598 +105EA0598:lI101|H105EA06C8 +105EA06C8:lI118|H105EA07F8 +105EA07F8:lI47|H105EA0928 +105EA0928:lI101|H105EA0A58 +105EA0A58:lI114|H105EA0B88 +105EA0B88:lI108|H105EA0CB8 +105EA0CB8:lI97|H105EA0DE8 +105EA0DE8:lI110|H105EA0F18 +105EA0F18:lI103|H105EA1048 +105EA1048:lI47|H105EA1148 +105EA1148:lI116|H105EA1248 +105EA1248:lI111|H105EA1338 +105EA1338:lI109|H105EA1418 +105EA1418:lI47|H105EA14F8 +105EA14F8:lI101|H105EA15C8 +105EA15C8:lI98|H105EA1678 +105EA1678:lI105|H105EA1718 +105EA1718:lI110|N +105E9BD18:lH105E9BE28|H105E9BE38 +105E9BE28:lI47|H105E9BF48 +105E9BF48:lI85|H105E9C078 +105E9C078:lI115|H105E9C1B8 +105E9C1B8:lI101|H105E9C2F8 +105E9C2F8:lI114|H105E9C438 +105E9C438:lI115|H105E9C578 +105E9C578:lI47|H105E9C6B8 +105E9C6B8:lI110|H105E9C7F8 +105E9C7F8:lI105|H105E9C938 +105E9C938:lI99|H105E9CA78 +105E9CA78:lI104|H105E9CBB8 +105E9CBB8:lI111|H105E9CCF8 +105E9CCF8:lI108|H105E9CE38 +105E9CE38:lI97|H105E9CF78 +105E9CF78:lI115|H105E9D0B8 +105E9D0B8:lI99|H105E9D1F8 +105E9D1F8:lI97|H105E9D338 +105E9D338:lI114|H105E9D478 +105E9D478:lI108|H105E9D5B8 +105E9D5B8:lI115|H105E9D6F8 +105E9D6F8:lI111|H105E9D838 +105E9D838:lI110|H105E9D978 +105E9D978:lI47|H105E9DAB8 +105E9DAB8:lI86|H105E9DBF8 +105E9DBF8:lI83|H105E9DD38 +105E9DD38:lI32|H105E9DE78 +105E9DE78:lI67|H105E9DFB8 +105E9DFB8:lI111|H105E9E0F8 +105E9E0F8:lI100|H105E9E238 +105E9E238:lI101|H105E9E378 +105E9E378:lI47|H105E9E4B8 +105E9E4B8:lI65|H105E9E5F8 +105E9E5F8:lI100|H105E9E738 +105E9E738:lI118|H105E9E878 +105E9E878:lI101|H105E9E9B8 +105E9E9B8:lI110|H105E9EAF8 +105E9EAF8:lI116|H105E9EC38 +105E9EC38:lI79|H105E9ED78 +105E9ED78:lI102|H105E9EEB8 +105E9EEB8:lI67|H105E9EFF8 +105E9EFF8:lI111|H105E9F138 +105E9F138:lI100|H105E9F278 +105E9F278:lI101|H105E9F3B8 +105E9F3B8:lI47|H105E9F4F8 +105E9F4F8:lI97|H105E9F638 +105E9F638:lI111|H105E9F768 +105E9F768:lI99|H105E9F898 +105E9F898:lI50|H105E9F9C8 +105E9F9C8:lI48|H105E9FAF8 +105E9FAF8:lI50|H105E9FC28 +105E9FC28:lI51|H105E9FD58 +105E9FD58:lI47|H105E9FE88 +105E9FE88:lI98|H105E9FFB8 +105E9FFB8:lI117|H105EA00E8 +105EA00E8:lI105|H105EA0218 +105EA0218:lI108|H105EA0348 +105EA0348:lI100|H105EA0478 +105EA0478:lI47|H105EA05A8 +105EA05A8:lI100|H105EA06D8 +105EA06D8:lI101|H105EA0808 +105EA0808:lI118|H105EA0938 +105EA0938:lI47|H105EA0A68 +105EA0A68:lI101|H105EA0B98 +105EA0B98:lI114|H105EA0CC8 +105EA0CC8:lI108|H105EA0DF8 +105EA0DF8:lI97|H105EA0F28 +105EA0F28:lI110|H105EA1058 +105EA1058:lI103|H105EA1158 +105EA1158:lI47|H105EA1258 +105EA1258:lI97|H105EA1348 +105EA1348:lI111|H105EA1428 +105EA1428:lI99|H105EA1508 +105EA1508:lI50|H105EA15D8 +105EA15D8:lI48|H105EA1688 +105EA1688:lI50|H105EA1728 +105EA1728:lI51|H105EA17A8 +105EA17A8:lI47|H105EA1828 +105EA1828:lI101|H105EA1898 +105EA1898:lI98|H105EA18E8 +105EA18E8:lI105|H105EA1938 +105EA1938:lI110|N +105E9BE38:lH105E9BF58|H105E9BF68 +105E9BF58:lI47|H105E9C088 +105E9C088:lI85|H105E9C1C8 +105E9C1C8:lI115|H105E9C308 +105E9C308:lI101|H105E9C448 +105E9C448:lI114|H105E9C588 +105E9C588:lI115|H105E9C6C8 +105E9C6C8:lI47|H105E9C808 +105E9C808:lI110|H105E9C948 +105E9C948:lI105|H105E9CA88 +105E9CA88:lI99|H105E9CBC8 +105E9CBC8:lI104|H105E9CD08 +105E9CD08:lI111|H105E9CE48 +105E9CE48:lI108|H105E9CF88 +105E9CF88:lI97|H105E9D0C8 +105E9D0C8:lI115|H105E9D208 +105E9D208:lI99|H105E9D348 +105E9D348:lI97|H105E9D488 +105E9D488:lI114|H105E9D5C8 +105E9D5C8:lI108|H105E9D708 +105E9D708:lI115|H105E9D848 +105E9D848:lI111|H105E9D988 +105E9D988:lI110|H105E9DAC8 +105E9DAC8:lI47|H105E9DC08 +105E9DC08:lI86|H105E9DD48 +105E9DD48:lI83|H105E9DE88 +105E9DE88:lI32|H105E9DFC8 +105E9DFC8:lI67|H105E9E108 +105E9E108:lI111|H105E9E248 +105E9E248:lI100|H105E9E388 +105E9E388:lI101|H105E9E4C8 +105E9E4C8:lI47|H105E9E608 +105E9E608:lI65|H105E9E748 +105E9E748:lI100|H105E9E888 +105E9E888:lI118|H105E9E9C8 +105E9E9C8:lI101|H105E9EB08 +105E9EB08:lI110|H105E9EC48 +105E9EC48:lI116|H105E9ED88 +105E9ED88:lI79|H105E9EEC8 +105E9EEC8:lI102|H105E9F008 +105E9F008:lI67|H105E9F148 +105E9F148:lI111|H105E9F288 +105E9F288:lI100|H105E9F3C8 +105E9F3C8:lI101|H105E9F508 +105E9F508:lI47|H105E9F648 +105E9F648:lI97|H105E9F778 +105E9F778:lI111|H105E9F8A8 +105E9F8A8:lI99|H105E9F9D8 +105E9F9D8:lI50|H105E9FB08 +105E9FB08:lI48|H105E9FC38 +105E9FC38:lI50|H105E9FD68 +105E9FD68:lI51|H105E9FE98 +105E9FE98:lI47|H105E9FFC8 +105E9FFC8:lI98|H105EA00F8 +105EA00F8:lI117|H105EA0228 +105EA0228:lI105|H105EA0358 +105EA0358:lI108|H105EA0488 +105EA0488:lI100|H105EA05B8 +105EA05B8:lI47|H105EA06E8 +105EA06E8:lI100|H105EA0818 +105EA0818:lI101|H105EA0948 +105EA0948:lI118|H105EA0A78 +105EA0A78:lI47|H105EA0BA8 +105EA0BA8:lI101|H105EA0CD8 +105EA0CD8:lI114|H105EA0E08 +105EA0E08:lI108|H105EA0F38 +105EA0F38:lI97|H105EA1068 +105EA1068:lI110|H105EA1168 +105EA1168:lI103|H105EA1268 +105EA1268:lI47|H105EA1358 +105EA1358:lI115|H105EA1438 +105EA1438:lI105|H105EA1518 +105EA1518:lI109|H105EA15E8 +105EA15E8:lI112|H105EA1698 +105EA1698:lI108|H105EA1738 +105EA1738:lI105|H105EA17B8 +105EA17B8:lI102|H105EA1838 +105EA1838:lI105|H105EA18A8 +105EA18A8:lI108|H105EA18F8 +105EA18F8:lI101|H105EA1948 +105EA1948:lI47|H105EA1968 +105EA1968:lI101|H105EA1988 +105EA1988:lI98|H105EA19A8 +105EA19A8:lI105|H105EA19C8 +105EA19C8:lI110|N +105E9BF68:lH105E9C098|H105E9C0A8 +105E9C098:lI47|H105E9C1D8 +105E9C1D8:lI111|H105E9C318 +105E9C318:lI112|H105E9C458 +105E9C458:lI116|H105E9C598 +105E9C598:lI47|H105E9C6D8 +105E9C6D8:lI104|H105E9C818 +105E9C818:lI111|H105E9C958 +105E9C958:lI109|H105E9CA98 +105E9CA98:lI101|H105E9CBD8 +105E9CBD8:lI98|H105E9CD18 +105E9CD18:lI114|H105E9CE58 +105E9CE58:lI101|H105E9CF98 +105E9CF98:lI119|H105E9D0D8 +105E9D0D8:lI47|H105E9D218 +105E9D218:lI67|H105E9D358 +105E9D358:lI101|H105E9D498 +105E9D498:lI108|H105E9D5D8 +105E9D5D8:lI108|H105E9D718 +105E9D718:lI97|H105E9D858 +105E9D858:lI114|H105E9D998 +105E9D998:lI47|H105E9DAD8 +105E9DAD8:lI101|H105E9DC18 +105E9DC18:lI114|H105E9DD58 +105E9DD58:lI108|H105E9DE98 +105E9DE98:lI97|H105E9DFD8 +105E9DFD8:lI110|H105E9E118 +105E9E118:lI103|H105E9E258 +105E9E258:lI47|H105E9E398 +105E9E398:lI50|H105E9E4D8 +105E9E4D8:lI54|H105E9E618 +105E9E618:lI46|H105E9E758 +105E9E758:lI48|H105E9E898 +105E9E898:lI46|H105E9E9D8 +105E9E9D8:lI50|H105E9EB18 +105E9EB18:lI47|H105E9EC58 +105E9EC58:lI108|H105E9ED98 +105E9ED98:lI105|H105E9EED8 +105E9EED8:lI98|H105E9F018 +105E9F018:lI47|H105E9F158 +105E9F158:lI101|H105E9F298 +105E9F298:lI114|H105E9F3D8 +105E9F3D8:lI108|H105E9F518 +105E9F518:lI97|H105E9F658 +105E9F658:lI110|H105E9F788 +105E9F788:lI103|H105E9F8B8 +105E9F8B8:lI47|H105E9F9E8 +105E9F9E8:lI108|H105E9FB18 +105E9FB18:lI105|H105E9FC48 +105E9FC48:lI98|H105E9FD78 +105E9FD78:lI47|H105E9FEA8 +105E9FEA8:lI107|H105E9FFD8 +105E9FFD8:lI101|H105EA0108 +105EA0108:lI114|H105EA0238 +105EA0238:lI110|H105EA0368 +105EA0368:lI101|H105EA0498 +105EA0498:lI108|H105EA05C8 +105EA05C8:lI45|H105EA06F8 +105EA06F8:lI57|H105EA0828 +105EA0828:lI46|H105EA0958 +105EA0958:lI48|H105EA0A88 +105EA0A88:lI46|H105EA0BB8 +105EA0BB8:lI50|H105EA0CE8 +105EA0CE8:lI47|H105EA0E18 +105EA0E18:lI101|H105EA0F48 +105EA0F48:lI98|H105EA1078 +105EA1078:lI105|H105EA1178 +105EA1178:lI110|N +105E9C0A8:lH105E9C1E8|N +105E9C1E8:lI47|H105E9C328 +105E9C328:lI111|H105E9C468 +105E9C468:lI112|H105E9C5A8 +105E9C5A8:lI116|H105E9C6E8 +105E9C6E8:lI47|H105E9C828 +105E9C828:lI104|H105E9C968 +105E9C968:lI111|H105E9CAA8 +105E9CAA8:lI109|H105E9CBE8 +105E9CBE8:lI101|H105E9CD28 +105E9CD28:lI98|H105E9CE68 +105E9CE68:lI114|H105E9CFA8 +105E9CFA8:lI101|H105E9D0E8 +105E9D0E8:lI119|H105E9D228 +105E9D228:lI47|H105E9D368 +105E9D368:lI67|H105E9D4A8 +105E9D4A8:lI101|H105E9D5E8 +105E9D5E8:lI108|H105E9D728 +105E9D728:lI108|H105E9D868 +105E9D868:lI97|H105E9D9A8 +105E9D9A8:lI114|H105E9DAE8 +105E9DAE8:lI47|H105E9DC28 +105E9DC28:lI101|H105E9DD68 +105E9DD68:lI114|H105E9DEA8 +105E9DEA8:lI108|H105E9DFE8 +105E9DFE8:lI97|H105E9E128 +105E9E128:lI110|H105E9E268 +105E9E268:lI103|H105E9E3A8 +105E9E3A8:lI47|H105E9E4E8 +105E9E4E8:lI50|H105E9E628 +105E9E628:lI54|H105E9E768 +105E9E768:lI46|H105E9E8A8 +105E9E8A8:lI48|H105E9E9E8 +105E9E9E8:lI46|H105E9EB28 +105E9EB28:lI50|H105E9EC68 +105E9EC68:lI47|H105E9EDA8 +105E9EDA8:lI108|H105E9EEE8 +105E9EEE8:lI105|H105E9F028 +105E9F028:lI98|H105E9F168 +105E9F168:lI47|H105E9F2A8 +105E9F2A8:lI101|H105E9F3E8 +105E9F3E8:lI114|H105E9F528 +105E9F528:lI108|H105E9F668 +105E9F668:lI97|H105E9F798 +105E9F798:lI110|H105E9F8C8 +105E9F8C8:lI103|H105E9F9F8 +105E9F9F8:lI47|H105E9FB28 +105E9FB28:lI108|H105E9FC58 +105E9FC58:lI105|H105E9FD88 +105E9FD88:lI98|H105E9FEB8 +105E9FEB8:lI47|H105E9FFE8 +105E9FFE8:lI115|H105EA0118 +105EA0118:lI116|H105EA0248 +105EA0248:lI100|H105EA0378 +105EA0378:lI108|H105EA04A8 +105EA04A8:lI105|H105EA05D8 +105EA05D8:lI98|H105EA0708 +105EA0708:lI45|H105EA0838 +105EA0838:lI53|H105EA0968 +105EA0968:lI46|H105EA0A98 +105EA0A98:lI48|H105EA0BC8 +105EA0BC8:lI46|H105EA0CF8 +105EA0CF8:lI50|H105EA0E28 +105EA0E28:lI47|H105EA0F58 +105EA0F58:lI101|H105EA1088 +105EA1088:lI98|H105EA1188 +105EA1188:lI105|H105EA1278 +105EA1278:lI110|N +105E9B368:t6:A5:state,A5:efile,N,A6:noport,I360000,H105E9B348 +105E9B348:t3:AA:prim_state,A5:false,A9:undefined +=proc_dictionary:<0.42.0> +H105DBEDE0 +H105DBEDF8 +H105DBEE10 +=proc_stack:<0.42.0> +y0:N +y1:A8:infinity +y2:H105DBEDB0 +y3:H105DB3618 +y4:A6:logger +y5:P<0.9.0> +0x0000000105db5e48:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105db5e68:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.42.0> +105DBEDB0:t5:AE:callback_cache,AD:logger_server,H105DBEE28,H105DBEE50,H105DBEE78 +105DBEE78:E20:g3F3DWxvZ2dlcl9zZXJ2ZXJ3C2hhbmRsZV9pbmZvYQI= +105DBEE50:E20:g3F3DWxvZ2dlcl9zZXJ2ZXJ3C2hhbmRsZV9jYXN0YQI= +105DBEE28:E20:g3F3DWxvZ2dlcl9zZXJ2ZXJ3C2hhbmRsZV9jYWxsYQM= +105DB3618:t5:A5:state,H105DBED98,A9:undefined,H28005B328,A9:undefined +105DBED98:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAAK+R+vYAAd/g02c= +105DBEDE0:t2:AA:$ancestors,H105DBEEA0 +105DBEEA0:lP<0.9.0>|N +105DBEDF8:t2:A12:$logger_cb_process,A4:true +105DBEE10:t2:AD:$initial_call,H105DBEEB0 +105DBEEB0:t3:AD:logger_server,A4:init,I1 +=proc_dictionary:<0.44.0> +H10665ACF8 +H10665AD10 +=proc_stack:<0.44.0> +y0:N +y1:A8:infinity +y2:H10665ACC8 +y3:H105E81EB0 +y4:A16:application_controller +y5:P<0.9.0> +0x0000000105e9b338:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.44.0> +10665ACC8:t5:AE:callback_cache,A16:application_controller,H10665AD48,H10665AD70,H10665AD98 +10665AD98:E29:g3F3FmFwcGxpY2F0aW9uX2NvbnRyb2xsZXJ3C2hhbmRsZV9pbmZvYQI= +10665AD70:E29:g3F3FmFwcGxpY2F0aW9uX2NvbnRyb2xsZXJ3C2hhbmRsZV9jYXN0YQI= +10665AD48:E29:g3F3FmFwcGxpY2F0aW9uX2NvbnRyb2xsZXJ3C2hhbmRsZV9jYWxsYQM= +105E81EB0:t9:A5:state,N,N,N,H105E81E78,N,H105E81EA0,N,N +105E81EA0:lH105E81E88|H105E81608 +105E81E88:t2:A7:aoc2023,A9:temporary +105E81608:lH105E815F0|H105E633A0 +105E815F0:t2:A8:gleeunit,A9:temporary +105E633A0:lH105E63420|H105E63438 +105E63420:t2:A7:adglent,A9:temporary +105E63438:lH105E634A0|H106693B38 +105E634A0:t2:A3:tom,A9:temporary +106693B38:lH106693B60|H106688C50 +106693B60:t2:AA:simplifile,A9:temporary +106688C50:lH106688CF0|H106688D08 +106688CF0:t2:A5:glint,A9:temporary +106688D08:lH106688D90|H106688B10 +106688D90:t2:A4:snag,A9:temporary +106688B10:lH106688B38|H106688980 +106688B38:t2:A9:gleam_otp,A9:temporary +106688980:lH1066889B8|H1066889D0 +1066889B8:t2:AB:gleam_httpc,A9:temporary +1066889D0:lH106688A08|H106688A20 +106688A08:t2:A3:ssl,A9:temporary +106688A20:lH106688A58|H106688A70 +106688A58:t2:AA:public_key,A9:temporary +106688A70:lH106688A98|H106677B00 +106688A98:t2:A4:asn1,A9:temporary +106677B00:lH106677B90|H106664070 +106677B90:t2:A6:crypto,A9:temporary +106664070:lH106664100|H10665B320 +106664100:t2:A5:inets,A9:temporary +10665B320:lH10665B370|H10665B198 +10665B370:t2:AA:gleam_http,A9:temporary +10665B198:lH10665B1E8|H10665AF00 +10665B1E8:t2:AC:gleam_erlang,A9:temporary +10665AF00:lH10665AF60|H10665AF78 +10665AF60:t2:A3:gap,A9:temporary +10665AF78:lH10665AFC0|H10665AFD8 +10665AFC0:t2:A14:gleam_community_ansi,A9:temporary +10665AFD8:lH10665B020|H10665B038 +10665B020:t2:A16:gleam_community_colour,A9:temporary +10665B038:lH10665B070|H10665AD38 +10665B070:t2:AC:gleam_stdlib,A9:temporary +10665AD38:lH10665ADF8|H10665AE10 +10665ADF8:t2:A6:stdlib,A9:permanent +10665AE10:lH10665AE38|N +10665AE38:t2:A6:kernel,A9:permanent +105E81E78:lH105E81E60|H105E815E0 +105E81E60:t2:A7:aoc2023,A9:undefined +105E815E0:lH105E815C8|H105E63390 +105E815C8:t2:A8:gleeunit,A9:undefined +105E63390:lH105E633F8|H105E63410 +105E633F8:t2:A7:adglent,A9:undefined +105E63410:lH105E63488|H106693B28 +105E63488:t2:A3:tom,A9:undefined +106693B28:lH106693B48|H106688C40 +106693B48:t2:AA:simplifile,A9:undefined +106688C40:lH106688CC8|H106688CE0 +106688CC8:t2:A5:glint,A9:undefined +106688CE0:lH106688D78|H106688B00 +106688D78:t2:A4:snag,A9:undefined +106688B00:lH106688B20|H106688970 +106688B20:t2:A9:gleam_otp,A9:undefined +106688970:lH106688990|H1066889A8 +106688990:t2:AB:gleam_httpc,A9:undefined +1066889A8:lH1066889E0|H1066889F8 +1066889E0:t2:A3:ssl,P<0.102.0> +1066889F8:lH106688A30|H106688A48 +106688A30:t2:AA:public_key,A9:undefined +106688A48:lH106688A80|H106677AF0 +106688A80:t2:A4:asn1,A9:undefined +106677AF0:lH106677B78|H106664060 +106677B78:t2:A6:crypto,A9:undefined +106664060:lH1066640E8|H10665B310 +1066640E8:t2:A5:inets,P<0.90.0> +10665B310:lH10665B358|H10665B188 +10665B358:t2:AA:gleam_http,A9:undefined +10665B188:lH10665B1D0|H10665AEF0 +10665B1D0:t2:AC:gleam_erlang,A9:undefined +10665AEF0:lH10665AF38|H10665AF50 +10665AF38:t2:A3:gap,A9:undefined +10665AF50:lH10665AF98|H10665AFB0 +10665AF98:t2:A14:gleam_community_ansi,A9:undefined +10665AFB0:lH10665AFF8|H10665B010 +10665AFF8:t2:A16:gleam_community_colour,A9:undefined +10665B010:lH10665B058|H10665AD28 +10665B058:t2:AC:gleam_stdlib,A9:undefined +10665AD28:lH10665ADD0|H10665ADE8 +10665ADD0:t2:A6:stdlib,A9:undefined +10665ADE8:lH10665AE20|N +10665AE20:t2:A6:kernel,P<0.46.0> +10665ACF8:t2:AA:$ancestors,H10665ADC0 +10665ADC0:lP<0.9.0>|N +10665AD10:t2:AD:$initial_call,H280046B58 +=proc_dictionary:<0.46.0> +H105D9A980 +H105D9A9B8 +=proc_stack:<0.46.0> +y0:H105D9AB18 +y1:P<0.44.0> +0x0000000105d9ac18:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105d9ac38:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.46.0> +105D9AB18:t7:A5:state,P<0.47.0>,H105D9A0A0,N,I0,A4:init,N +105D9A0A0:t8:A9:appl_data,A6:kernel,H105D9A8F0,A9:undefined,H105D9A0E8,H105D9A710,A8:infinity,A8:infinity +105D9A710:lAB:application|H105D9A700 +105D9A700:lA16:application_controller|H105D9A6F0 +105D9A6F0:lA12:application_master|H105D9A6E0 +105D9A6E0:lA13:application_starter|H105D9A6D0 +105D9A6D0:lA4:auth|H105D9A6C0 +105D9A6C0:lA4:code|H105D9A6B0 +105D9A6B0:lAB:code_server|H105D9A6A0 +105D9A6A0:lA9:dist_util|H105D9A690 +105D9A690:lAF:erl_boot_server|H105D9A680 +105D9A680:lA12:erl_compile_server|H105D9A670 +105D9A670:lA10:erl_distribution|H105D9A660 +105D9A660:lAF:erl_erts_errors|H105D9A650 +105D9A650:lA9:erl_reply|H105D9A640 +105D9A640:lA11:erl_kernel_errors|H105D9A630 +105D9A630:lA12:erl_signal_handler|H105D9A620 +105D9A620:lA4:erpc|H105D9A610 +105D9A610:lAD:error_handler|H105D9A600 +105D9A600:lAC:error_logger|H105D9A5F0 +105D9A5F0:lA4:file|H105D9A5E0 +105D9A5E0:lAB:file_server|H105D9A5D0 +105D9A5D0:lAE:file_io_server|H105D9A5C0 +105D9A5C0:lA6:global|H105D9A5B0 +105D9A5B0:lAC:global_group|H105D9A5A0 +105D9A5A0:lAD:global_search|H105D9A590 +105D9A590:lA5:group|H105D9A580 +105D9A580:lAD:group_history|H105D9A570 +105D9A570:lA5:heart|H105D9A560 +105D9A560:lA9:inet6_tcp|H105D9A550 +105D9A550:lAE:inet6_tcp_dist|H105D9A540 +105D9A540:lA9:inet6_udp|H105D9A530 +105D9A530:lAA:inet6_sctp|H105D9A520 +105D9A520:lAB:inet_config|H105D9A510 +105D9A510:lAE:inet_epmd_dist|H105D9A500 +105D9A500:lA10:inet_epmd_socket|H105D9A4F0 +105D9A4F0:lAA:inet_hosts|H105D9A4E0 +105D9A4E0:lA13:inet_gethost_native|H105D9A4D0 +105D9A4D0:lAD:inet_tcp_dist|H105D9A4C0 +105D9A4C0:lA6:kernel|H105D9A4B0 +105D9A4B0:lAD:kernel_config|H105D9A4A0 +105D9A4A0:lAB:kernel_refc|H105D9A490 +105D9A490:lA9:local_tcp|H105D9A480 +105D9A480:lA9:local_udp|H105D9A470 +105D9A470:lA6:logger|H105D9A460 +105D9A460:lAE:logger_backend|H105D9A450 +105D9A450:lAD:logger_config|H105D9A440 +105D9A440:lA11:logger_disk_log_h|H105D9A430 +105D9A430:lAE:logger_filters|H105D9A420 +105D9A420:lA10:logger_formatter|H105D9A410 +105D9A410:lAF:logger_h_common|H105D9A400 +105D9A400:lA16:logger_handler_watcher|H105D9A3F0 +105D9A3F0:lAA:logger_olp|H105D9A3E0 +105D9A3E0:lAC:logger_proxy|H105D9A3D0 +105D9A3D0:lAD:logger_server|H105D9A3C0 +105D9A3C0:lAF:logger_simple_h|H105D9A3B0 +105D9A3B0:lAC:logger_std_h|H105D9A3A0 +105D9A3A0:lAA:logger_sup|H105D9A390 +105D9A390:lA3:net|H105D9A380 +105D9A380:lA7:net_adm|H105D9A370 +105D9A370:lAA:net_kernel|H105D9A360 +105D9A360:lA2:os|H105D9A350 +105D9A350:lA8:ram_file|H105D9A340 +105D9A340:lA3:rpc|H105D9A330 +105D9A330:lA8:user_drv|H105D9A320 +105D9A320:lA8:user_sup|H105D9A310 +105D9A310:lA8:prim_tty|H105D9A300 +105D9A300:lA8:disk_log|H105D9A2F0 +105D9A2F0:lAA:disk_log_1|H105D9A2E0 +105D9A2E0:lAF:disk_log_server|H105D9A2D0 +105D9A2D0:lAC:disk_log_sup|H105D9A2C0 +105D9A2C0:lA7:dist_ac|H105D9A2B0 +105D9A2B0:lA8:erl_ddll|H105D9A2A0 +105D9A2A0:lA8:erl_epmd|H105D9A290 +105D9A290:lAA:erts_debug|H105D9A280 +105D9A280:lA7:gen_tcp|H105D9A270 +105D9A270:lAE:gen_tcp_socket|H105D9A260 +105D9A260:lA7:gen_udp|H105D9A250 +105D9A250:lAE:gen_udp_socket|H105D9A240 +105D9A240:lA8:gen_sctp|H105D9A230 +105D9A230:lA4:inet|H105D9A220 +105D9A220:lA7:inet_db|H105D9A210 +105D9A210:lA8:inet_dns|H105D9A200 +105D9A200:lAA:inet_parse|H105D9A1F0 +105D9A1F0:lA8:inet_res|H105D9A1E0 +105D9A1E0:lA8:inet_tcp|H105D9A1D0 +105D9A1D0:lA8:inet_udp|H105D9A1C0 +105D9A1C0:lA9:inet_sctp|H105D9A1B0 +105D9A1B0:lA2:pg|H105D9A1A0 +105D9A1A0:lA3:pg2|H105D9A190 +105D9A190:lAB:raw_file_io|H105D9A180 +105D9A180:lA16:raw_file_io_compressed|H105D9A170 +105D9A170:lA13:raw_file_io_deflate|H105D9A160 +105D9A160:lA13:raw_file_io_delayed|H105D9A150 +105D9A150:lA13:raw_file_io_inflate|H105D9A140 +105D9A140:lA10:raw_file_io_list|H105D9A130 +105D9A130:lA9:seq_trace|H105D9A120 +105D9A120:lA6:socket|H105D9A110 +105D9A110:lAE:standard_error|H105D9A100 +105D9A100:lAF:wrap_log_reader|N +105D9A0E8:t2:A6:kernel,N +105D9A8F0:lA16:application_controller|H105D9A8E0 +105D9A8E0:lA9:erl_reply|H105D9A8D0 +105D9A8D0:lA4:auth|H105D9A8C0 +105D9A8C0:lAB:boot_server|H105D9A8B0 +105D9A8B0:lAB:code_server|H105D9A8A0 +105D9A8A0:lAF:disk_log_server|H105D9A890 +105D9A890:lAC:disk_log_sup|H105D9A880 +105D9A880:lAF:erl_prim_loader|H105D9A870 +105D9A870:lAC:error_logger|H105D9A860 +105D9A860:lAD:file_server_2|H105D9A850 +105D9A850:lAF:fixtable_server|H105D9A840 +105D9A840:lAC:global_group|H105D9A830 +105D9A830:lA12:global_name_server|H105D9A820 +105D9A820:lA5:heart|H105D9A810 +105D9A810:lA4:init|H105D9A800 +105D9A800:lAD:kernel_config|H105D9A7F0 +105D9A7F0:lAB:kernel_refc|H105D9A7E0 +105D9A7E0:lAA:kernel_sup|H105D9A7D0 +105D9A7D0:lA6:logger|H105D9A7C0 +105D9A7C0:lA16:logger_handler_watcher|H105D9A7B0 +105D9A7B0:lAA:logger_sup|H105D9A7A0 +105D9A7A0:lAA:net_kernel|H105D9A790 +105D9A790:lA7:net_sup|H105D9A780 +105D9A780:lA3:rex|H105D9A770 +105D9A770:lA4:user|H105D9A760 +105D9A760:lA9:os_server|H105D9A750 +105D9A750:lAB:ddll_server|H105D9A740 +105D9A740:lA8:erl_epmd|H105D9A730 +105D9A730:lA7:inet_db|H105D9A720 +105D9A720:lA2:pg|N +105D9A980:t2:AA:$ancestors,H105D9A970 +105D9A970:lP<0.45.0>|N +105D9A9B8:t2:AD:$initial_call,H105D9A998 +105D9A998:t3:A12:application_master,A4:init,I4 +=proc_stack:<0.47.0> +y0:N +y1:N +y2:A6:kernel +y3:P<0.49.0> +y4:P<0.46.0> +0x0000000105d8fb88:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.47.0> +=proc_dictionary:<0.49.0> +H105D922F0 +H105D92308 +=proc_stack:<0.49.0> +y0:N +y1:A8:infinity +y2:H105D9E530 +y3:H105D9E918 +y4:AA:kernel_sup +y5:P<0.47.0> +0x0000000105d9fcf0:SReturn addr 0x3E951BC (proc_lib:wake_up/3 + 220) +y0:N +y1:N +y2:SCatch 0x3E951E4 (proc_lib:wake_up/3 + 260) +0x0000000105d9fd10:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.49.0> +105D9E530:t5:AE:callback_cache,AA:supervisor,H105D9E4B8,H105D9E4E0,H105D9E508 +105D9E508:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI= +105D9E4E0:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI= +105D9E4B8:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM= +105D9E918:tC:A5:state,H280043650,AB:one_for_all,H105D9E900,A9:undefined,I0,I1,N,I0,A5:never,A6:kernel,N +105D9E900:t2:H105D9E310,H105D9E870 +105D9E870:MfF:H105D92320:H105D9B928,H105D9E820,H105D9C288,H105D9AD48,H105D929C8,H105D9DF28,H105D92918,H105D9B658,H105D9AD98,H105D9D5A8,H105D9CC18,H105D92A18,H105D926C0,H105D9ADE8,H105D9E218 +105D92320:tF:A11:erl_signal_server,A7:on_load,A4:user,A12:global_name_server,AE:standard_error,AB:kernel_refc,AB:code_server,AC:global_group,A7:inet_db,AD:kernel_config,AA:logger_sup,AD:file_server_2,A7:net_sup,A3:rex,AF:kernel_safe_sup +105D9E218:t9:A5:child,P<0.75.0>,AF:kernel_safe_sup,H280043BC8,A9:permanent,A5:false,A8:infinity,AA:supervisor,H280043BB8 +105D9ADE8:t9:A5:child,P<0.56.0>,A3:rex,H280044320,A9:permanent,A5:false,I2000,A6:worker,H280044310 +105D926C0:t9:A5:child,A9:undefined,A7:net_sup,H280044110,A9:permanent,A5:false,A8:infinity,AA:supervisor,H280044100 +105D92A18:t9:A5:child,P<0.53.0>,AD:file_server_2,H280043788,A9:permanent,A5:false,I2000,A6:worker,H280043748 +105D9CC18:t9:A5:child,P<0.70.0>,AA:logger_sup,H2800439B8,A9:permanent,A5:false,A8:infinity,AA:supervisor,H2800439A8 +105D9D5A8:t9:A5:child,P<0.73.0>,AD:kernel_config,H280043A68,A9:permanent,A5:false,I2000,A6:worker,H280043A58 +105D9AD98:t9:A5:child,P<0.55.0>,A7:inet_db,H280044040,A9:permanent,A5:false,I2000,A6:worker,H280044030 +105D9B658:t9:A5:child,P<0.61.0>,AC:global_group,H2800441C0,A9:permanent,A5:false,I2000,A6:worker,H2800441B0 +105D92918:t9:A5:child,P<0.50.0>,AB:code_server,H280043E60,A9:permanent,A5:false,I2000,A6:worker,H280043E50 +105D9DF28:t9:A5:child,P<0.74.0>,AB:kernel_refc,H280043B18,A9:permanent,A5:false,I2000,A6:worker,H280043B08 +105D929C8:t9:A5:child,P<0.51.0>,AE:standard_error,H280043DB0,A9:temporary,A5:false,I2000,AA:supervisor,H280043DA0 +105D9AD48:t9:A5:child,P<0.58.0>,A12:global_name_server,H280044270,A9:permanent,A5:false,I2000,A6:worker,H280044260 +105D9C288:t9:A5:child,P<0.64.0>,A4:user,H280043908,A9:temporary,A5:false,I2000,AA:supervisor,H2800438F8 +105D9E820:t9:A5:child,A9:undefined,A7:on_load,H280043CC0,A9:transient,A5:false,I2000,A6:worker,H280043CB0 +105D9B928:t9:A5:child,P<0.63.0>,A11:erl_signal_server,H280043F68,A9:permanent,A5:false,I2000,A6:worker,A7:dynamic +105D9E310:lAF:kernel_safe_sup|H105D9E020 +105D9E020:lAB:kernel_refc|H105D9D6A0 +105D9D6A0:lAD:kernel_config|H105D9CD10 +105D9CD10:lAA:logger_sup|H105D9C380 +105D9C380:lA4:user|H105D9BA20 +105D9BA20:lA11:erl_signal_server|H105D9B750 +105D9B750:lAC:global_group|H105D9AC78 +105D9AC78:lA7:net_sup|H105D9AD38 +105D9AD38:lA12:global_name_server|H105D9AE78 +105D9AE78:lA3:rex|H105D9AE98 +105D9AE98:lA7:inet_db|H105D92A68 +105D92A68:lA7:on_load|H105D92A78 +105D92A78:lAD:file_server_2|H105D92A88 +105D92A88:lAE:standard_error|H105D92968 +105D92968:lAB:code_server|N +105D922F0:t2:AA:$ancestors,H105D92838 +105D92838:lP<0.47.0>|N +105D92308:t2:AD:$initial_call,H105D92848 +105D92848:t3:AA:supervisor,A6:kernel,I1 +=proc_stack:<0.50.0> +y0:N +y1:P<0.49.0> +y2:H106607FF8 +0x0000000106638248:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.50.0> +106607FF8:t8:A5:state,P<0.49.0>,H1071F0038,H106607FC8,AB:code_server,AA:code_names,AB:interactive,N +106607FC8:lH106604450|H106607FB8 +106604450:t2:H1071F0078,A7:nocache +1071F0078:lI47|H1071F0638 +1071F0638:lI85|H1071F18C0 +1071F18C0:lI115|H1071F3B38 +1071F3B38:lI101|H1071F6350 +1071F6350:lI114|H1071F8FA0 +1071F8FA0:lI115|H1071FBEE0 +1071FBEE0:lI47|H1071FEF98 +1071FEF98:lI110|H107202140 +107202140:lI105|H107205380 +107205380:lI99|H107208678 +107208678:lI104|H10720B948 +10720B948:lI111|H10720EC08 +10720EC08:lI108|H107211F68 +107211F68:lI97|H107215440 +107215440:lI115|H107218AD0 +107218AD0:lI99|H10721C300 +10721C300:lI97|H10721FA00 +10721FA00:lI114|H107222EF8 +107222EF8:lI108|H107226060 +107226060:lI115|H107228E48 +107228E48:lI111|H10722B880 +10722B880:lI110|H10722DF58 +10722DF58:lI47|H107230380 +107230380:lI86|H1072324F8 +1072324F8:lI83|H107234360 +107234360:lI32|H107235EC8 +107235EC8:lI67|H1072377C0 +1072377C0:lI111|H107238E48 +107238E48:lI100|H10723A320 +10723A320:lI101|H10723B680 +10723B680:lI47|H10723C760 +10723C760:lI65|H10723D620 +10723D620:lI100|H10723E3A0 +10723E3A0:lI118|H10723EFB0 +10723EFB0:lI101|H10723FA80 +10723FA80:lI110|H1072403D0 +1072403D0:lI116|H107240C50 +107240C50:lI79|H1072413E0 +1072413E0:lI102|H107241B10 +107241B10:lI67|H1072421E0 +1072421E0:lI111|H107242850 +107242850:lI100|H107242E50 +107242E50:lI101|H1072433C0 +1072433C0:lI47|H107243900 +107243900:lI97|H107243DF0 +107243DF0:lI111|H1072442E0 +1072442E0:lI99|H107244790 +107244790:lI50|H107244C00 +107244C00:lI48|H107245060 +107245060:lI50|H1072454B0 +1072454B0:lI51|H1072458B0 +1072458B0:lI47|H107245C70 +107245C70:lI98|H107246000 +107246000:lI117|H107246390 +107246390:lI105|H107246720 +107246720:lI108|H107246AB0 +107246AB0:lI100|H107246DF0 +107246DF0:lI47|H107247110 +107247110:lI100|H107247430 +107247430:lI101|H107247740 +107247740:lI118|H107247A40 +107247A40:lI47|H107247D30 +107247D30:lI101|H107248010 +107248010:lI114|H1072482D0 +1072482D0:lI108|H107248590 +107248590:lI97|H107248840 +107248840:lI110|H107248AF0 +107248AF0:lI103|H107248D70 +107248D70:lI47|H107248FE0 +107248FE0:lI103|H107249250 +107249250:lI108|H1072494B0 +1072494B0:lI101|H107249710 +107249710:lI97|H107249960 +107249960:lI109|H107249B70 +107249B70:lI95|H107249D60 +107249D60:lI99|H107249F40 +107249F40:lI111|H10724A0F0 +10724A0F0:lI109|H10724A280 +10724A280:lI109|H10724A400 +10724A400:lI117|H10724A570 +10724A570:lI110|H10724A6C0 +10724A6C0:lI105|H10724A7F0 +10724A7F0:lI116|H10724A910 +10724A910:lI121|H10724AA10 +10724AA10:lI95|H10724AAF0 +10724AAF0:lI97|H10724ABB0 +10724ABB0:lI110|H10724AC40 +10724AC40:lI115|H10724ACA0 +10724ACA0:lI105|H10724ACF0 +10724ACF0:lI47|H10724AD40 +10724AD40:lI101|H10724AD80 +10724AD80:lI98|H10724ADC0 +10724ADC0:lI105|H10724ADF0 +10724ADF0:lI110|N +106607FB8:lH1066049F8|H106607FA8 +1066049F8:t2:H1071F0130,A7:nocache +1071F0130:lI47|H1071F0988 +1071F0988:lI85|H1071F1EB0 +1071F1EB0:lI115|H1071F4198 +1071F4198:lI101|H1071F69B8 +1071F69B8:lI114|H1071F9610 +1071F9610:lI115|H1071FC550 +1071FC550:lI47|H1071FF608 +1071FF608:lI110|H1072027B0 +1072027B0:lI105|H1072059F0 +1072059F0:lI99|H107208CC8 +107208CC8:lI104|H10720BF78 +10720BF78:lI111|H10720F1F8 +10720F1F8:lI108|H107212518 +107212518:lI97|H1072159A0 +1072159A0:lI115|H107219010 +107219010:lI99|H10721C770 +10721C770:lI97|H10721FDF0 +10721FDF0:lI114|H107223278 +107223278:lI108|H107226360 +107226360:lI115|H1072290F8 +1072290F8:lI111|H10722BAC0 +10722BAC0:lI110|H10722E128 +10722E128:lI47|H1072304E0 +1072304E0:lI86|H107232608 +107232608:lI83|H107234440 +107234440:lI32|H107235F88 +107235F88:lI67|H107237820 +107237820:lI111|H107238EA8 +107238EA8:lI100|H10723A380 +10723A380:lI101|H10723B6C0 +10723B6C0:lI47|H10723C790 +10723C790:lI65|H10723D650 +10723D650:lI100|H10723E3D0 +10723E3D0:lI118|H10723EFE0 +10723EFE0:lI101|H10723FAB0 +10723FAB0:lI110|H107240400 +107240400:lI116|H107240C80 +107240C80:lI79|H107241410 +107241410:lI102|H107241B40 +107241B40:lI67|H107242210 +107242210:lI111|H107242880 +107242880:lI100|H107242E80 +107242E80:lI101|H1072433F0 +1072433F0:lI47|H107243930 +107243930:lI97|H107243E20 +107243E20:lI111|H107244310 +107244310:lI99|H1072447C0 +1072447C0:lI50|H107244C30 +107244C30:lI48|H107245090 +107245090:lI50|H1072454E0 +1072454E0:lI51|H1072458E0 +1072458E0:lI47|H107245CA0 +107245CA0:lI98|H107246030 +107246030:lI117|H1072463C0 +1072463C0:lI105|H107246750 +107246750:lI108|H107246AE0 +107246AE0:lI100|H107246E20 +107246E20:lI47|H107247140 +107247140:lI100|H107247460 +107247460:lI101|H107247770 +107247770:lI118|H107247A70 +107247A70:lI47|H107247D60 +107247D60:lI101|H107248040 +107248040:lI114|H107248300 +107248300:lI108|H1072485C0 +1072485C0:lI97|H107248870 +107248870:lI110|H107248B10 +107248B10:lI103|H107248D90 +107248D90:lI47|H107249000 +107249000:lI97|H107249270 +107249270:lI100|H1072494D0 +1072494D0:lI103|H107249730 +107249730:lI108|H107249980 +107249980:lI101|H107249B90 +107249B90:lI110|H107249D80 +107249D80:lI116|H107249F60 +107249F60:lI47|H10724A110 +10724A110:lI101|H10724A2A0 +10724A2A0:lI98|H10724A420 +10724A420:lI105|H10724A590 +10724A590:lI110|N +106607FA8:lH106604FF0|H106607F98 +106604FF0:t2:H1071F01F0,A7:nocache +1071F01F0:lI47|H1071F0CB8 +1071F0CB8:lI85|H1071F2438 +1071F2438:lI115|H1071F4780 +1071F4780:lI101|H1071F6FA8 +1071F6FA8:lI114|H1071F9C00 +1071F9C00:lI115|H1071FCB40 +1071FCB40:lI47|H1071FFBF8 +1071FFBF8:lI110|H107202DA0 +107202DA0:lI105|H107205FD0 +107205FD0:lI99|H107209288 +107209288:lI104|H10720C4E8 +10720C4E8:lI111|H10720F708 +10720F708:lI108|H1072129B8 +1072129B8:lI97|H107215D80 +107215D80:lI115|H107219360 +107219360:lI99|H10721C9F0 +10721C9F0:lI97|H107220030 +107220030:lI114|H107223428 +107223428:lI108|H1072264E0 +1072264E0:lI115|H107229208 +107229208:lI111|H10722BB70 +10722BB70:lI110|H10722E1C8 +10722E1C8:lI47|H107230580 +107230580:lI86|H1072326A8 +1072326A8:lI83|H1072344C0 +1072344C0:lI32|H107235FE8 +107235FE8:lI67|H107237860 +107237860:lI111|H107238EE8 +107238EE8:lI100|H10723A3B0 +10723A3B0:lI101|H10723B6F0 +10723B6F0:lI47|H10723C7C0 +10723C7C0:lI65|H10723D680 +10723D680:lI100|H10723E400 +10723E400:lI118|H10723F010 +10723F010:lI101|H10723FAE0 +10723FAE0:lI110|H107240430 +107240430:lI116|H107240CB0 +107240CB0:lI79|H107241440 +107241440:lI102|H107241B70 +107241B70:lI67|H107242240 +107242240:lI111|H1072428B0 +1072428B0:lI100|H107242EB0 +107242EB0:lI101|H107243420 +107243420:lI47|H107243960 +107243960:lI97|H107243E50 +107243E50:lI111|H107244340 +107244340:lI99|H1072447F0 +1072447F0:lI50|H107244C60 +107244C60:lI48|H1072450C0 +1072450C0:lI50|H107245510 +107245510:lI51|H107245910 +107245910:lI47|H107245CD0 +107245CD0:lI98|H107246060 +107246060:lI117|H1072463F0 +1072463F0:lI105|H107246780 +107246780:lI108|H107246B10 +107246B10:lI100|H107246E50 +107246E50:lI47|H107247170 +107247170:lI100|H107247490 +107247490:lI101|H1072477A0 +1072477A0:lI118|H107247AA0 +107247AA0:lI47|H107247D90 +107247D90:lI101|H107248070 +107248070:lI114|H107248330 +107248330:lI108|H1072485F0 +1072485F0:lI97|H1072488A0 +1072488A0:lI110|H107248B30 +107248B30:lI103|H107248DB0 +107248DB0:lI47|H107249020 +107249020:lI103|H107249290 +107249290:lI108|H1072494F0 +1072494F0:lI101|H107249750 +107249750:lI97|H1072499A0 +1072499A0:lI109|H107249BB0 +107249BB0:lI95|H107249DA0 +107249DA0:lI101|H107249F80 +107249F80:lI114|H10724A130 +10724A130:lI108|H10724A2C0 +10724A2C0:lI97|H10724A440 +10724A440:lI110|H10724A5B0 +10724A5B0:lI103|H10724A6F0 +10724A6F0:lI47|H10724A810 +10724A810:lI101|H10724A930 +10724A930:lI98|H10724AA30 +10724AA30:lI105|H10724AB10 +10724AB10:lI110|N +106607F98:lH106605578|H106607F88 +106605578:t2:H1071F02A8,A7:nocache +1071F02A8:lI47|H1071F0E68 +1071F0E68:lI85|H1071F2688 +1071F2688:lI115|H1071F49E0 +1071F49E0:lI101|H1071F7208 +1071F7208:lI114|H1071F9E60 +1071F9E60:lI115|H1071FCDA0 +1071FCDA0:lI47|H1071FFE58 +1071FFE58:lI110|H107203000 +107203000:lI105|H107206230 +107206230:lI99|H1072094E8 +1072094E8:lI104|H10720C748 +10720C748:lI111|H10720F958 +10720F958:lI108|H107212BE8 +107212BE8:lI97|H107215FB0 +107215FB0:lI115|H107219590 +107219590:lI99|H10721CC00 +10721CC00:lI97|H107220210 +107220210:lI114|H1072235B8 +1072235B8:lI108|H107226650 +107226650:lI115|H107229348 +107229348:lI111|H10722BC90 +10722BC90:lI110|H10722E2D8 +10722E2D8:lI47|H107230660 +107230660:lI86|H107232758 +107232758:lI83|H107234550 +107234550:lI32|H107236078 +107236078:lI67|H1072378F0 +1072378F0:lI111|H107238F68 +107238F68:lI100|H10723A420 +10723A420:lI101|H10723B750 +10723B750:lI47|H10723C810 +10723C810:lI65|H10723D6B0 +10723D6B0:lI100|H10723E430 +10723E430:lI118|H10723F040 +10723F040:lI101|H10723FB10 +10723FB10:lI110|H107240460 +107240460:lI116|H107240CE0 +107240CE0:lI79|H107241470 +107241470:lI102|H107241BA0 +107241BA0:lI67|H107242270 +107242270:lI111|H1072428E0 +1072428E0:lI100|H107242EE0 +107242EE0:lI101|H107243450 +107243450:lI47|H107243990 +107243990:lI97|H107243E80 +107243E80:lI111|H107244370 +107244370:lI99|H107244820 +107244820:lI50|H107244C90 +107244C90:lI48|H1072450F0 +1072450F0:lI50|H107245540 +107245540:lI51|H107245940 +107245940:lI47|H107245D00 +107245D00:lI98|H107246090 +107246090:lI117|H107246420 +107246420:lI105|H1072467B0 +1072467B0:lI108|H107246B40 +107246B40:lI100|H107246E80 +107246E80:lI47|H1072471A0 +1072471A0:lI100|H1072474C0 +1072474C0:lI101|H1072477D0 +1072477D0:lI118|H107247AD0 +107247AD0:lI47|H107247DC0 +107247DC0:lI101|H107248090 +107248090:lI114|H107248350 +107248350:lI108|H107248610 +107248610:lI97|H1072488C0 +1072488C0:lI110|H107248B50 +107248B50:lI103|H107248DD0 +107248DD0:lI47|H107249040 +107249040:lI103|H1072492B0 +1072492B0:lI108|H107249510 +107249510:lI105|H107249770 +107249770:lI110|H1072499C0 +1072499C0:lI116|H107249BD0 +107249BD0:lI47|H107249DC0 +107249DC0:lI101|H107249FA0 +107249FA0:lI98|H10724A150 +10724A150:lI105|H10724A2E0 +10724A2E0:lI110|N +106607F88:lH106605B50|H106607F78 +106605B50:t2:H1071F0368,A7:nocache +1071F0368:lI47|H1071F1420 +1071F1420:lI85|H1071F3318 +1071F3318:lI115|H1071F5900 +1071F5900:lI101|H1071F8168 +1071F8168:lI114|H1071FADC0 +1071FADC0:lI115|H1071FDD00 +1071FDD00:lI47|H107200DB8 +107200DB8:lI110|H107203F60 +107203F60:lI105|H107207190 +107207190:lI99|H10720A418 +10720A418:lI104|H10720D678 +10720D678:lI111|H107210868 +107210868:lI108|H107213AD8 +107213AD8:lI97|H107216E90 +107216E90:lI115|H10721A400 +10721A400:lI99|H10721D9C0 +10721D9C0:lI97|H107220F10 +107220F10:lI114|H107224178 +107224178:lI108|H1072270C0 +1072270C0:lI115|H107229C28 +107229C28:lI111|H10722C450 +10722C450:lI110|H10722E998 +10722E998:lI47|H107230C10 +107230C10:lI86|H107232C08 +107232C08:lI83|H1072348E0 +1072348E0:lI32|H107236318 +107236318:lI67|H107237AE0 +107237AE0:lI111|H1072390F8 +1072390F8:lI100|H10723A590 +10723A590:lI101|H10723B850 +10723B850:lI47|H10723C8A0 +10723C8A0:lI65|H10723D710 +10723D710:lI100|H10723E470 +10723E470:lI118|H10723F080 +10723F080:lI101|H10723FB40 +10723FB40:lI110|H107240490 +107240490:lI116|H107240D10 +107240D10:lI79|H1072414A0 +1072414A0:lI102|H107241BD0 +107241BD0:lI67|H1072422A0 +1072422A0:lI111|H107242910 +107242910:lI100|H107242F10 +107242F10:lI101|H107243480 +107243480:lI47|H1072439C0 +1072439C0:lI97|H107243EB0 +107243EB0:lI111|H1072443A0 +1072443A0:lI99|H107244850 +107244850:lI50|H107244CC0 +107244CC0:lI48|H107245120 +107245120:lI50|H107245570 +107245570:lI51|H107245970 +107245970:lI47|H107245D30 +107245D30:lI98|H1072460C0 +1072460C0:lI117|H107246450 +107246450:lI105|H1072467E0 +1072467E0:lI108|H107246B70 +107246B70:lI100|H107246EA0 +107246EA0:lI47|H1072471C0 +1072471C0:lI100|H1072474E0 +1072474E0:lI101|H1072477F0 +1072477F0:lI118|H107247AF0 +107247AF0:lI47|H107247DE0 +107247DE0:lI101|H1072480B0 +1072480B0:lI114|H107248370 +107248370:lI108|H107248630 +107248630:lI97|H1072488E0 +1072488E0:lI110|H107248B70 +107248B70:lI103|H107248DF0 +107248DF0:lI47|H107249060 +107249060:lI103|H1072492D0 +1072492D0:lI108|H107249530 +107249530:lI101|H107249790 +107249790:lI97|H1072499E0 +1072499E0:lI109|H107249BF0 +107249BF0:lI95|H107249DE0 +107249DE0:lI104|H107249FC0 +107249FC0:lI116|H10724A170 +10724A170:lI116|H10724A300 +10724A300:lI112|H10724A470 +10724A470:lI47|H10724A5E0 +10724A5E0:lI101|H10724A720 +10724A720:lI98|H10724A840 +10724A840:lI105|H10724A960 +10724A960:lI110|N +106607F78:lH1066060B8|H106607F68 +1066060B8:t2:H1071F0430,A7:nocache +1071F0430:lI47|H1071F14D8 +1071F14D8:lI85|H1071F3448 +1071F3448:lI115|H1071F5A30 +1071F5A30:lI101|H1071F8298 +1071F8298:lI114|H1071FAEF0 +1071FAEF0:lI115|H1071FDE30 +1071FDE30:lI47|H107200EE8 +107200EE8:lI110|H107204090 +107204090:lI105|H1072072C0 +1072072C0:lI99|H10720A548 +10720A548:lI104|H10720D758 +10720D758:lI111|H107210908 +107210908:lI108|H107213B68 +107213B68:lI97|H107216F20 +107216F20:lI115|H10721A490 +10721A490:lI99|H10721DA40 +10721DA40:lI97|H107220F80 +107220F80:lI114|H1072241C8 +1072241C8:lI108|H107227100 +107227100:lI115|H107229C58 +107229C58:lI111|H10722C480 +10722C480:lI110|H10722E9C8 +10722E9C8:lI47|H107230C40 +107230C40:lI86|H107232C38 +107232C38:lI83|H107234910 +107234910:lI32|H107236348 +107236348:lI67|H107237B10 +107237B10:lI111|H107239128 +107239128:lI100|H10723A5C0 +10723A5C0:lI101|H10723B880 +10723B880:lI47|H10723C8D0 +10723C8D0:lI65|H10723D740 +10723D740:lI100|H10723E4A0 +10723E4A0:lI118|H10723F0B0 +10723F0B0:lI101|H10723FB70 +10723FB70:lI110|H1072404C0 +1072404C0:lI116|H107240D40 +107240D40:lI79|H1072414D0 +1072414D0:lI102|H107241C00 +107241C00:lI67|H1072422D0 +1072422D0:lI111|H107242940 +107242940:lI100|H107242F40 +107242F40:lI101|H1072434B0 +1072434B0:lI47|H1072439F0 +1072439F0:lI97|H107243EE0 +107243EE0:lI111|H1072443D0 +1072443D0:lI99|H107244880 +107244880:lI50|H107244CF0 +107244CF0:lI48|H107245150 +107245150:lI50|H1072455A0 +1072455A0:lI51|H1072459A0 +1072459A0:lI47|H107245D60 +107245D60:lI98|H1072460F0 +1072460F0:lI117|H107246480 +107246480:lI105|H107246810 +107246810:lI108|H107246BA0 +107246BA0:lI100|H107246ED0 +107246ED0:lI47|H1072471F0 +1072471F0:lI100|H107247510 +107247510:lI101|H107247810 +107247810:lI118|H107247B10 +107247B10:lI47|H107247E00 +107247E00:lI101|H1072480D0 +1072480D0:lI114|H107248390 +107248390:lI108|H107248650 +107248650:lI97|H107248900 +107248900:lI110|H107248B90 +107248B90:lI103|H107248E10 +107248E10:lI47|H107249080 +107249080:lI103|H1072492F0 +1072492F0:lI97|H107249550 +107249550:lI112|H1072497B0 +1072497B0:lI47|H107249A00 +107249A00:lI101|H107249C10 +107249C10:lI98|H107249E00 +107249E00:lI105|H107249FE0 +107249FE0:lI110|N +106607F68:lH106606680|H106607F58 +106606680:t2:H1071F0420,A7:nocache +1071F0420:lI47|H1071F14C8 +1071F14C8:lI85|H1071F3438 +1071F3438:lI115|H1071F5A20 +1071F5A20:lI101|H1071F8288 +1071F8288:lI114|H1071FAEE0 +1071FAEE0:lI115|H1071FDE20 +1071FDE20:lI47|H107200ED8 +107200ED8:lI110|H107204080 +107204080:lI105|H1072072B0 +1072072B0:lI99|H10720A538 +10720A538:lI104|H10720D748 +10720D748:lI111|H1072108F8 +1072108F8:lI108|H107213B58 +107213B58:lI97|H107216F10 +107216F10:lI115|H10721A480 +10721A480:lI99|H10721DA30 +10721DA30:lI97|H107220F70 +107220F70:lI114|H1072241B8 +1072241B8:lI108|H1072270F0 +1072270F0:lI115|H107229C48 +107229C48:lI111|H10722C470 +10722C470:lI110|H10722E9B8 +10722E9B8:lI47|H107230C30 +107230C30:lI86|H107232C28 +107232C28:lI83|H107234900 +107234900:lI32|H107236338 +107236338:lI67|H107237B00 +107237B00:lI111|H107239118 +107239118:lI100|H10723A5B0 +10723A5B0:lI101|H10723B870 +10723B870:lI47|H10723C8C0 +10723C8C0:lI65|H10723D730 +10723D730:lI100|H10723E490 +10723E490:lI118|H10723F0A0 +10723F0A0:lI101|H10723FB60 +10723FB60:lI110|H1072404B0 +1072404B0:lI116|H107240D30 +107240D30:lI79|H1072414C0 +1072414C0:lI102|H107241BF0 +107241BF0:lI67|H1072422C0 +1072422C0:lI111|H107242930 +107242930:lI100|H107242F30 +107242F30:lI101|H1072434A0 +1072434A0:lI47|H1072439E0 +1072439E0:lI97|H107243ED0 +107243ED0:lI111|H1072443C0 +1072443C0:lI99|H107244870 +107244870:lI50|H107244CE0 +107244CE0:lI48|H107245140 +107245140:lI50|H107245590 +107245590:lI51|H107245990 +107245990:lI47|H107245D50 +107245D50:lI98|H1072460E0 +1072460E0:lI117|H107246470 +107246470:lI105|H107246800 +107246800:lI108|H107246B90 +107246B90:lI100|H107246EC0 +107246EC0:lI47|H1072471E0 +1072471E0:lI100|H107247500 +107247500:lI101|H107247800 +107247800:lI118|H107247B00 +107247B00:lI47|H107247DF0 +107247DF0:lI101|H1072480C0 +1072480C0:lI114|H107248380 +107248380:lI108|H107248640 +107248640:lI97|H1072488F0 +1072488F0:lI110|H107248B80 +107248B80:lI103|H107248E00 +107248E00:lI47|H107249070 +107249070:lI103|H1072492E0 +1072492E0:lI108|H107249540 +107249540:lI101|H1072497A0 +1072497A0:lI97|H1072499F0 +1072499F0:lI109|H107249C00 +107249C00:lI95|H107249DF0 +107249DF0:lI111|H107249FD0 +107249FD0:lI116|H10724A180 +10724A180:lI112|H10724A310 +10724A310:lI47|H10724A480 +10724A480:lI101|H10724A5F0 +10724A5F0:lI98|H10724A730 +10724A730:lI105|H10724A850 +10724A850:lI110|N +106607F58:lH106606D18|H106607F48 +106606D18:t2:H1071F0358,A7:nocache +1071F0358:lI47|H1071F1410 +1071F1410:lI85|H1071F3308 +1071F3308:lI115|H1071F58F0 +1071F58F0:lI101|H1071F8158 +1071F8158:lI114|H1071FADB0 +1071FADB0:lI115|H1071FDCF0 +1071FDCF0:lI47|H107200DA8 +107200DA8:lI110|H107203F50 +107203F50:lI105|H107207180 +107207180:lI99|H10720A408 +10720A408:lI104|H10720D668 +10720D668:lI111|H107210858 +107210858:lI108|H107213AC8 +107213AC8:lI97|H107216E80 +107216E80:lI115|H10721A3F0 +10721A3F0:lI99|H10721D9B0 +10721D9B0:lI97|H107220F00 +107220F00:lI114|H107224168 +107224168:lI108|H1072270B0 +1072270B0:lI115|H107229C18 +107229C18:lI111|H10722C440 +10722C440:lI110|H10722E988 +10722E988:lI47|H107230C00 +107230C00:lI86|H107232BF8 +107232BF8:lI83|H1072348D0 +1072348D0:lI32|H107236308 +107236308:lI67|H107237AD0 +107237AD0:lI111|H1072390E8 +1072390E8:lI100|H10723A580 +10723A580:lI101|H10723B840 +10723B840:lI47|H10723C890 +10723C890:lI65|H10723D700 +10723D700:lI100|H10723E460 +10723E460:lI118|H10723F070 +10723F070:lI101|H10723FB30 +10723FB30:lI110|H107240480 +107240480:lI116|H107240D00 +107240D00:lI79|H107241490 +107241490:lI102|H107241BC0 +107241BC0:lI67|H107242290 +107242290:lI111|H107242900 +107242900:lI100|H107242F00 +107242F00:lI101|H107243470 +107243470:lI47|H1072439B0 +1072439B0:lI97|H107243EA0 +107243EA0:lI111|H107244390 +107244390:lI99|H107244840 +107244840:lI50|H107244CB0 +107244CB0:lI48|H107245110 +107245110:lI50|H107245560 +107245560:lI51|H107245960 +107245960:lI47|H107245D20 +107245D20:lI98|H1072460B0 +1072460B0:lI117|H107246440 +107246440:lI105|H1072467D0 +1072467D0:lI108|H107246B60 +107246B60:lI100|H107246E90 +107246E90:lI47|H1072471B0 +1072471B0:lI100|H1072474D0 +1072474D0:lI101|H1072477E0 +1072477E0:lI118|H107247AE0 +107247AE0:lI47|H107247DD0 +107247DD0:lI101|H1072480A0 +1072480A0:lI114|H107248360 +107248360:lI108|H107248620 +107248620:lI97|H1072488D0 +1072488D0:lI110|H107248B60 +107248B60:lI103|H107248DE0 +107248DE0:lI47|H107249050 +107249050:lI103|H1072492C0 +1072492C0:lI108|H107249520 +107249520:lI101|H107249780 +107249780:lI97|H1072499D0 +1072499D0:lI109|H107249BE0 +107249BE0:lI95|H107249DD0 +107249DD0:lI99|H107249FB0 +107249FB0:lI111|H10724A160 +10724A160:lI109|H10724A2F0 +10724A2F0:lI109|H10724A460 +10724A460:lI117|H10724A5D0 +10724A5D0:lI110|H10724A710 +10724A710:lI105|H10724A830 +10724A830:lI116|H10724A950 +10724A950:lI121|H10724AA50 +10724AA50:lI95|H10724AB20 +10724AB20:lI99|H10724ABC0 +10724ABC0:lI111|H10724AC50 +10724AC50:lI108|H10724ACB0 +10724ACB0:lI111|H10724AD00 +10724AD00:lI117|H10724AD50 +10724AD50:lI114|H10724AD90 +10724AD90:lI47|H10724ADD0 +10724ADD0:lI101|H10724AE00 +10724AE00:lI98|H10724AE20 +10724AE20:lI105|H10724AE40 +10724AE40:lI110|N +106607F48:lH106607300|H106607F38 +106607300:t2:H1071F0298,A7:nocache +1071F0298:lI47|H1071F0E58 +1071F0E58:lI85|H1071F2678 +1071F2678:lI115|H1071F49D0 +1071F49D0:lI101|H1071F71F8 +1071F71F8:lI114|H1071F9E50 +1071F9E50:lI115|H1071FCD90 +1071FCD90:lI47|H1071FFE48 +1071FFE48:lI110|H107202FF0 +107202FF0:lI105|H107206220 +107206220:lI99|H1072094D8 +1072094D8:lI104|H10720C738 +10720C738:lI111|H10720F948 +10720F948:lI108|H107212BD8 +107212BD8:lI97|H107215FA0 +107215FA0:lI115|H107219580 +107219580:lI99|H10721CBF0 +10721CBF0:lI97|H107220200 +107220200:lI114|H1072235A8 +1072235A8:lI108|H107226640 +107226640:lI115|H107229338 +107229338:lI111|H10722BC80 +10722BC80:lI110|H10722E2C8 +10722E2C8:lI47|H107230650 +107230650:lI86|H107232748 +107232748:lI83|H107234540 +107234540:lI32|H107236068 +107236068:lI67|H1072378E0 +1072378E0:lI111|H107238F58 +107238F58:lI100|H10723A410 +10723A410:lI101|H10723B740 +10723B740:lI47|H10723C800 +10723C800:lI65|H10723D6A0 +10723D6A0:lI100|H10723E420 +10723E420:lI118|H10723F030 +10723F030:lI101|H10723FB00 +10723FB00:lI110|H107240450 +107240450:lI116|H107240CD0 +107240CD0:lI79|H107241460 +107241460:lI102|H107241B90 +107241B90:lI67|H107242260 +107242260:lI111|H1072428D0 +1072428D0:lI100|H107242ED0 +107242ED0:lI101|H107243440 +107243440:lI47|H107243980 +107243980:lI97|H107243E70 +107243E70:lI111|H107244360 +107244360:lI99|H107244810 +107244810:lI50|H107244C80 +107244C80:lI48|H1072450E0 +1072450E0:lI50|H107245530 +107245530:lI51|H107245930 +107245930:lI47|H107245CF0 +107245CF0:lI98|H107246080 +107246080:lI117|H107246410 +107246410:lI105|H1072467A0 +1072467A0:lI108|H107246B30 +107246B30:lI100|H107246E70 +107246E70:lI47|H107247190 +107247190:lI100|H1072474B0 +1072474B0:lI101|H1072477C0 +1072477C0:lI118|H107247AC0 +107247AC0:lI47|H107247DB0 +107247DB0:lI101|H107248080 +107248080:lI114|H107248340 +107248340:lI108|H107248600 +107248600:lI97|H1072488B0 +1072488B0:lI110|H107248B40 +107248B40:lI103|H107248DC0 +107248DC0:lI47|H107249030 +107249030:lI103|H1072492A0 +1072492A0:lI108|H107249500 +107249500:lI101|H107249760 +107249760:lI97|H1072499B0 +1072499B0:lI109|H107249BC0 +107249BC0:lI95|H107249DB0 +107249DB0:lI104|H107249F90 +107249F90:lI116|H10724A140 +10724A140:lI116|H10724A2D0 +10724A2D0:lI112|H10724A450 +10724A450:lI99|H10724A5C0 +10724A5C0:lI47|H10724A700 +10724A700:lI101|H10724A820 +10724A820:lI98|H10724A940 +10724A940:lI105|H10724AA40 +10724AA40:lI110|N +106607F38:lH106607F20|H1066006B0 +106607F20:t2:H1071F01E0,A7:nocache +1071F01E0:lI47|H1071F0CA8 +1071F0CA8:lI85|H1071F2428 +1071F2428:lI115|H1071F4770 +1071F4770:lI101|H1071F6F98 +1071F6F98:lI114|H1071F9BF0 +1071F9BF0:lI115|H1071FCB30 +1071FCB30:lI47|H1071FFBE8 +1071FFBE8:lI110|H107202D90 +107202D90:lI105|H107205FC0 +107205FC0:lI99|H107209278 +107209278:lI104|H10720C4D8 +10720C4D8:lI111|H10720F6F8 +10720F6F8:lI108|H1072129A8 +1072129A8:lI97|H107215D70 +107215D70:lI115|H107219350 +107219350:lI99|H10721C9E0 +10721C9E0:lI97|H107220020 +107220020:lI114|H107223418 +107223418:lI108|H1072264D0 +1072264D0:lI115|H1072291F8 +1072291F8:lI111|H10722BB60 +10722BB60:lI110|H10722E1B8 +10722E1B8:lI47|H107230570 +107230570:lI86|H107232698 +107232698:lI83|H1072344B0 +1072344B0:lI32|H107235FD8 +107235FD8:lI67|H107237850 +107237850:lI111|H107238ED8 +107238ED8:lI100|H10723A3A0 +10723A3A0:lI101|H10723B6E0 +10723B6E0:lI47|H10723C7B0 +10723C7B0:lI65|H10723D670 +10723D670:lI100|H10723E3F0 +10723E3F0:lI118|H10723F000 +10723F000:lI101|H10723FAD0 +10723FAD0:lI110|H107240420 +107240420:lI116|H107240CA0 +107240CA0:lI79|H107241430 +107241430:lI102|H107241B60 +107241B60:lI67|H107242230 +107242230:lI111|H1072428A0 +1072428A0:lI100|H107242EA0 +107242EA0:lI101|H107243410 +107243410:lI47|H107243950 +107243950:lI97|H107243E40 +107243E40:lI111|H107244330 +107244330:lI99|H1072447E0 +1072447E0:lI50|H107244C50 +107244C50:lI48|H1072450B0 +1072450B0:lI50|H107245500 +107245500:lI51|H107245900 +107245900:lI47|H107245CC0 +107245CC0:lI98|H107246050 +107246050:lI117|H1072463E0 +1072463E0:lI105|H107246770 +107246770:lI108|H107246B00 +107246B00:lI100|H107246E40 +107246E40:lI47|H107247160 +107247160:lI100|H107247480 +107247480:lI101|H107247790 +107247790:lI118|H107247A90 +107247A90:lI47|H107247D80 +107247D80:lI101|H107248060 +107248060:lI114|H107248320 +107248320:lI108|H1072485E0 +1072485E0:lI97|H107248890 +107248890:lI110|H107248B20 +107248B20:lI103|H107248DA0 +107248DA0:lI47|H107249010 +107249010:lI103|H107249280 +107249280:lI108|H1072494E0 +1072494E0:lI101|H107249740 +107249740:lI97|H107249990 +107249990:lI109|H107249BA0 +107249BA0:lI95|H107249D90 +107249D90:lI115|H107249F70 +107249F70:lI116|H10724A120 +10724A120:lI100|H10724A2B0 +10724A2B0:lI108|H10724A430 +10724A430:lI105|H10724A5A0 +10724A5A0:lI98|H10724A6E0 +10724A6E0:lI47|H10724A800 +10724A800:lI101|H10724A920 +10724A920:lI98|H10724AA20 +10724AA20:lI105|H10724AB00 +10724AB00:lI110|N +1066006B0:lH106600708|H106600720 +106600708:t2:H1071F0120,A7:nocache +1071F0120:lI47|H1071F0978 +1071F0978:lI85|H1071F1EA0 +1071F1EA0:lI115|H1071F4188 +1071F4188:lI101|H1071F69A8 +1071F69A8:lI114|H1071F9600 +1071F9600:lI115|H1071FC540 +1071FC540:lI47|H1071FF5F8 +1071FF5F8:lI110|H1072027A0 +1072027A0:lI105|H1072059E0 +1072059E0:lI99|H107208CB8 +107208CB8:lI104|H10720BF68 +10720BF68:lI111|H10720F1E8 +10720F1E8:lI108|H107212508 +107212508:lI97|H107215990 +107215990:lI115|H107219000 +107219000:lI99|H10721C760 +10721C760:lI97|H10721FDE0 +10721FDE0:lI114|H107223268 +107223268:lI108|H107226350 +107226350:lI115|H1072290E8 +1072290E8:lI111|H10722BAB0 +10722BAB0:lI110|H10722E118 +10722E118:lI47|H1072304D0 +1072304D0:lI86|H1072325F8 +1072325F8:lI83|H107234430 +107234430:lI32|H107235F78 +107235F78:lI67|H107237810 +107237810:lI111|H107238E98 +107238E98:lI100|H10723A370 +10723A370:lI101|H10723B6B0 +10723B6B0:lI47|H10723C780 +10723C780:lI65|H10723D640 +10723D640:lI100|H10723E3C0 +10723E3C0:lI118|H10723EFD0 +10723EFD0:lI101|H10723FAA0 +10723FAA0:lI110|H1072403F0 +1072403F0:lI116|H107240C70 +107240C70:lI79|H107241400 +107241400:lI102|H107241B30 +107241B30:lI67|H107242200 +107242200:lI111|H107242870 +107242870:lI100|H107242E70 +107242E70:lI101|H1072433E0 +1072433E0:lI47|H107243920 +107243920:lI97|H107243E10 +107243E10:lI111|H107244300 +107244300:lI99|H1072447B0 +1072447B0:lI50|H107244C20 +107244C20:lI48|H107245080 +107245080:lI50|H1072454D0 +1072454D0:lI51|H1072458D0 +1072458D0:lI47|H107245C90 +107245C90:lI98|H107246020 +107246020:lI117|H1072463B0 +1072463B0:lI105|H107246740 +107246740:lI108|H107246AD0 +107246AD0:lI100|H107246E10 +107246E10:lI47|H107247130 +107247130:lI100|H107247450 +107247450:lI101|H107247760 +107247760:lI118|H107247A60 +107247A60:lI47|H107247D50 +107247D50:lI101|H107248030 +107248030:lI114|H1072482F0 +1072482F0:lI108|H1072485B0 +1072485B0:lI97|H107248860 +107248860:lI110|H107248B00 +107248B00:lI103|H107248D80 +107248D80:lI47|H107248FF0 +107248FF0:lI103|H107249260 +107249260:lI108|H1072494C0 +1072494C0:lI101|H107249720 +107249720:lI101|H107249970 +107249970:lI117|H107249B80 +107249B80:lI110|H107249D70 +107249D70:lI105|H107249F50 +107249F50:lI116|H10724A100 +10724A100:lI47|H10724A290 +10724A290:lI101|H10724A410 +10724A410:lI98|H10724A580 +10724A580:lI105|H10724A6D0 +10724A6D0:lI110|N +106600720:lH106600778|H106600790 +106600778:t2:H1071F0068,A7:nocache +1071F0068:lI47|H1071F0628 +1071F0628:lI85|H1071F18B0 +1071F18B0:lI115|H1071F3B28 +1071F3B28:lI101|H1071F6340 +1071F6340:lI114|H1071F8F90 +1071F8F90:lI115|H1071FBED0 +1071FBED0:lI47|H1071FEF88 +1071FEF88:lI110|H107202130 +107202130:lI105|H107205370 +107205370:lI99|H107208668 +107208668:lI104|H10720B938 +10720B938:lI111|H10720EBF8 +10720EBF8:lI108|H107211F58 +107211F58:lI97|H107215430 +107215430:lI115|H107218AC0 +107218AC0:lI99|H10721C2F0 +10721C2F0:lI97|H10721F9F0 +10721F9F0:lI114|H107222EE8 +107222EE8:lI108|H107226050 +107226050:lI115|H107228E38 +107228E38:lI111|H10722B870 +10722B870:lI110|H10722DF48 +10722DF48:lI47|H107230370 +107230370:lI86|H1072324E8 +1072324E8:lI83|H107234350 +107234350:lI32|H107235EB8 +107235EB8:lI67|H1072377B0 +1072377B0:lI111|H107238E38 +107238E38:lI100|H10723A310 +10723A310:lI101|H10723B670 +10723B670:lI47|H10723C750 +10723C750:lI65|H10723D610 +10723D610:lI100|H10723E390 +10723E390:lI118|H10723EFA0 +10723EFA0:lI101|H10723FA70 +10723FA70:lI110|H1072403C0 +1072403C0:lI116|H107240C40 +107240C40:lI79|H1072413D0 +1072413D0:lI102|H107241B00 +107241B00:lI67|H1072421D0 +1072421D0:lI111|H107242840 +107242840:lI100|H107242E40 +107242E40:lI101|H1072433B0 +1072433B0:lI47|H1072438F0 +1072438F0:lI97|H107243DE0 +107243DE0:lI111|H1072442D0 +1072442D0:lI99|H107244780 +107244780:lI50|H107244BF0 +107244BF0:lI48|H107245050 +107245050:lI50|H1072454A0 +1072454A0:lI51|H1072458A0 +1072458A0:lI47|H107245C60 +107245C60:lI98|H107245FF0 +107245FF0:lI117|H107246380 +107246380:lI105|H107246710 +107246710:lI108|H107246AA0 +107246AA0:lI100|H107246DE0 +107246DE0:lI47|H107247100 +107247100:lI100|H107247420 +107247420:lI101|H107247730 +107247730:lI118|H107247A30 +107247A30:lI47|H107247D20 +107247D20:lI101|H107248000 +107248000:lI114|H1072482C0 +1072482C0:lI108|H107248580 +107248580:lI97|H107248830 +107248830:lI110|H107248AE0 +107248AE0:lI103|H107248D60 +107248D60:lI47|H107248FD0 +107248FD0:lI115|H107249240 +107249240:lI110|H1072494A0 +1072494A0:lI97|H107249700 +107249700:lI103|H107249950 +107249950:lI47|H107249B60 +107249B60:lI101|H107249D50 +107249D50:lI98|H107249F30 +107249F30:lI105|H10724A0E0 +10724A0E0:lI110|N +106600790:lH1066007E8|H106600800 +1066007E8:t2:H1071F0058,A7:nocache +1071F0058:lI47|H1071F0618 +1071F0618:lI85|H1071F18A0 +1071F18A0:lI115|H1071F3B18 +1071F3B18:lI101|H1071F6330 +1071F6330:lI114|H1071F8F80 +1071F8F80:lI115|H1071FBEC0 +1071FBEC0:lI47|H1071FEF78 +1071FEF78:lI110|H107202120 +107202120:lI105|H107205360 +107205360:lI99|H107208658 +107208658:lI104|H10720B928 +10720B928:lI111|H10720EBE8 +10720EBE8:lI108|H107211F48 +107211F48:lI97|H107215420 +107215420:lI115|H107218AB0 +107218AB0:lI99|H10721C2E0 +10721C2E0:lI97|H10721F9E0 +10721F9E0:lI114|H107222ED8 +107222ED8:lI108|H107226040 +107226040:lI115|H107228E28 +107228E28:lI111|H10722B860 +10722B860:lI110|H10722DF38 +10722DF38:lI47|H107230360 +107230360:lI86|H1072324D8 +1072324D8:lI83|H107234340 +107234340:lI32|H107235EA8 +107235EA8:lI67|H1072377A0 +1072377A0:lI111|H107238E28 +107238E28:lI100|H10723A300 +10723A300:lI101|H10723B660 +10723B660:lI47|H10723C740 +10723C740:lI65|H10723D600 +10723D600:lI100|H10723E380 +10723E380:lI118|H10723EF90 +10723EF90:lI101|H10723FA60 +10723FA60:lI110|H1072403B0 +1072403B0:lI116|H107240C30 +107240C30:lI79|H1072413C0 +1072413C0:lI102|H107241AF0 +107241AF0:lI67|H1072421C0 +1072421C0:lI111|H107242830 +107242830:lI100|H107242E30 +107242E30:lI101|H1072433A0 +1072433A0:lI47|H1072438E0 +1072438E0:lI97|H107243DD0 +107243DD0:lI111|H1072442C0 +1072442C0:lI99|H107244770 +107244770:lI50|H107244BE0 +107244BE0:lI48|H107245040 +107245040:lI50|H107245490 +107245490:lI51|H107245890 +107245890:lI47|H107245C50 +107245C50:lI98|H107245FE0 +107245FE0:lI117|H107246370 +107246370:lI105|H107246700 +107246700:lI108|H107246A90 +107246A90:lI100|H107246DD0 +107246DD0:lI47|H1072470F0 +1072470F0:lI100|H107247410 +107247410:lI101|H107247720 +107247720:lI118|H107247A20 +107247A20:lI47|H107247D10 +107247D10:lI101|H107247FF0 +107247FF0:lI114|H1072482B0 +1072482B0:lI108|H107248570 +107248570:lI97|H107248820 +107248820:lI110|H107248AD0 +107248AD0:lI103|H107248D50 +107248D50:lI47|H107248FC0 +107248FC0:lI116|H107249230 +107249230:lI111|H107249490 +107249490:lI109|H1072496F0 +1072496F0:lI47|H107249940 +107249940:lI101|H107249B50 +107249B50:lI98|H107249D40 +107249D40:lI105|H107249F20 +107249F20:lI110|N +106600800:lH106600858|H106600870 +106600858:t2:H1071F0028,A7:nocache +1071F0028:lI47|H1071F05E8 +1071F05E8:lI85|H1071F1870 +1071F1870:lI115|H1071F3AE8 +1071F3AE8:lI101|H1071F6300 +1071F6300:lI114|H1071F8F50 +1071F8F50:lI115|H1071FBE90 +1071FBE90:lI47|H1071FEF48 +1071FEF48:lI110|H1072020F0 +1072020F0:lI105|H107205330 +107205330:lI99|H107208628 +107208628:lI104|H10720B8F8 +10720B8F8:lI111|H10720EBB8 +10720EBB8:lI108|H107211F18 +107211F18:lI97|H1072153F0 +1072153F0:lI115|H107218A80 +107218A80:lI99|H10721C2B0 +10721C2B0:lI97|H10721F9B0 +10721F9B0:lI114|H107222EA8 +107222EA8:lI108|H107226010 +107226010:lI115|H107228DF8 +107228DF8:lI111|H10722B830 +10722B830:lI110|H10722DF08 +10722DF08:lI47|H107230330 +107230330:lI86|H1072324A8 +1072324A8:lI83|H107234310 +107234310:lI32|H107235E78 +107235E78:lI67|H107237770 +107237770:lI111|H107238DF8 +107238DF8:lI100|H10723A2D0 +10723A2D0:lI101|H10723B630 +10723B630:lI47|H10723C710 +10723C710:lI65|H10723D5D0 +10723D5D0:lI100|H10723E350 +10723E350:lI118|H10723EF60 +10723EF60:lI101|H10723FA30 +10723FA30:lI110|H107240380 +107240380:lI116|H107240C00 +107240C00:lI79|H107241390 +107241390:lI102|H107241AC0 +107241AC0:lI67|H107242190 +107242190:lI111|H107242800 +107242800:lI100|H107242E00 +107242E00:lI101|H107243370 +107243370:lI47|H1072438B0 +1072438B0:lI97|H107243DB0 +107243DB0:lI111|H1072442A0 +1072442A0:lI99|H107244750 +107244750:lI50|H107244BC0 +107244BC0:lI48|H107245020 +107245020:lI50|H107245470 +107245470:lI51|H107245870 +107245870:lI47|H107245C30 +107245C30:lI98|H107245FC0 +107245FC0:lI117|H107246350 +107246350:lI105|H1072466E0 +1072466E0:lI108|H107246A70 +107246A70:lI100|H107246DB0 +107246DB0:lI47|H1072470D0 +1072470D0:lI100|H1072473F0 +1072473F0:lI101|H107247700 +107247700:lI118|H107247A00 +107247A00:lI47|H107247CF0 +107247CF0:lI101|H107247FD0 +107247FD0:lI114|H107248290 +107248290:lI108|H107248550 +107248550:lI97|H107248800 +107248800:lI110|H107248AB0 +107248AB0:lI103|H107248D30 +107248D30:lI47|H107248FA0 +107248FA0:lI97|H107249210 +107249210:lI111|H107249470 +107249470:lI99|H1072496D0 +1072496D0:lI50|H107249920 +107249920:lI48|H107249B30 +107249B30:lI50|H107249D20 +107249D20:lI51|H107249F00 +107249F00:lI47|H10724A0C0 +10724A0C0:lI101|H10724A260 +10724A260:lI98|H10724A3E0 +10724A3E0:lI105|H10724A550 +10724A550:lI110|N +106600870:lH1066008B8|H1066008D0 +1066008B8:t2:H1071F0048,A7:nocache +1071F0048:lI47|H1071F0608 +1071F0608:lI85|H1071F1890 +1071F1890:lI115|H1071F3B08 +1071F3B08:lI101|H1071F6320 +1071F6320:lI114|H1071F8F70 +1071F8F70:lI115|H1071FBEB0 +1071FBEB0:lI47|H1071FEF68 +1071FEF68:lI110|H107202110 +107202110:lI105|H107205350 +107205350:lI99|H107208648 +107208648:lI104|H10720B918 +10720B918:lI111|H10720EBD8 +10720EBD8:lI108|H107211F38 +107211F38:lI97|H107215410 +107215410:lI115|H107218AA0 +107218AA0:lI99|H10721C2D0 +10721C2D0:lI97|H10721F9D0 +10721F9D0:lI114|H107222EC8 +107222EC8:lI108|H107226030 +107226030:lI115|H107228E18 +107228E18:lI111|H10722B850 +10722B850:lI110|H10722DF28 +10722DF28:lI47|H107230350 +107230350:lI86|H1072324C8 +1072324C8:lI83|H107234330 +107234330:lI32|H107235E98 +107235E98:lI67|H107237790 +107237790:lI111|H107238E18 +107238E18:lI100|H10723A2F0 +10723A2F0:lI101|H10723B650 +10723B650:lI47|H10723C730 +10723C730:lI65|H10723D5F0 +10723D5F0:lI100|H10723E370 +10723E370:lI118|H10723EF80 +10723EF80:lI101|H10723FA50 +10723FA50:lI110|H1072403A0 +1072403A0:lI116|H107240C20 +107240C20:lI79|H1072413B0 +1072413B0:lI102|H107241AE0 +107241AE0:lI67|H1072421B0 +1072421B0:lI111|H107242820 +107242820:lI100|H107242E20 +107242E20:lI101|H107243390 +107243390:lI47|H1072438D0 +1072438D0:lI97|H107243DC0 +107243DC0:lI111|H1072442B0 +1072442B0:lI99|H107244760 +107244760:lI50|H107244BD0 +107244BD0:lI48|H107245030 +107245030:lI50|H107245480 +107245480:lI51|H107245880 +107245880:lI47|H107245C40 +107245C40:lI98|H107245FD0 +107245FD0:lI117|H107246360 +107246360:lI105|H1072466F0 +1072466F0:lI108|H107246A80 +107246A80:lI100|H107246DC0 +107246DC0:lI47|H1072470E0 +1072470E0:lI100|H107247400 +107247400:lI101|H107247710 +107247710:lI118|H107247A10 +107247A10:lI47|H107247D00 +107247D00:lI101|H107247FE0 +107247FE0:lI114|H1072482A0 +1072482A0:lI108|H107248560 +107248560:lI97|H107248810 +107248810:lI110|H107248AC0 +107248AC0:lI103|H107248D40 +107248D40:lI47|H107248FB0 +107248FB0:lI115|H107249220 +107249220:lI105|H107249480 +107249480:lI109|H1072496E0 +1072496E0:lI112|H107249930 +107249930:lI108|H107249B40 +107249B40:lI105|H107249D30 +107249D30:lI102|H107249F10 +107249F10:lI105|H10724A0D0 +10724A0D0:lI108|H10724A270 +10724A270:lI101|H10724A3F0 +10724A3F0:lI47|H10724A560 +10724A560:lI101|H10724A6B0 +10724A6B0:lI98|H10724A7E0 +10724A7E0:lI105|H10724A900 +10724A900:lI110|N +1066008D0:lH106600900|H106600918 +106600900:t2:H280052958,A7:nocache +106600918:lH106600948|H106600960 +106600948:t2:H1071F0088,H1071F0098 +1071F0098:Mh64:F:H1071F0658,H1071F0698,H1071F06C8,H1071F0718,H1071F0740,H1071F0778,H1071F07B0,H1071F07E0,H1071F0808,H1071F0830,H1071F0878,H1071F08A8,H1071F08D0,H1071F0908,H1071F0938 +1071F0658:Mn7:H1071F18E0,H1071F18F0,H1071F1900,H1071F1910,H1071F1920,H1071F1930,H1071F1940 +1071F18E0:lH1071F3B58|N +1071F3B58:lI103|H1071F6370 +1071F6370:lI101|H1071F8FC0 +1071F8FC0:lI110|H1071FBF00 +1071FBF00:lI95|H1071FEFB8 +1071FEFB8:lI116|H107202160 +107202160:lI99|H1072053A0 +1072053A0:lI112|H107208698 +107208698:lI46|H10720B968 +10720B968:lI98|H10720EC28 +10720EC28:lI101|H107211F88 +107211F88:lI97|H107215460 +107215460:lI109|N +1071F1940:lH1071F3BB8|N +1071F3BB8:lI105|H1071F63D0 +1071F63D0:lI110|H1071F9020 +1071F9020:lI101|H1071FBF60 +1071FBF60:lI116|H1071FF018 +1071FF018:lI95|H1072021C0 +1072021C0:lI114|H107205400 +107205400:lI101|H1072086F8 +1072086F8:lI115|H10720B9C8 +10720B9C8:lI46|H10720EC88 +10720EC88:lI98|H107211FD8 +107211FD8:lI101|H1072154A0 +1072154A0:lI97|H107218B20 +107218B20:lI109|N +1071F1930:lH1071F3BA8|N +1071F3BA8:lI114|H1071F63C0 +1071F63C0:lI97|H1071F9010 +1071F9010:lI119|H1071FBF50 +1071FBF50:lI95|H1071FF008 +1071FF008:lI102|H1072021B0 +1072021B0:lI105|H1072053F0 +1072053F0:lI108|H1072086E8 +1072086E8:lI101|H10720B9B8 +10720B9B8:lI95|H10720EC78 +10720EC78:lI105|H107211FC8 +107211FC8:lI111|H107215490 +107215490:lI46|H107218B10 +107218B10:lI98|H10721C340 +10721C340:lI101|H10721FA40 +10721FA40:lI97|H107222F38 +107222F38:lI109|N +1071F1920:lH1071F3B98|N +1071F3B98:lI103|H1071F63B0 +1071F63B0:lI114|H1071F9000 +1071F9000:lI111|H1071FBF40 +1071FBF40:lI117|H1071FEFF8 +1071FEFF8:lI112|H1072021A0 +1072021A0:lI46|H1072053E0 +1072053E0:lI98|H1072086D8 +1072086D8:lI101|H10720B9A8 +10720B9A8:lI97|H10720EC68 +10720EC68:lI109|N +1071F1910:lH1071F3B88|N +1071F3B88:lI107|H1071F63A0 +1071F63A0:lI101|H1071F8FF0 +1071F8FF0:lI114|H1071FBF30 +1071FBF30:lI110|H1071FEFE8 +1071FEFE8:lI101|H107202190 +107202190:lI108|H1072053D0 +1072053D0:lI95|H1072086C8 +1072086C8:lI114|H10720B998 +10720B998:lI101|H10720EC58 +10720EC58:lI102|H107211FB8 +107211FB8:lI99|H107215480 +107215480:lI46|H107218B00 +107218B00:lI98|H10721C330 +10721C330:lI101|H10721FA30 +10721FA30:lI97|H107222F28 +107222F28:lI109|N +1071F1900:lH1071F3B78|N +1071F3B78:lI115|H1071F6390 +1071F6390:lI111|H1071F8FE0 +1071F8FE0:lI99|H1071FBF20 +1071FBF20:lI107|H1071FEFD8 +1071FEFD8:lI101|H107202180 +107202180:lI116|H1072053C0 +1072053C0:lI46|H1072086B8 +1072086B8:lI98|H10720B988 +10720B988:lI101|H10720EC48 +10720EC48:lI97|H107211FA8 +107211FA8:lI109|N +1071F18F0:lH1071F3B68|N +1071F3B68:lI100|H1071F6380 +1071F6380:lI105|H1071F8FD0 +1071F8FD0:lI115|H1071FBF10 +1071FBF10:lI107|H1071FEFC8 +1071FEFC8:lI95|H107202170 +107202170:lI108|H1072053B0 +1072053B0:lI111|H1072086A8 +1072086A8:lI103|H10720B978 +10720B978:lI95|H10720EC38 +10720EC38:lI115|H107211F98 +107211F98:lI117|H107215470 +107215470:lI112|H107218AF0 +107218AF0:lI46|H10721C320 +10721C320:lI98|H10721FA20 +10721FA20:lI101|H107222F18 +107222F18:lI97|H107226080 +107226080:lI109|N +1071F0938:Mn7:H1071F1E28,H1071F1E38,H1071F1E48,H1071F1E58,H1071F1E70,H1071F1E80,H1071F1E90 +1071F1E28:lH1071F4108|N +1071F4108:lI105|H1071F6928 +1071F6928:lI110|H1071F9580 +1071F9580:lI101|H1071FC4C0 +1071FC4C0:lI116|H1071FF578 +1071FF578:lI54|H107202720 +107202720:lI95|H107205960 +107205960:lI116|H107208C48 +107208C48:lI99|H10720BEF8 +10720BEF8:lI112|H10720F178 +10720F178:lI46|H107212498 +107212498:lI98|H107215930 +107215930:lI101|H107218FA0 +107218FA0:lI97|H10721C720 +10721C720:lI109|N +1071F1E90:lH1071F4178|N +1071F4178:lI105|H1071F6998 +1071F6998:lI110|H1071F95F0 +1071F95F0:lI101|H1071FC530 +1071FC530:lI116|H1071FF5E8 +1071FF5E8:lI95|H107202790 +107202790:lI101|H1072059D0 +1072059D0:lI112|H107208CA8 +107208CA8:lI109|H10720BF58 +10720BF58:lI100|H10720F1D8 +10720F1D8:lI95|H1072124F8 +1072124F8:lI115|H107215980 +107215980:lI111|H107218FF0 +107218FF0:lI99|H10721C750 +10721C750:lI107|H10721FDD0 +10721FDD0:lI101|H107223258 +107223258:lI116|H107226340 +107226340:lI46|H1072290D8 +1072290D8:lI98|H10722BAA0 +10722BAA0:lI101|H10722E108 +10722E108:lI97|H1072304C0 +1072304C0:lI109|N +1071F1E80:lH1071F4168|N +1071F4168:lI112|H1071F6988 +1071F6988:lI103|H1071F95E0 +1071F95E0:lI46|H1071FC520 +1071FC520:lI98|H1071FF5D8 +1071FF5D8:lI101|H107202780 +107202780:lI97|H1072059C0 +1072059C0:lI109|N +1071F1E70:lH1071F4158|N +1071F4158:lI108|H1071F6978 +1071F6978:lI111|H1071F95D0 +1071F95D0:lI99|H1071FC510 +1071FC510:lI97|H1071FF5C8 +1071FF5C8:lI108|H107202770 +107202770:lI95|H1072059B0 +1072059B0:lI117|H107208C98 +107208C98:lI100|H10720BF48 +10720BF48:lI112|H10720F1C8 +10720F1C8:lI46|H1072124E8 +1072124E8:lI98|H107215970 +107215970:lI101|H107218FE0 +107218FE0:lI97|H10721C740 +10721C740:lI109|N +1071F1E58:Mn2:H1071F4138,H1071F4148 +1071F4138:lH1071F6958|N +1071F6958:lI107|H1071F95B0 +1071F95B0:lI101|H1071FC4F0 +1071FC4F0:lI114|H1071FF5A8 +1071FF5A8:lI110|H107202750 +107202750:lI101|H107205990 +107205990:lI108|H107208C78 +107208C78:lI46|H10720BF28 +10720BF28:lI97|H10720F1A8 +10720F1A8:lI112|H1072124C8 +1072124C8:lI112|H107215950 +107215950:lI117|H107218FC0 +107218FC0:lI112|N +1071F4148:lH1071F6968|N +1071F6968:lI103|H1071F95C0 +1071F95C0:lI101|H1071FC500 +1071FC500:lI110|H1071FF5B8 +1071FF5B8:lI95|H107202760 +107202760:lI117|H1072059A0 +1072059A0:lI100|H107208C88 +107208C88:lI112|H10720BF38 +10720BF38:lI46|H10720F1B8 +10720F1B8:lI98|H1072124D8 +1072124D8:lI101|H107215960 +107215960:lI97|H107218FD0 +107218FD0:lI109|N +1071F1E48:lH1071F4128|N +1071F4128:lI108|H1071F6948 +1071F6948:lI111|H1071F95A0 +1071F95A0:lI103|H1071FC4E0 +1071FC4E0:lI103|H1071FF598 +1071FF598:lI101|H107202740 +107202740:lI114|H107205980 +107205980:lI95|H107208C68 +107208C68:lI104|H10720BF18 +10720BF18:lI95|H10720F198 +10720F198:lI99|H1072124B8 +1072124B8:lI111|H107215940 +107215940:lI109|H107218FB0 +107218FB0:lI109|H10721C730 +10721C730:lI111|H10721FDC0 +10721FDC0:lI110|H107223248 +107223248:lI46|H107226330 +107226330:lI98|H1072290C8 +1072290C8:lI101|H10722BA90 +10722BA90:lI97|H10722E0F8 +10722E0F8:lI109|N +1071F1E38:lH1071F4118|N +1071F4118:lI108|H1071F6938 +1071F6938:lI111|H1071F9590 +1071F9590:lI103|H1071FC4D0 +1071FC4D0:lI103|H1071FF588 +1071FF588:lI101|H107202730 +107202730:lI114|H107205970 +107205970:lI46|H107208C58 +107208C58:lI98|H10720BF08 +10720BF08:lI101|H10720F188 +10720F188:lI97|H1072124A8 +1072124A8:lI109|N +1071F0908:Mn5:H1071F1DD0,H1071F1DE8,H1071F1DF8,H1071F1E08,H1071F1E18 +1071F1DD0:Mn2:H1071F40A8,H1071F40B8 +1071F40A8:lH1071F68C8|N +1071F68C8:lI115|H1071F9520 +1071F9520:lI101|H1071FC460 +1071FC460:lI113|H1071FF518 +1071FF518:lI95|H1072026C0 +1072026C0:lI116|H107205900 +107205900:lI114|H107208BE8 +107208BE8:lI97|H10720BE98 +10720BE98:lI99|H10720F118 +10720F118:lI101|H107212438 +107212438:lI46|H1072158D0 +1072158D0:lI98|H107218F40 +107218F40:lI101|H10721C6D0 +10721C6D0:lI97|H10721FD80 +10721FD80:lI109|N +1071F40B8:lH1071F68D8|N +1071F68D8:lI101|H1071F9530 +1071F9530:lI114|H1071FC470 +1071FC470:lI108|H1071FF528 +1071FF528:lI95|H1072026D0 +1072026D0:lI100|H107205910 +107205910:lI100|H107208BF8 +107208BF8:lI108|H10720BEA8 +10720BEA8:lI108|H10720F128 +10720F128:lI46|H107212448 +107212448:lI98|H1072158E0 +1072158E0:lI101|H107218F50 +107218F50:lI97|H10721C6E0 +10721C6E0:lI109|N +1071F1E18:lH1071F40F8|N +1071F40F8:lI97|H1071F6918 +1071F6918:lI112|H1071F9570 +1071F9570:lI112|H1071FC4B0 +1071FC4B0:lI108|H1071FF568 +1071FF568:lI105|H107202710 +107202710:lI99|H107205950 +107205950:lI97|H107208C38 +107208C38:lI116|H10720BEE8 +10720BEE8:lI105|H10720F168 +10720F168:lI111|H107212488 +107212488:lI110|H107215920 +107215920:lI46|H107218F90 +107218F90:lI98|H10721C710 +10721C710:lI101|H10721FDB0 +10721FDB0:lI97|H107223238 +107223238:lI109|N +1071F1E08:lH1071F40E8|N +1071F40E8:lI105|H1071F6908 +1071F6908:lI110|H1071F9560 +1071F9560:lI101|H1071FC4A0 +1071FC4A0:lI116|H1071FF558 +1071FF558:lI95|H107202700 +107202700:lI101|H107205940 +107205940:lI112|H107208C28 +107208C28:lI109|H10720BED8 +10720BED8:lI100|H10720F158 +10720F158:lI95|H107212478 +107212478:lI100|H107215910 +107215910:lI105|H107218F80 +107218F80:lI115|H10721C700 +10721C700:lI116|H10721FDA0 +10721FDA0:lI46|H107223228 +107223228:lI98|H107226320 +107226320:lI101|H1072290B8 +1072290B8:lI97|H10722BA80 +10722BA80:lI109|N +1071F1DF8:lH1071F40D8|N +1071F40D8:lI114|H1071F68F8 +1071F68F8:lI97|H1071F9550 +1071F9550:lI109|H1071FC490 +1071FC490:lI95|H1071FF548 +1071FF548:lI102|H1072026F0 +1072026F0:lI105|H107205930 +107205930:lI108|H107208C18 +107208C18:lI101|H10720BEC8 +10720BEC8:lI46|H10720F148 +10720F148:lI98|H107212468 +107212468:lI101|H107215900 +107215900:lI97|H107218F70 +107218F70:lI109|N +1071F1DE8:lH1071F40C8|N +1071F40C8:lI105|H1071F68E8 +1071F68E8:lI110|H1071F9540 +1071F9540:lI101|H1071FC480 +1071FC480:lI116|H1071FF538 +1071FF538:lI54|H1072026E0 +1072026E0:lI95|H107205920 +107205920:lI115|H107208C08 +107208C08:lI99|H10720BEB8 +10720BEB8:lI116|H10720F138 +10720F138:lI112|H107212458 +107212458:lI46|H1072158F0 +1072158F0:lI98|H107218F60 +107218F60:lI101|H10721C6F0 +10721C6F0:lI97|H10721FD90 +10721FD90:lI109|N +1071F08D0:Mn6:H1071F1D68,H1071F1D80,H1071F1D90,H1071F1DA0,H1071F1DB0,H1071F1DC0 +1071F1D68:Mn2:H1071F4038,H1071F4048 +1071F4038:lH1071F6858|N +1071F6858:lI100|H1071F94B0 +1071F94B0:lI105|H1071FC3F0 +1071FC3F0:lI115|H1071FF4A8 +1071FF4A8:lI107|H107202650 +107202650:lI95|H107205890 +107205890:lI108|H107208B78 +107208B78:lI111|H10720BE28 +10720BE28:lI103|H10720F0A8 +10720F0A8:lI46|H1072123C8 +1072123C8:lI98|H107215860 +107215860:lI101|H107218ED0 +107218ED0:lI97|H10721C670 +10721C670:lI109|N +1071F4048:lH1071F6868|N +1071F6868:lI103|H1071F94C0 +1071F94C0:lI101|H1071FC400 +1071FC400:lI110|H1071FF4B8 +1071FF4B8:lI95|H107202660 +107202660:lI117|H1072058A0 +1072058A0:lI100|H107208B88 +107208B88:lI112|H10720BE38 +10720BE38:lI95|H10720F0B8 +10720F0B8:lI115|H1072123D8 +1072123D8:lI111|H107215870 +107215870:lI99|H107218EE0 +107218EE0:lI107|H10721C680 +10721C680:lI101|H10721FD30 +10721FD30:lI116|H1072231D8 +1072231D8:lI46|H1072262E0 +1072262E0:lI98|H107229078 +107229078:lI101|H10722BA40 +10722BA40:lI97|H10722E0B8 +10722E0B8:lI109|N +1071F1DC0:lH1071F4098|N +1071F4098:lI101|H1071F68B8 +1071F68B8:lI114|H1071F9510 +1071F9510:lI108|H1071FC450 +1071FC450:lI95|H1071FF508 +1071FF508:lI115|H1072026B0 +1072026B0:lI105|H1072058F0 +1072058F0:lI103|H107208BD8 +107208BD8:lI110|H10720BE88 +10720BE88:lI97|H10720F108 +10720F108:lI108|H107212428 +107212428:lI95|H1072158C0 +1072158C0:lI104|H107218F30 +107218F30:lI97|H10721C6C0 +10721C6C0:lI110|H10721FD70 +10721FD70:lI100|H107223218 +107223218:lI108|H107226310 +107226310:lI101|H1072290A8 +1072290A8:lI114|H10722BA70 +10722BA70:lI46|H10722E0E8 +10722E0E8:lI98|H1072304B0 +1072304B0:lI101|H1072325E8 +1072325E8:lI97|H107234420 +107234420:lI109|N +1071F1DB0:lH1071F4088|N +1071F4088:lI114|H1071F68A8 +1071F68A8:lI97|H1071F9500 +1071F9500:lI119|H1071FC440 +1071FC440:lI95|H1071FF4F8 +1071FF4F8:lI102|H1072026A0 +1072026A0:lI105|H1072058E0 +1072058E0:lI108|H107208BC8 +107208BC8:lI101|H10720BE78 +10720BE78:lI95|H10720F0F8 +10720F0F8:lI105|H107212418 +107212418:lI111|H1072158B0 +1072158B0:lI95|H107218F20 +107218F20:lI105|H10721C6B0 +10721C6B0:lI110|H10721FD60 +10721FD60:lI102|H107223208 +107223208:lI108|H107226300 +107226300:lI97|H107229098 +107229098:lI116|H10722BA60 +10722BA60:lI101|H10722E0D8 +10722E0D8:lI46|H1072304A0 +1072304A0:lI98|H1072325D8 +1072325D8:lI101|H107234410 +107234410:lI97|H107235F68 +107235F68:lI109|N +1071F1DA0:lH1071F4078|N +1071F4078:lI102|H1071F6898 +1071F6898:lI105|H1071F94F0 +1071F94F0:lI108|H1071FC430 +1071FC430:lI101|H1071FF4E8 +1071FF4E8:lI95|H107202690 +107202690:lI115|H1072058D0 +1072058D0:lI101|H107208BB8 +107208BB8:lI114|H10720BE68 +10720BE68:lI118|H10720F0E8 +10720F0E8:lI101|H107212408 +107212408:lI114|H1072158A0 +1072158A0:lI46|H107218F10 +107218F10:lI98|H10721C6A0 +10721C6A0:lI101|H10721FD50 +10721FD50:lI97|H1072231F8 +1072231F8:lI109|N +1071F1D90:lH1071F4068|N +1071F4068:lI112|H1071F6888 +1071F6888:lI114|H1071F94E0 +1071F94E0:lI105|H1071FC420 +1071FC420:lI109|H1071FF4D8 +1071FF4D8:lI95|H107202680 +107202680:lI116|H1072058C0 +1072058C0:lI116|H107208BA8 +107208BA8:lI121|H10720BE58 +10720BE58:lI46|H10720F0D8 +10720F0D8:lI98|H1072123F8 +1072123F8:lI101|H107215890 +107215890:lI97|H107218F00 +107218F00:lI109|N +1071F1D80:lH1071F4058|N +1071F4058:lI101|H1071F6878 +1071F6878:lI114|H1071F94D0 +1071F94D0:lI108|H1071FC410 +1071FC410:lI95|H1071FF4C8 +1071FF4C8:lI98|H107202670 +107202670:lI111|H1072058B0 +1072058B0:lI111|H107208B98 +107208B98:lI116|H10720BE48 +10720BE48:lI95|H10720F0C8 +10720F0C8:lI115|H1072123E8 +1072123E8:lI101|H107215880 +107215880:lI114|H107218EF0 +107218EF0:lI118|H10721C690 +10721C690:lI101|H10721FD40 +10721FD40:lI114|H1072231E8 +1072231E8:lI46|H1072262F0 +1072262F0:lI98|H107229088 +107229088:lI101|H10722BA50 +10722BA50:lI97|H10722E0C8 +10722E0C8:lI109|N +1071F08A8:Mn4:H1071F1D18,H1071F1D28,H1071F1D40,H1071F1D50 +1071F1D18:lH1071F3FD8|N +1071F3FD8:lI104|H1071F67F8 +1071F67F8:lI101|H1071F9450 +1071F9450:lI97|H1071FC390 +1071FC390:lI114|H1071FF448 +1071FF448:lI116|H1072025F0 +1072025F0:lI46|H107205830 +107205830:lI98|H107208B18 +107208B18:lI101|H10720BDC8 +10720BDC8:lI97|H10720F048 +10720F048:lI109|N +1071F1D50:Mn2:H1071F4018,H1071F4028 +1071F4018:lH1071F6838|N +1071F6838:lI103|H1071F9490 +1071F9490:lI108|H1071FC3D0 +1071FC3D0:lI111|H1071FF488 +1071FF488:lI98|H107202630 +107202630:lI97|H107205870 +107205870:lI108|H107208B58 +107208B58:lI95|H10720BE08 +10720BE08:lI115|H10720F088 +10720F088:lI101|H1072123A8 +1072123A8:lI97|H107215840 +107215840:lI114|H107218EB0 +107218EB0:lI99|H10721C650 +10721C650:lI104|H10721FD10 +10721FD10:lI46|H1072231C8 +1072231C8:lI98|H1072262D0 +1072262D0:lI101|H107229068 +107229068:lI97|H10722BA30 +10722BA30:lI109|N +1071F4028:lH1071F6848|N +1071F6848:lI101|H1071F94A0 +1071F94A0:lI114|H1071FC3E0 +1071FC3E0:lI108|H1071FF498 +1071FF498:lI95|H107202640 +107202640:lI114|H107205880 +107205880:lI101|H107208B68 +107208B68:lI112|H10720BE18 +10720BE18:lI108|H10720F098 +10720F098:lI121|H1072123B8 +1072123B8:lI46|H107215850 +107215850:lI98|H107218EC0 +107218EC0:lI101|H10721C660 +10721C660:lI97|H10721FD20 +10721FD20:lI109|N +1071F1D40:lH1071F4008|N +1071F4008:lI100|H1071F6828 +1071F6828:lI105|H1071F9480 +1071F9480:lI115|H1071FC3C0 +1071FC3C0:lI107|H1071FF478 +1071FF478:lI95|H107202620 +107202620:lI108|H107205860 +107205860:lI111|H107208B48 +107208B48:lI103|H10720BDF8 +10720BDF8:lI95|H10720F078 +10720F078:lI49|H107212398 +107212398:lI46|H107215830 +107215830:lI98|H107218EA0 +107218EA0:lI101|H10721C640 +10721C640:lI97|H10721FD00 +10721FD00:lI109|N +1071F1D28:Mn2:H1071F3FE8,H1071F3FF8 +1071F3FE8:lH1071F6808|N +1071F6808:lI97|H1071F9460 +1071F9460:lI117|H1071FC3A0 +1071FC3A0:lI116|H1071FF458 +1071FF458:lI104|H107202600 +107202600:lI46|H107205840 +107205840:lI98|H107208B28 +107208B28:lI101|H10720BDD8 +10720BDD8:lI97|H10720F058 +10720F058:lI109|N +1071F3FF8:lH1071F6818|N +1071F6818:lI105|H1071F9470 +1071F9470:lI110|H1071FC3B0 +1071FC3B0:lI101|H1071FF468 +1071FF468:lI116|H107202610 +107202610:lI95|H107205850 +107205850:lI112|H107208B38 +107208B38:lI97|H10720BDE8 +10720BDE8:lI114|H10720F068 +10720F068:lI115|H107212388 +107212388:lI101|H107215820 +107215820:lI46|H107218E90 +107218E90:lI98|H10721C630 +10721C630:lI101|H10721FCF0 +10721FCF0:lI97|H1072231B8 +1072231B8:lI109|N +1071F0878:Mn5:H1071F1CC0,H1071F1CD0,H1071F1CE8,H1071F1CF8,H1071F1D08 +1071F1CC0:lH1071F3F78|N +1071F3F78:lI103|H1071F6798 +1071F6798:lI101|H1071F93F0 +1071F93F0:lI110|H1071FC330 +1071FC330:lI95|H1071FF3E8 +1071FF3E8:lI115|H107202590 +107202590:lI99|H1072057D0 +1072057D0:lI116|H107208AB8 +107208AB8:lI112|H10720BD68 +10720BD68:lI46|H10720EFE8 +10720EFE8:lI98|H107212328 +107212328:lI101|H1072157C0 +1072157C0:lI97|H107218E40 +107218E40:lI109|N +1071F1D08:lH1071F3FC8|N +1071F3FC8:lI101|H1071F67E8 +1071F67E8:lI114|H1071F9440 +1071F9440:lI108|H1071FC380 +1071FC380:lI95|H1071FF438 +1071FF438:lI101|H1072025E0 +1072025E0:lI112|H107205820 +107205820:lI109|H107208B08 +107208B08:lI100|H10720BDB8 +10720BDB8:lI46|H10720F038 +10720F038:lI98|H107212378 +107212378:lI101|H107215810 +107215810:lI97|H107218E80 +107218E80:lI109|N +1071F1CF8:lH1071F3FB8|N +1071F3FB8:lI108|H1071F67D8 +1071F67D8:lI111|H1071F9430 +1071F9430:lI103|H1071FC370 +1071FC370:lI103|H1071FF428 +1071FF428:lI101|H1072025D0 +1072025D0:lI114|H107205810 +107205810:lI95|H107208AF8 +107208AF8:lI115|H10720BDA8 +10720BDA8:lI101|H10720F028 +10720F028:lI114|H107212368 +107212368:lI118|H107215800 +107215800:lI101|H107218E70 +107218E70:lI114|H10721C620 +10721C620:lI46|H10721FCE0 +10721FCE0:lI98|H1072231A8 +1072231A8:lI101|H1072262C0 +1072262C0:lI97|H107229058 +107229058:lI109|N +1071F1CE8:lH1071F3FA8|N +1071F3FA8:lI105|H1071F67C8 +1071F67C8:lI110|H1071F9420 +1071F9420:lI101|H1071FC360 +1071FC360:lI116|H1071FF418 +1071FF418:lI95|H1072025C0 +1072025C0:lI100|H107205800 +107205800:lI98|H107208AE8 +107208AE8:lI46|H10720BD98 +10720BD98:lI98|H10720F018 +10720F018:lI101|H107212358 +107212358:lI97|H1072157F0 +1072157F0:lI109|N +1071F1CD0:Mn2:H1071F3F88,H1071F3F98 +1071F3F88:lH1071F67A8|N +1071F67A8:lI108|H1071F9400 +1071F9400:lI111|H1071FC340 +1071FC340:lI103|H1071FF3F8 +1071FF3F8:lI103|H1072025A0 +1072025A0:lI101|H1072057E0 +1072057E0:lI114|H107208AC8 +107208AC8:lI95|H10720BD78 +10720BD78:lI102|H10720EFF8 +10720EFF8:lI105|H107212338 +107212338:lI108|H1072157D0 +1072157D0:lI116|H107218E50 +107218E50:lI101|H10721C600 +10721C600:lI114|H10721FCC0 +10721FCC0:lI115|H107223188 +107223188:lI46|H1072262A0 +1072262A0:lI98|H107229038 +107229038:lI101|H10722BA10 +10722BA10:lI97|H10722E098 +10722E098:lI109|N +1071F3F98:lH1071F67B8|N +1071F67B8:lI101|H1071F9410 +1071F9410:lI114|H1071FC350 +1071FC350:lI108|H1071FF408 +1071FF408:lI95|H1072025B0 +1072025B0:lI99|H1072057F0 +1072057F0:lI111|H107208AD8 +107208AD8:lI109|H10720BD88 +10720BD88:lI112|H10720F008 +10720F008:lI105|H107212348 +107212348:lI108|H1072157E0 +1072157E0:lI101|H107218E60 +107218E60:lI95|H10721C610 +10721C610:lI115|H10721FCD0 +10721FCD0:lI101|H107223198 +107223198:lI114|H1072262B0 +1072262B0:lI118|H107229048 +107229048:lI101|H10722BA20 +10722BA20:lI114|H10722E0A8 +10722E0A8:lI46|H107230490 +107230490:lI98|H1072325C8 +1072325C8:lI101|H107234400 +107234400:lI97|H107235F58 +107235F58:lI109|N +1071F0830:Mn8:H1071F1C28,H1071F1C38,H1071F1C48,H1071F1C58,H1071F1C68,H1071F1C78,H1071F1C88,H1071F1CA0 +1071F1C28:lH1071F3EC8|N +1071F3EC8:lI110|H1071F66E8 +1071F66E8:lI101|H1071F9340 +1071F9340:lI116|H1071FC280 +1071FC280:lI46|H1071FF338 +1071FF338:lI98|H1072024E0 +1072024E0:lI101|H107205720 +107205720:lI97|H107208A08 +107208A08:lI109|N +1071F1CA0:Mn3:H1071F3F48,H1071F3F58,H1071F3F68 +1071F3F48:lH1071F6768|N +1071F6768:lI100|H1071F93C0 +1071F93C0:lI105|H1071FC300 +1071FC300:lI115|H1071FF3B8 +1071FF3B8:lI116|H107202560 +107202560:lI95|H1072057A0 +1072057A0:lI97|H107208A88 +107208A88:lI99|H10720BD38 +10720BD38:lI46|H10720EFB8 +10720EFB8:lI98|H1072122F8 +1072122F8:lI101|H107215790 +107215790:lI97|H107218E10 +107218E10:lI109|N +1071F3F68:lH1071F6788|N +1071F6788:lI101|H1071F93E0 +1071F93E0:lI114|H1071FC320 +1071FC320:lI108|H1071FF3D8 +1071FF3D8:lI95|H107202580 +107202580:lI101|H1072057C0 +1072057C0:lI114|H107208AA8 +107208AA8:lI116|H10720BD58 +10720BD58:lI115|H10720EFD8 +10720EFD8:lI95|H107212318 +107212318:lI101|H1072157B0 +1072157B0:lI114|H107218E30 +107218E30:lI114|H10721C5F0 +10721C5F0:lI111|H10721FCB0 +10721FCB0:lI114|H107223178 +107223178:lI115|H107226290 +107226290:lI46|H107229028 +107229028:lI98|H10722BA00 +10722BA00:lI101|H10722E088 +10722E088:lI97|H107230480 +107230480:lI109|N +1071F3F58:lH1071F6778|N +1071F6778:lI114|H1071F93D0 +1071F93D0:lI97|H1071FC310 +1071FC310:lI119|H1071FF3C8 +1071FF3C8:lI95|H107202570 +107202570:lI102|H1072057B0 +1072057B0:lI105|H107208A98 +107208A98:lI108|H10720BD48 +10720BD48:lI101|H10720EFC8 +10720EFC8:lI95|H107212308 +107212308:lI105|H1072157A0 +1072157A0:lI111|H107218E20 +107218E20:lI95|H10721C5E0 +10721C5E0:lI108|H10721FCA0 +10721FCA0:lI105|H107223168 +107223168:lI115|H107226280 +107226280:lI116|H107229018 +107229018:lI46|H10722B9F0 +10722B9F0:lI98|H10722E078 +10722E078:lI101|H107230470 +107230470:lI97|H1072325B8 +1072325B8:lI109|N +1071F1C88:Mn2:H1071F3F28,H1071F3F38 +1071F3F28:lH1071F6748|N +1071F6748:lI103|H1071F93A0 +1071F93A0:lI101|H1071FC2E0 +1071FC2E0:lI110|H1071FF398 +1071FF398:lI95|H107202540 +107202540:lI116|H107205780 +107205780:lI99|H107208A68 +107208A68:lI112|H10720BD18 +10720BD18:lI95|H10720EF98 +10720EF98:lI115|H1072122D8 +1072122D8:lI111|H107215770 +107215770:lI99|H107218DF0 +107218DF0:lI107|H10721C5C0 +10721C5C0:lI101|H10721FC80 +10721FC80:lI116|H107223148 +107223148:lI46|H107226260 +107226260:lI98|H107228FF8 +107228FF8:lI101|H10722B9D0 +10722B9D0:lI97|H10722E058 +10722E058:lI109|N +1071F3F38:lH1071F6758|N +1071F6758:lI100|H1071F93B0 +1071F93B0:lI105|H1071FC2F0 +1071FC2F0:lI115|H1071FF3A8 +1071FF3A8:lI107|H107202550 +107202550:lI95|H107205790 +107205790:lI108|H107208A78 +107208A78:lI111|H10720BD28 +10720BD28:lI103|H10720EFA8 +10720EFA8:lI95|H1072122E8 +1072122E8:lI115|H107215780 +107215780:lI101|H107218E00 +107218E00:lI114|H10721C5D0 +10721C5D0:lI118|H10721FC90 +10721FC90:lI101|H107223158 +107223158:lI114|H107226270 +107226270:lI46|H107229008 +107229008:lI98|H10722B9E0 +10722B9E0:lI101|H10722E068 +10722E068:lI97|H107230460 +107230460:lI109|N +1071F1C78:lH1071F3F18|N +1071F3F18:lI105|H1071F6738 +1071F6738:lI110|H1071F9390 +1071F9390:lI101|H1071FC2D0 +1071FC2D0:lI116|H1071FF388 +1071FF388:lI95|H107202530 +107202530:lI117|H107205770 +107205770:lI100|H107208A58 +107208A58:lI112|H10720BD08 +10720BD08:lI46|H10720EF88 +10720EF88:lI98|H1072122C8 +1072122C8:lI101|H107215760 +107215760:lI97|H107218DE0 +107218DE0:lI109|N +1071F1C68:lH1071F3F08|N +1071F3F08:lI97|H1071F6728 +1071F6728:lI112|H1071F9380 +1071F9380:lI112|H1071FC2C0 +1071FC2C0:lI108|H1071FF378 +1071FF378:lI105|H107202520 +107202520:lI99|H107205760 +107205760:lI97|H107208A48 +107208A48:lI116|H10720BCF8 +10720BCF8:lI105|H10720EF78 +10720EF78:lI111|H1072122B8 +1072122B8:lI110|H107215750 +107215750:lI95|H107218DD0 +107218DD0:lI115|H10721C5B0 +10721C5B0:lI116|H10721FC70 +10721FC70:lI97|H107223138 +107223138:lI114|H107226250 +107226250:lI116|H107228FE8 +107228FE8:lI101|H10722B9C0 +10722B9C0:lI114|H10722E048 +10722E048:lI46|H107230450 +107230450:lI98|H1072325A8 +1072325A8:lI101|H1072343F0 +1072343F0:lI97|H107235F48 +107235F48:lI109|N +1071F1C58:lH1071F3EF8|N +1071F3EF8:lI117|H1071F6718 +1071F6718:lI115|H1071F9370 +1071F9370:lI101|H1071FC2B0 +1071FC2B0:lI114|H1071FF368 +1071FF368:lI95|H107202510 +107202510:lI115|H107205750 +107205750:lI117|H107208A38 +107208A38:lI112|H10720BCE8 +10720BCE8:lI46|H10720EF68 +10720EF68:lI98|H1072122A8 +1072122A8:lI101|H107215740 +107215740:lI97|H107218DC0 +107218DC0:lI109|N +1071F1C48:lH1071F3EE8|N +1071F3EE8:lI100|H1071F6708 +1071F6708:lI105|H1071F9360 +1071F9360:lI115|H1071FC2A0 +1071FC2A0:lI116|H1071FF358 +1071FF358:lI95|H107202500 +107202500:lI117|H107205740 +107205740:lI116|H107208A28 +107208A28:lI105|H10720BCD8 +10720BCD8:lI108|H10720EF58 +10720EF58:lI46|H107212298 +107212298:lI98|H107215730 +107215730:lI101|H107218DB0 +107218DB0:lI97|H10721C5A0 +10721C5A0:lI109|N +1071F1C38:lH1071F3ED8|N +1071F3ED8:lI108|H1071F66F8 +1071F66F8:lI111|H1071F9350 +1071F9350:lI103|H1071FC290 +1071FC290:lI103|H1071FF348 +1071FF348:lI101|H1072024F0 +1072024F0:lI114|H107205730 +107205730:lI95|H107208A18 +107208A18:lI115|H10720BCC8 +10720BCC8:lI116|H10720EF48 +10720EF48:lI100|H107212288 +107212288:lI95|H107215720 +107215720:lI104|H107218DA0 +107218DA0:lI46|H10721C590 +10721C590:lI98|H10721FC60 +10721FC60:lI101|H107223128 +107223128:lI97|H107226240 +107226240:lI109|N +1071F0808:Mn4:H1071F1BE8,H1071F1BF8,H1071F1C08,H1071F1C18 +1071F1BE8:lH1071F3E88|N +1071F3E88:lI97|H1071F66A8 +1071F66A8:lI112|H1071F9300 +1071F9300:lI112|H1071FC240 +1071FC240:lI108|H1071FF2F8 +1071FF2F8:lI105|H1072024A0 +1072024A0:lI99|H1072056E0 +1072056E0:lI97|H1072089C8 +1072089C8:lI116|H10720BC88 +10720BC88:lI105|H10720EF08 +10720EF08:lI111|H107212248 +107212248:lI110|H1072156E0 +1072156E0:lI95|H107218D60 +107218D60:lI109|H10721C550 +10721C550:lI97|H10721FC20 +10721FC20:lI115|H1072230E8 +1072230E8:lI116|H107226200 +107226200:lI101|H107228FA8 +107228FA8:lI114|H10722B990 +10722B990:lI46|H10722E018 +10722E018:lI98|H107230440 +107230440:lI101|H107232598 +107232598:lI97|H1072343E0 +1072343E0:lI109|N +1071F1C18:lH1071F3EB8|N +1071F3EB8:lI108|H1071F66D8 +1071F66D8:lI111|H1071F9330 +1071F9330:lI103|H1071FC270 +1071FC270:lI103|H1071FF328 +1071FF328:lI101|H1072024D0 +1072024D0:lI114|H107205710 +107205710:lI95|H1072089F8 +1072089F8:lI99|H10720BCB8 +10720BCB8:lI111|H10720EF38 +10720EF38:lI110|H107212278 +107212278:lI102|H107215710 +107215710:lI105|H107218D90 +107218D90:lI103|H10721C580 +10721C580:lI46|H10721FC50 +10721FC50:lI98|H107223118 +107223118:lI101|H107226230 +107226230:lI97|H107228FD8 +107228FD8:lI109|N +1071F1C08:lH1071F3EA8|N +1071F3EA8:lI108|H1071F66C8 +1071F66C8:lI111|H1071F9320 +1071F9320:lI103|H1071FC260 +1071FC260:lI103|H1071FF318 +1071FF318:lI101|H1072024C0 +1072024C0:lI114|H107205700 +107205700:lI95|H1072089E8 +1072089E8:lI115|H10720BCA8 +10720BCA8:lI105|H10720EF28 +10720EF28:lI109|H107212268 +107212268:lI112|H107215700 +107215700:lI108|H107218D80 +107218D80:lI101|H10721C570 +10721C570:lI95|H10721FC40 +10721FC40:lI104|H107223108 +107223108:lI46|H107226220 +107226220:lI98|H107228FC8 +107228FC8:lI101|H10722B9B0 +10722B9B0:lI97|H10722E038 +10722E038:lI109|N +1071F1BF8:lH1071F3E98|N +1071F3E98:lI119|H1071F66B8 +1071F66B8:lI114|H1071F9310 +1071F9310:lI97|H1071FC250 +1071FC250:lI112|H1071FF308 +1071FF308:lI95|H1072024B0 +1072024B0:lI108|H1072056F0 +1072056F0:lI111|H1072089D8 +1072089D8:lI103|H10720BC98 +10720BC98:lI95|H10720EF18 +10720EF18:lI114|H107212258 +107212258:lI101|H1072156F0 +1072156F0:lI97|H107218D70 +107218D70:lI100|H10721C560 +10721C560:lI101|H10721FC30 +10721FC30:lI114|H1072230F8 +1072230F8:lI46|H107226210 +107226210:lI98|H107228FB8 +107228FB8:lI101|H10722B9A0 +10722B9A0:lI97|H10722E028 +10722E028:lI109|N +1071F07E0:Mn4:H1071F1BA0,H1071F1BB8,H1071F1BC8,H1071F1BD8 +1071F1BA0:Mn2:H1071F3E38,H1071F3E48 +1071F3E38:lH1071F6658|N +1071F6658:lI105|H1071F92B0 +1071F92B0:lI110|H1071FC1F0 +1071FC1F0:lI101|H1071FF2A8 +1071FF2A8:lI116|H107202450 +107202450:lI95|H107205690 +107205690:lI104|H107208978 +107208978:lI111|H10720BC38 +10720BC38:lI115|H10720EEB8 +10720EEB8:lI116|H1072121F8 +1072121F8:lI115|H107215690 +107215690:lI46|H107218D10 +107218D10:lI98|H10721C510 +10721C510:lI101|H10721FBE0 +10721FBE0:lI97|H1072230A8 +1072230A8:lI109|N +1071F3E48:lH1071F6668|N +1071F6668:lI101|H1071F92C0 +1071F92C0:lI114|H1071FC200 +1071FC200:lI116|H1071FF2B8 +1071FF2B8:lI115|H107202460 +107202460:lI95|H1072056A0 +1072056A0:lI100|H107208988 +107208988:lI101|H10720BC48 +10720BC48:lI98|H10720EEC8 +10720EEC8:lI117|H107212208 +107212208:lI103|H1072156A0 +1072156A0:lI46|H107218D20 +107218D20:lI98|H10721C520 +10721C520:lI101|H10721FBF0 +10721FBF0:lI97|H1072230B8 +1072230B8:lI109|N +1071F1BD8:lH1071F3E78|N +1071F3E78:lI108|H1071F6698 +1071F6698:lI111|H1071F92F0 +1071F92F0:lI103|H1071FC230 +1071FC230:lI103|H1071FF2E8 +1071FF2E8:lI101|H107202490 +107202490:lI114|H1072056D0 +1072056D0:lI95|H1072089B8 +1072089B8:lI102|H10720BC78 +10720BC78:lI111|H10720EEF8 +10720EEF8:lI114|H107212238 +107212238:lI109|H1072156D0 +1072156D0:lI97|H107218D50 +107218D50:lI116|H10721C540 +10721C540:lI116|H10721FC10 +10721FC10:lI101|H1072230D8 +1072230D8:lI114|H1072261F0 +1072261F0:lI46|H107228F98 +107228F98:lI98|H10722B980 +10722B980:lI101|H10722E008 +10722E008:lI97|H107230430 +107230430:lI109|N +1071F1BC8:lH1071F3E68|N +1071F3E68:lI105|H1071F6688 +1071F6688:lI110|H1071F92E0 +1071F92E0:lI101|H1071FC220 +1071FC220:lI116|H1071FF2D8 +1071FF2D8:lI95|H107202480 +107202480:lI103|H1072056C0 +1072056C0:lI101|H1072089A8 +1072089A8:lI116|H10720BC68 +10720BC68:lI104|H10720EEE8 +10720EEE8:lI111|H107212228 +107212228:lI115|H1072156C0 +1072156C0:lI116|H107218D40 +107218D40:lI95|H10721C530 +10721C530:lI110|H10721FC00 +10721FC00:lI97|H1072230C8 +1072230C8:lI116|H1072261E0 +1072261E0:lI105|H107228F88 +107228F88:lI118|H10722B970 +10722B970:lI101|H10722DFF8 +10722DFF8:lI46|H107230420 +107230420:lI98|H107232588 +107232588:lI101|H1072343D0 +1072343D0:lI97|H107235F38 +107235F38:lI109|N +1071F1BB8:lH1071F3E58|N +1071F3E58:lI105|H1071F6678 +1071F6678:lI110|H1071F92D0 +1071F92D0:lI101|H1071FC210 +1071FC210:lI116|H1071FF2C8 +1071FF2C8:lI95|H107202470 +107202470:lI116|H1072056B0 +1072056B0:lI99|H107208998 +107208998:lI112|H10720BC58 +10720BC58:lI46|H10720EED8 +10720EED8:lI98|H107212218 +107212218:lI101|H1072156B0 +1072156B0:lI97|H107218D30 +107218D30:lI109|N +1071F07B0:Mn5:H1071F1B50,H1071F1B60,H1071F1B70,H1071F1B80,H1071F1B90 +1071F1B50:lH1071F3DE8|N +1071F3DE8:lI114|H1071F6608 +1071F6608:lI97|H1071F9260 +1071F9260:lI119|H1071FC1A0 +1071FC1A0:lI95|H1071FF258 +1071FF258:lI102|H107202400 +107202400:lI105|H107205640 +107205640:lI108|H107208928 +107208928:lI101|H10720BBE8 +10720BBE8:lI95|H10720EE78 +10720EE78:lI105|H1072121B8 +1072121B8:lI111|H107215650 +107215650:lI95|H107218CD0 +107218CD0:lI100|H10721C4E0 +10721C4E0:lI101|H10721FBB0 +10721FBB0:lI108|H107223078 +107223078:lI97|H1072261C0 +1072261C0:lI121|H107228F68 +107228F68:lI101|H10722B960 +10722B960:lI100|H10722DFE8 +10722DFE8:lI46|H107230410 +107230410:lI98|H107232578 +107232578:lI101|H1072343C0 +1072343C0:lI97|H107235F28 +107235F28:lI109|N +1071F1B90:lH1071F3E28|N +1071F3E28:lI103|H1071F6648 +1071F6648:lI114|H1071F92A0 +1071F92A0:lI111|H1071FC1E0 +1071FC1E0:lI117|H1071FF298 +1071FF298:lI112|H107202440 +107202440:lI95|H107205680 +107205680:lI104|H107208968 +107208968:lI105|H10720BC28 +10720BC28:lI115|H10720EEA8 +10720EEA8:lI116|H1072121E8 +1072121E8:lI111|H107215680 +107215680:lI114|H107218D00 +107218D00:lI121|H10721C500 +10721C500:lI46|H10721FBD0 +10721FBD0:lI98|H107223098 +107223098:lI101|H1072261D0 +1072261D0:lI97|H107228F78 +107228F78:lI109|N +1071F1B80:lH1071F3E18|N +1071F3E18:lI117|H1071F6638 +1071F6638:lI115|H1071F9290 +1071F9290:lI101|H1071FC1D0 +1071FC1D0:lI114|H1071FF288 +1071FF288:lI95|H107202430 +107202430:lI100|H107205670 +107205670:lI114|H107208958 +107208958:lI118|H10720BC18 +10720BC18:lI46|H10720EE98 +10720EE98:lI98|H1072121D8 +1072121D8:lI101|H107215670 +107215670:lI97|H107218CF0 +107218CF0:lI109|N +1071F1B70:lH1071F3E08|N +1071F3E08:lI105|H1071F6628 +1071F6628:lI110|H1071F9280 +1071F9280:lI101|H1071FC1C0 +1071FC1C0:lI116|H1071FF278 +1071FF278:lI95|H107202420 +107202420:lI99|H107205660 +107205660:lI111|H107208948 +107208948:lI110|H10720BC08 +10720BC08:lI102|H10720EE88 +10720EE88:lI105|H1072121C8 +1072121C8:lI103|H107215660 +107215660:lI46|H107218CE0 +107218CE0:lI98|H10721C4F0 +10721C4F0:lI101|H10721FBC0 +10721FBC0:lI97|H107223088 +107223088:lI109|N +1071F1B60:lH1071F3DF8|N +1071F3DF8:lI102|H1071F6618 +1071F6618:lI105|H1071F9270 +1071F9270:lI108|H1071FC1B0 +1071FC1B0:lI101|H1071FF268 +1071FF268:lI46|H107202410 +107202410:lI98|H107205650 +107205650:lI101|H107208938 +107208938:lI97|H10720BBF8 +10720BBF8:lI109|N +1071F0778:Mn6:H1071F1AF0,H1071F1B00,H1071F1B10,H1071F1B20,H1071F1B30,H1071F1B40 +1071F1AF0:lH1071F3D88|N +1071F3D88:lI101|H1071F65A8 +1071F65A8:lI114|H1071F9200 +1071F9200:lI112|H1071FC140 +1071FC140:lI99|H1071FF1F8 +1071FF1F8:lI46|H1072023A0 +1072023A0:lI98|H1072055E0 +1072055E0:lI101|H1072088C8 +1072088C8:lI97|H10720BB88 +10720BB88:lI109|N +1071F1B40:lH1071F3DD8|N +1071F3DD8:lI102|H1071F65F8 +1071F65F8:lI105|H1071F9250 +1071F9250:lI108|H1071FC190 +1071FC190:lI101|H1071FF248 +1071FF248:lI95|H1072023F0 +1072023F0:lI105|H107205630 +107205630:lI111|H107208918 +107208918:lI95|H10720BBD8 +10720BBD8:lI115|H10720EE68 +10720EE68:lI101|H1072121A8 +1072121A8:lI114|H107215640 +107215640:lI118|H107218CC0 +107218CC0:lI101|H10721C4D0 +10721C4D0:lI114|H10721FBA0 +10721FBA0:lI46|H107223068 +107223068:lI98|H1072261B0 +1072261B0:lI101|H107228F58 +107228F58:lI97|H10722B950 +10722B950:lI109|N +1071F1B30:lH1071F3DC8|N +1071F3DC8:lI105|H1071F65E8 +1071F65E8:lI110|H1071F9240 +1071F9240:lI101|H1071FC180 +1071FC180:lI116|H1071FF238 +1071FF238:lI54|H1072023E0 +1072023E0:lI95|H107205620 +107205620:lI117|H107208908 +107208908:lI100|H10720BBC8 +10720BBC8:lI112|H10720EE58 +10720EE58:lI46|H107212198 +107212198:lI98|H107215630 +107215630:lI101|H107218CB0 +107218CB0:lI97|H10721C4C0 +10721C4C0:lI109|N +1071F1B20:lH1071F3DB8|N +1071F3DB8:lI103|H1071F65D8 +1071F65D8:lI108|H1071F9230 +1071F9230:lI111|H1071FC170 +1071FC170:lI98|H1071FF228 +1071FF228:lI97|H1072023D0 +1072023D0:lI108|H107205610 +107205610:lI46|H1072088F8 +1072088F8:lI98|H10720BBB8 +10720BBB8:lI101|H10720EE48 +10720EE48:lI97|H107212188 +107212188:lI109|N +1071F1B10:lH1071F3DA8|N +1071F3DA8:lI114|H1071F65C8 +1071F65C8:lI97|H1071F9220 +1071F9220:lI119|H1071FC160 +1071FC160:lI95|H1071FF218 +1071FF218:lI102|H1072023C0 +1072023C0:lI105|H107205600 +107205600:lI108|H1072088E8 +1072088E8:lI101|H10720BBA8 +10720BBA8:lI95|H10720EE38 +10720EE38:lI105|H107212178 +107212178:lI111|H107215620 +107215620:lI95|H107218CA0 +107218CA0:lI100|H10721C4B0 +10721C4B0:lI101|H10721FB90 +10721FB90:lI102|H107223058 +107223058:lI108|H1072261A0 +1072261A0:lI97|H107228F48 +107228F48:lI116|H10722B940 +10722B940:lI101|H10722DFD8 +10722DFD8:lI46|H107230400 +107230400:lI98|H107232568 +107232568:lI101|H1072343B0 +1072343B0:lI97|H107235F18 +107235F18:lI109|N +1071F1B00:lH1071F3D98|N +1071F3D98:lI103|H1071F65B8 +1071F65B8:lI108|H1071F9210 +1071F9210:lI111|H1071FC150 +1071FC150:lI98|H1071FF208 +1071FF208:lI97|H1072023B0 +1072023B0:lI108|H1072055F0 +1072055F0:lI95|H1072088D8 +1072088D8:lI103|H10720BB98 +10720BB98:lI114|H10720EE28 +10720EE28:lI111|H107212168 +107212168:lI117|H107215610 +107215610:lI112|H107218C90 +107218C90:lI46|H10721C4A0 +10721C4A0:lI98|H10721FB80 +10721FB80:lI101|H107223048 +107223048:lI97|H107226190 +107226190:lI109|N +1071F0740:Mn6:H1071F1A88,H1071F1A98,H1071F1AB0,H1071F1AC0,H1071F1AD0,H1071F1AE0 +1071F1A88:lH1071F3D18|N +1071F3D18:lI110|H1071F6530 +1071F6530:lI101|H1071F9180 +1071F9180:lI116|H1071FC0C0 +1071FC0C0:lI95|H1071FF178 +1071FF178:lI107|H107202320 +107202320:lI101|H107205560 +107205560:lI114|H107208858 +107208858:lI110|H10720BB18 +10720BB18:lI101|H10720EDB8 +10720EDB8:lI108|H1072120F8 +1072120F8:lI46|H1072155B0 +1072155B0:lI98|H107218C30 +107218C30:lI101|H10721C440 +10721C440:lI97|H10721FB20 +10721FB20:lI109|N +1071F1AE0:lH1071F3D78|N +1071F3D78:lI101|H1071F6598 +1071F6598:lI114|H1071F91F0 +1071F91F0:lI114|H1071FC130 +1071FC130:lI111|H1071FF1E8 +1071FF1E8:lI114|H107202390 +107202390:lI95|H1072055D0 +1072055D0:lI104|H1072088B8 +1072088B8:lI97|H10720BB78 +10720BB78:lI110|H10720EE18 +10720EE18:lI100|H107212158 +107212158:lI108|H107215600 +107215600:lI101|H107218C80 +107218C80:lI114|H10721C490 +10721C490:lI46|H10721FB70 +10721FB70:lI98|H107223038 +107223038:lI101|H107226180 +107226180:lI97|H107228F38 +107228F38:lI109|N +1071F1AD0:lH1071F3D68|N +1071F3D68:lI111|H1071F6588 +1071F6588:lI115|H1071F91E0 +1071F91E0:lI46|H1071FC120 +1071FC120:lI98|H1071FF1D8 +1071FF1D8:lI101|H107202380 +107202380:lI97|H1072055C0 +1072055C0:lI109|N +1071F1AC0:lH1071F3D58|N +1071F3D58:lI114|H1071F6578 +1071F6578:lI97|H1071F91D0 +1071F91D0:lI119|H1071FC110 +1071FC110:lI95|H1071FF1C8 +1071FF1C8:lI102|H107202370 +107202370:lI105|H1072055B0 +1072055B0:lI108|H1072088A8 +1072088A8:lI101|H10720BB68 +10720BB68:lI95|H10720EE08 +10720EE08:lI105|H107212148 +107212148:lI111|H1072155F0 +1072155F0:lI95|H107218C70 +107218C70:lI99|H10721C480 +10721C480:lI111|H10721FB60 +10721FB60:lI109|H107223028 +107223028:lI112|H107226170 +107226170:lI114|H107228F28 +107228F28:lI101|H10722B930 +10722B930:lI115|H10722DFC8 +10722DFC8:lI115|H1072303F0 +1072303F0:lI101|H107232558 +107232558:lI100|H1072343A0 +1072343A0:lI46|H107235F08 +107235F08:lI98|H107237800 +107237800:lI101|H107238E88 +107238E88:lI97|H10723A360 +10723A360:lI109|N +1071F1AB0:lH1071F3D48|N +1071F3D48:lI108|H1071F6568 +1071F6568:lI111|H1071F91C0 +1071F91C0:lI103|H1071FC100 +1071FC100:lI103|H1071FF1B8 +1071FF1B8:lI101|H107202360 +107202360:lI114|H1072055A0 +1072055A0:lI95|H107208898 +107208898:lI100|H10720BB58 +10720BB58:lI105|H10720EDF8 +10720EDF8:lI115|H107212138 +107212138:lI107|H1072155E0 +1072155E0:lI95|H107218C60 +107218C60:lI108|H10721C470 +10721C470:lI111|H10721FB50 +10721FB50:lI103|H107223018 +107223018:lI95|H107226160 +107226160:lI104|H107228F18 +107228F18:lI46|H10722B920 +10722B920:lI98|H10722DFB8 +10722DFB8:lI101|H1072303E0 +1072303E0:lI97|H107232548 +107232548:lI109|N +1071F1A98:Mn2:H1071F3D28,H1071F3D38 +1071F3D28:Mn1:H1071F6540 +1071F6540:Mn2:H1071F9190,H1071F91A0 +1071F9190:lH1071FC0D0|N +1071FC0D0:lI108|H1071FF188 +1071FF188:lI111|H107202330 +107202330:lI103|H107205570 +107205570:lI103|H107208868 +107208868:lI101|H10720BB28 +10720BB28:lI114|H10720EDC8 +10720EDC8:lI95|H107212108 +107212108:lI115|H1072155C0 +1072155C0:lI117|H107218C40 +107218C40:lI112|H10721C450 +10721C450:lI46|H10721FB30 +10721FB30:lI98|H107222FF8 +107222FF8:lI101|H107226140 +107226140:lI97|H107228EF8 +107228EF8:lI109|N +1071F91A0:lH1071FC0E0|N +1071FC0E0:lI112|H1071FF198 +1071FF198:lI103|H107202340 +107202340:lI50|H107205580 +107205580:lI46|H107208878 +107208878:lI98|H10720BB38 +10720BB38:lI101|H10720EDD8 +10720EDD8:lI97|H107212118 +107212118:lI109|N +1071F3D38:lH1071F6558|N +1071F6558:lI97|H1071F91B0 +1071F91B0:lI112|H1071FC0F0 +1071FC0F0:lI112|H1071FF1A8 +1071FF1A8:lI108|H107202350 +107202350:lI105|H107205590 +107205590:lI99|H107208888 +107208888:lI97|H10720BB48 +10720BB48:lI116|H10720EDE8 +10720EDE8:lI105|H107212128 +107212128:lI111|H1072155D0 +1072155D0:lI110|H107218C50 +107218C50:lI95|H10721C460 +10721C460:lI99|H10721FB40 +10721FB40:lI111|H107223008 +107223008:lI110|H107226150 +107226150:lI116|H107228F08 +107228F08:lI114|H10722B910 +10722B910:lI111|H10722DFA8 +10722DFA8:lI108|H1072303D0 +1072303D0:lI108|H107232538 +107232538:lI101|H107234390 +107234390:lI114|H107235EF8 +107235EF8:lI46|H1072377F0 +1072377F0:lI98|H107238E78 +107238E78:lI101|H10723A350 +10723A350:lI97|H10723B6A0 +10723B6A0:lI109|N +1071F0718:Mn4:H1071F1A48,H1071F1A58,H1071F1A68,H1071F1A78 +1071F1A48:lH1071F3CD8|N +1071F3CD8:lI108|H1071F64F0 +1071F64F0:lI111|H1071F9140 +1071F9140:lI103|H1071FC080 +1071FC080:lI103|H1071FF138 +1071FF138:lI101|H1072022E0 +1072022E0:lI114|H107205520 +107205520:lI95|H107208818 +107208818:lI98|H10720BAD8 +10720BAD8:lI97|H10720ED88 +10720ED88:lI99|H1072120D8 +1072120D8:lI107|H107215590 +107215590:lI101|H107218C10 +107218C10:lI110|H10721C420 +10721C420:lI100|H10721FB00 +10721FB00:lI46|H107222FD8 +107222FD8:lI98|H107226120 +107226120:lI101|H107228ED8 +107228ED8:lI97|H10722B8F0 +10722B8F0:lI109|N +1071F1A78:lH1071F3D08|N +1071F3D08:lI101|H1071F6520 +1071F6520:lI114|H1071F9170 +1071F9170:lI108|H1071FC0B0 +1071FC0B0:lI95|H1071FF168 +1071FF168:lI107|H107202310 +107202310:lI101|H107205550 +107205550:lI114|H107208848 +107208848:lI110|H10720BB08 +10720BB08:lI101|H10720EDA8 +10720EDA8:lI108|H1072120E8 +1072120E8:lI95|H1072155A0 +1072155A0:lI101|H107218C20 +107218C20:lI114|H10721C430 +10721C430:lI114|H10721FB10 +10721FB10:lI111|H107222FE8 +107222FE8:lI114|H107226130 +107226130:lI115|H107228EE8 +107228EE8:lI46|H10722B900 +10722B900:lI98|H10722DF98 +10722DF98:lI101|H1072303C0 +1072303C0:lI97|H107232528 +107232528:lI109|N +1071F1A68:lH1071F3CF8|N +1071F3CF8:lI107|H1071F6510 +1071F6510:lI101|H1071F9160 +1071F9160:lI114|H1071FC0A0 +1071FC0A0:lI110|H1071FF158 +1071FF158:lI101|H107202300 +107202300:lI108|H107205540 +107205540:lI46|H107208838 +107208838:lI97|H10720BAF8 +10720BAF8:lI112|H10720ED98 +10720ED98:lI112|N +1071F1A58:lH1071F3CE8|N +1071F3CE8:lI105|H1071F6500 +1071F6500:lI110|H1071F9150 +1071F9150:lI101|H1071FC090 +1071FC090:lI116|H1071FF148 +1071FF148:lI46|H1072022F0 +1072022F0:lI98|H107205530 +107205530:lI101|H107208828 +107208828:lI97|H10720BAE8 +10720BAE8:lI109|N +1071F06C8:Mn9:H1071F19A8,H1071F19B8,H1071F19C8,H1071F19D8,H1071F19E8,H1071F1A00,H1071F1A10,H1071F1A28,H1071F1A38 +1071F19A8:lH1071F3C28|N +1071F3C28:lI114|H1071F6440 +1071F6440:lI112|H1071F9090 +1071F9090:lI99|H1071FBFD0 +1071FBFD0:lI46|H1071FF088 +1071FF088:lI98|H107202230 +107202230:lI101|H107205470 +107205470:lI97|H107208768 +107208768:lI109|N +1071F1A38:lH1071F3CC8|N +1071F3CC8:lI105|H1071F64E0 +1071F64E0:lI110|H1071F9130 +1071F9130:lI101|H1071FC070 +1071FC070:lI116|H1071FF128 +1071FF128:lI95|H1072022D0 +1072022D0:lI115|H107205510 +107205510:lI99|H107208808 +107208808:lI116|H10720BAC8 +10720BAC8:lI112|H10720ED78 +10720ED78:lI46|H1072120C8 +1072120C8:lI98|H107215580 +107215580:lI101|H107218C00 +107218C00:lI97|H10721C410 +10721C410:lI109|N +1071F1A28:lH1071F3CB8|N +1071F3CB8:lI115|H1071F64D0 +1071F64D0:lI116|H1071F9120 +1071F9120:lI97|H1071FC060 +1071FC060:lI110|H1071FF118 +1071FF118:lI100|H1072022C0 +1072022C0:lI97|H107205500 +107205500:lI114|H1072087F8 +1072087F8:lI100|H10720BAB8 +10720BAB8:lI95|H10720ED68 +10720ED68:lI101|H1072120B8 +1072120B8:lI114|H107215570 +107215570:lI114|H107218BF0 +107218BF0:lI111|H10721C400 +10721C400:lI114|H10721FAF0 +10721FAF0:lI46|H107222FC8 +107222FC8:lI98|H107226110 +107226110:lI101|H107228EC8 +107228EC8:lI97|H10722B8E0 +10722B8E0:lI109|N +1071F1A10:Mn2:H1071F3C98,H1071F3CA8 +1071F3C98:lH1071F64B0|N +1071F64B0:lI108|H1071F9100 +1071F9100:lI111|H1071FC040 +1071FC040:lI99|H1071FF0F8 +1071FF0F8:lI97|H1072022A0 +1072022A0:lI108|H1072054E0 +1072054E0:lI95|H1072087D8 +1072087D8:lI116|H10720BA98 +10720BA98:lI99|H10720ED48 +10720ED48:lI112|H107212098 +107212098:lI46|H107215550 +107215550:lI98|H107218BD0 +107218BD0:lI101|H10721C3E0 +10721C3E0:lI97|H10721FAD0 +10721FAD0:lI109|N +1071F3CA8:lH1071F64C0|N +1071F64C0:lI107|H1071F9110 +1071F9110:lI101|H1071FC050 +1071FC050:lI114|H1071FF108 +1071FF108:lI110|H1072022B0 +1072022B0:lI101|H1072054F0 +1072054F0:lI108|H1072087E8 +1072087E8:lI95|H10720BAA8 +10720BAA8:lI99|H10720ED58 +10720ED58:lI111|H1072120A8 +1072120A8:lI110|H107215560 +107215560:lI102|H107218BE0 +107218BE0:lI105|H10721C3F0 +10721C3F0:lI103|H10721FAE0 +10721FAE0:lI46|H107222FB8 +107222FB8:lI98|H107226100 +107226100:lI101|H107228EB8 +107228EB8:lI97|H10722B8D0 +10722B8D0:lI109|N +1071F1A00:lH1071F3C88|N +1071F3C88:lI99|H1071F64A0 +1071F64A0:lI111|H1071F90F0 +1071F90F0:lI100|H1071FC030 +1071FC030:lI101|H1071FF0E8 +1071FF0E8:lI46|H107202290 +107202290:lI98|H1072054D0 +1072054D0:lI101|H1072087C8 +1072087C8:lI97|H10720BA88 +10720BA88:lI109|N +1071F19E8:Mn2:H1071F3C68,H1071F3C78 +1071F3C68:lH1071F6480|N +1071F6480:lI105|H1071F90D0 +1071F90D0:lI110|H1071FC010 +1071FC010:lI101|H1071FF0C8 +1071FF0C8:lI116|H107202270 +107202270:lI95|H1072054B0 +1072054B0:lI100|H1072087A8 +1072087A8:lI110|H10720BA68 +10720BA68:lI115|H10720ED28 +10720ED28:lI46|H107212078 +107212078:lI98|H107215530 +107215530:lI101|H107218BB0 +107218BB0:lI97|H10721C3C0 +10721C3C0:lI109|N +1071F3C78:lH1071F6490|N +1071F6490:lI99|H1071F90E0 +1071F90E0:lI111|H1071FC020 +1071FC020:lI100|H1071FF0D8 +1071FF0D8:lI101|H107202280 +107202280:lI95|H1072054C0 +1072054C0:lI115|H1072087B8 +1072087B8:lI101|H10720BA78 +10720BA78:lI114|H10720ED38 +10720ED38:lI118|H107212088 +107212088:lI101|H107215540 +107215540:lI114|H107218BC0 +107218BC0:lI46|H10721C3D0 +10721C3D0:lI98|H10721FAC0 +10721FAC0:lI101|H107222FA8 +107222FA8:lI97|H1072260F0 +1072260F0:lI109|N +1071F19D8:lH1071F3C58|N +1071F3C58:lI108|H1071F6470 +1071F6470:lI111|H1071F90C0 +1071F90C0:lI103|H1071FC000 +1071FC000:lI103|H1071FF0B8 +1071FF0B8:lI101|H107202260 +107202260:lI114|H1072054A0 +1072054A0:lI95|H107208798 +107208798:lI104|H10720BA58 +10720BA58:lI97|H10720ED18 +10720ED18:lI110|H107212068 +107212068:lI100|H107215520 +107215520:lI108|H107218BA0 +107218BA0:lI101|H10721C3B0 +10721C3B0:lI114|H10721FAB0 +10721FAB0:lI95|H107222F98 +107222F98:lI119|H1072260E0 +1072260E0:lI97|H107228EA8 +107228EA8:lI116|H10722B8C0 +10722B8C0:lI99|H10722DF88 +10722DF88:lI104|H1072303B0 +1072303B0:lI101|H107232518 +107232518:lI114|H107234380 +107234380:lI46|H107235EE8 +107235EE8:lI98|H1072377E0 +1072377E0:lI101|H107238E68 +107238E68:lI97|H10723A340 +10723A340:lI109|N +1071F19C8:lH1071F3C48|N +1071F3C48:lI105|H1071F6460 +1071F6460:lI110|H1071F90B0 +1071F90B0:lI101|H1071FBFF0 +1071FBFF0:lI116|H1071FF0A8 +1071FF0A8:lI95|H107202250 +107202250:lI116|H107205490 +107205490:lI99|H107208788 +107208788:lI112|H10720BA48 +10720BA48:lI95|H10720ED08 +10720ED08:lI100|H107212058 +107212058:lI105|H107215510 +107215510:lI115|H107218B90 +107218B90:lI116|H10721C3A0 +10721C3A0:lI46|H10721FAA0 +10721FAA0:lI98|H107222F88 +107222F88:lI101|H1072260D0 +1072260D0:lI97|H107228E98 +107228E98:lI109|N +1071F19B8:lH1071F3C38|N +1071F3C38:lI105|H1071F6450 +1071F6450:lI110|H1071F90A0 +1071F90A0:lI101|H1071FBFE0 +1071FBFE0:lI116|H1071FF098 +1071FF098:lI54|H107202240 +107202240:lI95|H107205480 +107205480:lI116|H107208778 +107208778:lI99|H10720BA38 +10720BA38:lI112|H10720ECF8 +10720ECF8:lI95|H107212048 +107212048:lI100|H107215500 +107215500:lI105|H107218B80 +107218B80:lI115|H10721C390 +10721C390:lI116|H10721FA90 +10721FA90:lI46|H107222F78 +107222F78:lI98|H1072260C0 +1072260C0:lI101|H107228E88 +107228E88:lI97|H10722B8B0 +10722B8B0:lI109|N +1071F0698:Mn5:H1071F1950,H1071F1968,H1071F1978,H1071F1988,H1071F1998 +1071F1950:Mn2:H1071F3BC8,H1071F3BD8 +1071F3BC8:lH1071F63E0|N +1071F63E0:lI110|H1071F9030 +1071F9030:lI101|H1071FBF70 +1071FBF70:lI116|H1071FF028 +1071FF028:lI95|H1072021D0 +1072021D0:lI97|H107205410 +107205410:lI100|H107208708 +107208708:lI109|H10720B9D8 +10720B9D8:lI46|H10720EC98 +10720EC98:lI98|H107211FE8 +107211FE8:lI101|H1072154B0 +1072154B0:lI97|H107218B30 +107218B30:lI109|N +1071F3BD8:lH1071F63F0|N +1071F63F0:lI108|H1071F9040 +1071F9040:lI111|H1071FBF80 +1071FBF80:lI103|H1071FF038 +1071FF038:lI103|H1072021E0 +1072021E0:lI101|H107205420 +107205420:lI114|H107208718 +107208718:lI95|H10720B9E8 +10720B9E8:lI112|H10720ECA8 +10720ECA8:lI114|H107211FF8 +107211FF8:lI111|H1072154C0 +1072154C0:lI120|H107218B40 +107218B40:lI121|H10721C350 +10721C350:lI46|H10721FA50 +10721FA50:lI98|H107222F48 +107222F48:lI101|H107226090 +107226090:lI97|H107228E68 +107228E68:lI109|N +1071F1998:lH1071F3C18|N +1071F3C18:lI108|H1071F6430 +1071F6430:lI111|H1071F9080 +1071F9080:lI103|H1071FBFC0 +1071FBFC0:lI103|H1071FF078 +1071FF078:lI101|H107202220 +107202220:lI114|H107205460 +107205460:lI95|H107208758 +107208758:lI111|H10720BA28 +10720BA28:lI108|H10720ECE8 +10720ECE8:lI112|H107212038 +107212038:lI46|H1072154F0 +1072154F0:lI98|H107218B70 +107218B70:lI101|H10721C380 +10721C380:lI97|H10721FA80 +10721FA80:lI109|N +1071F1988:lH1071F3C08|N +1071F3C08:lI101|H1071F6420 +1071F6420:lI114|H1071F9070 +1071F9070:lI108|H1071FBFB0 +1071FBFB0:lI95|H1071FF068 +1071FF068:lI100|H107202210 +107202210:lI105|H107205450 +107205450:lI115|H107208748 +107208748:lI116|H10720BA18 +10720BA18:lI114|H10720ECD8 +10720ECD8:lI105|H107212028 +107212028:lI98|H1072154E0 +1072154E0:lI117|H107218B60 +107218B60:lI116|H10721C370 +10721C370:lI105|H10721FA70 +10721FA70:lI111|H107222F68 +107222F68:lI110|H1072260B0 +1072260B0:lI46|H107228E78 +107228E78:lI98|H10722B8A0 +10722B8A0:lI101|H10722DF78 +10722DF78:lI97|H1072303A0 +1072303A0:lI109|N +1071F1978:lH1071F3BF8|N +1071F3BF8:lI107|H1071F6410 +1071F6410:lI101|H1071F9060 +1071F9060:lI114|H1071FBFA0 +1071FBFA0:lI110|H1071FF058 +1071FF058:lI101|H107202200 +107202200:lI108|H107205440 +107205440:lI46|H107208738 +107208738:lI98|H10720BA08 +10720BA08:lI101|H10720ECC8 +10720ECC8:lI97|H107212018 +107212018:lI109|N +1071F1968:lH1071F3BE8|N +1071F3BE8:lI101|H1071F6400 +1071F6400:lI114|H1071F9050 +1071F9050:lI114|H1071FBF90 +1071FBF90:lI111|H1071FF048 +1071FF048:lI114|H1072021F0 +1072021F0:lI95|H107205430 +107205430:lI108|H107208728 +107208728:lI111|H10720B9F8 +10720B9F8:lI103|H10720ECB8 +10720ECB8:lI103|H107212008 +107212008:lI101|H1072154D0 +1072154D0:lI114|H107218B50 +107218B50:lI46|H10721C360 +10721C360:lI98|H10721FA60 +10721FA60:lI101|H107222F58 +107222F58:lI97|H1072260A0 +1072260A0:lI109|N +1071F0088:lI47|H1071F0648 +1071F0648:lI111|H1071F18D0 +1071F18D0:lI112|H1071F3B48 +1071F3B48:lI116|H1071F6360 +1071F6360:lI47|H1071F8FB0 +1071F8FB0:lI104|H1071FBEF0 +1071FBEF0:lI111|H1071FEFA8 +1071FEFA8:lI109|H107202150 +107202150:lI101|H107205390 +107205390:lI98|H107208688 +107208688:lI114|H10720B958 +10720B958:lI101|H10720EC18 +10720EC18:lI119|H107211F78 +107211F78:lI47|H107215450 +107215450:lI67|H107218AE0 +107218AE0:lI101|H10721C310 +10721C310:lI108|H10721FA10 +10721FA10:lI108|H107222F08 +107222F08:lI97|H107226070 +107226070:lI114|H107228E58 +107228E58:lI47|H10722B890 +10722B890:lI101|H10722DF68 +10722DF68:lI114|H107230390 +107230390:lI108|H107232508 +107232508:lI97|H107234370 +107234370:lI110|H107235ED8 +107235ED8:lI103|H1072377D0 +1072377D0:lI47|H107238E58 +107238E58:lI50|H10723A330 +10723A330:lI54|H10723B690 +10723B690:lI46|H10723C770 +10723C770:lI48|H10723D630 +10723D630:lI46|H10723E3B0 +10723E3B0:lI50|H10723EFC0 +10723EFC0:lI47|H10723FA90 +10723FA90:lI108|H1072403E0 +1072403E0:lI105|H107240C60 +107240C60:lI98|H1072413F0 +1072413F0:lI47|H107241B20 +107241B20:lI101|H1072421F0 +1072421F0:lI114|H107242860 +107242860:lI108|H107242E60 +107242E60:lI97|H1072433D0 +1072433D0:lI110|H107243910 +107243910:lI103|H107243E00 +107243E00:lI47|H1072442F0 +1072442F0:lI108|H1072447A0 +1072447A0:lI105|H107244C10 +107244C10:lI98|H107245070 +107245070:lI47|H1072454C0 +1072454C0:lI107|H1072458C0 +1072458C0:lI101|H107245C80 +107245C80:lI114|H107246010 +107246010:lI110|H1072463A0 +1072463A0:lI101|H107246730 +107246730:lI108|H107246AC0 +107246AC0:lI45|H107246E00 +107246E00:lI57|H107247120 +107247120:lI46|H107247440 +107247440:lI48|H107247750 +107247750:lI46|H107247A50 +107247A50:lI50|H107247D40 +107247D40:lI47|H107248020 +107248020:lI101|H1072482E0 +1072482E0:lI98|H1072485A0 +1072485A0:lI105|H107248850 +107248850:lI110|N +106600960:lH106600990|H10724AE50 +106600990:t2:H1071F0140,H1071F0150 +1071F0150:Mh5C:10:H1071F09A8,H1071F09C8,H1071F0A08,H1071F0A28,H1071F0A38,H1071F0A68,H1071F0A98,H1071F0AC8,H1071F0AF0,H1071F0B30,H1071F0B58,H1071F0B88,H1071F0BF0,H1071F0C28,H1071F0C40,H1071F0C70 +1071F09A8:Mn3:H1071F1ED0,H1071F1EE0,H1071F1EF0 +1071F1ED0:lH1071F41B8|N +1071F41B8:lI103|H1071F69D8 +1071F69D8:lI101|H1071F9630 +1071F9630:lI110|H1071FC570 +1071FC570:lI95|H1071FF628 +1071FF628:lI101|H1072027D0 +1072027D0:lI118|H107205A10 +107205A10:lI101|H107208CE8 +107208CE8:lI110|H10720BF98 +10720BF98:lI116|H10720F218 +10720F218:lI46|H107212538 +107212538:lI98|H1072159C0 +1072159C0:lI101|H107219030 +107219030:lI97|H10721C790 +10721C790:lI109|N +1071F1EF0:lH1071F41D8|N +1071F41D8:lI101|H1071F69F8 +1071F69F8:lI100|H1071F9650 +1071F9650:lI108|H1071FC590 +1071FC590:lI105|H1071FF648 +1071FF648:lI110|H1072027F0 +1072027F0:lI95|H107205A30 +107205A30:lI116|H107208D08 +107208D08:lI121|H10720BFB8 +10720BFB8:lI112|H10720F238 +10720F238:lI101|H107212558 +107212558:lI95|H1072159E0 +1072159E0:lI115|H107219040 +107219040:lI117|H10721C7A0 +10721C7A0:lI103|H10721FE10 +10721FE10:lI103|H107223298 +107223298:lI101|H107226380 +107226380:lI115|H107229118 +107229118:lI116|H10722BAE0 +10722BAE0:lI105|H10722E148 +10722E148:lI111|H107230500 +107230500:lI110|H107232628 +107232628:lI46|H107234460 +107234460:lI98|H107235FA8 +107235FA8:lI101|H107237840 +107237840:lI97|H107238EC8 +107238EC8:lI109|N +1071F1EE0:lH1071F41C8|N +1071F41C8:lI100|H1071F69E8 +1071F69E8:lI105|H1071F9640 +1071F9640:lI103|H1071FC580 +1071FC580:lI114|H1071FF638 +1071FF638:lI97|H1072027E0 +1072027E0:lI112|H107205A20 +107205A20:lI104|H107208CF8 +107208CF8:lI46|H10720BFA8 +10720BFA8:lI98|H10720F228 +10720F228:lI101|H107212548 +107212548:lI97|H1072159D0 +1072159D0:lI109|N +1071F0C70:Mn6:H1071F23C8,H1071F23D8,H1071F23E8,H1071F23F8,H1071F2408,H1071F2418 +1071F23C8:lH1071F4710|N +1071F4710:lI117|H1071F6F38 +1071F6F38:lI110|H1071F9B90 +1071F9B90:lI105|H1071FCAD0 +1071FCAD0:lI99|H1071FFB88 +1071FFB88:lI111|H107202D30 +107202D30:lI100|H107205F60 +107205F60:lI101|H107209218 +107209218:lI46|H10720C478 +10720C478:lI98|H10720F698 +10720F698:lI101|H107212948 +107212948:lI97|H107215D20 +107215D20:lI109|N +1071F2418:lH1071F4760|N +1071F4760:lI98|H1071F6F88 +1071F6F88:lI105|H1071F9BE0 +1071F9BE0:lI110|H1071FCB20 +1071FCB20:lI97|H1071FFBD8 +1071FFBD8:lI114|H107202D80 +107202D80:lI121|H107205FB0 +107205FB0:lI46|H107209268 +107209268:lI98|H10720C4C8 +10720C4C8:lI101|H10720F6E8 +10720F6E8:lI97|H107212998 +107212998:lI109|N +1071F2408:lH1071F4750|N +1071F4750:lI101|H1071F6F78 +1071F6F78:lI118|H1071F9BD0 +1071F9BD0:lI97|H1071FCB10 +1071FCB10:lI108|H1071FFBC8 +1071FFBC8:lI95|H107202D70 +107202D70:lI98|H107205FA0 +107205FA0:lI105|H107209258 +107209258:lI116|H10720C4B8 +10720C4B8:lI115|H10720F6D8 +10720F6D8:lI46|H107212988 +107212988:lI98|H107215D60 +107215D60:lI101|H107219340 +107219340:lI97|H10721C9D0 +10721C9D0:lI109|N +1071F23F8:lH1071F4740|N +1071F4740:lI101|H1071F6F68 +1071F6F68:lI100|H1071F9BC0 +1071F9BC0:lI108|H1071FCB00 +1071FCB00:lI105|H1071FFBB8 +1071FFBB8:lI110|H107202D60 +107202D60:lI95|H107205F90 +107205F90:lI99|H107209248 +107209248:lI111|H10720C4A8 +10720C4A8:lI110|H10720F6C8 +10720F6C8:lI116|H107212978 +107212978:lI101|H107215D50 +107215D50:lI120|H107219330 +107219330:lI116|H10721C9C0 +10721C9C0:lI46|H107220010 +107220010:lI98|H107223408 +107223408:lI101|H1072264C0 +1072264C0:lI97|H1072291E8 +1072291E8:lI109|N +1071F23E8:lH1071F4730|N +1071F4730:lI109|H1071F6F58 +1071F6F58:lI115|H1071F9BB0 +1071F9BB0:lI95|H1071FCAF0 +1071FCAF0:lI116|H1071FFBA8 +1071FFBA8:lI114|H107202D50 +107202D50:lI97|H107205F80 +107205F80:lI110|H107209238 +107209238:lI115|H10720C498 +10720C498:lI102|H10720F6B8 +10720F6B8:lI111|H107212968 +107212968:lI114|H107215D40 +107215D40:lI109|H107219320 +107219320:lI46|H10721C9B0 +10721C9B0:lI98|H107220000 +107220000:lI101|H1072233F8 +1072233F8:lI97|H1072264B0 +1072264B0:lI109|N +1071F23D8:lH1071F4720|N +1071F4720:lI103|H1071F6F48 +1071F6F48:lI101|H1071F9BA0 +1071F9BA0:lI110|H1071FCAE0 +1071FCAE0:lI95|H1071FFB98 +1071FFB98:lI115|H107202D40 +107202D40:lI116|H107205F70 +107205F70:lI97|H107209228 +107209228:lI116|H10720C488 +10720C488:lI101|H10720F6A8 +10720F6A8:lI109|H107212958 +107212958:lI46|H107215D30 +107215D30:lI98|H107219310 +107219310:lI101|H10721C9A0 +10721C9A0:lI97|H10721FFF0 +10721FFF0:lI109|N +1071F0C40:Mn5:H1071F2370,H1071F2380,H1071F2390,H1071F23A0,H1071F23B0 +1071F2370:lH1071F46B0|N +1071F46B0:lI102|H1071F6ED8 +1071F6ED8:lI105|H1071F9B30 +1071F9B30:lI108|H1071FCA70 +1071FCA70:lI101|H1071FFB28 +1071FFB28:lI95|H107202CD0 +107202CD0:lI115|H107205F00 +107205F00:lI111|H1072091B8 +1072091B8:lI114|H10720C418 +10720C418:lI116|H10720F648 +10720F648:lI101|H1072128F8 +1072128F8:lI114|H107215CD0 +107215CD0:lI46|H1072192D0 +1072192D0:lI98|H10721C990 +10721C990:lI101|H10721FFE0 +10721FFE0:lI97|H1072233E8 +1072233E8:lI109|N +1071F23B0:Mn2:H1071F46F0,H1071F4700 +1071F46F0:lH1071F6F18|N +1071F6F18:lI101|H1071F9B70 +1071F9B70:lI112|H1071FCAB0 +1071FCAB0:lI112|H1071FFB68 +1071FFB68:lI46|H107202D10 +107202D10:lI98|H107205F40 +107205F40:lI101|H1072091F8 +1072091F8:lI97|H10720C458 +10720C458:lI109|N +1071F4700:lH1071F6F28|N +1071F6F28:lI111|H1071F9B80 +1071F9B80:lI114|H1071FCAC0 +1071FCAC0:lI100|H1071FFB78 +1071FFB78:lI115|H107202D20 +107202D20:lI101|H107205F50 +107205F50:lI116|H107209208 +107209208:lI115|H10720C468 +10720C468:lI46|H10720F688 +10720F688:lI98|H107212938 +107212938:lI101|H107215D10 +107215D10:lI97|H107219300 +107219300:lI109|N +1071F23A0:lH1071F46E0|N +1071F46E0:lI101|H1071F6F08 +1071F6F08:lI114|H1071F9B60 +1071F9B60:lI108|H1071FCAA0 +1071FCAA0:lI95|H1071FFB58 +1071FFB58:lI98|H107202D00 +107202D00:lI105|H107205F30 +107205F30:lI116|H1072091E8 +1072091E8:lI115|H10720C448 +10720C448:lI46|H10720F678 +10720F678:lI98|H107212928 +107212928:lI101|H107215D00 +107215D00:lI97|H1072192F0 +1072192F0:lI109|N +1071F2390:lH1071F46D0|N +1071F46D0:lI103|H1071F6EF8 +1071F6EF8:lI98|H1071F9B50 +1071F9B50:lI95|H1071FCA90 +1071FCA90:lI115|H1071FFB48 +1071FFB48:lI101|H107202CF0 +107202CF0:lI116|H107205F20 +107205F20:lI115|H1072091D8 +1072091D8:lI46|H10720C438 +10720C438:lI98|H10720F668 +10720F668:lI101|H107212918 +107212918:lI97|H107215CF0 +107215CF0:lI109|N +1071F2380:lH1071F46C0|N +1071F46C0:lI101|H1071F6EE8 +1071F6EE8:lI114|H1071F9B40 +1071F9B40:lI108|H1071FCA80 +1071FCA80:lI95|H1071FFB38 +1071FFB38:lI101|H107202CE0 +107202CE0:lI118|H107205F10 +107205F10:lI97|H1072091C8 +1072091C8:lI108|H10720C428 +10720C428:lI46|H10720F658 +10720F658:lI98|H107212908 +107212908:lI101|H107215CE0 +107215CE0:lI97|H1072192E0 +1072192E0:lI109|N +1071F0C28:Mn2:H1071F2348,H1071F2358 +1071F2348:lH1071F4680|N +1071F4680:lI101|H1071F6EA8 +1071F6EA8:lI100|H1071F9B00 +1071F9B00:lI108|H1071FCA40 +1071FCA40:lI105|H1071FFAF8 +1071FFAF8:lI110|H107202CA0 +107202CA0:lI95|H107205ED0 +107205ED0:lI101|H107209188 +107209188:lI120|H10720C3E8 +10720C3E8:lI112|H10720F618 +10720F618:lI97|H1072128D8 +1072128D8:lI110|H107215CC0 +107215CC0:lI100|H1072192C0 +1072192C0:lI46|H10721C980 +10721C980:lI98|H10721FFD0 +10721FFD0:lI101|H1072233D8 +1072233D8:lI97|H1072264A0 +1072264A0:lI109|N +1071F2358:Mn2:H1071F4690,H1071F46A0 +1071F4690:lH1071F6EB8|N +1071F6EB8:lI115|H1071F9B10 +1071F9B10:lI108|H1071FCA50 +1071FCA50:lI97|H1071FFB08 +1071FFB08:lI118|H107202CB0 +107202CB0:lI101|H107205EE0 +107205EE0:lI46|H107209198 +107209198:lI98|H10720C3F8 +10720C3F8:lI101|H10720F628 +10720F628:lI97|H1072128E8 +1072128E8:lI109|N +1071F46A0:lH1071F6EC8|N +1071F6EC8:lI115|H1071F9B20 +1071F9B20:lI111|H1071FCA60 +1071FCA60:lI102|H1071FFB18 +1071FFB18:lI115|H107202CC0 +107202CC0:lI46|H107205EF0 +107205EF0:lI98|H1072091A8 +1072091A8:lI101|H10720C408 +10720C408:lI97|H10720F638 +10720F638:lI109|N +1071F0BF0:Mn6:H1071F22E8,H1071F22F8,H1071F2308,H1071F2318,H1071F2328,H1071F2338 +1071F22E8:lH1071F4620|N +1071F4620:lI112|H1071F6E48 +1071F6E48:lI114|H1071F9AA0 +1071F9AA0:lI111|H1071FC9E0 +1071FC9E0:lI99|H1071FFA98 +1071FFA98:lI95|H107202C40 +107202C40:lI108|H107205E70 +107205E70:lI105|H107209128 +107209128:lI98|H10720C388 +10720C388:lI46|H10720F5B8 +10720F5B8:lI98|H107212898 +107212898:lI101|H107215C80 +107215C80:lI97|H107219280 +107219280:lI109|N +1071F2338:lH1071F4670|N +1071F4670:lI101|H1071F6E98 +1071F6E98:lI100|H1071F9AF0 +1071F9AF0:lI108|H1071FCA30 +1071FCA30:lI105|H1071FFAE8 +1071FFAE8:lI110|H107202C90 +107202C90:lI46|H107205EC0 +107205EC0:lI98|H107209178 +107209178:lI101|H10720C3D8 +10720C3D8:lI97|H10720F608 +10720F608:lI109|N +1071F2328:lH1071F4660|N +1071F4660:lI100|H1071F6E88 +1071F6E88:lI101|H1071F9AE0 +1071F9AE0:lI116|H1071FCA20 +1071FCA20:lI115|H1071FFAD8 +1071FFAD8:lI95|H107202C80 +107202C80:lI115|H107205EB0 +107205EB0:lI117|H107209168 +107209168:lI112|H10720C3C8 +10720C3C8:lI46|H10720F5F8 +10720F5F8:lI98|H1072128C8 +1072128C8:lI101|H107215CB0 +107215CB0:lI97|H1072192B0 +1072192B0:lI109|N +1071F2318:lH1071F4650|N +1071F4650:lI115|H1071F6E78 +1071F6E78:lI117|H1071F9AD0 +1071F9AD0:lI112|H1071FCA10 +1071FCA10:lI101|H1071FFAC8 +1071FFAC8:lI114|H107202C70 +107202C70:lI118|H107205EA0 +107205EA0:lI105|H107209158 +107209158:lI115|H10720C3B8 +10720C3B8:lI111|H10720F5E8 +10720F5E8:lI114|H1072128B8 +1072128B8:lI46|H107215CA0 +107215CA0:lI98|H1072192A0 +1072192A0:lI101|H10721C970 +10721C970:lI97|H10721FFC0 +10721FFC0:lI109|N +1071F2308:lH1071F4640|N +1071F4640:lI99|H1071F6E68 +1071F6E68:lI97|H1071F9AC0 +1071F9AC0:lI108|H1071FCA00 +1071FCA00:lI101|H1071FFAB8 +1071FFAB8:lI110|H107202C60 +107202C60:lI100|H107205E90 +107205E90:lI97|H107209148 +107209148:lI114|H10720C3A8 +10720C3A8:lI46|H10720F5D8 +10720F5D8:lI98|H1072128A8 +1072128A8:lI101|H107215C90 +107215C90:lI97|H107219290 +107219290:lI109|N +1071F22F8:lH1071F4630|N +1071F4630:lI116|H1071F6E58 +1071F6E58:lI105|H1071F9AB0 +1071F9AB0:lI109|H1071FC9F0 +1071FC9F0:lI101|H1071FFAA8 +1071FFAA8:lI114|H107202C50 +107202C50:lI46|H107205E80 +107205E80:lI98|H107209138 +107209138:lI101|H10720C398 +10720C398:lI97|H10720F5C8 +10720F5C8:lI109|N +1071F0B88:MnC:H1071F2218,H1071F2228,H1071F2238,H1071F2248,H1071F2258,H1071F2268,H1071F2278,H1071F2288,H1071F2298,H1071F22A8,H1071F22C0,H1071F22D0 +1071F2218:lH1071F4540|N +1071F4540:lI117|H1071F6D68 +1071F6D68:lI114|H1071F99C0 +1071F99C0:lI105|H1071FC900 +1071FC900:lI95|H1071FF9B8 +1071FF9B8:lI115|H107202B60 +107202B60:lI116|H107205DA0 +107205DA0:lI114|H107209058 +107209058:lI105|H10720C2C8 +10720C2C8:lI110|H10720F4F8 +10720F4F8:lI103|H1072127F8 +1072127F8:lI46|H107215BF0 +107215BF0:lI98|H107219200 +107219200:lI101|H10721C900 +10721C900:lI97|H10721FF50 +10721FF50:lI109|N +1071F22D0:Mn2:H1071F4600,H1071F4610 +1071F4600:lH1071F6E28|N +1071F6E28:lI101|H1071F9A80 +1071F9A80:lI114|H1071FC9C0 +1071FC9C0:lI108|H1071FFA78 +1071FFA78:lI95|H107202C20 +107202C20:lI112|H107205E50 +107205E50:lI97|H107209108 +107209108:lI114|H10720C368 +10720C368:lI115|H10720F598 +10720F598:lI101|H107212878 +107212878:lI46|H107215C60 +107215C60:lI98|H107219260 +107219260:lI101|H10721C950 +10721C950:lI97|H10721FFA0 +10721FFA0:lI109|N +1071F4610:lH1071F6E38|N +1071F6E38:lI117|H1071F9A90 +1071F9A90:lI110|H1071FC9D0 +1071FC9D0:lI105|H1071FFA88 +1071FFA88:lI99|H107202C30 +107202C30:lI111|H107205E60 +107205E60:lI100|H107209118 +107209118:lI101|H10720C378 +10720C378:lI95|H10720F5A8 +10720F5A8:lI117|H107212888 +107212888:lI116|H107215C70 +107215C70:lI105|H107219270 +107219270:lI108|H10721C960 +10721C960:lI46|H10721FFB0 +10721FFB0:lI98|H1072233C8 +1072233C8:lI101|H107226490 +107226490:lI97|H1072291D8 +1072291D8:lI109|N +1071F22C0:lH1071F45F0|N +1071F45F0:lI101|H1071F6E18 +1071F6E18:lI114|H1071F9A70 +1071F9A70:lI108|H1071FC9B0 +1071FC9B0:lI95|H1071FFA68 +1071FFA68:lI101|H107202C10 +107202C10:lI120|H107205E40 +107205E40:lI112|H1072090F8 +1072090F8:lI97|H10720C358 +10720C358:lI110|H10720F588 +10720F588:lI100|H107212868 +107212868:lI95|H107215C50 +107215C50:lI114|H107219250 +107219250:lI101|H10721C940 +10721C940:lI99|H10721FF90 +10721FF90:lI111|H1072233B8 +1072233B8:lI114|H107226480 +107226480:lI100|H1072291C8 +1072291C8:lI115|H10722BB50 +10722BB50:lI46|H10722E1A8 +10722E1A8:lI98|H107230560 +107230560:lI101|H107232688 +107232688:lI97|H1072344A0 +1072344A0:lI109|N +1071F22A8:Mn2:H1071F45D0,H1071F45E0 +1071F45D0:lH1071F6DF8|N +1071F6DF8:lI114|H1071F9A50 +1071F9A50:lI97|H1071FC990 +1071FC990:lI110|H1071FFA48 +1071FFA48:lI100|H107202BF0 +107202BF0:lI46|H107205E20 +107205E20:lI98|H1072090D8 +1072090D8:lI101|H10720C338 +10720C338:lI97|H10720F568 +10720F568:lI109|N +1071F45E0:lH1071F6E08|N +1071F6E08:lI101|H1071F9A60 +1071F9A60:lI114|H1071FC9A0 +1071FC9A0:lI114|H1071FFA58 +1071FFA58:lI111|H107202C00 +107202C00:lI114|H107205E30 +107205E30:lI95|H1072090E8 +1072090E8:lI108|H10720C348 +10720C348:lI111|H10720F578 +10720F578:lI103|H107212858 +107212858:lI103|H107215C40 +107215C40:lI101|H107219240 +107219240:lI114|H10721C930 +10721C930:lI95|H10721FF80 +10721FF80:lI116|H1072233A8 +1072233A8:lI116|H107226470 +107226470:lI121|H1072291B8 +1072291B8:lI95|H10722BB40 +10722BB40:lI104|H10722E198 +10722E198:lI46|H107230550 +107230550:lI98|H107232678 +107232678:lI101|H107234490 +107234490:lI97|H107235FC8 +107235FC8:lI109|N +1071F2298:lH1071F45C0|N +1071F45C0:lI101|H1071F6DE8 +1071F6DE8:lI114|H1071F9A40 +1071F9A40:lI108|H1071FC980 +1071FC980:lI95|H1071FFA38 +1071FFA38:lI116|H107202BE0 +107202BE0:lI97|H107205E10 +107205E10:lI114|H1072090C8 +1072090C8:lI46|H10720C328 +10720C328:lI98|H10720F558 +10720F558:lI101|H107212848 +107212848:lI97|H107215C30 +107215C30:lI109|N +1071F2288:lH1071F45B0|N +1071F45B0:lI97|H1071F6DD8 +1071F6DD8:lI114|H1071F9A30 +1071F9A30:lI103|H1071FC970 +1071FC970:lI112|H1071FFA28 +1071FFA28:lI97|H107202BD0 +107202BD0:lI114|H107205E00 +107205E00:lI115|H1072090B8 +1072090B8:lI101|H10720C318 +10720C318:lI46|H10720F548 +10720F548:lI98|H107212838 +107212838:lI101|H107215C20 +107215C20:lI97|H107219230 +107219230:lI109|N +1071F2278:lH1071F45A0|N +1071F45A0:lI115|H1071F6DC8 +1071F6DC8:lI121|H1071F9A20 +1071F9A20:lI115|H1071FC960 +1071FC960:lI46|H1071FFA18 +1071FFA18:lI98|H107202BC0 +107202BC0:lI101|H107205DF0 +107205DF0:lI97|H1072090A8 +1072090A8:lI109|N +1071F2268:lH1071F4590|N +1071F4590:lI105|H1071F6DB8 +1071F6DB8:lI111|H1071F9A10 +1071F9A10:lI95|H1071FC950 +1071FC950:lI108|H1071FFA08 +1071FFA08:lI105|H107202BB0 +107202BB0:lI98|H107205DE0 +107205DE0:lI95|H107209098 +107209098:lI102|H10720C308 +10720C308:lI114|H10720F538 +10720F538:lI101|H107212828 +107212828:lI97|H107215C10 +107215C10:lI100|H107219220 +107219220:lI46|H10721C920 +10721C920:lI98|H10721FF70 +10721FF70:lI101|H107223398 +107223398:lI97|H107226460 +107226460:lI109|N +1071F2258:lH1071F4580|N +1071F4580:lI115|H1071F6DA8 +1071F6DA8:lI116|H1071F9A00 +1071F9A00:lI100|H1071FC940 +1071FC940:lI108|H1071FF9F8 +1071FF9F8:lI105|H107202BA0 +107202BA0:lI98|H107205DD0 +107205DD0:lI46|H107209088 +107209088:lI97|H10720C2F8 +10720C2F8:lI112|H10720F528 +10720F528:lI112|N +1071F2248:lH1071F4570|N +1071F4570:lI101|H1071F6D98 +1071F6D98:lI114|H1071F99F0 +1071F99F0:lI108|H1071FC930 +1071FC930:lI95|H1071FF9E8 +1071FF9E8:lI97|H107202B90 +107202B90:lI98|H107205DC0 +107205DC0:lI115|H107209078 +107209078:lI116|H10720C2E8 +10720C2E8:lI114|H10720F518 +10720F518:lI97|H107212818 +107212818:lI99|H107215C00 +107215C00:lI116|H107219210 +107219210:lI95|H10721C910 +10721C910:lI99|H10721FF60 +10721FF60:lI111|H107223388 +107223388:lI100|H107226450 +107226450:lI101|H1072291A8 +1072291A8:lI46|H10722BB30 +10722BB30:lI98|H10722E188 +10722E188:lI101|H107230540 +107230540:lI97|H107232668 +107232668:lI109|N +1071F2238:lH1071F4560|N +1071F4560:lI99|H1071F6D88 +1071F6D88:lI46|H1071F99E0 +1071F99E0:lI98|H1071FC920 +1071FC920:lI101|H1071FF9D8 +1071FF9D8:lI97|H107202B80 +107202B80:lI109|N +1071F2228:lH1071F4550|N +1071F4550:lI113|H1071F6D78 +1071F6D78:lI108|H1071F99D0 +1071F99D0:lI99|H1071FC910 +1071FC910:lI95|H1071FF9C8 +1071FF9C8:lI112|H107202B70 +107202B70:lI116|H107205DB0 +107205DB0:lI46|H107209068 +107209068:lI98|H10720C2D8 +10720C2D8:lI101|H10720F508 +10720F508:lI97|H107212808 +107212808:lI109|N +1071F0B58:Mn5:H1071F21C8,H1071F21D8,H1071F21E8,H1071F21F8,H1071F2208 +1071F21C8:lH1071F44F0|N +1071F44F0:lI105|H1071F6D18 +1071F6D18:lI111|H1071F9970 +1071F9970:lI95|H1071FC8B0 +1071FC8B0:lI108|H1071FF968 +1071FF968:lI105|H107202B10 +107202B10:lI98|H107205D50 +107205D50:lI95|H107209008 +107209008:lI102|H10720C278 +10720C278:lI111|H10720F4B8 +10720F4B8:lI114|H1072127B8 +1072127B8:lI109|H107215BB0 +107215BB0:lI97|H1072191C0 +1072191C0:lI116|H10721C8D0 +10721C8D0:lI46|H10721FF20 +10721FF20:lI98|H107223368 +107223368:lI101|H107226430 +107226430:lI97|H107229198 +107229198:lI109|N +1071F2208:lH1071F4530|N +1071F4530:lI103|H1071F6D58 +1071F6D58:lI101|H1071F99B0 +1071F99B0:lI110|H1071FC8F0 +1071FC8F0:lI95|H1071FF9A8 +1071FF9A8:lI115|H107202B50 +107202B50:lI101|H107205D90 +107205D90:lI114|H107209048 +107209048:lI118|H10720C2B8 +10720C2B8:lI101|H10720F4E8 +10720F4E8:lI114|H1072127E8 +1072127E8:lI46|H107215BE0 +107215BE0:lI98|H1072191F0 +1072191F0:lI101|H10721C8F0 +10721C8F0:lI97|H10721FF40 +10721FF40:lI109|N +1071F21F8:lH1071F4520|N +1071F4520:lI119|H1071F6D48 +1071F6D48:lI105|H1071F99A0 +1071F99A0:lI110|H1071FC8E0 +1071FC8E0:lI51|H1071FF998 +1071FF998:lI50|H107202B40 +107202B40:lI114|H107205D80 +107205D80:lI101|H107209038 +107209038:lI103|H10720C2A8 +10720C2A8:lI46|H10720F4D8 +10720F4D8:lI98|H1072127D8 +1072127D8:lI101|H107215BD0 +107215BD0:lI97|H1072191E0 +1072191E0:lI109|N +1071F21E8:lH1071F4510|N +1071F4510:lI111|H1071F6D38 +1071F6D38:lI116|H1071F9990 +1071F9990:lI112|H1071FC8D0 +1071FC8D0:lI95|H1071FF988 +1071FF988:lI105|H107202B30 +107202B30:lI110|H107205D70 +107205D70:lI116|H107209028 +107209028:lI101|H10720C298 +10720C298:lI114|H10720F4C8 +10720F4C8:lI110|H1072127C8 +1072127C8:lI97|H107215BC0 +107215BC0:lI108|H1072191D0 +1072191D0:lI46|H10721C8E0 +10721C8E0:lI98|H10721FF30 +10721FF30:lI101|H107223378 +107223378:lI97|H107226440 +107226440:lI109|N +1071F21D8:lH1071F4500|N +1071F4500:lI100|H1071F6D28 +1071F6D28:lI101|H1071F9980 +1071F9980:lI116|H1071FC8C0 +1071FC8C0:lI115|H1071FF978 +1071FF978:lI46|H107202B20 +107202B20:lI98|H107205D60 +107205D60:lI101|H107209018 +107209018:lI97|H10720C288 +10720C288:lI109|N +1071F0B30:Mn4:H1071F2188,H1071F2198,H1071F21A8,H1071F21B8 +1071F2188:lH1071F44B0|N +1071F44B0:lI101|H1071F6CD8 +1071F6CD8:lI114|H1071F9930 +1071F9930:lI108|H1071FC870 +1071FC870:lI95|H1071FF928 +1071FF928:lI112|H107202AD0 +107202AD0:lI112|H107205D10 +107205D10:lI46|H107208FC8 +107208FC8:lI98|H10720C238 +10720C238:lI101|H10720F478 +10720F478:lI97|H107212778 +107212778:lI109|N +1071F21B8:lH1071F44E0|N +1071F44E0:lI100|H1071F6D08 +1071F6D08:lI101|H1071F9960 +1071F9960:lI116|H1071FC8A0 +1071FC8A0:lI115|H1071FF958 +1071FF958:lI95|H107202B00 +107202B00:lI117|H107205D40 +107205D40:lI116|H107208FF8 +107208FF8:lI105|H10720C268 +10720C268:lI108|H10720F4A8 +10720F4A8:lI115|H1072127A8 +1072127A8:lI46|H107215BA0 +107215BA0:lI98|H1072191B0 +1072191B0:lI101|H10721C8C0 +10721C8C0:lI97|H10721FF10 +10721FF10:lI109|N +1071F21A8:lH1071F44D0|N +1071F44D0:lI105|H1071F6CF8 +1071F6CF8:lI111|H1071F9950 +1071F9950:lI95|H1071FC890 +1071FC890:lI108|H1071FF948 +1071FF948:lI105|H107202AF0 +107202AF0:lI98|H107205D30 +107205D30:lI95|H107208FE8 +107208FE8:lI112|H10720C258 +10720C258:lI114|H10720F498 +10720F498:lI101|H107212798 +107212798:lI116|H107215B90 +107215B90:lI116|H1072191A0 +1072191A0:lI121|H10721C8B0 +10721C8B0:lI46|H10721FF00 +10721FF00:lI98|H107223358 +107223358:lI101|H107226420 +107226420:lI97|H107229188 +107229188:lI109|N +1071F2198:lH1071F44C0|N +1071F44C0:lI101|H1071F6CE8 +1071F6CE8:lI114|H1071F9940 +1071F9940:lI108|H1071FC880 +1071FC880:lI95|H1071FF938 +1071FF938:lI102|H107202AE0 +107202AE0:lI101|H107205D20 +107205D20:lI97|H107208FD8 +107208FD8:lI116|H10720C248 +10720C248:lI117|H10720F488 +10720F488:lI114|H107212788 +107212788:lI101|H107215B80 +107215B80:lI115|H107219190 +107219190:lI46|H10721C8A0 +10721C8A0:lI98|H10721FEF0 +10721FEF0:lI101|H107223348 +107223348:lI97|H107226410 +107226410:lI109|N +1071F0AF0:Mn7:H1071F2108,H1071F2118,H1071F2128,H1071F2140,H1071F2150,H1071F2168,H1071F2178 +1071F2108:lH1071F4418|N +1071F4418:lI101|H1071F6C38 +1071F6C38:lI114|H1071F9890 +1071F9890:lI108|H1071FC7D0 +1071FC7D0:lI95|H1071FF888 +1071FF888:lI105|H107202A30 +107202A30:lI110|H107205C70 +107205C70:lI116|H107208F38 +107208F38:lI101|H10720C1A8 +10720C1A8:lI114|H10720F3F8 +10720F3F8:lI110|H1072126F8 +1072126F8:lI97|H107215B20 +107215B20:lI108|H107219150 +107219150:lI46|H10721C860 +10721C860:lI98|H10721FEB0 +10721FEB0:lI101|H107223328 +107223328:lI97|H1072263F0 +1072263F0:lI109|N +1071F2178:lH1071F44A0|N +1071F44A0:lI102|H1071F6CC8 +1071F6CC8:lI105|H1071F9920 +1071F9920:lI108|H1071FC860 +1071FC860:lI101|H1071FF918 +1071FF918:lI108|H107202AC0 +107202AC0:lI105|H107205D00 +107205D00:lI98|H107208FB8 +107208FB8:lI46|H10720C228 +10720C228:lI98|H10720F468 +10720F468:lI101|H107212768 +107212768:lI97|H107215B70 +107215B70:lI109|N +1071F2168:lH1071F4490|N +1071F4490:lI109|H1071F6CB8 +1071F6CB8:lI97|H1071F9910 +1071F9910:lI112|H1071FC850 +1071FC850:lI115|H1071FF908 +1071FF908:lI46|H107202AB0 +107202AB0:lI98|H107205CF0 +107205CF0:lI101|H107208FA8 +107208FA8:lI97|H10720C218 +10720C218:lI109|N +1071F2150:Mn2:H1071F4470,H1071F4480 +1071F4470:lH1071F6C98|N +1071F6C98:lI112|H1071F98F0 +1071F98F0:lI114|H1071FC830 +1071FC830:lI111|H1071FF8E8 +1071FF8E8:lI112|H107202A90 +107202A90:lI108|H107205CD0 +107205CD0:lI105|H107208F88 +107208F88:lI115|H10720C1F8 +10720C1F8:lI116|H10720F448 +10720F448:lI115|H107212748 +107212748:lI46|H107215B60 +107215B60:lI98|H107219180 +107219180:lI101|H10721C890 +10721C890:lI97|H10721FEE0 +10721FEE0:lI109|N +1071F4480:lH1071F6CA8|N +1071F6CA8:lI113|H1071F9900 +1071F9900:lI117|H1071FC840 +1071FC840:lI101|H1071FF8F8 +1071FF8F8:lI117|H107202AA0 +107202AA0:lI101|H107205CE0 +107205CE0:lI46|H107208F98 +107208F98:lI98|H10720C208 +10720C208:lI101|H10720F458 +10720F458:lI97|H107212758 +107212758:lI109|N +1071F2140:lH1071F4460|N +1071F4460:lI114|H1071F6C88 +1071F6C88:lI101|H1071F98E0 +1071F98E0:lI46|H1071FC820 +1071FC820:lI98|H1071FF8D8 +1071FF8D8:lI101|H107202A80 +107202A80:lI97|H107205CC0 +107205CC0:lI109|N +1071F2128:Mn2:H1071F4440,H1071F4450 +1071F4440:lH1071F6C68|N +1071F6C68:lI114|H1071F98C0 +1071F98C0:lI97|H1071FC800 +1071FC800:lI110|H1071FF8B8 +1071FF8B8:lI100|H107202A60 +107202A60:lI111|H107205CA0 +107205CA0:lI109|H107208F68 +107208F68:lI46|H10720C1D8 +10720C1D8:lI98|H10720F428 +10720F428:lI101|H107212728 +107212728:lI97|H107215B40 +107215B40:lI109|N +1071F4450:lH1071F6C78|N +1071F6C78:lI101|H1071F98D0 +1071F98D0:lI114|H1071FC810 +1071FC810:lI108|H1071FF8C8 +1071FF8C8:lI95|H107202A70 +107202A70:lI99|H107205CB0 +107205CB0:lI111|H107208F78 +107208F78:lI109|H10720C1E8 +10720C1E8:lI112|H10720F438 +10720F438:lI105|H107212738 +107212738:lI108|H107215B50 +107215B50:lI101|H107219170 +107219170:lI46|H10721C880 +10721C880:lI98|H10721FED0 +10721FED0:lI101|H107223338 +107223338:lI97|H107226400 +107226400:lI109|N +1071F2118:Mn1:H1071F4428 +1071F4428:Mn2:H1071F6C48,H1071F6C58 +1071F6C48:lH1071F98A0|N +1071F98A0:lI103|H1071FC7E0 +1071FC7E0:lI98|H1071FF898 +1071FF898:lI95|H107202A40 +107202A40:lI116|H107205C80 +107205C80:lI114|H107208F48 +107208F48:lI101|H10720C1B8 +10720C1B8:lI101|H10720F408 +10720F408:lI115|H107212708 +107212708:lI46|H107215B30 +107215B30:lI98|H107219160 +107219160:lI101|H10721C870 +10721C870:lI97|H10721FEC0 +10721FEC0:lI109|N +1071F6C58:lH1071F98B0|N +1071F98B0:lI112|H1071FC7F0 +1071FC7F0:lI101|H1071FF8A8 +1071FF8A8:lI101|H107202A50 +107202A50:lI114|H107205C90 +107205C90:lI46|H107208F58 +107208F58:lI98|H10720C1C8 +10720C1C8:lI101|H10720F418 +10720F418:lI97|H107212718 +107212718:lI109|N +1071F0AC8:Mn4:H1071F20B8,H1071F20C8,H1071F20E0,H1071F20F0 +1071F20B8:lH1071F43B8|N +1071F43B8:lI115|H1071F6BD8 +1071F6BD8:lI101|H1071F9830 +1071F9830:lI116|H1071FC770 +1071FC770:lI115|H1071FF828 +1071FF828:lI46|H1072029D0 +1072029D0:lI98|H107205C10 +107205C10:lI101|H107208ED8 +107208ED8:lI97|H10720C148 +10720C148:lI109|N +1071F20F0:Mn2:H1071F43F8,H1071F4408 +1071F43F8:lH1071F6C18|N +1071F6C18:lI108|H1071F9870 +1071F9870:lI111|H1071FC7B0 +1071FC7B0:lI103|H1071FF868 +1071FF868:lI95|H107202A10 +107202A10:lI109|H107205C50 +107205C50:lI102|H107208F18 +107208F18:lI95|H10720C188 +10720C188:lI104|H10720F3D8 +10720F3D8:lI46|H1072126D8 +1072126D8:lI98|H107215B10 +107215B10:lI101|H107219140 +107219140:lI97|H10721C850 +10721C850:lI109|N +1071F4408:lH1071F6C28|N +1071F6C28:lI108|H1071F9880 +1071F9880:lI105|H1071FC7C0 +1071FC7C0:lI115|H1071FF878 +1071FF878:lI116|H107202A20 +107202A20:lI115|H107205C60 +107205C60:lI46|H107208F28 +107208F28:lI98|H10720C198 +10720C198:lI101|H10720F3E8 +10720F3E8:lI97|H1072126E8 +1072126E8:lI109|N +1071F20E0:lH1071F43E8|N +1071F43E8:lI105|H1071F6C08 +1071F6C08:lI111|H1071F9860 +1071F9860:lI95|H1071FC7A0 +1071FC7A0:lI108|H1071FF858 +1071FF858:lI105|H107202A00 +107202A00:lI98|H107205C40 +107205C40:lI46|H107208F08 +107208F08:lI98|H10720C178 +10720C178:lI101|H10720F3C8 +10720F3C8:lI97|H1072126C8 +1072126C8:lI109|N +1071F20C8:Mn2:H1071F43C8,H1071F43D8 +1071F43C8:lH1071F6BE8|N +1071F6BE8:lI101|H1071F9840 +1071F9840:lI114|H1071FC780 +1071FC780:lI108|H1071FF838 +1071FF838:lI95|H1072029E0 +1072029E0:lI115|H107205C20 +107205C20:lI116|H107208EE8 +107208EE8:lI100|H10720C158 +10720C158:lI108|H10720F3A8 +10720F3A8:lI105|H1072126A8 +1072126A8:lI98|H107215AF0 +107215AF0:lI95|H107219120 +107219120:lI101|H10721C840 +10721C840:lI114|H10721FEA0 +10721FEA0:lI114|H107223318 +107223318:lI111|H1072263E0 +1072263E0:lI114|H107229178 +107229178:lI115|H10722BB20 +10722BB20:lI46|H10722E178 +10722E178:lI98|H107230530 +107230530:lI101|H107232658 +107232658:lI97|H107234480 +107234480:lI109|N +1071F43D8:lH1071F6BF8|N +1071F6BF8:lI111|H1071F9850 +1071F9850:lI114|H1071FC790 +1071FC790:lI100|H1071FF848 +1071FF848:lI100|H1072029F0 +1072029F0:lI105|H107205C30 +107205C30:lI99|H107208EF8 +107208EF8:lI116|H10720C168 +10720C168:lI46|H10720F3B8 +10720F3B8:lI98|H1072126B8 +1072126B8:lI101|H107215B00 +107215B00:lI97|H107219130 +107219130:lI109|N +1071F0A98:Mn5:H1071F2060,H1071F2070,H1071F2080,H1071F2098,H1071F20A8 +1071F2060:lH1071F4358|N +1071F4358:lI113|H1071F6B78 +1071F6B78:lI108|H1071F97D0 +1071F97D0:lI99|H1071FC710 +1071FC710:lI46|H1071FF7C8 +1071FF7C8:lI98|H107202970 +107202970:lI101|H107205BB0 +107205BB0:lI97|H107208E78 +107208E78:lI109|N +1071F20A8:lH1071F43A8|N +1071F43A8:lI115|H1071F6BC8 +1071F6BC8:lI117|H1071F9820 +1071F9820:lI112|H1071FC760 +1071FC760:lI101|H1071FF818 +1071FF818:lI114|H1072029C0 +1072029C0:lI118|H107205C00 +107205C00:lI105|H107208EC8 +107208EC8:lI115|H10720C138 +10720C138:lI111|H10720F398 +10720F398:lI114|H107212698 +107212698:lI95|H107215AE0 +107215AE0:lI98|H107219110 +107219110:lI114|H10721C830 +10721C830:lI105|H10721FE90 +10721FE90:lI100|H107223308 +107223308:lI103|H1072263D0 +1072263D0:lI101|H107229168 +107229168:lI46|H10722BB10 +10722BB10:lI98|H10722E168 +10722E168:lI101|H107230520 +107230520:lI97|H107232648 +107232648:lI109|N +1071F2098:lH1071F4398|N +1071F4398:lI101|H1071F6BB8 +1071F6BB8:lI114|H1071F9810 +1071F9810:lI108|H1071FC750 +1071FC750:lI95|H1071FF808 +1071FF808:lI108|H1072029B0 +1072029B0:lI105|H107205BF0 +107205BF0:lI110|H107208EB8 +107208EB8:lI116|H10720C128 +10720C128:lI46|H10720F388 +10720F388:lI98|H107212688 +107212688:lI101|H107215AD0 +107215AD0:lI97|H107219100 +107219100:lI109|N +1071F2080:Mn2:H1071F4378,H1071F4388 +1071F4378:lH1071F6B98|N +1071F6B98:lI101|H1071F97F0 +1071F97F0:lI114|H1071FC730 +1071FC730:lI108|H1071FF7E8 +1071FF7E8:lI95|H107202990 +107202990:lI115|H107205BD0 +107205BD0:lI99|H107208E98 +107208E98:lI97|H10720C108 +10720C108:lI110|H10720F368 +10720F368:lI46|H107212668 +107212668:lI98|H107215AC0 +107215AC0:lI101|H1072190F0 +1072190F0:lI97|H10721C820 +10721C820:lI109|N +1071F4388:lH1071F6BA8|N +1071F6BA8:lI115|H1071F9800 +1071F9800:lI104|H1071FC740 +1071FC740:lI101|H1071FF7F8 +1071FF7F8:lI108|H1072029A0 +1072029A0:lI108|H107205BE0 +107205BE0:lI46|H107208EA8 +107208EA8:lI98|H10720C118 +10720C118:lI101|H10720F378 +10720F378:lI97|H107212678 +107212678:lI109|N +1071F2070:lH1071F4368|N +1071F4368:lI101|H1071F6B88 +1071F6B88:lI114|H1071F97E0 +1071F97E0:lI108|H1071FC720 +1071FC720:lI95|H1071FF7D8 +1071FF7D8:lI112|H107202980 +107202980:lI111|H107205BC0 +107205BC0:lI115|H107208E88 +107208E88:lI105|H10720C0F8 +10720C0F8:lI120|H10720F358 +10720F358:lI95|H107212658 +107212658:lI109|H107215AB0 +107215AB0:lI115|H1072190E0 +1072190E0:lI103|H10721C810 +10721C810:lI46|H10721FE80 +10721FE80:lI98|H1072232F8 +1072232F8:lI101|H1072263C0 +1072263C0:lI97|H107229158 +107229158:lI109|N +1071F0A68:Mn5:H1071F2008,H1071F2018,H1071F2030,H1071F2040,H1071F2050 +1071F2008:lH1071F42F8|N +1071F42F8:lI98|H1071F6B18 +1071F6B18:lI101|H1071F9770 +1071F9770:lI97|H1071FC6B0 +1071FC6B0:lI109|H1071FF768 +1071FF768:lI95|H107202910 +107202910:lI108|H107205B50 +107205B50:lI105|H107208E18 +107208E18:lI98|H10720C0A8 +10720C0A8:lI46|H10720F318 +10720F318:lI98|H107212628 +107212628:lI101|H107215A90 +107215A90:lI97|H1072190C0 +1072190C0:lI109|N +1071F2050:lH1071F4348|N +1071F4348:lI112|H1071F6B68 +1071F6B68:lI111|H1071F97C0 +1071F97C0:lI111|H1071FC700 +1071FC700:lI108|H1071FF7B8 +1071FF7B8:lI46|H107202960 +107202960:lI98|H107205BA0 +107205BA0:lI101|H107208E68 +107208E68:lI97|H10720C0E8 +10720C0E8:lI109|N +1071F2040:lH1071F4338|N +1071F4338:lI98|H1071F6B58 +1071F6B58:lI97|H1071F97B0 +1071F97B0:lI115|H1071FC6F0 +1071FC6F0:lI101|H1071FF7A8 +1071FF7A8:lI54|H107202950 +107202950:lI52|H107205B90 +107205B90:lI46|H107208E58 +107208E58:lI98|H10720C0D8 +10720C0D8:lI101|H10720F348 +10720F348:lI97|H107212648 +107212648:lI109|N +1071F2030:lH1071F4328|N +1071F4328:lI103|H1071F6B48 +1071F6B48:lI101|H1071F97A0 +1071F97A0:lI110|H1071FC6E0 +1071FC6E0:lI46|H1071FF798 +1071FF798:lI98|H107202940 +107202940:lI101|H107205B80 +107205B80:lI97|H107208E48 +107208E48:lI109|N +1071F2018:Mn2:H1071F4308,H1071F4318 +1071F4308:lH1071F6B28|N +1071F6B28:lI101|H1071F9780 +1071F9780:lI114|H1071FC6C0 +1071FC6C0:lI108|H1071FF778 +1071FF778:lI95|H107202920 +107202920:lI101|H107205B60 +107205B60:lI114|H107208E28 +107208E28:lI114|H10720C0B8 +10720C0B8:lI111|H10720F328 +10720F328:lI114|H107212638 +107212638:lI46|H107215AA0 +107215AA0:lI98|H1072190D0 +1072190D0:lI101|H10721C800 +10721C800:lI97|H10721FE70 +10721FE70:lI109|N +1071F4318:lH1071F6B38|N +1071F6B38:lI109|H1071F9790 +1071F9790:lI97|H1071FC6D0 +1071FC6D0:lI116|H1071FF788 +1071FF788:lI104|H107202930 +107202930:lI46|H107205B70 +107205B70:lI98|H107208E38 +107208E38:lI101|H10720C0C8 +10720C0C8:lI97|H10720F338 +10720F338:lI109|N +1071F0A38:Mn5:H1071F1FB0,H1071F1FC8,H1071F1FD8,H1071F1FE8,H1071F1FF8 +1071F1FB0:Mn2:H1071F4298,H1071F42A8 +1071F4298:lH1071F6AB8|N +1071F6AB8:lI115|H1071F9710 +1071F9710:lI104|H1071FC650 +1071FC650:lI101|H1071FF708 +1071FF708:lI108|H1072028B0 +1072028B0:lI108|H107205AF0 +107205AF0:lI95|H107208DB8 +107208DB8:lI100|H10720C048 +10720C048:lI101|H10720F2C8 +10720F2C8:lI102|H1072125D8 +1072125D8:lI97|H107215A40 +107215A40:lI117|H107219080 +107219080:lI108|H10721C7D0 +10721C7D0:lI116|H10721FE40 +10721FE40:lI46|H1072232C8 +1072232C8:lI98|H1072263A0 +1072263A0:lI101|H107229138 +107229138:lI97|H10722BB00 +10722BB00:lI109|N +1071F42A8:lH1071F6AC8|N +1071F6AC8:lI115|H1071F9720 +1071F9720:lI104|H1071FC660 +1071FC660:lI101|H1071FF718 +1071FF718:lI108|H1072028C0 +1072028C0:lI108|H107205B00 +107205B00:lI95|H107208DC8 +107208DC8:lI100|H10720C058 +10720C058:lI111|H10720F2D8 +10720F2D8:lI99|H1072125E8 +1072125E8:lI115|H107215A50 +107215A50:lI46|H107219090 +107219090:lI98|H10721C7E0 +10721C7E0:lI101|H10721FE50 +10721FE50:lI97|H1072232D8 +1072232D8:lI109|N +1071F1FF8:lH1071F42E8|N +1071F42E8:lI100|H1071F6B08 +1071F6B08:lI105|H1071F9760 +1071F9760:lI103|H1071FC6A0 +1071FC6A0:lI114|H1071FF758 +1071FF758:lI97|H107202900 +107202900:lI112|H107205B40 +107205B40:lI104|H107208E08 +107208E08:lI95|H10720C098 +10720C098:lI117|H10720F308 +10720F308:lI116|H107212618 +107212618:lI105|H107215A80 +107215A80:lI108|H1072190B0 +1072190B0:lI115|H10721C7F0 +10721C7F0:lI46|H10721FE60 +10721FE60:lI98|H1072232E8 +1072232E8:lI101|H1072263B0 +1072263B0:lI97|H107229148 +107229148:lI109|N +1071F1FE8:lH1071F42D8|N +1071F42D8:lI101|H1071F6AF8 +1071F6AF8:lI115|H1071F9750 +1071F9750:lI99|H1071FC690 +1071FC690:lI114|H1071FF748 +1071FF748:lI105|H1072028F0 +1072028F0:lI112|H107205B30 +107205B30:lI116|H107208DF8 +107208DF8:lI46|H10720C088 +10720C088:lI98|H10720F2F8 +10720F2F8:lI101|H107212608 +107212608:lI97|H107215A70 +107215A70:lI109|N +1071F1FD8:lH1071F42C8|N +1071F42C8:lI100|H1071F6AE8 +1071F6AE8:lI105|H1071F9740 +1071F9740:lI99|H1071FC680 +1071FC680:lI116|H1071FF738 +1071FF738:lI46|H1072028E0 +1072028E0:lI98|H107205B20 +107205B20:lI101|H107208DE8 +107208DE8:lI97|H10720C078 +10720C078:lI109|N +1071F1FC8:lH1071F42B8|N +1071F42B8:lI101|H1071F6AD8 +1071F6AD8:lI114|H1071F9730 +1071F9730:lI108|H1071FC670 +1071FC670:lI95|H1071FF728 +1071FF728:lI97|H1072028D0 +1072028D0:lI110|H107205B10 +107205B10:lI110|H107208DD8 +107208DD8:lI111|H10720C068 +10720C068:lI46|H10720F2E8 +10720F2E8:lI98|H1072125F8 +1072125F8:lI101|H107215A60 +107215A60:lI97|H1072190A0 +1072190A0:lI109|N +1071F0A28:lH1071F1FA0|N +1071F1FA0:lI103|H1071F4288 +1071F4288:lI101|H1071F6AA8 +1071F6AA8:lI110|H1071F9700 +1071F9700:lI95|H1071FC640 +1071FC640:lI102|H1071FF6F8 +1071FF6F8:lI115|H1072028A0 +1072028A0:lI109|H107205AE0 +107205AE0:lI46|H107208DA8 +107208DA8:lI98|H10720C038 +10720C038:lI101|H10720F2B8 +10720F2B8:lI97|H1072125C8 +1072125C8:lI109|N +1071F0A08:Mn3:H1071F1F70,H1071F1F80,H1071F1F90 +1071F1F70:lH1071F4258|N +1071F4258:lI100|H1071F6A78 +1071F6A78:lI101|H1071F96D0 +1071F96D0:lI116|H1071FC610 +1071FC610:lI115|H1071FF6C8 +1071FF6C8:lI95|H107202870 +107202870:lI118|H107205AB0 +107205AB0:lI57|H107208D78 +107208D78:lI46|H10720C018 +10720C018:lI98|H10720F298 +10720F298:lI101|H1072125A8 +1072125A8:lI97|H107215A20 +107215A20:lI109|N +1071F1F90:lH1071F4278|N +1071F4278:lI102|H1071F6A98 +1071F6A98:lI105|H1071F96F0 +1071F96F0:lI108|H1071FC630 +1071FC630:lI101|H1071FF6E8 +1071FF6E8:lI110|H107202890 +107202890:lI97|H107205AD0 +107205AD0:lI109|H107208D98 +107208D98:lI101|H10720C028 +10720C028:lI46|H10720F2A8 +10720F2A8:lI98|H1072125B8 +1072125B8:lI101|H107215A30 +107215A30:lI97|H107219070 +107219070:lI109|N +1071F1F80:lH1071F4268|N +1071F4268:lI101|H1071F6A88 +1071F6A88:lI116|H1071F96E0 +1071F96E0:lI115|H1071FC620 +1071FC620:lI46|H1071FF6D8 +1071FF6D8:lI98|H107202880 +107202880:lI101|H107205AC0 +107205AC0:lI97|H107208D88 +107208D88:lI109|N +1071F09C8:Mn7:H1071F1F00,H1071F1F10,H1071F1F20,H1071F1F30,H1071F1F40,H1071F1F50,H1071F1F60 +1071F1F00:lH1071F41E8|N +1071F41E8:lI101|H1071F6A08 +1071F6A08:lI114|H1071F9660 +1071F9660:lI114|H1071FC5A0 +1071FC5A0:lI111|H1071FF658 +1071FF658:lI114|H107202800 +107202800:lI95|H107205A40 +107205A40:lI108|H107208D18 +107208D18:lI111|H10720BFC8 +10720BFC8:lI103|H10720F248 +10720F248:lI103|H107212568 +107212568:lI101|H1072159F0 +1072159F0:lI114|H107219050 +107219050:lI95|H10721C7B0 +10721C7B0:lI102|H10721FE20 +10721FE20:lI105|H1072232A8 +1072232A8:lI108|H107226390 +107226390:lI101|H107229128 +107229128:lI95|H10722BAF0 +10722BAF0:lI104|H10722E158 +10722E158:lI46|H107230510 +107230510:lI98|H107232638 +107232638:lI101|H107234470 +107234470:lI97|H107235FB8 +107235FB8:lI109|N +1071F1F60:lH1071F4248|N +1071F4248:lI115|H1071F6A68 +1071F6A68:lI116|H1071F96C0 +1071F96C0:lI114|H1071FC600 +1071FC600:lI105|H1071FF6B8 +1071FF6B8:lI110|H107202860 +107202860:lI103|H107205AA0 +107205AA0:lI46|H107208D68 +107208D68:lI98|H10720C008 +10720C008:lI101|H10720F288 +10720F288:lI97|H107212598 +107212598:lI109|N +1071F1F50:lH1071F4238|N +1071F4238:lI122|H1071F6A58 +1071F6A58:lI105|H1071F96B0 +1071F96B0:lI112|H1071FC5F0 +1071FC5F0:lI46|H1071FF6A8 +1071FF6A8:lI98|H107202850 +107202850:lI101|H107205A90 +107205A90:lI97|H107208D58 +107208D58:lI109|N +1071F1F40:lH1071F4228|N +1071F4228:lI97|H1071F6A48 +1071F6A48:lI114|H1071F96A0 +1071F96A0:lI114|H1071FC5E0 +1071FC5E0:lI97|H1071FF698 +1071FF698:lI121|H107202840 +107202840:lI46|H107205A80 +107205A80:lI98|H107208D48 +107208D48:lI101|H10720BFF8 +10720BFF8:lI97|H10720F278 +10720F278:lI109|N +1071F1F30:lH1071F4218|N +1071F4218:lI105|H1071F6A38 +1071F6A38:lI111|H1071F9690 +1071F9690:lI46|H1071FC5D0 +1071FC5D0:lI98|H1071FF688 +1071FF688:lI101|H107202830 +107202830:lI97|H107205A70 +107205A70:lI109|N +1071F1F20:lH1071F4208|N +1071F4208:lI100|H1071F6A28 +1071F6A28:lI101|H1071F9680 +1071F9680:lI116|H1071FC5C0 +1071FC5C0:lI115|H1071FF678 +1071FF678:lI95|H107202820 +107202820:lI115|H107205A60 +107205A60:lI101|H107208D38 +107208D38:lI114|H10720BFE8 +10720BFE8:lI118|H10720F268 +10720F268:lI101|H107212588 +107212588:lI114|H107215A10 +107215A10:lI46|H107219060 +107219060:lI98|H10721C7C0 +10721C7C0:lI101|H10721FE30 +10721FE30:lI97|H1072232B8 +1072232B8:lI109|N +1071F1F10:lH1071F41F8|N +1071F41F8:lI115|H1071F6A18 +1071F6A18:lI116|H1071F9670 +1071F9670:lI100|H1071FC5B0 +1071FC5B0:lI108|H1071FF668 +1071FF668:lI105|H107202810 +107202810:lI98|H107205A50 +107205A50:lI46|H107208D28 +107208D28:lI97|H10720BFD8 +10720BFD8:lI112|H10720F258 +10720F258:lI112|H107212578 +107212578:lI117|H107215A00 +107215A00:lI112|N +1071F0140:lI47|H1071F0998 +1071F0998:lI111|H1071F1EC0 +1071F1EC0:lI112|H1071F41A8 +1071F41A8:lI116|H1071F69C8 +1071F69C8:lI47|H1071F9620 +1071F9620:lI104|H1071FC560 +1071FC560:lI111|H1071FF618 +1071FF618:lI109|H1072027C0 +1072027C0:lI101|H107205A00 +107205A00:lI98|H107208CD8 +107208CD8:lI114|H10720BF88 +10720BF88:lI101|H10720F208 +10720F208:lI119|H107212528 +107212528:lI47|H1072159B0 +1072159B0:lI67|H107219020 +107219020:lI101|H10721C780 +10721C780:lI108|H10721FE00 +10721FE00:lI108|H107223288 +107223288:lI97|H107226370 +107226370:lI114|H107229108 +107229108:lI47|H10722BAD0 +10722BAD0:lI101|H10722E138 +10722E138:lI114|H1072304F0 +1072304F0:lI108|H107232618 +107232618:lI97|H107234450 +107234450:lI110|H107235F98 +107235F98:lI103|H107237830 +107237830:lI47|H107238EB8 +107238EB8:lI50|H10723A390 +10723A390:lI54|H10723B6D0 +10723B6D0:lI46|H10723C7A0 +10723C7A0:lI48|H10723D660 +10723D660:lI46|H10723E3E0 +10723E3E0:lI50|H10723EFF0 +10723EFF0:lI47|H10723FAC0 +10723FAC0:lI108|H107240410 +107240410:lI105|H107240C90 +107240C90:lI98|H107241420 +107241420:lI47|H107241B50 +107241B50:lI101|H107242220 +107242220:lI114|H107242890 +107242890:lI108|H107242E90 +107242E90:lI97|H107243400 +107243400:lI110|H107243940 +107243940:lI103|H107243E30 +107243E30:lI47|H107244320 +107244320:lI108|H1072447D0 +1072447D0:lI105|H107244C40 +107244C40:lI98|H1072450A0 +1072450A0:lI47|H1072454F0 +1072454F0:lI115|H1072458F0 +1072458F0:lI116|H107245CB0 +107245CB0:lI100|H107246040 +107246040:lI108|H1072463D0 +1072463D0:lI105|H107246760 +107246760:lI98|H107246AF0 +107246AF0:lI45|H107246E30 +107246E30:lI53|H107247150 +107247150:lI46|H107247470 +107247470:lI48|H107247780 +107247780:lI46|H107247A80 +107247A80:lI50|H107247D70 +107247D70:lI47|H107248050 +107248050:lI101|H107248310 +107248310:lI98|H1072485D0 +1072485D0:lI105|H107248880 +107248880:lI110|N +10724AE50:lH10724AEC8|H10724AEE0 +10724AEC8:t2:H1071F0200,H1071F0210 +1071F0210:Mh23:F:H1071F0CD8,H1071F0CE8,H1071F0D00,H1071F0D18,H1071F0D28,H1071F0D38,H1071F0D58,H1071F0D70,H1071F0D88,H1071F0DA8,H1071F0DC0,H1071F0DE0,H1071F0E00,H1071F0E10,H1071F0E30 +1071F0CD8:lH1071F2458|N +1071F2458:lI120|H1071F47A0 +1071F47A0:lI109|H1071F6FC8 +1071F6FC8:lI101|H1071F9C20 +1071F9C20:lI114|H1071FCB60 +1071FCB60:lI108|H1071FFC18 +1071FFC18:lI95|H107202DC0 +107202DC0:lI120|H107205FF0 +107205FF0:lI112|H1072092A8 +1072092A8:lI97|H10720C508 +10720C508:lI116|H10720F728 +10720F728:lI104|H1072129D8 +1072129D8:lI95|H107215DA0 +107215DA0:lI112|H107219380 +107219380:lI114|H10721CA10 +10721CA10:lI101|H107220050 +107220050:lI100|H107223448 +107223448:lI46|H107226500 +107226500:lI98|H107229228 +107229228:lI101|H10722BB90 +10722BB90:lI97|H10722E1E8 +10722E1E8:lI109|N +1071F0E30:Mn4:H1071F2638,H1071F2648,H1071F2658,H1071F2668 +1071F2638:lH1071F4990|N +1071F4990:lI120|H1071F71B8 +1071F71B8:lI109|H1071F9E10 +1071F9E10:lI101|H1071FCD50 +1071FCD50:lI114|H1071FFE08 +1071FFE08:lI108|H107202FB0 +107202FB0:lI95|H1072061E0 +1072061E0:lI101|H107209498 +107209498:lI118|H10720C6F8 +10720C6F8:lI101|H10720F908 +10720F908:lI110|H107212BA8 +107212BA8:lI116|H107215F70 +107215F70:lI112|H107219550 +107219550:lI46|H10721CBC0 +10721CBC0:lI98|H1072201D0 +1072201D0:lI101|H107223588 +107223588:lI97|H107226620 +107226620:lI109|N +1071F2668:lH1071F49C0|N +1071F49C0:lI120|H1071F71E8 +1071F71E8:lI109|H1071F9E40 +1071F9E40:lI101|H1071FCD80 +1071FCD80:lI114|H1071FFE38 +1071FFE38:lI108|H107202FE0 +107202FE0:lI46|H107206210 +107206210:lI98|H1072094C8 +1072094C8:lI101|H10720C728 +10720C728:lI97|H10720F938 +10720F938:lI109|N +1071F2658:lH1071F49B0|N +1071F49B0:lI120|H1071F71D8 +1071F71D8:lI109|H1071F9E30 +1071F9E30:lI101|H1071FCD70 +1071FCD70:lI114|H1071FFE28 +1071FFE28:lI108|H107202FD0 +107202FD0:lI95|H107206200 +107206200:lI115|H1072094B8 +1072094B8:lI97|H10720C718 +10720C718:lI120|H10720F928 +10720F928:lI95|H107212BC8 +107212BC8:lI115|H107215F90 +107215F90:lI105|H107219570 +107219570:lI109|H10721CBE0 +10721CBE0:lI112|H1072201F0 +1072201F0:lI108|H107223598 +107223598:lI101|H107226630 +107226630:lI95|H107229328 +107229328:lI100|H10722BC70 +10722BC70:lI111|H10722E2B8 +10722E2B8:lI109|H107230640 +107230640:lI46|H107232738 +107232738:lI98|H107234530 +107234530:lI101|H107236058 +107236058:lI97|H1072378D0 +1072378D0:lI109|N +1071F2648:lH1071F49A0|N +1071F49A0:lI120|H1071F71C8 +1071F71C8:lI109|H1071F9E20 +1071F9E20:lI101|H1071FCD60 +1071FCD60:lI114|H1071FFE18 +1071FFE18:lI108|H107202FC0 +107202FC0:lI95|H1072061F0 +1072061F0:lI104|H1072094A8 +1072094A8:lI116|H10720C708 +10720C708:lI109|H10720F918 +10720F918:lI108|H107212BB8 +107212BB8:lI46|H107215F80 +107215F80:lI98|H107219560 +107219560:lI101|H10721CBD0 +10721CBD0:lI97|H1072201E0 +1072201E0:lI109|N +1071F0E10:Mn3:H1071F2608,H1071F2618,H1071F2628 +1071F2608:lH1071F4960|N +1071F4960:lI120|H1071F7188 +1071F7188:lI109|H1071F9DE0 +1071F9DE0:lI101|H1071FCD20 +1071FCD20:lI114|H1071FFDD8 +1071FFDD8:lI108|H107202F80 +107202F80:lI95|H1072061B0 +1072061B0:lI117|H107209468 +107209468:lI114|H10720C6C8 +10720C6C8:lI105|H10720F8D8 +10720F8D8:lI46|H107212B78 +107212B78:lI98|H107215F40 +107215F40:lI101|H107219520 +107219520:lI97|H10721CB90 +10721CB90:lI109|N +1071F2628:lH1071F4980|N +1071F4980:lI120|H1071F71A8 +1071F71A8:lI109|H1071F9E00 +1071F9E00:lI101|H1071FCD40 +1071FCD40:lI114|H1071FFDF8 +1071FFDF8:lI108|H107202FA0 +107202FA0:lI95|H1072061D0 +1072061D0:lI120|H107209488 +107209488:lI112|H10720C6E8 +10720C6E8:lI97|H10720F8F8 +10720F8F8:lI116|H107212B98 +107212B98:lI104|H107215F60 +107215F60:lI95|H107219540 +107219540:lI115|H10721CBB0 +10721CBB0:lI99|H1072201C0 +1072201C0:lI97|H107223578 +107223578:lI110|H107226610 +107226610:lI46|H107229318 +107229318:lI98|H10722BC60 +10722BC60:lI101|H10722E2A8 +10722E2A8:lI97|H107230630 +107230630:lI109|N +1071F2618:lH1071F4970|N +1071F4970:lI120|H1071F7198 +1071F7198:lI109|H1071F9DF0 +1071F9DF0:lI101|H1071FCD30 +1071FCD30:lI114|H1071FFDE8 +1071FFDE8:lI108|H107202F90 +107202F90:lI95|H1072061C0 +1072061C0:lI115|H107209478 +107209478:lI103|H10720C6D8 +10720C6D8:lI109|H10720F8E8 +10720F8E8:lI108|H107212B88 +107212B88:lI46|H107215F50 +107215F50:lI98|H107219530 +107219530:lI101|H10721CBA0 +10721CBA0:lI97|H1072201B0 +1072201B0:lI109|N +1071F0E00:lH1071F25F8|N +1071F25F8:lI120|H1071F4950 +1071F4950:lI109|H1071F7178 +1071F7178:lI101|H1071F9DD0 +1071F9DD0:lI114|H1071FCD10 +1071FCD10:lI108|H1071FFDC8 +1071FFDC8:lI46|H107202F70 +107202F70:lI97|H1072061A0 +1072061A0:lI112|H107209458 +107209458:lI112|H10720C6B8 +10720C6B8:lI117|H10720F8C8 +10720F8C8:lI112|N +1071F0DE0:Mn3:H1071F25C0,H1071F25D8,H1071F25E8 +1071F25C0:Mn2:H1071F4910,H1071F4920 +1071F4910:lH1071F7138|N +1071F7138:lI120|H1071F9D90 +1071F9D90:lI109|H1071FCCD0 +1071FCCD0:lI101|H1071FFD88 +1071FFD88:lI114|H107202F30 +107202F30:lI108|H107206160 +107206160:lI95|H107209418 +107209418:lI118|H10720C678 +10720C678:lI97|H10720F888 +10720F888:lI108|H107212B38 +107212B38:lI105|H107215F00 +107215F00:lI100|H1072194E0 +1072194E0:lI97|H10721CB60 +10721CB60:lI116|H107220180 +107220180:lI101|H107223548 +107223548:lI46|H1072265E0 +1072265E0:lI98|H1072292F8 +1072292F8:lI101|H10722BC50 +10722BC50:lI97|H10722E298 +10722E298:lI109|N +1071F4920:lH1071F7148|N +1071F7148:lI120|H1071F9DA0 +1071F9DA0:lI109|H1071FCCE0 +1071FCCE0:lI101|H1071FFD98 +1071FFD98:lI114|H107202F40 +107202F40:lI108|H107206170 +107206170:lI95|H107209428 +107209428:lI114|H10720C688 +10720C688:lI101|H10720F898 +10720F898:lI103|H107212B48 +107212B48:lI101|H107215F10 +107215F10:lI120|H1072194F0 +1072194F0:lI112|H10721CB70 +10721CB70:lI46|H107220190 +107220190:lI98|H107223558 +107223558:lI101|H1072265F0 +1072265F0:lI97|H107229308 +107229308:lI109|N +1071F25E8:lH1071F4940|N +1071F4940:lI120|H1071F7168 +1071F7168:lI109|H1071F9DC0 +1071F9DC0:lI101|H1071FCD00 +1071FCD00:lI114|H1071FFDB8 +1071FFDB8:lI108|H107202F60 +107202F60:lI95|H107206190 +107206190:lI98|H107209448 +107209448:lI54|H10720C6A8 +10720C6A8:lI52|H10720F8B8 +10720F8B8:lI66|H107212B68 +107212B68:lI105|H107215F30 +107215F30:lI110|H107219510 +107219510:lI46|H10721CB80 +10721CB80:lI98|H1072201A0 +1072201A0:lI101|H107223568 +107223568:lI97|H107226600 +107226600:lI109|N +1071F25D8:lH1071F4930|N +1071F4930:lI120|H1071F7158 +1071F7158:lI109|H1071F9DB0 +1071F9DB0:lI101|H1071FCCF0 +1071FCCF0:lI114|H1071FFDA8 +1071FFDA8:lI108|H107202F50 +107202F50:lI95|H107206180 +107206180:lI120|H107209438 +107209438:lI115|H10720C698 +10720C698:lI46|H10720F8A8 +10720F8A8:lI98|H107212B58 +107212B58:lI101|H107215F20 +107215F20:lI97|H107219500 +107219500:lI109|N +1071F0DC0:Mn3:H1071F2590,H1071F25A0,H1071F25B0 +1071F2590:lH1071F48E0|N +1071F48E0:lI120|H1071F7108 +1071F7108:lI109|H1071F9D60 +1071F9D60:lI101|H1071FCCA0 +1071FCCA0:lI114|H1071FFD58 +1071FFD58:lI108|H107202F00 +107202F00:lI95|H107206130 +107206130:lI115|H1072093E8 +1072093E8:lI97|H10720C648 +10720C648:lI120|H10720F858 +10720F858:lI95|H107212B08 +107212B08:lI112|H107215ED0 +107215ED0:lI97|H1072194B0 +1072194B0:lI114|H10721CB30 +10721CB30:lI115|H107220150 +107220150:lI101|H107223518 +107223518:lI114|H1072265B0 +1072265B0:lI95|H1072292C8 +1072292C8:lI108|H10722BC20 +10722BC20:lI105|H10722E268 +10722E268:lI115|H107230610 +107230610:lI116|H107232728 +107232728:lI46|H107234520 +107234520:lI98|H107236048 +107236048:lI101|H1072378C0 +1072378C0:lI97|H107238F48 +107238F48:lI109|N +1071F25B0:lH1071F4900|N +1071F4900:lI120|H1071F7128 +1071F7128:lI109|H1071F9D80 +1071F9D80:lI101|H1071FCCC0 +1071FCCC0:lI114|H1071FFD78 +1071FFD78:lI108|H107202F20 +107202F20:lI95|H107206150 +107206150:lI120|H107209408 +107209408:lI112|H10720C668 +10720C668:lI97|H10720F878 +10720F878:lI116|H107212B28 +107212B28:lI104|H107215EF0 +107215EF0:lI95|H1072194D0 +1072194D0:lI108|H10721CB50 +10721CB50:lI105|H107220170 +107220170:lI98|H107223538 +107223538:lI46|H1072265D0 +1072265D0:lI98|H1072292E8 +1072292E8:lI101|H10722BC40 +10722BC40:lI97|H10722E288 +10722E288:lI109|N +1071F25A0:lH1071F48F0|N +1071F48F0:lI120|H1071F7118 +1071F7118:lI109|H1071F9D70 +1071F9D70:lI101|H1071FCCB0 +1071FCCB0:lI114|H1071FFD68 +1071FFD68:lI108|H107202F10 +107202F10:lI95|H107206140 +107206140:lI115|H1072093F8 +1072093F8:lI97|H10720C658 +10720C658:lI120|H10720F868 +10720F868:lI95|H107212B18 +107212B18:lI112|H107215EE0 +107215EE0:lI97|H1072194C0 +1072194C0:lI114|H10721CB40 +10721CB40:lI115|H107220160 +107220160:lI101|H107223528 +107223528:lI114|H1072265C0 +1072265C0:lI46|H1072292D8 +1072292D8:lI98|H10722BC30 +10722BC30:lI101|H10722E278 +10722E278:lI97|H107230620 +107230620:lI109|N +1071F0DA8:Mn2:H1071F2568,H1071F2578 +1071F2568:lH1071F48B0|N +1071F48B0:lI120|H1071F70D8 +1071F70D8:lI109|H1071F9D30 +1071F9D30:lI101|H1071FCC70 +1071FCC70:lI114|H1071FFD28 +1071FFD28:lI108|H107202ED0 +107202ED0:lI95|H107206100 +107206100:lI120|H1072093B8 +1072093B8:lI115|H10720C618 +10720C618:lI100|H10720F828 +10720F828:lI95|H107212AD8 +107212AD8:lI116|H107215EA0 +107215EA0:lI121|H107219480 +107219480:lI112|H10721CB00 +10721CB00:lI101|H107220120 +107220120:lI46|H1072234F8 +1072234F8:lI98|H107226590 +107226590:lI101|H1072292A8 +1072292A8:lI97|H10722BC00 +10722BC00:lI109|N +1071F2578:Mn2:H1071F48C0,H1071F48D0 +1071F48C0:lH1071F70E8|N +1071F70E8:lI120|H1071F9D40 +1071F9D40:lI109|H1071FCC80 +1071FCC80:lI101|H1071FFD38 +1071FFD38:lI114|H107202EE0 +107202EE0:lI108|H107206110 +107206110:lI95|H1072093C8 +1072093C8:lI108|H10720C628 +10720C628:lI105|H10720F838 +10720F838:lI98|H107212AE8 +107212AE8:lI46|H107215EB0 +107215EB0:lI98|H107219490 +107219490:lI101|H10721CB10 +10721CB10:lI97|H107220130 +107220130:lI109|N +1071F48D0:lH1071F70F8|N +1071F70F8:lI120|H1071F9D50 +1071F9D50:lI109|H1071FCC90 +1071FCC90:lI101|H1071FFD48 +1071FFD48:lI114|H107202EF0 +107202EF0:lI108|H107206120 +107206120:lI95|H1072093D8 +1072093D8:lI115|H10720C638 +10720C638:lI97|H10720F848 +10720F848:lI120|H107212AF8 +107212AF8:lI95|H107215EC0 +107215EC0:lI112|H1072194A0 +1072194A0:lI97|H10721CB20 +10721CB20:lI114|H107220140 +107220140:lI115|H107223508 +107223508:lI101|H1072265A0 +1072265A0:lI114|H1072292B8 +1072292B8:lI95|H10722BC10 +10722BC10:lI117|H10722E258 +10722E258:lI116|H107230600 +107230600:lI102|H107232718 +107232718:lI56|H107234510 +107234510:lI46|H107236038 +107236038:lI98|H1072378B0 +1072378B0:lI101|H107238F38 +107238F38:lI97|H10723A400 +10723A400:lI109|N +1071F0D88:Mn3:H1071F2538,H1071F2548,H1071F2558 +1071F2538:lH1071F4880|N +1071F4880:lI120|H1071F70A8 +1071F70A8:lI109|H1071F9D00 +1071F9D00:lI101|H1071FCC40 +1071FCC40:lI114|H1071FFCF8 +1071FFCF8:lI108|H107202EA0 +107202EA0:lI46|H1072060D0 +1072060D0:lI97|H107209388 +107209388:lI112|H10720C5E8 +10720C5E8:lI112|N +1071F2558:lH1071F48A0|N +1071F48A0:lI120|H1071F70C8 +1071F70C8:lI109|H1071F9D20 +1071F9D20:lI101|H1071FCC60 +1071FCC60:lI114|H1071FFD18 +1071FFD18:lI108|H107202EC0 +107202EC0:lI95|H1072060F0 +1072060F0:lI117|H1072093A8 +1072093A8:lI99|H10720C608 +10720C608:lI115|H10720F818 +10720F818:lI46|H107212AC8 +107212AC8:lI98|H107215E90 +107215E90:lI101|H107219470 +107219470:lI97|H10721CAF0 +10721CAF0:lI109|N +1071F2548:lH1071F4890|N +1071F4890:lI120|H1071F70B8 +1071F70B8:lI109|H1071F9D10 +1071F9D10:lI101|H1071FCC50 +1071FCC50:lI114|H1071FFD08 +1071FFD08:lI108|H107202EB0 +107202EB0:lI95|H1072060E0 +1072060E0:lI115|H107209398 +107209398:lI97|H10720C5F8 +10720C5F8:lI120|H10720F808 +10720F808:lI95|H107212AB8 +107212AB8:lI112|H107215E80 +107215E80:lI97|H107219460 +107219460:lI114|H10721CAE0 +10721CAE0:lI115|H107220110 +107220110:lI101|H1072234E8 +1072234E8:lI114|H107226580 +107226580:lI95|H107229298 +107229298:lI117|H10722BBF0 +10722BBF0:lI116|H10722E248 +10722E248:lI102|H1072305F0 +1072305F0:lI49|H107232708 +107232708:lI54|H107234500 +107234500:lI98|H107236028 +107236028:lI101|H1072378A0 +1072378A0:lI46|H107238F28 +107238F28:lI98|H10723A3F0 +10723A3F0:lI101|H10723B730 +10723B730:lI97|H10723C7F0 +10723C7F0:lI109|N +1071F0D70:Mn2:H1071F2518,H1071F2528 +1071F2518:lH1071F4860|N +1071F4860:lI120|H1071F7088 +1071F7088:lI109|H1071F9CE0 +1071F9CE0:lI101|H1071FCC20 +1071FCC20:lI114|H1071FFCD8 +1071FFCD8:lI108|H107202E80 +107202E80:lI95|H1072060B0 +1072060B0:lI120|H107209368 +107209368:lI112|H10720C5C8 +10720C5C8:lI97|H10720F7E8 +10720F7E8:lI116|H107212A98 +107212A98:lI104|H107215E60 +107215E60:lI46|H107219440 +107219440:lI98|H10721CAC0 +10721CAC0:lI101|H1072200F0 +1072200F0:lI97|H1072234C8 +1072234C8:lI109|N +1071F2528:lH1071F4870|N +1071F4870:lI120|H1071F7098 +1071F7098:lI109|H1071F9CF0 +1071F9CF0:lI101|H1071FCC30 +1071FCC30:lI114|H1071FFCE8 +1071FFCE8:lI108|H107202E90 +107202E90:lI95|H1072060C0 +1072060C0:lI120|H107209378 +107209378:lI112|H10720C5D8 +10720C5D8:lI97|H10720F7F8 +10720F7F8:lI116|H107212AA8 +107212AA8:lI104|H107215E70 +107215E70:lI95|H107219450 +107219450:lI112|H10721CAD0 +10721CAD0:lI97|H107220100 +107220100:lI114|H1072234D8 +1072234D8:lI115|H107226570 +107226570:lI101|H107229288 +107229288:lI46|H10722BBE0 +10722BBE0:lI98|H10722E238 +10722E238:lI101|H1072305E0 +1072305E0:lI97|H1072326F8 +1072326F8:lI109|N +1071F0D58:Mn2:H1071F24F8,H1071F2508 +1071F24F8:lH1071F4840|N +1071F4840:lI120|H1071F7068 +1071F7068:lI109|H1071F9CC0 +1071F9CC0:lI101|H1071FCC00 +1071FCC00:lI114|H1071FFCB8 +1071FFCB8:lI108|H107202E60 +107202E60:lI95|H107206090 +107206090:lI120|H107209348 +107209348:lI109|H10720C5A8 +10720C5A8:lI108|H10720F7C8 +10720F7C8:lI46|H107212A78 +107212A78:lI98|H107215E40 +107215E40:lI101|H107219420 +107219420:lI97|H10721CAA0 +10721CAA0:lI109|N +1071F2508:lH1071F4850|N +1071F4850:lI120|H1071F7078 +1071F7078:lI109|H1071F9CD0 +1071F9CD0:lI101|H1071FCC10 +1071FCC10:lI114|H1071FFCC8 +1071FFCC8:lI108|H107202E70 +107202E70:lI95|H1072060A0 +1072060A0:lI116|H107209358 +107209358:lI101|H10720C5B8 +10720C5B8:lI120|H10720F7D8 +10720F7D8:lI116|H107212A88 +107212A88:lI46|H107215E50 +107215E50:lI98|H107219430 +107219430:lI101|H10721CAB0 +10721CAB0:lI97|H1072200E0 +1072200E0:lI109|N +1071F0D38:Mn3:H1071F24C8,H1071F24D8,H1071F24E8 +1071F24C8:lH1071F4810|N +1071F4810:lI120|H1071F7038 +1071F7038:lI109|H1071F9C90 +1071F9C90:lI101|H1071FCBD0 +1071FCBD0:lI114|H1071FFC88 +1071FFC88:lI108|H107202E30 +107202E30:lI95|H107206060 +107206060:lI115|H107209318 +107209318:lI97|H10720C578 +10720C578:lI120|H10720F798 +10720F798:lI95|H107212A48 +107212A48:lI112|H107215E10 +107215E10:lI97|H1072193F0 +1072193F0:lI114|H10721CA70 +10721CA70:lI115|H1072200B0 +1072200B0:lI101|H107223498 +107223498:lI114|H107226540 +107226540:lI95|H107229258 +107229258:lI108|H10722BBC0 +10722BBC0:lI97|H10722E218 +10722E218:lI116|H1072305C0 +1072305C0:lI105|H1072326D8 +1072326D8:lI110|H1072344E0 +1072344E0:lI49|H107236008 +107236008:lI46|H107237880 +107237880:lI98|H107238F08 +107238F08:lI101|H10723A3D0 +10723A3D0:lI97|H10723B710 +10723B710:lI109|N +1071F24E8:lH1071F4830|N +1071F4830:lI120|H1071F7058 +1071F7058:lI109|H1071F9CB0 +1071F9CB0:lI101|H1071FCBF0 +1071FCBF0:lI114|H1071FFCA8 +1071FFCA8:lI108|H107202E50 +107202E50:lI95|H107206080 +107206080:lI111|H107209338 +107209338:lI116|H10720C598 +10720C598:lI112|H10720F7B8 +10720F7B8:lI115|H107212A68 +107212A68:lI103|H107215E30 +107215E30:lI109|H107219410 +107219410:lI108|H10721CA90 +10721CA90:lI46|H1072200D0 +1072200D0:lI98|H1072234B8 +1072234B8:lI101|H107226560 +107226560:lI97|H107229278 +107229278:lI109|N +1071F24D8:lH1071F4820|N +1071F4820:lI120|H1071F7048 +1071F7048:lI109|H1071F9CA0 +1071F9CA0:lI101|H1071FCBE0 +1071FCBE0:lI114|H1071FFC98 +1071FFC98:lI108|H107202E40 +107202E40:lI95|H107206070 +107206070:lI115|H107209328 +107209328:lI97|H10720C588 +10720C588:lI120|H10720F7A8 +10720F7A8:lI95|H107212A58 +107212A58:lI112|H107215E20 +107215E20:lI97|H107219400 +107219400:lI114|H10721CA80 +10721CA80:lI115|H1072200C0 +1072200C0:lI101|H1072234A8 +1072234A8:lI114|H107226550 +107226550:lI95|H107229268 +107229268:lI117|H10722BBD0 +10722BBD0:lI116|H10722E228 +10722E228:lI102|H1072305D0 +1072305D0:lI49|H1072326E8 +1072326E8:lI54|H1072344F0 +1072344F0:lI108|H107236018 +107236018:lI101|H107237890 +107237890:lI46|H107238F18 +107238F18:lI98|H10723A3E0 +10723A3E0:lI101|H10723B720 +10723B720:lI97|H10723C7E0 +10723C7E0:lI109|N +1071F0D28:lH1071F24B8|N +1071F24B8:lI120|H1071F4800 +1071F4800:lI109|H1071F7028 +1071F7028:lI101|H1071F9C80 +1071F9C80:lI114|H1071FCBC0 +1071FCBC0:lI108|H1071FFC78 +1071FFC78:lI95|H107202E20 +107202E20:lI115|H107206050 +107206050:lI97|H107209308 +107209308:lI120|H10720C568 +10720C568:lI95|H10720F788 +10720F788:lI111|H107212A38 +107212A38:lI108|H107215E00 +107215E00:lI100|H1072193E0 +1072193E0:lI95|H10721CA60 +10721CA60:lI100|H1072200A0 +1072200A0:lI111|H107223488 +107223488:lI109|H107226530 +107226530:lI46|H107229248 +107229248:lI98|H10722BBB0 +10722BBB0:lI101|H10722E208 +10722E208:lI97|H1072305B0 +1072305B0:lI109|N +1071F0D18:lH1071F24A8|N +1071F24A8:lI120|H1071F47F0 +1071F47F0:lI109|H1071F7018 +1071F7018:lI101|H1071F9C70 +1071F9C70:lI114|H1071FCBB0 +1071FCBB0:lI108|H1071FFC68 +1071FFC68:lI95|H107202E10 +107202E10:lI120|H107206040 +107206040:lI115|H1072092F8 +1072092F8:lI100|H10720C558 +10720C558:lI46|H10720F778 +10720F778:lI98|H107212A28 +107212A28:lI101|H107215DF0 +107215DF0:lI97|H1072193D0 +1072193D0:lI109|N +1071F0D00:Mn2:H1071F2488,H1071F2498 +1071F2488:lH1071F47D0|N +1071F47D0:lI120|H1071F6FF8 +1071F6FF8:lI109|H1071F9C50 +1071F9C50:lI101|H1071FCB90 +1071FCB90:lI114|H1071FFC48 +1071FFC48:lI108|H107202DF0 +107202DF0:lI95|H107206020 +107206020:lI115|H1072092D8 +1072092D8:lI105|H10720C538 +10720C538:lI109|H10720F758 +10720F758:lI112|H107212A08 +107212A08:lI108|H107215DD0 +107215DD0:lI101|H1072193B0 +1072193B0:lI46|H10721CA40 +10721CA40:lI98|H107220080 +107220080:lI101|H107223468 +107223468:lI97|H107226510 +107226510:lI109|N +1071F2498:lH1071F47E0|N +1071F47E0:lI120|H1071F7008 +1071F7008:lI109|H1071F9C60 +1071F9C60:lI101|H1071FCBA0 +1071FCBA0:lI114|H1071FFC58 +1071FFC58:lI108|H107202E00 +107202E00:lI95|H107206030 +107206030:lI98|H1072092E8 +1072092E8:lI54|H10720C548 +10720C548:lI52|H10720F768 +10720F768:lI66|H107212A18 +107212A18:lI105|H107215DE0 +107215DE0:lI110|H1072193C0 +1072193C0:lI95|H10721CA50 +10721CA50:lI115|H107220090 +107220090:lI99|H107223478 +107223478:lI97|H107226520 +107226520:lI110|H107229238 +107229238:lI46|H10722BBA0 +10722BBA0:lI98|H10722E1F8 +10722E1F8:lI101|H1072305A0 +1072305A0:lI97|H1072326C8 +1072326C8:lI109|N +1071F0CE8:Mn2:H1071F2468,H1071F2478 +1071F2468:lH1071F47B0|N +1071F47B0:lI120|H1071F6FD8 +1071F6FD8:lI109|H1071F9C30 +1071F9C30:lI101|H1071FCB70 +1071FCB70:lI114|H1071FFC28 +1071FFC28:lI108|H107202DD0 +107202DD0:lI95|H107206000 +107206000:lI120|H1072092B8 +1072092B8:lI108|H10720C518 +10720C518:lI97|H10720F738 +10720F738:lI116|H1072129E8 +1072129E8:lI101|H107215DB0 +107215DB0:lI46|H107219390 +107219390:lI98|H10721CA20 +10721CA20:lI101|H107220060 +107220060:lI97|H107223458 +107223458:lI109|N +1071F2478:lH1071F47C0|N +1071F47C0:lI120|H1071F6FE8 +1071F6FE8:lI109|H1071F9C40 +1071F9C40:lI101|H1071FCB80 +1071FCB80:lI114|H1071FFC38 +1071FFC38:lI108|H107202DE0 +107202DE0:lI95|H107206010 +107206010:lI115|H1072092C8 +1072092C8:lI99|H10720C528 +10720C528:lI97|H10720F748 +10720F748:lI110|H1072129F8 +1072129F8:lI46|H107215DC0 +107215DC0:lI98|H1072193A0 +1072193A0:lI101|H10721CA30 +10721CA30:lI97|H107220070 +107220070:lI109|N +1071F0200:lI47|H1071F0CC8 +1071F0CC8:lI111|H1071F2448 +1071F2448:lI112|H1071F4790 +1071F4790:lI116|H1071F6FB8 +1071F6FB8:lI47|H1071F9C10 +1071F9C10:lI104|H1071FCB50 +1071FCB50:lI111|H1071FFC08 +1071FFC08:lI109|H107202DB0 +107202DB0:lI101|H107205FE0 +107205FE0:lI98|H107209298 +107209298:lI114|H10720C4F8 +10720C4F8:lI101|H10720F718 +10720F718:lI119|H1072129C8 +1072129C8:lI47|H107215D90 +107215D90:lI67|H107219370 +107219370:lI101|H10721CA00 +10721CA00:lI108|H107220040 +107220040:lI108|H107223438 +107223438:lI97|H1072264F0 +1072264F0:lI114|H107229218 +107229218:lI47|H10722BB80 +10722BB80:lI101|H10722E1D8 +10722E1D8:lI114|H107230590 +107230590:lI108|H1072326B8 +1072326B8:lI97|H1072344D0 +1072344D0:lI110|H107235FF8 +107235FF8:lI103|H107237870 +107237870:lI47|H107238EF8 +107238EF8:lI50|H10723A3C0 +10723A3C0:lI54|H10723B700 +10723B700:lI46|H10723C7D0 +10723C7D0:lI48|H10723D690 +10723D690:lI46|H10723E410 +10723E410:lI50|H10723F020 +10723F020:lI47|H10723FAF0 +10723FAF0:lI108|H107240440 +107240440:lI105|H107240CC0 +107240CC0:lI98|H107241450 +107241450:lI47|H107241B80 +107241B80:lI101|H107242250 +107242250:lI114|H1072428C0 +1072428C0:lI108|H107242EC0 +107242EC0:lI97|H107243430 +107243430:lI110|H107243970 +107243970:lI103|H107243E60 +107243E60:lI47|H107244350 +107244350:lI108|H107244800 +107244800:lI105|H107244C70 +107244C70:lI98|H1072450D0 +1072450D0:lI47|H107245520 +107245520:lI120|H107245920 +107245920:lI109|H107245CE0 +107245CE0:lI101|H107246070 +107246070:lI114|H107246400 +107246400:lI108|H107246790 +107246790:lI45|H107246B20 +107246B20:lI49|H107246E60 +107246E60:lI46|H107247180 +107247180:lI51|H1072474A0 +1072474A0:lI46|H1072477B0 +1072477B0:lI51|H107247AB0 +107247AB0:lI50|H107247DA0 +107247DA0:lI47|H280052C20 +10724AEE0:lH10724AF38|H10724AF50 +10724AF38:t2:H1071F02B8,H1071F02C8 +1071F02C8:MhF3:10:H1071F0E88,H1071F0EF8,H1071F0F50,H1071F0FA0,H1071F1000,H1071F1050,H1071F10B0,H1071F1130,H1071F1190,H1071F11E8,H1071F1238,H1071F12A0,H1071F12E8,H1071F1328,H1071F1370,H1071F13C8 +1071F0E88:MnD:H1071F26A8,H1071F26B8,H1071F26C8,H1071F26D8,H1071F26E8,H1071F2700,H1071F2710,H1071F2720,H1071F2738,H1071F2748,H1071F2760,H1071F2780,H1071F2790 +1071F26A8:lH1071F4A00|N +1071F4A00:lI119|H1071F7228 +1071F7228:lI120|H1071F9E80 +1071F9E80:lI65|H1071FCDC0 +1071FCDC0:lI117|H1071FFE78 +1071FFE78:lI105|H107203020 +107203020:lI68|H107206250 +107206250:lI111|H107209508 +107209508:lI99|H10720C768 +10720C768:lI107|H10720F978 +10720F978:lI65|H107212C08 +107212C08:lI114|H107215FD0 +107215FD0:lI116|H1072195B0 +1072195B0:lI46|H10721CC20 +10721CC20:lI98|H107220230 +107220230:lI101|H1072235D8 +1072235D8:lI97|H107226670 +107226670:lI109|N +1071F2790:Mn2:H1071F4B10,H1071F4B20 +1071F4B10:lH1071F7338|N +1071F7338:lI119|H1071F9F90 +1071F9F90:lI120|H1071FCED0 +1071FCED0:lI70|H1071FFF88 +1071FFF88:lI105|H107203130 +107203130:lI108|H107206360 +107206360:lI101|H107209618 +107209618:lI68|H10720C878 +10720C878:lI105|H10720FA88 +10720FA88:lI97|H107212D18 +107212D18:lI108|H1072160D0 +1072160D0:lI111|H1072196A0 +1072196A0:lI103|H10721CD10 +10721CD10:lI46|H107220310 +107220310:lI98|H1072236B8 +1072236B8:lI101|H107226730 +107226730:lI97|H1072293F8 +1072293F8:lI109|N +1071F4B20:lH1071F7348|N +1071F7348:lI119|H1071F9FA0 +1071F9FA0:lI120|H1071FCEE0 +1071FCEE0:lI81|H1071FFF98 +1071FFF98:lI117|H107203140 +107203140:lI101|H107206370 +107206370:lI114|H107209628 +107209628:lI121|H10720C888 +10720C888:lI78|H10720FA98 +10720FA98:lI101|H107212D28 +107212D28:lI119|H1072160E0 +1072160E0:lI80|H1072196B0 +1072196B0:lI97|H10721CD20 +10721CD20:lI108|H107220320 +107220320:lI101|H1072236C8 +1072236C8:lI116|H107226740 +107226740:lI116|H107229408 +107229408:lI101|H10722BD30 +10722BD30:lI69|H10722E368 +10722E368:lI118|H1072306D0 +1072306D0:lI101|H1072327C8 +1072327C8:lI110|H107234590 +107234590:lI116|H1072360B8 +1072360B8:lI46|H107237930 +107237930:lI98|H107238F98 +107238F98:lI101|H10723A440 +10723A440:lI97|H10723B770 +10723B770:lI109|N +1071F2780:lH1071F4B00|N +1071F4B00:lI119|H1071F7328 +1071F7328:lI120|H1071F9F80 +1071F9F80:lI83|H1071FCEC0 +1071FCEC0:lI97|H1071FFF78 +1071FFF78:lI115|H107203120 +107203120:lI104|H107206350 +107206350:lI87|H107209608 +107209608:lI105|H10720C868 +10720C868:lI110|H10720FA78 +10720FA78:lI100|H107212D08 +107212D08:lI111|H1072160C0 +1072160C0:lI119|H107219690 +107219690:lI46|H10721CD00 +10721CD00:lI98|H107220300 +107220300:lI101|H1072236A8 +1072236A8:lI97|H107226720 +107226720:lI109|N +1071F2760:Mn3:H1071F4AD0,H1071F4AE0,H1071F4AF0 +1071F4AD0:lH1071F72F8|N +1071F72F8:lI119|H1071F9F50 +1071F9F50:lI120|H1071FCE90 +1071FCE90:lI80|H1071FFF48 +1071FFF48:lI111|H1072030F0 +1072030F0:lI115|H107206320 +107206320:lI116|H1072095D8 +1072095D8:lI83|H10720C838 +10720C838:lI99|H10720FA48 +10720FA48:lI114|H107212CD8 +107212CD8:lI105|H107216090 +107216090:lI112|H107219660 +107219660:lI116|H10721CCD0 +10721CCD0:lI68|H1072202E0 +1072202E0:lI67|H107223688 +107223688:lI46|H107226700 +107226700:lI98|H1072293D8 +1072293D8:lI101|H10722BD10 +10722BD10:lI97|H10722E348 +10722E348:lI109|N +1071F4AF0:lH1071F7318|N +1071F7318:lI119|H1071F9F70 +1071F9F70:lI120|H1071FCEB0 +1071FCEB0:lI87|H1071FFF68 +1071FFF68:lI105|H107203110 +107203110:lI110|H107206340 +107206340:lI100|H1072095F8 +1072095F8:lI111|H10720C858 +10720C858:lI119|H10720FA68 +10720FA68:lI67|H107212CF8 +107212CF8:lI114|H1072160B0 +1072160B0:lI101|H107219680 +107219680:lI97|H10721CCF0 +10721CCF0:lI116|H1072202F0 +1072202F0:lI101|H107223698 +107223698:lI69|H107226710 +107226710:lI118|H1072293E8 +1072293E8:lI101|H10722BD20 +10722BD20:lI110|H10722E358 +10722E358:lI116|H1072306C0 +1072306C0:lI46|H1072327B8 +1072327B8:lI98|H107234580 +107234580:lI101|H1072360A8 +1072360A8:lI97|H107237920 +107237920:lI109|N +1071F4AE0:lH1071F7308|N +1071F7308:lI119|H1071F9F60 +1071F9F60:lI120|H1071FCEA0 +1071FCEA0:lI67|H1071FFF58 +1071FFF58:lI117|H107203100 +107203100:lI114|H107206330 +107206330:lI115|H1072095E8 +1072095E8:lI111|H10720C848 +10720C848:lI114|H10720FA58 +10720FA58:lI46|H107212CE8 +107212CE8:lI98|H1072160A0 +1072160A0:lI101|H107219670 +107219670:lI97|H10721CCE0 +10721CCE0:lI109|N +1071F2748:Mn2:H1071F4AB0,H1071F4AC0 +1071F4AB0:lH1071F72D8|N +1071F72D8:lI119|H1071F9F30 +1071F9F30:lI120|H1071FCE70 +1071FCE70:lI71|H1071FFF28 +1071FFF28:lI114|H1072030D0 +1072030D0:lI97|H107206300 +107206300:lI112|H1072095B8 +1072095B8:lI104|H10720C818 +10720C818:lI105|H10720FA28 +10720FA28:lI99|H107212CB8 +107212CB8:lI115|H107216070 +107216070:lI80|H107219640 +107219640:lI101|H10721CCB0 +10721CCB0:lI110|H1072202C0 +1072202C0:lI46|H107223668 +107223668:lI98|H1072266F0 +1072266F0:lI101|H1072293C8 +1072293C8:lI97|H10722BD00 +10722BD00:lI109|N +1071F4AC0:lH1071F72E8|N +1071F72E8:lI119|H1071F9F40 +1071F9F40:lI120|H1071FCE80 +1071FCE80:lI70|H1071FFF38 +1071FFF38:lI111|H1072030E0 +1072030E0:lI110|H107206310 +107206310:lI116|H1072095C8 +1072095C8:lI68|H10720C828 +10720C828:lI97|H10720FA38 +10720FA38:lI116|H107212CC8 +107212CC8:lI97|H107216080 +107216080:lI46|H107219650 +107219650:lI98|H10721CCC0 +10721CCC0:lI101|H1072202D0 +1072202D0:lI97|H107223678 +107223678:lI109|N +1071F2738:lH1071F4AA0|N +1071F4AA0:lI119|H1071F72C8 +1071F72C8:lI120|H1071F9F20 +1071F9F20:lI80|H1071FCE60 +1071FCE60:lI114|H1071FFF18 +1071FFF18:lI105|H1072030C0 +1072030C0:lI110|H1072062F0 +1072062F0:lI116|H1072095A8 +1072095A8:lI68|H10720C808 +10720C808:lI105|H10720FA18 +10720FA18:lI97|H107212CA8 +107212CA8:lI108|H107216060 +107216060:lI111|H107219630 +107219630:lI103|H10721CCA0 +10721CCA0:lI68|H1072202B0 +1072202B0:lI97|H107223658 +107223658:lI116|H1072266E0 +1072266E0:lI97|H1072293B8 +1072293B8:lI46|H10722BCF0 +10722BCF0:lI98|H10722E338 +10722E338:lI101|H1072306B0 +1072306B0:lI97|H1072327A8 +1072327A8:lI109|N +1071F2720:Mn2:H1071F4A80,H1071F4A90 +1071F4A80:lH1071F72A8|N +1071F72A8:lI119|H1071F9F00 +1071F9F00:lI120|H1071FCE40 +1071FCE40:lI83|H1071FFEF8 +1071FFEF8:lI116|H1072030A0 +1072030A0:lI97|H1072062D0 +1072062D0:lI116|H107209588 +107209588:lI105|H10720C7E8 +10720C7E8:lI99|H10720F9F8 +10720F9F8:lI66|H107212C88 +107212C88:lI111|H107216040 +107216040:lI120|H107219610 +107219610:lI83|H10721CC80 +10721CC80:lI105|H107220290 +107220290:lI122|H107223638 +107223638:lI101|H1072266C0 +1072266C0:lI114|H107229398 +107229398:lI46|H10722BCD0 +10722BCD0:lI98|H10722E318 +10722E318:lI101|H107230690 +107230690:lI97|H107232788 +107232788:lI109|N +1071F4A90:lH1071F72B8|N +1071F72B8:lI119|H1071F9F10 +1071F9F10:lI120|H1071FCE50 +1071FCE50:lI83|H1071FFF08 +1071FFF08:lI101|H1072030B0 +1072030B0:lI116|H1072062E0 +1072062E0:lI67|H107209598 +107209598:lI117|H10720C7F8 +10720C7F8:lI114|H10720FA08 +10720FA08:lI115|H107212C98 +107212C98:lI111|H107216050 +107216050:lI114|H107219620 +107219620:lI69|H10721CC90 +10721CC90:lI118|H1072202A0 +1072202A0:lI101|H107223648 +107223648:lI110|H1072266D0 +1072266D0:lI116|H1072293A8 +1072293A8:lI46|H10722BCE0 +10722BCE0:lI98|H10722E328 +10722E328:lI101|H1072306A0 +1072306A0:lI97|H107232798 +107232798:lI109|N +1071F2710:lH1071F4A70|N +1071F4A70:lI119|H1071F7298 +1071F7298:lI120|H1071F9EF0 +1071F9EF0:lI80|H1071FCE30 +1071FCE30:lI97|H1071FFEE8 +1071FFEE8:lI103|H107203090 +107203090:lI101|H1072062C0 +1072062C0:lI83|H107209578 +107209578:lI101|H10720C7D8 +10720C7D8:lI116|H10720F9E8 +10720F9E8:lI117|H107212C78 +107212C78:lI112|H107216030 +107216030:lI68|H107219600 +107219600:lI105|H10721CC70 +10721CC70:lI97|H107220280 +107220280:lI108|H107223628 +107223628:lI111|H1072266B0 +1072266B0:lI103|H107229388 +107229388:lI68|H10722BCC0 +10722BCC0:lI97|H10722E308 +10722E308:lI116|H107230680 +107230680:lI97|H107232778 +107232778:lI46|H107234570 +107234570:lI98|H107236098 +107236098:lI101|H107237910 +107237910:lI97|H107238F88 +107238F88:lI109|N +1071F2700:lH1071F4A60|N +1071F4A60:lI119|H1071F7288 +1071F7288:lI120|H1071F9EE0 +1071F9EE0:lI71|H1071FCE20 +1071FCE20:lI66|H1071FFED8 +1071FFED8:lI83|H107203080 +107203080:lI105|H1072062B0 +1072062B0:lI122|H107209568 +107209568:lI101|H10720C7C8 +10720C7C8:lI114|H10720F9D8 +10720F9D8:lI73|H107212C68 +107212C68:lI116|H107216020 +107216020:lI101|H1072195F0 +1072195F0:lI109|H10721CC60 +10721CC60:lI46|H107220270 +107220270:lI98|H107223618 +107223618:lI101|H1072266A0 +1072266A0:lI97|H107229378 +107229378:lI109|N +1071F26E8:Mn2:H1071F4A40,H1071F4A50 +1071F4A40:lH1071F7268|N +1071F7268:lI119|H1071F9EC0 +1071F9EC0:lI120|H1071FCE00 +1071FCE00:lI71|H1071FFEB8 +1071FFEB8:lI114|H107203060 +107203060:lI105|H107206290 +107206290:lI100|H107209548 +107209548:lI46|H10720C7A8 +10720C7A8:lI98|H10720F9B8 +10720F9B8:lI101|H107212C48 +107212C48:lI97|H107216000 +107216000:lI109|N +1071F4A50:lH1071F7278|N +1071F7278:lI119|H1071F9ED0 +1071F9ED0:lI120|H1071FCE10 +1071FCE10:lI68|H1071FFEC8 +1071FFEC8:lI105|H107203070 +107203070:lI114|H1072062A0 +1072062A0:lI68|H107209558 +107209558:lI105|H10720C7B8 +10720C7B8:lI97|H10720F9C8 +10720F9C8:lI108|H107212C58 +107212C58:lI111|H107216010 +107216010:lI103|H1072195E0 +1072195E0:lI46|H10721CC50 +10721CC50:lI98|H107220260 +107220260:lI101|H107223608 +107223608:lI97|H107226690 +107226690:lI109|N +1071F26D8:lH1071F4A30|N +1071F4A30:lI119|H1071F7258 +1071F7258:lI120|H1071F9EB0 +1071F9EB0:lI83|H1071FCDF0 +1071FCDF0:lI116|H1071FFEA8 +1071FFEA8:lI97|H107203050 +107203050:lI116|H107206280 +107206280:lI117|H107209538 +107209538:lI115|H10720C798 +10720C798:lI66|H10720F9A8 +10720F9A8:lI97|H107212C38 +107212C38:lI114|H107215FF0 +107215FF0:lI46|H1072195D0 +1072195D0:lI98|H10721CC40 +10721CC40:lI101|H107220250 +107220250:lI97|H1072235F8 +1072235F8:lI109|N +1071F26C8:lH1071F4A20|N +1071F4A20:lI119|H1071F7248 +1071F7248:lI120|H1071F9EA0 +1071F9EA0:lI83|H1071FCDE0 +1071FCDE0:lI121|H1071FFE98 +1071FFE98:lI115|H107203040 +107203040:lI116|H107206270 +107206270:lI101|H107209528 +107209528:lI109|H10720C788 +10720C788:lI79|H10720F998 +10720F998:lI112|H107212C28 +107212C28:lI116|H107215FE0 +107215FE0:lI105|H1072195C0 +1072195C0:lI111|H10721CC30 +10721CC30:lI110|H107220240 +107220240:lI115|H1072235E8 +1072235E8:lI46|H107226680 +107226680:lI98|H107229368 +107229368:lI101|H10722BCB0 +10722BCB0:lI97|H10722E2F8 +10722E2F8:lI109|N +1071F26B8:lH1071F4A10|N +1071F4A10:lI119|H1071F7238 +1071F7238:lI120|H1071F9E90 +1071F9E90:lI77|H1071FCDD0 +1071FCDD0:lI101|H1071FFE88 +1071FFE88:lI110|H107203030 +107203030:lI117|H107206260 +107206260:lI46|H107209518 +107209518:lI98|H10720C778 +10720C778:lI101|H10720F988 +10720F988:lI97|H107212C18 +107212C18:lI109|N +1071F13C8:Mn8:H1071F3270,H1071F3288,H1071F3298,H1071F32A8,H1071F32B8,H1071F32C8,H1071F32D8,H1071F32E8 +1071F3270:Mn2:H1071F5838,H1071F5848 +1071F5838:lH1071F8098|N +1071F8098:lI119|H1071FACF0 +1071FACF0:lI120|H1071FDC30 +1071FDC30:lI80|H107200CE8 +107200CE8:lI97|H107203E90 +107203E90:lI108|H1072070C0 +1072070C0:lI101|H10720A348 +10720A348:lI116|H10720D5A8 +10720D5A8:lI116|H107210798 +107210798:lI101|H107213A08 +107213A08:lI67|H107216DC0 +107216DC0:lI104|H10721A330 +10721A330:lI97|H10721D900 +10721D900:lI110|H107220E50 +107220E50:lI103|H1072240E8 +1072240E8:lI101|H107227030 +107227030:lI100|H107229BB8 +107229BB8:lI69|H10722C3F0 +10722C3F0:lI118|H10722E938 +10722E938:lI101|H107230BC0 +107230BC0:lI110|H107232BC8 +107232BC8:lI116|H1072348B0 +1072348B0:lI46|H1072362E8 +1072362E8:lI98|H107237AB0 +107237AB0:lI101|H1072390D8 +1072390D8:lI97|H10723A570 +10723A570:lI109|N +1071F5848:lH1071F80A8|N +1071F80A8:lI119|H1071FAD00 +1071FAD00:lI120|H1071FDC40 +1071FDC40:lI77|H107200CF8 +107200CF8:lI111|H107203EA0 +107203EA0:lI117|H1072070D0 +1072070D0:lI115|H10720A358 +10720A358:lI101|H10720D5B8 +10720D5B8:lI69|H1072107A8 +1072107A8:lI118|H107213A18 +107213A18:lI101|H107216DD0 +107216DD0:lI110|H10721A340 +10721A340:lI116|H10721D910 +10721D910:lI46|H107220E60 +107220E60:lI98|H1072240F8 +1072240F8:lI101|H107227040 +107227040:lI97|H107229BC8 +107229BC8:lI109|N +1071F32E8:Mn3:H1071F58C0,H1071F58D0,H1071F58E0 +1071F58C0:lH1071F8128|N +1071F8128:lI119|H1071FAD80 +1071FAD80:lI120|H1071FDCC0 +1071FDCC0:lI80|H107200D78 +107200D78:lI114|H107203F20 +107203F20:lI111|H107207150 +107207150:lI103|H10720A3D8 +10720A3D8:lI114|H10720D638 +10720D638:lI101|H107210828 +107210828:lI115|H107213A98 +107213A98:lI115|H107216E50 +107216E50:lI68|H10721A3C0 +10721A3C0:lI105|H10721D990 +10721D990:lI97|H107220EE0 +107220EE0:lI108|H107224148 +107224148:lI111|H107227090 +107227090:lI103|H107229BF8 +107229BF8:lI46|H10722C420 +10722C420:lI98|H10722E968 +10722E968:lI101|H107230BF0 +107230BF0:lI97|H107232BE8 +107232BE8:lI109|N +1071F58E0:lH1071F8148|N +1071F8148:lI119|H1071FADA0 +1071FADA0:lI120|H1071FDCE0 +1071FDCE0:lI66|H107200D98 +107200D98:lI114|H107203F40 +107203F40:lI117|H107207170 +107207170:lI115|H10720A3F8 +10720A3F8:lI104|H10720D658 +10720D658:lI46|H107210848 +107210848:lI98|H107213AB8 +107213AB8:lI101|H107216E70 +107216E70:lI97|H10721A3E0 +10721A3E0:lI109|N +1071F58D0:lH1071F8138|N +1071F8138:lI119|H1071FAD90 +1071FAD90:lI120|H1071FDCD0 +1071FDCD0:lI76|H107200D88 +107200D88:lI105|H107203F30 +107203F30:lI115|H107207160 +107207160:lI116|H10720A3E8 +10720A3E8:lI73|H10720D648 +10720D648:lI116|H107210838 +107210838:lI101|H107213AA8 +107213AA8:lI109|H107216E60 +107216E60:lI65|H10721A3D0 +10721A3D0:lI116|H10721D9A0 +10721D9A0:lI116|H107220EF0 +107220EF0:lI114|H107224158 +107224158:lI46|H1072270A0 +1072270A0:lI98|H107229C08 +107229C08:lI101|H10722C430 +10722C430:lI97|H10722E978 +10722E978:lI109|N +1071F32D8:Mn1:H1071F58A8 +1071F58A8:Mn2:H1071F8108,H1071F8118 +1071F8108:lH1071FAD60|N +1071FAD60:lI119|H1071FDCA0 +1071FDCA0:lI120|H107200D58 +107200D58:lI87|H107203F00 +107203F00:lI105|H107207130 +107207130:lI110|H10720A3B8 +10720A3B8:lI100|H10720D618 +10720D618:lI111|H107210808 +107210808:lI119|H107213A78 +107213A78:lI68|H107216E30 +107216E30:lI67|H10721A3A0 +10721A3A0:lI46|H10721D970 +10721D970:lI98|H107220EC0 +107220EC0:lI101|H107224138 +107224138:lI97|H107227080 +107227080:lI109|N +1071F8118:lH1071FAD70|N +1071FAD70:lI119|H1071FDCB0 +1071FDCB0:lI120|H107200D68 +107200D68:lI83|H107203F10 +107203F10:lI108|H107207140 +107207140:lI105|H10720A3C8 +10720A3C8:lI100|H10720D628 +10720D628:lI101|H107210818 +107210818:lI114|H107213A88 +107213A88:lI46|H107216E40 +107216E40:lI98|H10721A3B0 +10721A3B0:lI101|H10721D980 +10721D980:lI97|H107220ED0 +107220ED0:lI109|N +1071F32C8:lH1071F5898|N +1071F5898:lI119|H1071F80F8 +1071F80F8:lI120|H1071FAD50 +1071FAD50:lI70|H1071FDC90 +1071FDC90:lI105|H107200D48 +107200D48:lI108|H107203EF0 +107203EF0:lI101|H107207120 +107207120:lI68|H10720A3A8 +10720A3A8:lI105|H10720D608 +10720D608:lI114|H1072107F8 +1072107F8:lI80|H107213A68 +107213A68:lI105|H107216E20 +107216E20:lI99|H10721A390 +10721A390:lI107|H10721D960 +10721D960:lI101|H107220EB0 +107220EB0:lI114|H107224128 +107224128:lI69|H107227070 +107227070:lI118|H107229BE8 +107229BE8:lI101|H10722C410 +10722C410:lI110|H10722E958 +10722E958:lI116|H107230BE0 +107230BE0:lI46|H107232BD8 +107232BD8:lI98|H1072348C0 +1072348C0:lI101|H1072362F8 +1072362F8:lI97|H107237AC0 +107237AC0:lI109|N +1071F32B8:lH1071F5888|N +1071F5888:lI119|H1071F80E8 +1071F80E8:lI120|H1071FAD40 +1071FAD40:lI84|H1071FDC80 +1071FDC80:lI101|H107200D38 +107200D38:lI120|H107203EE0 +107203EE0:lI116|H107207110 +107207110:lI67|H10720A398 +10720A398:lI116|H10720D5F8 +10720D5F8:lI114|H1072107E8 +1072107E8:lI108|H107213A58 +107213A58:lI46|H107216E10 +107216E10:lI98|H10721A380 +10721A380:lI101|H10721D950 +10721D950:lI97|H107220EA0 +107220EA0:lI109|N +1071F32A8:lH1071F5878|N +1071F5878:lI119|H1071F80D8 +1071F80D8:lI120|H1071FAD30 +1071FAD30:lI83|H1071FDC70 +1071FDC70:lI99|H107200D28 +107200D28:lI114|H107203ED0 +107203ED0:lI111|H107207100 +107207100:lI108|H10720A388 +10720A388:lI108|H10720D5E8 +10720D5E8:lI87|H1072107D8 +1072107D8:lI105|H107213A48 +107213A48:lI110|H107216E00 +107216E00:lI69|H10721A370 +10721A370:lI118|H10721D940 +10721D940:lI101|H107220E90 +107220E90:lI110|H107224118 +107224118:lI116|H107227060 +107227060:lI46|H107229BD8 +107229BD8:lI98|H10722C400 +10722C400:lI101|H10722E948 +10722E948:lI97|H107230BD0 +107230BD0:lI109|N +1071F3298:lH1071F5868|N +1071F5868:lI119|H1071F80C8 +1071F80C8:lI120|H1071FAD20 +1071FAD20:lI83|H1071FDC60 +1071FDC60:lI116|H107200D18 +107200D18:lI97|H107203EC0 +107203EC0:lI116|H1072070F0 +1072070F0:lI105|H10720A378 +10720A378:lI99|H10720D5D8 +10720D5D8:lI84|H1072107C8 +1072107C8:lI101|H107213A38 +107213A38:lI120|H107216DF0 +107216DF0:lI116|H10721A360 +10721A360:lI46|H10721D930 +10721D930:lI98|H107220E80 +107220E80:lI101|H107224108 +107224108:lI97|H107227050 +107227050:lI109|N +1071F3288:lH1071F5858|N +1071F5858:lI119|H1071F80B8 +1071F80B8:lI120|H1071FAD10 +1071FAD10:lI83|H1071FDC50 +1071FDC50:lI112|H107200D08 +107200D08:lI105|H107203EB0 +107203EB0:lI110|H1072070E0 +1072070E0:lI67|H10720A368 +10720A368:lI116|H10720D5C8 +10720D5C8:lI114|H1072107B8 +1072107B8:lI108|H107213A28 +107213A28:lI46|H107216DE0 +107216DE0:lI98|H10721A350 +10721A350:lI101|H10721D920 +10721D920:lI97|H107220E70 +107220E70:lI109|N +1071F1370:MnA:H1071F31C0,H1071F31D0,H1071F31E0,H1071F31F8,H1071F3210,H1071F3220,H1071F3230,H1071F3240,H1071F3250,H1071F3260 +1071F31C0:lH1071F5770|N +1071F5770:lI119|H1071F7FC8 +1071F7FC8:lI120|H1071FAC20 +1071FAC20:lI65|H1071FDB60 +1071FDB60:lI117|H107200C18 +107200C18:lI105|H107203DC0 +107203DC0:lI77|H107206FF0 +107206FF0:lI97|H10720A278 +10720A278:lI110|H10720D4D8 +10720D4D8:lI97|H1072106C8 +1072106C8:lI103|H107213938 +107213938:lI101|H107216CF0 +107216CF0:lI114|H10721A260 +10721A260:lI69|H10721D830 +10721D830:lI118|H107220DA0 +107220DA0:lI101|H107224048 +107224048:lI110|H107226FB0 +107226FB0:lI116|H107229B48 +107229B48:lI46|H10722C380 +10722C380:lI98|H10722E8C8 +10722E8C8:lI101|H107230B60 +107230B60:lI97|H107232B78 +107232B78:lI109|N +1071F3260:lH1071F5828|N +1071F5828:lI119|H1071F8088 +1071F8088:lI120|H1071FACE0 +1071FACE0:lI67|H1071FDC20 +1071FDC20:lI111|H107200CD8 +107200CD8:lI110|H107203E80 +107203E80:lI116|H1072070B0 +1072070B0:lI114|H10720A338 +10720A338:lI111|H10720D598 +10720D598:lI108|H107210788 +107210788:lI87|H1072139F8 +1072139F8:lI105|H107216DB0 +107216DB0:lI116|H10721A320 +10721A320:lI104|H10721D8F0 +10721D8F0:lI73|H107220E40 +107220E40:lI116|H1072240D8 +1072240D8:lI101|H107227020 +107227020:lI109|H107229BA8 +107229BA8:lI115|H10722C3E0 +10722C3E0:lI46|H10722E928 +10722E928:lI98|H107230BB0 +107230BB0:lI101|H107232BB8 +107232BB8:lI97|H1072348A0 +1072348A0:lI109|N +1071F3250:lH1071F5818|N +1071F5818:lI119|H1071F8078 +1071F8078:lI120|H1071FACD0 +1071FACD0:lI76|H1071FDC10 +1071FDC10:lI105|H107200CC8 +107200CC8:lI115|H107203E70 +107203E70:lI116|H1072070A0 +1072070A0:lI67|H10720A328 +10720A328:lI116|H10720D588 +10720D588:lI114|H107210778 +107210778:lI108|H1072139E8 +1072139E8:lI46|H107216DA0 +107216DA0:lI98|H10721A310 +10721A310:lI101|H10721D8E0 +10721D8E0:lI97|H107220E30 +107220E30:lI109|N +1071F3240:lH1071F5808|N +1071F5808:lI119|H1071F8068 +1071F8068:lI120|H1071FACC0 +1071FACC0:lI84|H1071FDC00 +1071FDC00:lI111|H107200CB8 +107200CB8:lI111|H107203E60 +107203E60:lI108|H107207090 +107207090:lI66|H10720A318 +10720A318:lI97|H10720D578 +10720D578:lI114|H107210768 +107210768:lI46|H1072139D8 +1072139D8:lI98|H107216D90 +107216D90:lI101|H10721A300 +10721A300:lI97|H10721D8D0 +10721D8D0:lI109|N +1071F3230:Mn1:H1071F57F0 +1071F57F0:Mn2:H1071F8048,H1071F8058 +1071F8048:lH1071FACA0|N +1071FACA0:lI119|H1071FDBE0 +1071FDBE0:lI120|H107200C98 +107200C98:lI82|H107203E40 +107203E40:lI97|H107207070 +107207070:lI100|H10720A2F8 +10720A2F8:lI105|H10720D558 +10720D558:lI111|H107210748 +107210748:lI66|H1072139B8 +1072139B8:lI117|H107216D70 +107216D70:lI116|H10721A2E0 +10721A2E0:lI116|H10721D8B0 +10721D8B0:lI111|H107220E20 +107220E20:lI110|H1072240C8 +1072240C8:lI46|H107227010 +107227010:lI98|H107229B98 +107229B98:lI101|H10722C3D0 +10722C3D0:lI97|H10722E918 +10722E918:lI109|N +1071F8058:lH1071FACB0|N +1071FACB0:lI119|H1071FDBF0 +1071FDBF0:lI120|H107200CA8 +107200CA8:lI69|H107203E50 +107203E50:lI118|H107207080 +107207080:lI101|H10720A308 +10720A308:lI110|H10720D568 +10720D568:lI116|H107210758 +107210758:lI46|H1072139C8 +1072139C8:lI98|H107216D80 +107216D80:lI101|H10721A2F0 +10721A2F0:lI97|H10721D8C0 +10721D8C0:lI109|N +1071F3220:lH1071F57E0|N +1071F57E0:lI119|H1071F8038 +1071F8038:lI120|H1071FAC90 +1071FAC90:lI71|H1071FDBD0 +1071FDBD0:lI114|H107200C88 +107200C88:lI105|H107203E30 +107203E30:lI100|H107207060 +107207060:lI67|H10720A2E8 +10720A2E8:lI101|H10720D548 +10720D548:lI108|H107210738 +107210738:lI108|H1072139A8 +1072139A8:lI67|H107216D60 +107216D60:lI104|H10721A2D0 +10721A2D0:lI111|H10721D8A0 +10721D8A0:lI105|H107220E10 +107220E10:lI99|H1072240B8 +1072240B8:lI101|H107227000 +107227000:lI69|H107229B88 +107229B88:lI100|H10722C3C0 +10722C3C0:lI105|H10722E908 +10722E908:lI116|H107230BA0 +107230BA0:lI111|H107232BA8 +107232BA8:lI114|H107234890 +107234890:lI46|H1072362D8 +1072362D8:lI98|H107237AA0 +107237AA0:lI101|H1072390C8 +1072390C8:lI97|H10723A560 +10723A560:lI109|N +1071F3210:lH1071F57D0|N +1071F57D0:lI119|H1071F8028 +1071F8028:lI120|H1071FAC80 +1071FAC80:lI87|H1071FDBC0 +1071FDBC0:lI105|H107200C78 +107200C78:lI110|H107203E20 +107203E20:lI100|H107207050 +107207050:lI111|H10720A2D8 +10720A2D8:lI119|H10720D538 +10720D538:lI68|H107210728 +107210728:lI101|H107213998 +107213998:lI115|H107216D50 +107216D50:lI116|H10721A2C0 +10721A2C0:lI114|H10721D890 +10721D890:lI111|H107220E00 +107220E00:lI121|H1072240A8 +1072240A8:lI69|H107226FF0 +107226FF0:lI118|H107229B78 +107229B78:lI101|H10722C3B0 +10722C3B0:lI110|H10722E8F8 +10722E8F8:lI116|H107230B90 +107230B90:lI46|H107232B98 +107232B98:lI98|H107234880 +107234880:lI101|H1072362C8 +1072362C8:lI97|H107237A90 +107237A90:lI109|N +1071F31F8:Mn2:H1071F57B0,H1071F57C0 +1071F57B0:lH1071F8008|N +1071F8008:lI119|H1071FAC60 +1071FAC60:lI120|H1071FDBA0 +1071FDBA0:lI83|H107200C58 +107200C58:lI105|H107203E00 +107203E00:lI122|H107207030 +107207030:lI101|H10720A2B8 +10720A2B8:lI114|H10720D518 +10720D518:lI73|H107210708 +107210708:lI116|H107213978 +107213978:lI101|H107216D30 +107216D30:lI109|H10721A2A0 +10721A2A0:lI46|H10721D870 +10721D870:lI98|H107220DE0 +107220DE0:lI101|H107224088 +107224088:lI97|H107226FE0 +107226FE0:lI109|N +1071F57C0:lH1071F8018|N +1071F8018:lI119|H1071FAC70 +1071FAC70:lI120|H1071FDBB0 +1071FDBB0:lI75|H107200C68 +107200C68:lI101|H107203E10 +107203E10:lI121|H107207040 +107207040:lI69|H10720A2C8 +10720A2C8:lI118|H10720D528 +10720D528:lI101|H107210718 +107210718:lI110|H107213988 +107213988:lI116|H107216D40 +107216D40:lI46|H10721A2B0 +10721A2B0:lI98|H10721D880 +10721D880:lI101|H107220DF0 +107220DF0:lI97|H107224098 +107224098:lI109|N +1071F31E0:Mn2:H1071F5790,H1071F57A0 +1071F5790:lH1071F7FE8|N +1071F7FE8:lI119|H1071FAC40 +1071FAC40:lI120|H1071FDB80 +1071FDB80:lI71|H107200C38 +107200C38:lI114|H107203DE0 +107203DE0:lI105|H107207010 +107207010:lI100|H10720A298 +10720A298:lI67|H10720D4F8 +10720D4F8:lI101|H1072106E8 +1072106E8:lI108|H107213958 +107213958:lI108|H107216D10 +107216D10:lI70|H10721A280 +10721A280:lI108|H10721D850 +10721D850:lI111|H107220DC0 +107220DC0:lI97|H107224068 +107224068:lI116|H107226FC0 +107226FC0:lI69|H107229B58 +107229B58:lI100|H10722C390 +10722C390:lI105|H10722E8D8 +10722E8D8:lI116|H107230B70 +107230B70:lI111|H107232B88 +107232B88:lI114|H107234870 +107234870:lI46|H1072362B8 +1072362B8:lI98|H107237A80 +107237A80:lI101|H1072390B8 +1072390B8:lI97|H10723A550 +10723A550:lI109|N +1071F57A0:lH1071F7FF8|N +1071F7FF8:lI119|H1071FAC50 +1071FAC50:lI120|H1071FDB90 +1071FDB90:lI65|H107200C48 +107200C48:lI99|H107203DF0 +107203DF0:lI116|H107207020 +107207020:lI105|H10720A2A8 +10720A2A8:lI118|H10720D508 +10720D508:lI97|H1072106F8 +1072106F8:lI116|H107213968 +107213968:lI101|H107216D20 +107216D20:lI69|H10721A290 +10721A290:lI118|H10721D860 +10721D860:lI101|H107220DD0 +107220DD0:lI110|H107224078 +107224078:lI116|H107226FD0 +107226FD0:lI46|H107229B68 +107229B68:lI98|H10722C3A0 +10722C3A0:lI101|H10722E8E8 +10722E8E8:lI97|H107230B80 +107230B80:lI109|N +1071F31D0:lH1071F5780|N +1071F5780:lI119|H1071F7FD8 +1071F7FD8:lI120|H1071FAC30 +1071FAC30:lI68|H1071FDB70 +1071FDB70:lI97|H107200C28 +107200C28:lI116|H107203DD0 +107203DD0:lI101|H107207000 +107207000:lI69|H10720A288 +10720A288:lI118|H10720D4E8 +10720D4E8:lI101|H1072106D8 +1072106D8:lI110|H107213948 +107213948:lI116|H107216D00 +107216D00:lI46|H10721A270 +10721A270:lI98|H10721D840 +10721D840:lI101|H107220DB0 +107220DB0:lI97|H107224058 +107224058:lI109|N +1071F1328:Mn8:H1071F3118,H1071F3130,H1071F3150,H1071F3168,H1071F3178,H1071F3188,H1071F3198,H1071F31A8 +1071F3118:Mn2:H1071F56A0,H1071F56B0 +1071F56A0:lH1071F7EF8|N +1071F7EF8:lI119|H1071FAB50 +1071FAB50:lI120|H1071FDA90 +1071FDA90:lI83|H107200B48 +107200B48:lI112|H107203CF0 +107203CF0:lI105|H107206F20 +107206F20:lI110|H10720A1A8 +10720A1A8:lI66|H10720D408 +10720D408:lI117|H1072105F8 +1072105F8:lI116|H107213878 +107213878:lI116|H107216C30 +107216C30:lI111|H10721A1B0 +10721A1B0:lI110|H10721D780 +10721D780:lI46|H107220CF0 +107220CF0:lI98|H107223FA8 +107223FA8:lI101|H107226F10 +107226F10:lI97|H107229AA8 +107229AA8:lI109|N +1071F56B0:lH1071F7F08|N +1071F7F08:lI119|H1071FAB60 +1071FAB60:lI120|H1071FDAA0 +1071FDAA0:lI67|H107200B58 +107200B58:lI111|H107203D00 +107203D00:lI110|H107206F30 +107206F30:lI116|H10720A1B8 +10720A1B8:lI114|H10720D418 +10720D418:lI111|H107210608 +107210608:lI108|H107213888 +107213888:lI46|H107216C40 +107216C40:lI98|H10721A1C0 +10721A1C0:lI101|H10721D790 +10721D790:lI97|H107220D00 +107220D00:lI109|N +1071F31A8:Mn2:H1071F5750,H1071F5760 +1071F5750:lH1071F7FA8|N +1071F7FA8:lI119|H1071FAC00 +1071FAC00:lI120|H1071FDB40 +1071FDB40:lI66|H107200BF8 +107200BF8:lI105|H107203DA0 +107203DA0:lI116|H107206FD0 +107206FD0:lI109|H10720A258 +10720A258:lI97|H10720D4B8 +10720D4B8:lI112|H1072106A8 +1072106A8:lI66|H107213918 +107213918:lI117|H107216CD0 +107216CD0:lI116|H10721A240 +10721A240:lI116|H10721D810 +10721D810:lI111|H107220D80 +107220D80:lI110|H107224028 +107224028:lI46|H107226F90 +107226F90:lI98|H107229B28 +107229B28:lI101|H10722C360 +10722C360:lI97|H10722E8A8 +10722E8A8:lI109|N +1071F5760:lH1071F7FB8|N +1071F7FB8:lI119|H1071FAC10 +1071FAC10:lI120|H1071FDB50 +1071FDB50:lI66|H107200C08 +107200C08:lI111|H107203DB0 +107203DB0:lI111|H107206FE0 +107206FE0:lI107|H10720A268 +10720A268:lI67|H10720D4C8 +10720D4C8:lI116|H1072106B8 +1072106B8:lI114|H107213928 +107213928:lI108|H107216CE0 +107216CE0:lI66|H10721A250 +10721A250:lI97|H10721D820 +10721D820:lI115|H107220D90 +107220D90:lI101|H107224038 +107224038:lI46|H107226FA0 +107226FA0:lI98|H107229B38 +107229B38:lI101|H10722C370 +10722C370:lI97|H10722E8B8 +10722E8B8:lI109|N +1071F3198:lH1071F5740|N +1071F5740:lI119|H1071F7F98 +1071F7F98:lI120|H1071FABF0 +1071FABF0:lI73|H1071FDB30 +1071FDB30:lI99|H107200BE8 +107200BE8:lI111|H107203D90 +107203D90:lI110|H107206FC0 +107206FC0:lI105|H10720A248 +10720A248:lI122|H10720D4A8 +10720D4A8:lI101|H107210698 +107210698:lI69|H107213908 +107213908:lI118|H107216CC0 +107216CC0:lI101|H10721A230 +10721A230:lI110|H10721D800 +10721D800:lI116|H107220D70 +107220D70:lI46|H107224018 +107224018:lI98|H107226F80 +107226F80:lI101|H107229B18 +107229B18:lI97|H10722C350 +10722C350:lI109|N +1071F3188:lH1071F5730|N +1071F5730:lI119|H1071F7F88 +1071F7F88:lI120|H1071FABE0 +1071FABE0:lI77|H1071FDB20 +1071FDB20:lI111|H107200BD8 +107200BD8:lI117|H107203D80 +107203D80:lI115|H107206FB0 +107206FB0:lI101|H10720A238 +10720A238:lI67|H10720D498 +10720D498:lI97|H107210688 +107210688:lI112|H1072138F8 +1072138F8:lI116|H107216CB0 +107216CB0:lI117|H10721A220 +10721A220:lI114|H10721D7F0 +10721D7F0:lI101|H107220D60 +107220D60:lI76|H107224008 +107224008:lI111|H107226F70 +107226F70:lI115|H107229B08 +107229B08:lI116|H10722C340 +10722C340:lI69|H10722E898 +10722E898:lI118|H107230B50 +107230B50:lI101|H107232B68 +107232B68:lI110|H107234860 +107234860:lI116|H1072362A8 +1072362A8:lI46|H107237A70 +107237A70:lI98|H1072390A8 +1072390A8:lI101|H10723A540 +10723A540:lI97|H10723B830 +10723B830:lI109|N +1071F3178:lH1071F5720|N +1071F5720:lI119|H1071F7F78 +1071F7F78:lI120|H1071FABD0 +1071FABD0:lI73|H1071FDB10 +1071FDB10:lI109|H107200BC8 +107200BC8:lI97|H107203D70 +107203D70:lI103|H107206FA0 +107206FA0:lI101|H10720A228 +10720A228:lI46|H10720D488 +10720D488:lI98|H107210678 +107210678:lI101|H1072138E8 +1072138E8:lI97|H107216CA0 +107216CA0:lI109|N +1071F3168:lH1071F5710|N +1071F5710:lI119|H1071F7F68 +1071F7F68:lI120|H1071FABC0 +1071FABC0:lI80|H1071FDB00 +1071FDB00:lI97|H107200BB8 +107200BB8:lI103|H107203D60 +107203D60:lI101|H107206F90 +107206F90:lI83|H10720A218 +10720A218:lI101|H10720D478 +10720D478:lI116|H107210668 +107210668:lI117|H1072138D8 +1072138D8:lI112|H107216C90 +107216C90:lI68|H10721A210 +10721A210:lI105|H10721D7E0 +10721D7E0:lI97|H107220D50 +107220D50:lI108|H107223FF8 +107223FF8:lI111|H107226F60 +107226F60:lI103|H107229AF8 +107229AF8:lI46|H10722C330 +10722C330:lI98|H10722E888 +10722E888:lI101|H107230B40 +107230B40:lI97|H107232B58 +107232B58:lI109|N +1071F3150:Mn2:H1071F56F0,H1071F5700 +1071F56F0:lH1071F7F48|N +1071F7F48:lI119|H1071FABA0 +1071FABA0:lI120|H1071FDAE0 +1071FDAE0:lI68|H107200B98 +107200B98:lI97|H107203D40 +107203D40:lI116|H107206F70 +107206F70:lI97|H10720A1F8 +10720A1F8:lI79|H10720D458 +10720D458:lI98|H107210648 +107210648:lI106|H1072138B8 +1072138B8:lI101|H107216C70 +107216C70:lI99|H10721A1F0 +10721A1F0:lI116|H10721D7C0 +10721D7C0:lI46|H107220D30 +107220D30:lI98|H107223FD8 +107223FD8:lI101|H107226F40 +107226F40:lI97|H107229AD8 +107229AD8:lI109|N +1071F5700:lH1071F7F58|N +1071F7F58:lI119|H1071FABB0 +1071FABB0:lI120|H1071FDAF0 +1071FDAF0:lI71|H107200BA8 +107200BA8:lI114|H107203D50 +107203D50:lI105|H107206F80 +107206F80:lI100|H10720A208 +10720A208:lI67|H10720D468 +10720D468:lI101|H107210658 +107210658:lI108|H1072138C8 +1072138C8:lI108|H107216C80 +107216C80:lI82|H10721A200 +10721A200:lI101|H10721D7D0 +10721D7D0:lI110|H107220D40 +107220D40:lI100|H107223FE8 +107223FE8:lI101|H107226F50 +107226F50:lI114|H107229AE8 +107229AE8:lI101|H10722C320 +10722C320:lI114|H10722E878 +10722E878:lI46|H107230B30 +107230B30:lI98|H107232B48 +107232B48:lI101|H107234850 +107234850:lI97|H107236298 +107236298:lI109|N +1071F3130:Mn3:H1071F56C0,H1071F56D0,H1071F56E0 +1071F56C0:lH1071F7F18|N +1071F7F18:lI119|H1071FAB70 +1071FAB70:lI120|H1071FDAB0 +1071FDAB0:lI67|H107200B68 +107200B68:lI111|H107203D10 +107203D10:lI110|H107206F40 +107206F40:lI116|H10720A1C8 +10720A1C8:lI101|H10720D428 +10720D428:lI120|H107210618 +107210618:lI116|H107213898 +107213898:lI77|H107216C50 +107216C50:lI101|H10721A1D0 +10721A1D0:lI110|H10721D7A0 +10721D7A0:lI117|H107220D10 +107220D10:lI69|H107223FB8 +107223FB8:lI118|H107226F20 +107226F20:lI101|H107229AB8 +107229AB8:lI110|H10722C300 +10722C300:lI116|H10722E858 +10722E858:lI46|H107230B10 +107230B10:lI98|H107232B28 +107232B28:lI101|H107234830 +107234830:lI97|H107236278 +107236278:lI109|N +1071F56E0:lH1071F7F38|N +1071F7F38:lI119|H1071FAB90 +1071FAB90:lI120|H1071FDAD0 +1071FDAD0:lI68|H107200B88 +107200B88:lI67|H107203D30 +107203D30:lI46|H107206F60 +107206F60:lI98|H10720A1E8 +10720A1E8:lI101|H10720D448 +10720D448:lI97|H107210638 +107210638:lI109|N +1071F56D0:lH1071F7F28|N +1071F7F28:lI119|H1071FAB80 +1071FAB80:lI120|H1071FDAC0 +1071FDAC0:lI71|H107200B78 +107200B78:lI114|H107203D20 +107203D20:lI97|H107206F50 +107206F50:lI112|H10720A1D8 +10720A1D8:lI104|H10720D438 +10720D438:lI105|H107210628 +107210628:lI99|H1072138A8 +1072138A8:lI115|H107216C60 +107216C60:lI71|H10721A1E0 +10721A1E0:lI114|H10721D7B0 +10721D7B0:lI97|H107220D20 +107220D20:lI100|H107223FC8 +107223FC8:lI105|H107226F30 +107226F30:lI101|H107229AC8 +107229AC8:lI110|H10722C310 +10722C310:lI116|H10722E868 +10722E868:lI83|H107230B20 +107230B20:lI116|H107232B38 +107232B38:lI111|H107234840 +107234840:lI112|H107236288 +107236288:lI115|H107237A60 +107237A60:lI46|H107239098 +107239098:lI98|H10723A530 +10723A530:lI101|H10723B820 +10723B820:lI97|H10723C880 +10723C880:lI109|N +1071F12E8:Mn7:H1071F3088,H1071F30A0,H1071F30B0,H1071F30C0,H1071F30D8,H1071F30E8,H1071F3100 +1071F3088:Mn2:H1071F55F0,H1071F5600 +1071F55F0:lH1071F7E48|N +1071F7E48:lI119|H1071FAAA0 +1071FAAA0:lI120|H1071FD9E0 +1071FD9E0:lI80|H107200A98 +107200A98:lI111|H107203C40 +107203C40:lI112|H107206E70 +107206E70:lI117|H10720A0F8 +10720A0F8:lI112|H10720D358 +10720D358:lI87|H107210548 +107210548:lI105|H1072137C8 +1072137C8:lI110|H107216B80 +107216B80:lI100|H10721A100 +10721A100:lI111|H10721D6E0 +10721D6E0:lI119|H107220C50 +107220C50:lI46|H107223F18 +107223F18:lI98|H107226EA0 +107226EA0:lI101|H107229A38 +107229A38:lI97|H10722C2A0 +10722C2A0:lI109|N +1071F5600:lH1071F7E58|N +1071F7E58:lI119|H1071FAAB0 +1071FAAB0:lI120|H1071FD9F0 +1071FD9F0:lI67|H107200AA8 +107200AA8:lI104|H107203C50 +107203C50:lI111|H107206E80 +107206E80:lI105|H10720A108 +10720A108:lI99|H10720D368 +10720D368:lI101|H107210558 +107210558:lI98|H1072137D8 +1072137D8:lI111|H107216B90 +107216B90:lI111|H10721A110 +10721A110:lI107|H10721D6F0 +10721D6F0:lI46|H107220C60 +107220C60:lI98|H107223F28 +107223F28:lI101|H107226EB0 +107226EB0:lI97|H107229A48 +107229A48:lI109|N +1071F3100:Mn2:H1071F5680,H1071F5690 +1071F5680:lH1071F7ED8|N +1071F7ED8:lI119|H1071FAB30 +1071FAB30:lI120|H1071FDA70 +1071FDA70:lI66|H107200B28 +107200B28:lI117|H107203CD0 +107203CD0:lI102|H107206F00 +107206F00:lI102|H10720A188 +10720A188:lI101|H10720D3E8 +10720D3E8:lI114|H1072105D8 +1072105D8:lI101|H107213858 +107213858:lI100|H107216C10 +107216C10:lI80|H10721A190 +10721A190:lI97|H10721D760 +10721D760:lI105|H107220CD0 +107220CD0:lI110|H107223F88 +107223F88:lI116|H107226EF0 +107226EF0:lI68|H107229A88 +107229A88:lI67|H10722C2E0 +10722C2E0:lI46|H10722E838 +10722E838:lI98|H107230AF0 +107230AF0:lI101|H107232B18 +107232B18:lI97|H107234820 +107234820:lI109|N +1071F5690:lH1071F7EE8|N +1071F7EE8:lI119|H1071FAB40 +1071FAB40:lI120|H1071FDA80 +1071FDA80:lI72|H107200B38 +107200B38:lI116|H107203CE0 +107203CE0:lI109|H107206F10 +107206F10:lI108|H10720A198 +10720A198:lI76|H10720D3F8 +10720D3F8:lI105|H1072105E8 +1072105E8:lI110|H107213868 +107213868:lI107|H107216C20 +107216C20:lI69|H10721A1A0 +10721A1A0:lI118|H10721D770 +10721D770:lI101|H107220CE0 +107220CE0:lI110|H107223F98 +107223F98:lI116|H107226F00 +107226F00:lI46|H107229A98 +107229A98:lI98|H10722C2F0 +10722C2F0:lI101|H10722E848 +10722E848:lI97|H107230B00 +107230B00:lI109|N +1071F30E8:Mn2:H1071F5660,H1071F5670 +1071F5660:lH1071F7EB8|N +1071F7EB8:lI119|H1071FAB10 +1071FAB10:lI120|H1071FDA50 +1071FDA50:lI67|H107200B08 +107200B08:lI104|H107203CB0 +107203CB0:lI101|H107206EE0 +107206EE0:lI99|H10720A168 +10720A168:lI107|H10720D3C8 +10720D3C8:lI66|H1072105B8 +1072105B8:lI111|H107213838 +107213838:lI120|H107216BF0 +107216BF0:lI46|H10721A170 +10721A170:lI98|H10721D750 +10721D750:lI101|H107220CC0 +107220CC0:lI97|H107223F78 +107223F78:lI109|N +1071F5670:lH1071F7EC8|N +1071F7EC8:lI119|H1071FAB20 +1071FAB20:lI120|H1071FDA60 +1071FDA60:lI95|H107200B18 +107200B18:lI109|H107203CC0 +107203CC0:lI105|H107206EF0 +107206EF0:lI115|H10720A178 +10720A178:lI99|H10720D3D8 +10720D3D8:lI46|H1072105C8 +1072105C8:lI98|H107213848 +107213848:lI101|H107216C00 +107216C00:lI97|H10721A180 +10721A180:lI109|N +1071F30D8:lH1071F5650|N +1071F5650:lI119|H1071F7EA8 +1071F7EA8:lI120|H1071FAB00 +1071FAB00:lI84|H1071FDA40 +1071FDA40:lI101|H107200AF8 +107200AF8:lI120|H107203CA0 +107203CA0:lI116|H107206ED0 +107206ED0:lI65|H10720A158 +10720A158:lI116|H10720D3B8 +10720D3B8:lI116|H1072105A8 +1072105A8:lI114|H107213828 +107213828:lI46|H107216BE0 +107216BE0:lI98|H10721A160 +10721A160:lI101|H10721D740 +10721D740:lI97|H107220CB0 +107220CB0:lI109|N +1071F30C0:Mn2:H1071F5630,H1071F5640 +1071F5630:lH1071F7E88|N +1071F7E88:lI119|H1071FAAE0 +1071FAAE0:lI120|H1071FDA20 +1071FDA20:lI84|H107200AD8 +107200AD8:lI111|H107203C80 +107203C80:lI111|H107206EB0 +107206EB0:lI108|H10720A138 +10720A138:lI98|H10720D398 +10720D398:lI111|H107210588 +107210588:lI111|H107213808 +107213808:lI107|H107216BC0 +107216BC0:lI46|H10721A140 +10721A140:lI98|H10721D720 +10721D720:lI101|H107220C90 +107220C90:lI97|H107223F58 +107223F58:lI109|N +1071F5640:lH1071F7E98|N +1071F7E98:lI119|H1071FAAF0 +1071FAAF0:lI120|H1071FDA30 +1071FDA30:lI66|H107200AE8 +107200AE8:lI105|H107203C90 +107203C90:lI116|H107206EC0 +107206EC0:lI109|H10720A148 +10720A148:lI97|H10720D3A8 +10720D3A8:lI112|H107210598 +107210598:lI68|H107213818 +107213818:lI97|H107216BD0 +107216BD0:lI116|H10721A150 +10721A150:lI97|H10721D730 +10721D730:lI79|H107220CA0 +107220CA0:lI98|H107223F68 +107223F68:lI106|H107226EE0 +107226EE0:lI101|H107229A78 +107229A78:lI99|H10722C2D0 +10722C2D0:lI116|H10722E828 +10722E828:lI46|H107230AE0 +107230AE0:lI98|H107232B08 +107232B08:lI101|H107234810 +107234810:lI97|H107236268 +107236268:lI109|N +1071F30B0:lH1071F5620|N +1071F5620:lI119|H1071F7E78 +1071F7E78:lI120|H1071FAAD0 +1071FAAD0:lI70|H1071FDA10 +1071FDA10:lI105|H107200AC8 +107200AC8:lI108|H107203C70 +107203C70:lI101|H107206EA0 +107206EA0:lI68|H10720A128 +10720A128:lI97|H10720D388 +10720D388:lI116|H107210578 +107210578:lI97|H1072137F8 +1072137F8:lI79|H107216BB0 +107216BB0:lI98|H10721A130 +10721A130:lI106|H10721D710 +10721D710:lI101|H107220C80 +107220C80:lI99|H107223F48 +107223F48:lI116|H107226ED0 +107226ED0:lI46|H107229A68 +107229A68:lI98|H10722C2C0 +10722C2C0:lI101|H10722E818 +10722E818:lI97|H107230AD0 +107230AD0:lI109|N +1071F30A0:lH1071F5610|N +1071F5610:lI119|H1071F7E68 +1071F7E68:lI120|H1071FAAC0 +1071FAAC0:lI80|H1071FDA00 +1071FDA00:lI114|H107200AB8 +107200AB8:lI105|H107203C60 +107203C60:lI110|H107206E90 +107206E90:lI116|H10720A118 +10720A118:lI80|H10720D378 +10720D378:lI114|H107210568 +107210568:lI101|H1072137E8 +1072137E8:lI118|H107216BA0 +107216BA0:lI105|H10721A120 +10721A120:lI101|H10721D700 +10721D700:lI119|H107220C70 +107220C70:lI46|H107223F38 +107223F38:lI98|H107226EC0 +107226EC0:lI101|H107229A58 +107229A58:lI97|H10722C2B0 +10722C2B0:lI109|N +1071F12A0:Mn8:H1071F2FF0,H1071F3008,H1071F3018,H1071F3030,H1071F3040,H1071F3050,H1071F3060,H1071F3070 +1071F2FF0:Mn2:H1071F5530,H1071F5540 +1071F5530:lH1071F7D78|N +1071F7D78:lI119|H1071FA9D0 +1071FA9D0:lI120|H1071FD910 +1071FD910:lI83|H1072009C8 +1072009C8:lI97|H107203B70 +107203B70:lI115|H107206DA0 +107206DA0:lI104|H10720A038 +10720A038:lI69|H10720D298 +10720D298:lI118|H107210488 +107210488:lI101|H107213708 +107213708:lI110|H107216AC0 +107216AC0:lI116|H10721A040 +10721A040:lI46|H10721D620 +10721D620:lI98|H107220BB0 +107220BB0:lI101|H107223E78 +107223E78:lI97|H107226E10 +107226E10:lI109|N +1071F5540:lH1071F7D88|N +1071F7D88:lI119|H1071FA9E0 +1071FA9E0:lI120|H1071FD920 +1071FD920:lI71|H1072009D8 +1072009D8:lI114|H107203B80 +107203B80:lI97|H107206DB0 +107206DB0:lI112|H10720A048 +10720A048:lI104|H10720D2A8 +10720D2A8:lI105|H107210498 +107210498:lI99|H107213718 +107213718:lI115|H107216AD0 +107216AD0:lI82|H10721A050 +10721A050:lI101|H10721D630 +10721D630:lI110|H107220BC0 +107220BC0:lI100|H107223E88 +107223E88:lI101|H107226E20 +107226E20:lI114|H1072299B8 +1072299B8:lI101|H10722C230 +10722C230:lI114|H10722E7A8 +10722E7A8:lI46|H107230A60 +107230A60:lI98|H107232AA8 +107232AA8:lI101|H1072347D0 +1072347D0:lI97|H107236248 +107236248:lI109|N +1071F3070:Mn2:H1071F55D0,H1071F55E0 +1071F55D0:lH1071F7E28|N +1071F7E28:lI119|H1071FAA80 +1071FAA80:lI120|H1071FD9C0 +1071FD9C0:lI69|H107200A78 +107200A78:lI114|H107203C20 +107203C20:lI97|H107206E50 +107206E50:lI115|H10720A0D8 +10720A0D8:lI101|H10720D338 +10720D338:lI69|H107210528 +107210528:lI118|H1072137A8 +1072137A8:lI101|H107216B60 +107216B60:lI110|H10721A0E0 +10721A0E0:lI116|H10721D6C0 +10721D6C0:lI46|H107220C40 +107220C40:lI98|H107223F08 +107223F08:lI101|H107226E90 +107226E90:lI97|H107229A28 +107229A28:lI109|N +1071F55E0:lH1071F7E38|N +1071F7E38:lI119|H1071FAA90 +1071FAA90:lI120|H1071FD9D0 +1071FD9D0:lI68|H107200A88 +107200A88:lI105|H107203C30 +107203C30:lI97|H107206E60 +107206E60:lI108|H10720A0E8 +10720A0E8:lI111|H10720D348 +10720D348:lI103|H107210538 +107210538:lI46|H1072137B8 +1072137B8:lI98|H107216B70 +107216B70:lI101|H10721A0F0 +10721A0F0:lI97|H10721D6D0 +10721D6D0:lI109|N +1071F3060:lH1071F55C0|N +1071F55C0:lI119|H1071F7E18 +1071F7E18:lI120|H1071FAA70 +1071FAA70:lI68|H1071FD9B0 +1071FD9B0:lI114|H107200A68 +107200A68:lI111|H107203C10 +107203C10:lI112|H107206E40 +107206E40:lI70|H10720A0C8 +10720A0C8:lI105|H10720D328 +10720D328:lI108|H107210518 +107210518:lI101|H107213798 +107213798:lI115|H107216B50 +107216B50:lI69|H10721A0D0 +10721A0D0:lI118|H10721D6B0 +10721D6B0:lI101|H107220C30 +107220C30:lI110|H107223EF8 +107223EF8:lI116|H107226E80 +107226E80:lI46|H107229A18 +107229A18:lI98|H10722C290 +10722C290:lI101|H10722E808 +10722E808:lI97|H107230AC0 +107230AC0:lI109|N +1071F3050:lH1071F55B0|N +1071F55B0:lI119|H1071F7E08 +1071F7E08:lI120|H1071FAA60 +1071FAA60:lI46|H1071FD9A0 +1071FD9A0:lI98|H107200A58 +107200A58:lI101|H107203C00 +107203C00:lI97|H107206E30 +107206E30:lI109|N +1071F3040:lH1071F55A0|N +1071F55A0:lI119|H1071F7DF8 +1071F7DF8:lI120|H1071FAA50 +1071FAA50:lI73|H1071FD990 +1071FD990:lI110|H107200A48 +107200A48:lI105|H107203BF0 +107203BF0:lI116|H107206E20 +107206E20:lI68|H10720A0B8 +10720A0B8:lI105|H10720D318 +10720D318:lI97|H107210508 +107210508:lI108|H107213788 +107213788:lI111|H107216B40 +107216B40:lI103|H10721A0C0 +10721A0C0:lI69|H10721D6A0 +10721D6A0:lI118|H107220C20 +107220C20:lI101|H107223EE8 +107223EE8:lI110|H107226E70 +107226E70:lI116|H107229A08 +107229A08:lI46|H10722C280 +10722C280:lI98|H10722E7F8 +10722E7F8:lI101|H107230AB0 +107230AB0:lI97|H107232AF8 +107232AF8:lI109|N +1071F3030:lH1071F5590|N +1071F5590:lI119|H1071F7DE8 +1071F7DE8:lI120|H1071FAA40 +1071FAA40:lI73|H1071FD980 +1071FD980:lI109|H107200A38 +107200A38:lI97|H107203BE0 +107203BE0:lI103|H107206E10 +107206E10:lI101|H10720A0A8 +10720A0A8:lI76|H10720D308 +10720D308:lI105|H1072104F8 +1072104F8:lI115|H107213778 +107213778:lI116|H107216B30 +107216B30:lI46|H10721A0B0 +10721A0B0:lI98|H10721D690 +10721D690:lI101|H107220C10 +107220C10:lI97|H107223ED8 +107223ED8:lI109|N +1071F3018:Mn2:H1071F5560,H1071F5578 +1071F5560:Mn2:H1071F7DA8,H1071F7DB8 +1071F7DA8:lH1071FAA00|N +1071FAA00:lI119|H1071FD940 +1071FD940:lI120|H1072009F8 +1072009F8:lI68|H107203BA0 +107203BA0:lI97|H107206DD0 +107206DD0:lI116|H10720A068 +10720A068:lI101|H10720D2C8 +10720D2C8:lI80|H1072104B8 +1072104B8:lI105|H107213738 +107213738:lI99|H107216AF0 +107216AF0:lI107|H10721A070 +10721A070:lI101|H10721D650 +10721D650:lI114|H107220BD0 +107220BD0:lI67|H107223E98 +107223E98:lI116|H107226E30 +107226E30:lI114|H1072299C8 +1072299C8:lI108|H10722C240 +10722C240:lI46|H10722E7B8 +10722E7B8:lI98|H107230A70 +107230A70:lI101|H107232AB8 +107232AB8:lI97|H1072347E0 +1072347E0:lI109|N +1071F7DB8:lH1071FAA10|N +1071FAA10:lI119|H1071FD950 +1071FD950:lI120|H107200A08 +107200A08:lI80|H107203BB0 +107203BB0:lI114|H107206DE0 +107206DE0:lI101|H10720A078 +10720A078:lI118|H10720D2D8 +10720D2D8:lI105|H1072104C8 +1072104C8:lI101|H107213748 +107213748:lI119|H107216B00 +107216B00:lI67|H10721A080 +10721A080:lI97|H10721D660 +10721D660:lI110|H107220BE0 +107220BE0:lI118|H107223EA8 +107223EA8:lI97|H107226E40 +107226E40:lI115|H1072299D8 +1072299D8:lI46|H10722C250 +10722C250:lI98|H10722E7C8 +10722E7C8:lI101|H107230A80 +107230A80:lI97|H107232AC8 +107232AC8:lI109|N +1071F5578:Mn2:H1071F7DC8,H1071F7DD8 +1071F7DC8:lH1071FAA20|N +1071FAA20:lI119|H1071FD960 +1071FD960:lI120|H107200A18 +107200A18:lI71|H107203BC0 +107203BC0:lI114|H107206DF0 +107206DF0:lI105|H10720A088 +10720A088:lI100|H10720D2E8 +10720D2E8:lI67|H1072104D8 +1072104D8:lI101|H107213758 +107213758:lI108|H107216B10 +107216B10:lI108|H10721A090 +10721A090:lI84|H10721D670 +10721D670:lI101|H107220BF0 +107220BF0:lI120|H107223EB8 +107223EB8:lI116|H107226E50 +107226E50:lI69|H1072299E8 +1072299E8:lI100|H10722C260 +10722C260:lI105|H10722E7D8 +10722E7D8:lI116|H107230A90 +107230A90:lI111|H107232AD8 +107232AD8:lI114|H1072347F0 +1072347F0:lI46|H107236258 +107236258:lI98|H107237A50 +107237A50:lI101|H107239088 +107239088:lI97|H10723A520 +10723A520:lI109|N +1071F7DD8:lH1071FAA30|N +1071FAA30:lI119|H1071FD970 +1071FD970:lI120|H107200A28 +107200A28:lI83|H107203BD0 +107203BD0:lI112|H107206E00 +107206E00:lI108|H10720A098 +10720A098:lI105|H10720D2F8 +10720D2F8:lI116|H1072104E8 +1072104E8:lI116|H107213768 +107213768:lI101|H107216B20 +107216B20:lI114|H10721A0A0 +10721A0A0:lI87|H10721D680 +10721D680:lI105|H107220C00 +107220C00:lI110|H107223EC8 +107223EC8:lI100|H107226E60 +107226E60:lI111|H1072299F8 +1072299F8:lI119|H10722C270 +10722C270:lI46|H10722E7E8 +10722E7E8:lI98|H107230AA0 +107230AA0:lI101|H107232AE8 +107232AE8:lI97|H107234800 +107234800:lI109|N +1071F3008:lH1071F5550|N +1071F5550:lI119|H1071F7D98 +1071F7D98:lI120|H1071FA9F0 +1071FA9F0:lI79|H1071FD930 +1071FD930:lI118|H1072009E8 +1072009E8:lI101|H107203B90 +107203B90:lI114|H107206DC0 +107206DC0:lI108|H10720A058 +10720A058:lI97|H10720D2B8 +10720D2B8:lI121|H1072104A8 +1072104A8:lI46|H107213728 +107213728:lI98|H107216AE0 +107216AE0:lI101|H10721A060 +10721A060:lI97|H10721D640 +10721D640:lI109|N +1071F1238:MnC:H1071F2F00,H1071F2F10,H1071F2F20,H1071F2F30,H1071F2F50,H1071F2F60,H1071F2F78,H1071F2F90,H1071F2FA8,H1071F2FB8,H1071F2FD0,H1071F2FE0 +1071F2F00:lH1071F5408|N +1071F5408:lI119|H1071F7C48 +1071F7C48:lI120|H1071FA8A0 +1071FA8A0:lI71|H1071FD7E0 +1071FD7E0:lI114|H107200898 +107200898:lI105|H107203A40 +107203A40:lI100|H107206C70 +107206C70:lI67|H107209F08 +107209F08:lI101|H10720D168 +10720D168:lI108|H107210358 +107210358:lI108|H1072135D8 +1072135D8:lI65|H107216990 +107216990:lI116|H107219F10 +107219F10:lI116|H10721D500 +10721D500:lI114|H107220A90 +107220A90:lI46|H107223D68 +107223D68:lI98|H107226D20 +107226D20:lI101|H107229918 +107229918:lI97|H10722C1A0 +10722C1A0:lI109|N +1071F2FE0:lH1071F5520|N +1071F5520:lI119|H1071F7D68 +1071F7D68:lI120|H1071FA9C0 +1071FA9C0:lI67|H1071FD900 +1071FD900:lI97|H1072009B8 +1072009B8:lI108|H107203B60 +107203B60:lI101|H107206D90 +107206D90:lI110|H10720A028 +10720A028:lI100|H10720D288 +10720D288:lI97|H107210478 +107210478:lI114|H1072136F8 +1072136F8:lI69|H107216AB0 +107216AB0:lI118|H10721A030 +10721A030:lI101|H10721D610 +10721D610:lI110|H107220BA0 +107220BA0:lI116|H107223E68 +107223E68:lI46|H107226E00 +107226E00:lI98|H1072299A8 +1072299A8:lI101|H10722C220 +10722C220:lI97|H10722E798 +10722E798:lI109|N +1071F2FD0:lH1071F5510|N +1071F5510:lI119|H1071F7D58 +1071F7D58:lI120|H1071FA9B0 +1071FA9B0:lI83|H1071FD8F0 +1071FD8F0:lI99|H1072009A8 +1072009A8:lI114|H107203B50 +107203B50:lI111|H107206D80 +107206D80:lI108|H10720A018 +10720A018:lI108|H10720D278 +10720D278:lI66|H107210468 +107210468:lI97|H1072136E8 +1072136E8:lI114|H107216AA0 +107216AA0:lI46|H10721A020 +10721A020:lI98|H10721D600 +10721D600:lI101|H107220B90 +107220B90:lI97|H107223E58 +107223E58:lI109|N +1071F2FB8:Mn2:H1071F54F0,H1071F5500 +1071F54F0:lH1071F7D38|N +1071F7D38:lI119|H1071FA990 +1071FA990:lI120|H1071FD8D0 +1071FD8D0:lI71|H107200988 +107200988:lI114|H107203B30 +107203B30:lI97|H107206D60 +107206D60:lI112|H107209FF8 +107209FF8:lI104|H10720D258 +10720D258:lI105|H107210448 +107210448:lI99|H1072136C8 +1072136C8:lI115|H107216A80 +107216A80:lI79|H10721A000 +10721A000:lI98|H10721D5E0 +10721D5E0:lI106|H107220B70 +107220B70:lI101|H107223E38 +107223E38:lI99|H107226DE0 +107226DE0:lI116|H107229988 +107229988:lI46|H10722C200 +10722C200:lI98|H10722E778 +10722E778:lI101|H107230A50 +107230A50:lI97|H107232A98 +107232A98:lI109|N +1071F5500:lH1071F7D48|N +1071F7D48:lI119|H1071FA9A0 +1071FA9A0:lI120|H1071FD8E0 +1071FD8E0:lI84|H107200998 +107200998:lI111|H107203B40 +107203B40:lI103|H107206D70 +107206D70:lI103|H10720A008 +10720A008:lI108|H10720D268 +10720D268:lI101|H107210458 +107210458:lI66|H1072136D8 +1072136D8:lI117|H107216A90 +107216A90:lI116|H10721A010 +10721A010:lI116|H10721D5F0 +10721D5F0:lI111|H107220B80 +107220B80:lI110|H107223E48 +107223E48:lI46|H107226DF0 +107226DF0:lI98|H107229998 +107229998:lI101|H10722C210 +10722C210:lI97|H10722E788 +10722E788:lI109|N +1071F2FA8:lH1071F54E0|N +1071F54E0:lI119|H1071F7D28 +1071F7D28:lI120|H1071FA980 +1071FA980:lI76|H1071FD8C0 +1071FD8C0:lI105|H107200978 +107200978:lI115|H107203B20 +107203B20:lI116|H107206D50 +107206D50:lI86|H107209FE8 +107209FE8:lI105|H10720D248 +10720D248:lI101|H107210438 +107210438:lI119|H1072136B8 +1072136B8:lI46|H107216A70 +107216A70:lI98|H107219FF0 +107219FF0:lI101|H10721D5D0 +10721D5D0:lI97|H107220B60 +107220B60:lI109|N +1071F2F90:Mn2:H1071F54C0,H1071F54D0 +1071F54C0:lH1071F7D08|N +1071F7D08:lI119|H1071FA960 +1071FA960:lI120|H1071FD8A0 +1071FD8A0:lI88|H107200958 +107200958:lI109|H107203B00 +107203B00:lI108|H107206D30 +107206D30:lI82|H107209FC8 +107209FC8:lI101|H10720D228 +10720D228:lI115|H107210418 +107210418:lI111|H107213698 +107213698:lI117|H107216A50 +107216A50:lI114|H107219FD0 +107219FD0:lI99|H10721D5B0 +10721D5B0:lI101|H107220B40 +107220B40:lI46|H107223E18 +107223E18:lI98|H107226DD0 +107226DD0:lI101|H107229978 +107229978:lI97|H10722C1F0 +10722C1F0:lI109|N +1071F54D0:lH1071F7D18|N +1071F7D18:lI119|H1071FA970 +1071FA970:lI120|H1071FD8B0 +1071FD8B0:lI76|H107200968 +107200968:lI105|H107203B10 +107203B10:lI115|H107206D40 +107206D40:lI116|H107209FD8 +107209FD8:lI98|H10720D238 +10720D238:lI111|H107210428 +107210428:lI111|H1072136A8 +1072136A8:lI107|H107216A60 +107216A60:lI46|H107219FE0 +107219FE0:lI98|H10721D5C0 +10721D5C0:lI101|H107220B50 +107220B50:lI97|H107223E28 +107223E28:lI109|N +1071F2F78:Mn2:H1071F54A0,H1071F54B0 +1071F54A0:lH1071F7CE8|N +1071F7CE8:lI119|H1071FA940 +1071FA940:lI120|H1071FD880 +1071FD880:lI73|H107200938 +107200938:lI100|H107203AE0 +107203AE0:lI108|H107206D10 +107206D10:lI101|H107209FA8 +107209FA8:lI69|H10720D208 +10720D208:lI118|H1072103F8 +1072103F8:lI101|H107213678 +107213678:lI110|H107216A30 +107216A30:lI116|H107219FB0 +107219FB0:lI46|H10721D590 +10721D590:lI98|H107220B20 +107220B20:lI101|H107223DF8 +107223DF8:lI97|H107226DB0 +107226DB0:lI109|N +1071F54B0:lH1071F7CF8|N +1071F7CF8:lI119|H1071FA950 +1071FA950:lI120|H1071FD890 +1071FD890:lI70|H107200948 +107200948:lI111|H107203AF0 +107203AF0:lI110|H107206D20 +107206D20:lI116|H107209FB8 +107209FB8:lI80|H10720D218 +10720D218:lI105|H107210408 +107210408:lI99|H107213688 +107213688:lI107|H107216A40 +107216A40:lI101|H107219FC0 +107219FC0:lI114|H10721D5A0 +10721D5A0:lI69|H107220B30 +107220B30:lI118|H107223E08 +107223E08:lI101|H107226DC0 +107226DC0:lI110|H107229968 +107229968:lI116|H10722C1E0 +10722C1E0:lI46|H10722E768 +10722E768:lI98|H107230A40 +107230A40:lI101|H107232A88 +107232A88:lI97|H1072347C0 +1072347C0:lI109|N +1071F2F60:Mn2:H1071F5480,H1071F5490 +1071F5480:lH1071F7CC8|N +1071F7CC8:lI119|H1071FA920 +1071FA920:lI120|H1071FD860 +1071FD860:lI84|H107200918 +107200918:lI114|H107203AC0 +107203AC0:lI101|H107206CF0 +107206CF0:lI101|H107209F88 +107209F88:lI69|H10720D1E8 +10720D1E8:lI118|H1072103D8 +1072103D8:lI101|H107213658 +107213658:lI110|H107216A10 +107216A10:lI116|H107219F90 +107219F90:lI46|H10721D570 +10721D570:lI98|H107220B00 +107220B00:lI101|H107223DD8 +107223DD8:lI97|H107226D90 +107226D90:lI109|N +1071F5490:lH1071F7CD8|N +1071F7CD8:lI119|H1071FA930 +1071FA930:lI120|H1071FD870 +1071FD870:lI83|H107200928 +107200928:lI105|H107203AD0 +107203AD0:lI122|H107206D00 +107206D00:lI101|H107209F98 +107209F98:lI69|H10720D1F8 +10720D1F8:lI118|H1072103E8 +1072103E8:lI101|H107213668 +107213668:lI110|H107216A20 +107216A20:lI116|H107219FA0 +107219FA0:lI46|H10721D580 +10721D580:lI98|H107220B10 +107220B10:lI101|H107223DE8 +107223DE8:lI97|H107226DA0 +107226DA0:lI109|N +1071F2F50:lH1071F5470|N +1071F5470:lI119|H1071F7CB8 +1071F7CB8:lI120|H1071FA910 +1071FA910:lI70|H1071FD850 +1071FD850:lI105|H107200908 +107200908:lI110|H107203AB0 +107203AB0:lI100|H107206CE0 +107206CE0:lI82|H107209F78 +107209F78:lI101|H10720D1D8 +10720D1D8:lI112|H1072103C8 +1072103C8:lI108|H107213648 +107213648:lI97|H107216A00 +107216A00:lI99|H107219F80 +107219F80:lI101|H10721D560 +10721D560:lI68|H107220AF0 +107220AF0:lI105|H107223DC8 +107223DC8:lI97|H107226D80 +107226D80:lI108|H107229958 +107229958:lI111|H10722C1D0 +10722C1D0:lI103|H10722E758 +10722E758:lI46|H107230A30 +107230A30:lI98|H107232A78 +107232A78:lI101|H1072347B0 +1072347B0:lI97|H107236238 +107236238:lI109|N +1071F2F30:Mn3:H1071F5440,H1071F5450,H1071F5460 +1071F5440:lH1071F7C88|N +1071F7C88:lI119|H1071FA8E0 +1071FA8E0:lI120|H1071FD820 +1071FD820:lI80|H1072008D8 +1072008D8:lI114|H107203A80 +107203A80:lI105|H107206CB0 +107206CB0:lI110|H107209F48 +107209F48:lI116|H10720D1A8 +10720D1A8:lI68|H107210398 +107210398:lI97|H107213618 +107213618:lI116|H1072169D0 +1072169D0:lI97|H107219F50 +107219F50:lI46|H10721D530 +10721D530:lI98|H107220AC0 +107220AC0:lI101|H107223D98 +107223D98:lI97|H107226D50 +107226D50:lI109|N +1071F5460:lH1071F7CA8|N +1071F7CA8:lI119|H1071FA900 +1071FA900:lI120|H1071FD840 +1071FD840:lI84|H1072008F8 +1072008F8:lI97|H107203AA0 +107203AA0:lI115|H107206CD0 +107206CD0:lI107|H107209F68 +107209F68:lI66|H10720D1C8 +10720D1C8:lI97|H1072103B8 +1072103B8:lI114|H107213638 +107213638:lI73|H1072169F0 +1072169F0:lI99|H107219F70 +107219F70:lI111|H10721D550 +10721D550:lI110|H107220AE0 +107220AE0:lI46|H107223DB8 +107223DB8:lI98|H107226D70 +107226D70:lI101|H107229948 +107229948:lI97|H10722C1C0 +10722C1C0:lI109|N +1071F5450:lH1071F7C98|N +1071F7C98:lI119|H1071FA8F0 +1071FA8F0:lI120|H1071FD830 +1071FD830:lI70|H1072008E8 +1072008E8:lI111|H107203A90 +107203A90:lI99|H107206CC0 +107206CC0:lI117|H107209F58 +107209F58:lI115|H10720D1B8 +10720D1B8:lI69|H1072103A8 +1072103A8:lI118|H107213628 +107213628:lI101|H1072169E0 +1072169E0:lI110|H107219F60 +107219F60:lI116|H10721D540 +10721D540:lI46|H107220AD0 +107220AD0:lI98|H107223DA8 +107223DA8:lI101|H107226D60 +107226D60:lI97|H107229938 +107229938:lI109|N +1071F2F20:Mn1:H1071F5428 +1071F5428:Mn2:H1071F7C68,H1071F7C78 +1071F7C68:lH1071FA8C0|N +1071FA8C0:lI119|H1071FD800 +1071FD800:lI120|H1072008B8 +1072008B8:lI67|H107203A60 +107203A60:lI108|H107206C90 +107206C90:lI105|H107209F28 +107209F28:lI112|H10720D188 +10720D188:lI98|H107210378 +107210378:lI111|H1072135F8 +1072135F8:lI97|H1072169B0 +1072169B0:lI114|H107219F30 +107219F30:lI100|H10721D510 +10721D510:lI84|H107220AA0 +107220AA0:lI101|H107223D78 +107223D78:lI120|H107226D30 +107226D30:lI116|H107229928 +107229928:lI69|H10722C1B0 +10722C1B0:lI118|H10722E748 +10722E748:lI101|H107230A20 +107230A20:lI110|H107232A68 +107232A68:lI116|H1072347A0 +1072347A0:lI46|H107236228 +107236228:lI98|H107237A40 +107237A40:lI101|H107239078 +107239078:lI97|H10723A510 +10723A510:lI109|N +1071F7C78:lH1071FA8D0|N +1071FA8D0:lI119|H1071FD810 +1071FD810:lI120|H1072008C8 +1072008C8:lI76|H107203A70 +107203A70:lI105|H107206CA0 +107206CA0:lI115|H107209F38 +107209F38:lI116|H10720D198 +10720D198:lI73|H107210388 +107210388:lI116|H107213608 +107213608:lI101|H1072169C0 +1072169C0:lI109|H107219F40 +107219F40:lI46|H10721D520 +10721D520:lI98|H107220AB0 +107220AB0:lI101|H107223D88 +107223D88:lI97|H107226D40 +107226D40:lI109|N +1071F2F10:lH1071F5418|N +1071F5418:lI119|H1071F7C58 +1071F7C58:lI120|H1071FA8B0 +1071FA8B0:lI66|H1071FD7F0 +1071FD7F0:lI117|H1072008A8 +1072008A8:lI116|H107203A50 +107203A50:lI116|H107206C80 +107206C80:lI111|H107209F18 +107209F18:lI110|H10720D178 +10720D178:lI46|H107210368 +107210368:lI98|H1072135E8 +1072135E8:lI101|H1072169A0 +1072169A0:lI97|H107219F20 +107219F20:lI109|N +1071F11E8:Mn9:H1071F2E40,H1071F2E50,H1071F2E60,H1071F2E78,H1071F2EA0,H1071F2EB0,H1071F2EC0,H1071F2ED8,H1071F2EF0 +1071F2E40:lH1071F5318|N +1071F5318:lI119|H1071F7B58 +1071F7B58:lI120|H1071FA7B0 +1071FA7B0:lI83|H1071FD6F0 +1071FD6F0:lI121|H1072007A8 +1072007A8:lI115|H107203950 +107203950:lI67|H107206B80 +107206B80:lI111|H107209E28 +107209E28:lI108|H10720D088 +10720D088:lI111|H107210288 +107210288:lI117|H107213508 +107213508:lI114|H1072168C0 +1072168C0:lI67|H107219E40 +107219E40:lI104|H10721D430 +10721D430:lI97|H1072209D0 +1072209D0:lI110|H107223CB8 +107223CB8:lI103|H107226C80 +107226C80:lI101|H107229878 +107229878:lI100|H10722C100 +10722C100:lI69|H10722E6C8 +10722E6C8:lI118|H1072309B0 +1072309B0:lI101|H107232A18 +107232A18:lI110|H107234760 +107234760:lI116|H1072361E8 +1072361E8:lI46|H107237A10 +107237A10:lI98|H107239048 +107239048:lI101|H10723A4E0 +10723A4E0:lI97|H10723B800 +10723B800:lI109|N +1071F2EF0:lH1071F53F8|N +1071F53F8:lI119|H1071F7C38 +1071F7C38:lI120|H1071FA890 +1071FA890:lI71|H1071FD7D0 +1071FD7D0:lI114|H107200888 +107200888:lI97|H107203A30 +107203A30:lI112|H107206C60 +107206C60:lI104|H107209EF8 +107209EF8:lI105|H10720D158 +10720D158:lI99|H107210348 +107210348:lI115|H1072135C8 +1072135C8:lI70|H107216980 +107216980:lI111|H107219F00 +107219F00:lI110|H10721D4F0 +10721D4F0:lI116|H107220A80 +107220A80:lI46|H107223D58 +107223D58:lI98|H107226D10 +107226D10:lI101|H107229908 +107229908:lI97|H10722C190 +10722C190:lI109|N +1071F2ED8:Mn2:H1071F53D8,H1071F53E8 +1071F53D8:lH1071F7C18|N +1071F7C18:lI119|H1071FA870 +1071FA870:lI120|H1071FD7B0 +1071FD7B0:lI46|H107200868 +107200868:lI97|H107203A10 +107203A10:lI112|H107206C40 +107206C40:lI112|N +1071F53E8:lH1071F7C28|N +1071F7C28:lI119|H1071FA880 +1071FA880:lI120|H1071FD7C0 +1071FD7C0:lI78|H107200878 +107200878:lI111|H107203A20 +107203A20:lI116|H107206C50 +107206C50:lI105|H107209EE8 +107209EE8:lI102|H10720D148 +10720D148:lI105|H107210338 +107210338:lI99|H1072135B8 +1072135B8:lI97|H107216970 +107216970:lI116|H107219EF0 +107219EF0:lI105|H10721D4E0 +10721D4E0:lI111|H107220A70 +107220A70:lI110|H107223D48 +107223D48:lI77|H107226D00 +107226D00:lI101|H1072298F8 +1072298F8:lI115|H10722C180 +10722C180:lI115|H10722E738 +10722E738:lI97|H107230A10 +107230A10:lI103|H107232A58 +107232A58:lI101|H107234790 +107234790:lI46|H107236218 +107236218:lI98|H107237A30 +107237A30:lI101|H107239068 +107239068:lI97|H10723A500 +10723A500:lI109|N +1071F2EC0:Mn2:H1071F53B8,H1071F53C8 +1071F53B8:lH1071F7BF8|N +1071F7BF8:lI119|H1071FA850 +1071FA850:lI120|H1071FD790 +1071FD790:lI82|H107200848 +107200848:lI101|H1072039F0 +1072039F0:lI103|H107206C20 +107206C20:lI105|H107209EC8 +107209EC8:lI111|H10720D128 +10720D128:lI110|H107210318 +107210318:lI46|H107213598 +107213598:lI98|H107216950 +107216950:lI101|H107219ED0 +107219ED0:lI97|H10721D4C0 +10721D4C0:lI109|N +1071F53C8:lH1071F7C08|N +1071F7C08:lI119|H1071FA860 +1071FA860:lI120|H1071FD7A0 +1071FD7A0:lI67|H107200858 +107200858:lI111|H107203A00 +107203A00:lI108|H107206C30 +107206C30:lI111|H107209ED8 +107209ED8:lI117|H10720D138 +10720D138:lI114|H107210328 +107210328:lI68|H1072135A8 +1072135A8:lI105|H107216960 +107216960:lI97|H107219EE0 +107219EE0:lI108|H10721D4D0 +10721D4D0:lI111|H107220A60 +107220A60:lI103|H107223D38 +107223D38:lI46|H107226CF0 +107226CF0:lI98|H1072298E8 +1072298E8:lI101|H10722C170 +10722C170:lI97|H10722E728 +10722E728:lI109|N +1071F2EB0:lH1071F53A8|N +1071F53A8:lI119|H1071F7BE8 +1071F7BE8:lI120|H1071FA840 +1071FA840:lI68|H1071FD780 +1071FD780:lI67|H107200838 +107200838:lI79|H1072039E0 +1072039E0:lI118|H107206C10 +107206C10:lI101|H107209EB8 +107209EB8:lI114|H10720D118 +10720D118:lI108|H107210308 +107210308:lI97|H107213588 +107213588:lI121|H107216940 +107216940:lI46|H107219EC0 +107219EC0:lI98|H10721D4B0 +10721D4B0:lI101|H107220A50 +107220A50:lI97|H107223D28 +107223D28:lI109|N +1071F2EA0:lH1071F5398|N +1071F5398:lI119|H1071F7BD8 +1071F7BD8:lI120|H1071FA830 +1071FA830:lI77|H1071FD770 +1071FD770:lI101|H107200828 +107200828:lI110|H1072039D0 +1072039D0:lI117|H107206C00 +107206C00:lI73|H107209EA8 +107209EA8:lI116|H10720D108 +10720D108:lI101|H1072102F8 +1072102F8:lI109|H107213578 +107213578:lI46|H107216930 +107216930:lI98|H107219EB0 +107219EB0:lI101|H10721D4A0 +10721D4A0:lI97|H107220A40 +107220A40:lI109|N +1071F2E78:Mn4:H1071F5358,H1071F5368,H1071F5378,H1071F5388 +1071F5358:lH1071F7B98|N +1071F7B98:lI119|H1071FA7F0 +1071FA7F0:lI120|H1071FD730 +1071FD730:lI77|H1072007E8 +1072007E8:lI68|H107203990 +107203990:lI73|H107206BC0 +107206BC0:lI67|H107209E68 +107209E68:lI104|H10720D0C8 +10720D0C8:lI105|H1072102C8 +1072102C8:lI108|H107213548 +107213548:lI100|H107216900 +107216900:lI70|H107219E80 +107219E80:lI114|H10721D470 +10721D470:lI97|H107220A10 +107220A10:lI109|H107223CF8 +107223CF8:lI101|H107226CC0 +107226CC0:lI46|H1072298B8 +1072298B8:lI98|H10722C140 +10722C140:lI101|H10722E6F8 +10722E6F8:lI97|H1072309E0 +1072309E0:lI109|N +1071F5388:lH1071F7BC8|N +1071F7BC8:lI103|H1071FA820 +1071FA820:lI108|H1071FD760 +1071FD760:lI117|H107200818 +107200818:lI46|H1072039C0 +1072039C0:lI98|H107206BF0 +107206BF0:lI101|H107209E98 +107209E98:lI97|H10720D0F8 +10720D0F8:lI109|N +1071F5378:lH1071F7BB8|N +1071F7BB8:lI119|H1071FA810 +1071FA810:lI120|H1071FD750 +1071FD750:lI65|H107200808 +107200808:lI117|H1072039B0 +1072039B0:lI105|H107206BE0 +107206BE0:lI78|H107209E88 +107209E88:lI111|H10720D0E8 +10720D0E8:lI116|H1072102E8 +1072102E8:lI101|H107213568 +107213568:lI98|H107216920 +107216920:lI111|H107219EA0 +107219EA0:lI111|H10721D490 +10721D490:lI107|H107220A30 +107220A30:lI69|H107223D18 +107223D18:lI118|H107226CE0 +107226CE0:lI101|H1072298D8 +1072298D8:lI110|H10722C160 +10722C160:lI116|H10722E718 +10722E718:lI46|H107230A00 +107230A00:lI98|H107232A48 +107232A48:lI101|H107234780 +107234780:lI97|H107236208 +107236208:lI109|N +1071F5368:lH1071F7BA8|N +1071F7BA8:lI119|H1071FA800 +1071FA800:lI120|H1071FD740 +1071FD740:lI71|H1072007F8 +1072007F8:lI114|H1072039A0 +1072039A0:lI97|H107206BD0 +107206BD0:lI112|H107209E78 +107209E78:lI104|H10720D0D8 +10720D0D8:lI105|H1072102D8 +1072102D8:lI99|H107213558 +107213558:lI115|H107216910 +107216910:lI77|H107219E90 +107219E90:lI97|H10721D480 +10721D480:lI116|H107220A20 +107220A20:lI114|H107223D08 +107223D08:lI105|H107226CD0 +107226CD0:lI120|H1072298C8 +1072298C8:lI46|H10722C150 +10722C150:lI98|H10722E708 +10722E708:lI101|H1072309F0 +1072309F0:lI97|H107232A38 +107232A38:lI109|N +1071F2E60:Mn2:H1071F5338,H1071F5348 +1071F5338:lH1071F7B78|N +1071F7B78:lI119|H1071FA7D0 +1071FA7D0:lI120|H1071FD710 +1071FD710:lI74|H1072007C8 +1072007C8:lI111|H107203970 +107203970:lI121|H107206BA0 +107206BA0:lI115|H107209E48 +107209E48:lI116|H10720D0A8 +10720D0A8:lI105|H1072102A8 +1072102A8:lI99|H107213528 +107213528:lI107|H1072168E0 +1072168E0:lI69|H107219E60 +107219E60:lI118|H10721D450 +10721D450:lI101|H1072209F0 +1072209F0:lI110|H107223CD8 +107223CD8:lI116|H107226CA0 +107226CA0:lI46|H107229898 +107229898:lI98|H10722C120 +10722C120:lI101|H10722E6D8 +10722E6D8:lI97|H1072309C0 +1072309C0:lI109|N +1071F5348:lH1071F7B88|N +1071F7B88:lI119|H1071FA7E0 +1071FA7E0:lI120|H1071FD720 +1071FD720:lI71|H1072007D8 +1072007D8:lI114|H107203980 +107203980:lI105|H107206BB0 +107206BB0:lI100|H107209E58 +107209E58:lI67|H10720D0B8 +10720D0B8:lI101|H1072102B8 +1072102B8:lI108|H107213538 +107213538:lI108|H1072168F0 +1072168F0:lI70|H107219E70 +107219E70:lI108|H10721D460 +10721D460:lI111|H107220A00 +107220A00:lI97|H107223CE8 +107223CE8:lI116|H107226CB0 +107226CB0:lI82|H1072298A8 +1072298A8:lI101|H10722C130 +10722C130:lI110|H10722E6E8 +10722E6E8:lI100|H1072309D0 +1072309D0:lI101|H107232A28 +107232A28:lI114|H107234770 +107234770:lI101|H1072361F8 +1072361F8:lI114|H107237A20 +107237A20:lI46|H107239058 +107239058:lI98|H10723A4F0 +10723A4F0:lI101|H10723B810 +10723B810:lI97|H10723C870 +10723C870:lI109|N +1071F2E50:lH1071F5328|N +1071F5328:lI119|H1071F7B68 +1071F7B68:lI120|H1071FA7C0 +1071FA7C0:lI80|H1071FD700 +1071FD700:lI114|H1072007B8 +1072007B8:lI101|H107203960 +107203960:lI118|H107206B90 +107206B90:lI105|H107209E38 +107209E38:lI101|H10720D098 +10720D098:lI119|H107210298 +107210298:lI70|H107213518 +107213518:lI114|H1072168D0 +1072168D0:lI97|H107219E50 +107219E50:lI109|H10721D440 +10721D440:lI101|H1072209E0 +1072209E0:lI46|H107223CC8 +107223CC8:lI98|H107226C90 +107226C90:lI101|H107229888 +107229888:lI97|H10722C110 +10722C110:lI109|N +1071F1190:MnA:H1071F2D88,H1071F2DA0,H1071F2DB0,H1071F2DC8,H1071F2DD8,H1071F2DE8,H1071F2DF8,H1071F2E08,H1071F2E18,H1071F2E28 +1071F2D88:Mn2:H1071F5240,H1071F5250 +1071F5240:lH1071F7A78|N +1071F7A78:lI119|H1071FA6D0 +1071FA6D0:lI120|H1071FD610 +1071FD610:lI71|H1072006C8 +1072006C8:lI114|H107203870 +107203870:lI105|H107206AA0 +107206AA0:lI100|H107209D48 +107209D48:lI83|H10720CFA8 +10720CFA8:lI105|H1072101B8 +1072101B8:lI122|H107213438 +107213438:lI101|H1072167F0 +1072167F0:lI114|H107219D80 +107219D80:lI46|H10721D380 +10721D380:lI98|H107220930 +107220930:lI101|H107223C28 +107223C28:lI97|H107226C00 +107226C00:lI109|N +1071F5250:lH1071F7A88|N +1071F7A88:lI119|H1071FA6E0 +1071FA6E0:lI120|H1071FD620 +1071FD620:lI70|H1072006D8 +1072006D8:lI111|H107203880 +107203880:lI110|H107206AB0 +107206AB0:lI116|H107209D58 +107209D58:lI46|H10720CFB8 +10720CFB8:lI98|H1072101C8 +1072101C8:lI101|H107213448 +107213448:lI97|H107216800 +107216800:lI109|N +1071F2E28:Mn2:H1071F52F8,H1071F5308 +1071F52F8:lH1071F7B38|N +1071F7B38:lI119|H1071FA790 +1071FA790:lI120|H1071FD6D0 +1071FD6D0:lI71|H107200788 +107200788:lI114|H107203930 +107203930:lI97|H107206B60 +107206B60:lI112|H107209E08 +107209E08:lI104|H10720D068 +10720D068:lI105|H107210268 +107210268:lI99|H1072134E8 +1072134E8:lI115|H1072168A0 +1072168A0:lI80|H107219E20 +107219E20:lI97|H10721D410 +10721D410:lI116|H1072209B0 +1072209B0:lI104|H107223C98 +107223C98:lI46|H107226C60 +107226C60:lI98|H107229858 +107229858:lI101|H10722C0E0 +10722C0E0:lI97|H10722E6A8 +10722E6A8:lI109|N +1071F5308:lH1071F7B48|N +1071F7B48:lI119|H1071FA7A0 +1071FA7A0:lI120|H1071FD6E0 +1071FD6E0:lI77|H107200798 +107200798:lI111|H107203940 +107203940:lI117|H107206B70 +107206B70:lI115|H107209E18 +107209E18:lI101|H10720D078 +10720D078:lI67|H107210278 +107210278:lI97|H1072134F8 +1072134F8:lI112|H1072168B0 +1072168B0:lI116|H107219E30 +107219E30:lI117|H10721D420 +10721D420:lI114|H1072209C0 +1072209C0:lI101|H107223CA8 +107223CA8:lI67|H107226C70 +107226C70:lI104|H107229868 +107229868:lI97|H10722C0F0 +10722C0F0:lI110|H10722E6B8 +10722E6B8:lI103|H1072309A0 +1072309A0:lI101|H107232A08 +107232A08:lI100|H107234750 +107234750:lI69|H1072361D8 +1072361D8:lI118|H107237A00 +107237A00:lI101|H107239038 +107239038:lI110|H10723A4D0 +10723A4D0:lI116|H10723B7F0 +10723B7F0:lI46|H10723C860 +10723C860:lI98|H10723D6F0 +10723D6F0:lI101|H10723E450 +10723E450:lI97|H10723F060 +10723F060:lI109|N +1071F2E18:Mn1:H1071F52E0 +1071F52E0:Mn2:H1071F7B18,H1071F7B28 +1071F7B18:lH1071FA770|N +1071FA770:lI119|H1071FD6B0 +1071FD6B0:lI120|H107200768 +107200768:lI80|H107203910 +107203910:lI114|H107206B40 +107206B40:lI105|H107209DE8 +107209DE8:lI110|H10720D048 +10720D048:lI116|H107210248 +107210248:lI101|H1072134C8 +1072134C8:lI114|H107216880 +107216880:lI46|H107219E00 +107219E00:lI98|H10721D3F0 +10721D3F0:lI101|H107220990 +107220990:lI97|H107223C78 +107223C78:lI109|N +1071F7B28:lH1071FA780|N +1071FA780:lI119|H1071FD6C0 +1071FD6C0:lI120|H107200778 +107200778:lI68|H107203920 +107203920:lI105|H107206B50 +107206B50:lI115|H107209DF8 +107209DF8:lI112|H10720D058 +10720D058:lI108|H107210258 +107210258:lI97|H1072134D8 +1072134D8:lI121|H107216890 +107216890:lI67|H107219E10 +107219E10:lI104|H10721D400 +10721D400:lI97|H1072209A0 +1072209A0:lI110|H107223C88 +107223C88:lI103|H107226C50 +107226C50:lI101|H107229848 +107229848:lI100|H10722C0D0 +10722C0D0:lI69|H10722E698 +10722E698:lI118|H107230990 +107230990:lI101|H1072329F8 +1072329F8:lI110|H107234740 +107234740:lI116|H1072361C8 +1072361C8:lI46|H1072379F0 +1072379F0:lI98|H107239028 +107239028:lI101|H10723A4C0 +10723A4C0:lI97|H10723B7E0 +10723B7E0:lI109|N +1071F2E08:lH1071F52D0|N +1071F52D0:lI119|H1071F7B08 +1071F7B08:lI120|H1071FA760 +1071FA760:lI66|H1071FD6A0 +1071FD6A0:lI117|H107200758 +107200758:lI102|H107203900 +107203900:lI102|H107206B30 +107206B30:lI101|H107209DD8 +107209DD8:lI114|H10720D038 +10720D038:lI101|H107210238 +107210238:lI100|H1072134B8 +1072134B8:lI68|H107216870 +107216870:lI67|H107219DF0 +107219DF0:lI46|H10721D3E0 +10721D3E0:lI98|H107220980 +107220980:lI101|H107223C68 +107223C68:lI97|H107226C40 +107226C40:lI109|N +1071F2DF8:lH1071F52C0|N +1071F52C0:lI119|H1071F7AF8 +1071F7AF8:lI120|H1071FA750 +1071FA750:lI67|H1071FD690 +1071FD690:lI111|H107200748 +107200748:lI108|H1072038F0 +1072038F0:lI111|H107206B20 +107206B20:lI117|H107209DC8 +107209DC8:lI114|H10720D028 +10720D028:lI80|H107210228 +107210228:lI105|H1072134A8 +1072134A8:lI99|H107216860 +107216860:lI107|H107219DE0 +107219DE0:lI101|H10721D3D0 +10721D3D0:lI114|H107220970 +107220970:lI69|H107223C58 +107223C58:lI118|H107226C30 +107226C30:lI101|H107229838 +107229838:lI110|H10722C0C0 +10722C0C0:lI116|H10722E688 +10722E688:lI46|H107230980 +107230980:lI98|H1072329E8 +1072329E8:lI101|H107234730 +107234730:lI97|H1072361B8 +1072361B8:lI109|N +1071F2DE8:lH1071F52B0|N +1071F52B0:lI119|H1071F7AE8 +1071F7AE8:lI120|H1071FA740 +1071FA740:lI101|H1071FD680 +1071FD680:lI95|H107200738 +107200738:lI117|H1072038E0 +1072038E0:lI116|H107206B10 +107206B10:lI105|H107209DB8 +107209DB8:lI108|H10720D018 +10720D018:lI46|H107210218 +107210218:lI98|H107213498 +107213498:lI101|H107216850 +107216850:lI97|H107219DD0 +107219DD0:lI109|N +1071F2DD8:lH1071F52A0|N +1071F52A0:lI119|H1071F7AD8 +1071F7AD8:lI120|H1071FA730 +1071FA730:lI70|H1071FD670 +1071FD670:lI108|H107200728 +107200728:lI101|H1072038D0 +1072038D0:lI120|H107206B00 +107206B00:lI71|H107209DA8 +107209DA8:lI114|H10720D008 +10720D008:lI105|H107210208 +107210208:lI100|H107213488 +107213488:lI83|H107216840 +107216840:lI105|H107219DC0 +107219DC0:lI122|H10721D3C0 +10721D3C0:lI101|H107220960 +107220960:lI114|H107223C48 +107223C48:lI46|H107226C20 +107226C20:lI98|H107229828 +107229828:lI101|H10722C0B0 +10722C0B0:lI97|H10722E678 +10722E678:lI109|N +1071F2DC8:lH1071F5290|N +1071F5290:lI119|H1071F7AC8 +1071F7AC8:lI120|H1071FA720 +1071FA720:lI87|H1071FD660 +1071FD660:lI101|H107200718 +107200718:lI98|H1072038C0 +1072038C0:lI86|H107206AF0 +107206AF0:lI105|H107209D98 +107209D98:lI101|H10720CFF8 +10720CFF8:lI119|H1072101F8 +1072101F8:lI46|H107213478 +107213478:lI98|H107216830 +107216830:lI101|H107219DB0 +107219DB0:lI97|H10721D3B0 +10721D3B0:lI109|N +1071F2DB0:Mn2:H1071F5270,H1071F5280 +1071F5270:lH1071F7AA8|N +1071F7AA8:lI119|H1071FA700 +1071FA700:lI120|H1071FD640 +1071FD640:lI46|H1072006F8 +1072006F8:lI97|H1072038A0 +1072038A0:lI112|H107206AD0 +107206AD0:lI112|H107209D78 +107209D78:lI117|H10720CFD8 +10720CFD8:lI112|N +1071F5280:lH1071F7AB8|N +1071F7AB8:lI119|H1071FA710 +1071FA710:lI120|H1071FD650 +1071FD650:lI83|H107200708 +107200708:lI116|H1072038B0 +1072038B0:lI121|H107206AE0 +107206AE0:lI108|H107209D88 +107209D88:lI101|H10720CFE8 +10720CFE8:lI100|H1072101E8 +1072101E8:lI84|H107213468 +107213468:lI101|H107216820 +107216820:lI120|H107219DA0 +107219DA0:lI116|H10721D3A0 +10721D3A0:lI67|H107220950 +107220950:lI116|H107223C38 +107223C38:lI114|H107226C10 +107226C10:lI108|H107229818 +107229818:lI46|H10722C0A0 +10722C0A0:lI98|H10722E668 +10722E668:lI101|H107230970 +107230970:lI97|H1072329D8 +1072329D8:lI109|N +1071F2DA0:lH1071F5260|N +1071F5260:lI119|H1071F7A98 +1071F7A98:lI120|H1071FA6F0 +1071FA6F0:lI77|H1071FD630 +1071FD630:lI101|H1072006E8 +1072006E8:lI109|H107203890 +107203890:lI111|H107206AC0 +107206AC0:lI114|H107209D68 +107209D68:lI121|H10720CFC8 +10720CFC8:lI68|H1072101D8 +1072101D8:lI67|H107213458 +107213458:lI46|H107216810 +107216810:lI98|H107219D90 +107219D90:lI101|H10721D390 +10721D390:lI97|H107220940 +107220940:lI109|N +1071F1130:MnB:H1071F2CB8,H1071F2CC8,H1071F2CD8,H1071F2CF0,H1071F2D00,H1071F2D18,H1071F2D28,H1071F2D38,H1071F2D48,H1071F2D58,H1071F2D68 +1071F2CB8:lH1071F5150|N +1071F5150:lI119|H1071F7988 +1071F7988:lI120|H1071FA5E0 +1071FA5E0:lI83|H1071FD520 +1071FD520:lI99|H1072005D8 +1072005D8:lI114|H107203780 +107203780:lI111|H1072069B0 +1072069B0:lI108|H107209C58 +107209C58:lI108|H10720CEB8 +10720CEB8:lI101|H1072100C8 +1072100C8:lI100|H107213348 +107213348:lI87|H107216700 +107216700:lI105|H107219C90 +107219C90:lI110|H10721D290 +10721D290:lI100|H107220850 +107220850:lI111|H107223B48 +107223B48:lI119|H107226B30 +107226B30:lI46|H107229758 +107229758:lI98|H10722BFE0 +10722BFE0:lI101|H10722E5C8 +10722E5C8:lI97|H1072308D0 +1072308D0:lI109|N +1071F2D68:Mn3:H1071F5210,H1071F5220,H1071F5230 +1071F5210:lH1071F7A48|N +1071F7A48:lI119|H1071FA6A0 +1071FA6A0:lI120|H1071FD5E0 +1071FD5E0:lI80|H107200698 +107200698:lI111|H107203840 +107203840:lI112|H107206A70 +107206A70:lI117|H107209D18 +107209D18:lI112|H10720CF78 +10720CF78:lI84|H107210188 +107210188:lI114|H107213408 +107213408:lI97|H1072167C0 +1072167C0:lI110|H107219D50 +107219D50:lI115|H10721D350 +10721D350:lI105|H107220900 +107220900:lI101|H107223BF8 +107223BF8:lI110|H107226BE0 +107226BE0:lI116|H1072297F8 +1072297F8:lI87|H10722C080 +10722C080:lI105|H10722E648 +10722E648:lI110|H107230950 +107230950:lI100|H1072329C8 +1072329C8:lI111|H107234720 +107234720:lI119|H1072361A8 +1072361A8:lI46|H1072379E0 +1072379E0:lI98|H107239018 +107239018:lI101|H10723A4B0 +10723A4B0:lI97|H10723B7D0 +10723B7D0:lI109|N +1071F5230:lH1071F7A68|N +1071F7A68:lI119|H1071FA6C0 +1071FA6C0:lI120|H1071FD600 +1071FD600:lI67|H1072006B8 +1072006B8:lI108|H107203860 +107203860:lI105|H107206A90 +107206A90:lI101|H107209D38 +107209D38:lI110|H10720CF98 +10720CF98:lI116|H1072101A8 +1072101A8:lI68|H107213428 +107213428:lI67|H1072167E0 +1072167E0:lI46|H107219D70 +107219D70:lI98|H10721D370 +10721D370:lI101|H107220920 +107220920:lI97|H107223C18 +107223C18:lI109|N +1071F5220:lH1071F7A58|N +1071F7A58:lI119|H1071FA6B0 +1071FA6B0:lI120|H1071FD5F0 +1071FD5F0:lI66|H1072006A8 +1072006A8:lI111|H107203850 +107203850:lI111|H107206A80 +107206A80:lI107|H107209D28 +107209D28:lI67|H10720CF88 +10720CF88:lI116|H107210198 +107210198:lI114|H107213418 +107213418:lI108|H1072167D0 +1072167D0:lI69|H107219D60 +107219D60:lI118|H10721D360 +10721D360:lI101|H107220910 +107220910:lI110|H107223C08 +107223C08:lI116|H107226BF0 +107226BF0:lI46|H107229808 +107229808:lI98|H10722C090 +10722C090:lI101|H10722E658 +10722E658:lI97|H107230960 +107230960:lI109|N +1071F2D58:lH1071F5200|N +1071F5200:lI119|H1071F7A38 +1071F7A38:lI120|H1071FA690 +1071FA690:lI77|H1071FD5D0 +1071FD5D0:lI101|H107200688 +107200688:lI110|H107203830 +107203830:lI117|H107206A60 +107206A60:lI66|H107209D08 +107209D08:lI97|H10720CF68 +10720CF68:lI114|H107210178 +107210178:lI46|H1072133F8 +1072133F8:lI98|H1072167B0 +1072167B0:lI101|H107219D40 +107219D40:lI97|H10721D340 +10721D340:lI109|N +1071F2D48:lH1071F51F0|N +1071F51F0:lI119|H1071F7A28 +1071F7A28:lI120|H1071FA680 +1071FA680:lI78|H1071FD5C0 +1071FD5C0:lI97|H107200678 +107200678:lI118|H107203820 +107203820:lI105|H107206A50 +107206A50:lI103|H107209CF8 +107209CF8:lI97|H10720CF58 +10720CF58:lI116|H107210168 +107210168:lI105|H1072133E8 +1072133E8:lI111|H1072167A0 +1072167A0:lI110|H107219D30 +107219D30:lI75|H10721D330 +10721D330:lI101|H1072208F0 +1072208F0:lI121|H107223BE8 +107223BE8:lI69|H107226BD0 +107226BD0:lI118|H1072297E8 +1072297E8:lI101|H10722C070 +10722C070:lI110|H10722E638 +10722E638:lI116|H107230940 +107230940:lI46|H1072329B8 +1072329B8:lI98|H107234710 +107234710:lI101|H107236198 +107236198:lI97|H1072379D0 +1072379D0:lI109|N +1071F2D38:lH1071F51E0|N +1071F51E0:lI119|H1071F7A18 +1071F7A18:lI120|H1071FA670 +1071FA670:lI84|H1071FD5B0 +1071FD5B0:lI111|H107200668 +107200668:lI112|H107203810 +107203810:lI76|H107206A40 +107206A40:lI101|H107209CE8 +107209CE8:lI118|H10720CF48 +10720CF48:lI101|H107210158 +107210158:lI108|H1072133D8 +1072133D8:lI87|H107216790 +107216790:lI105|H107219D20 +107219D20:lI110|H10721D320 +10721D320:lI100|H1072208E0 +1072208E0:lI111|H107223BD8 +107223BD8:lI119|H107226BC0 +107226BC0:lI46|H1072297D8 +1072297D8:lI98|H10722C060 +10722C060:lI101|H10722E628 +10722E628:lI97|H107230930 +107230930:lI109|N +1071F2D28:lH1071F51D0|N +1071F51D0:lI119|H1071F7A08 +1071F7A08:lI120|H1071FA660 +1071FA660:lI83|H1071FD5A0 +1071FD5A0:lI116|H107200658 +107200658:lI97|H107203800 +107203800:lI116|H107206A30 +107206A30:lI105|H107209CD8 +107209CD8:lI99|H10720CF38 +10720CF38:lI66|H107210148 +107210148:lI105|H1072133C8 +1072133C8:lI116|H107216780 +107216780:lI109|H107219D10 +107219D10:lI97|H10721D310 +10721D310:lI112|H1072208D0 +1072208D0:lI46|H107223BC8 +107223BC8:lI98|H107226BB0 +107226BB0:lI101|H1072297C8 +1072297C8:lI97|H10722C050 +10722C050:lI109|N +1071F2D18:lH1071F51C0|N +1071F51C0:lI119|H1071F79F8 +1071F79F8:lI120|H1071FA650 +1071FA650:lI83|H1071FD590 +1071FD590:lI121|H107200648 +107200648:lI115|H1072037F0 +1072037F0:lI116|H107206A20 +107206A20:lI101|H107209CC8 +107209CC8:lI109|H10720CF28 +10720CF28:lI83|H107210138 +107210138:lI101|H1072133B8 +1072133B8:lI116|H107216770 +107216770:lI116|H107219D00 +107219D00:lI105|H10721D300 +10721D300:lI110|H1072208C0 +1072208C0:lI103|H107223BB8 +107223BB8:lI115|H107226BA0 +107226BA0:lI46|H1072297B8 +1072297B8:lI98|H10722C040 +10722C040:lI101|H10722E618 +10722E618:lI97|H107230920 +107230920:lI109|N +1071F2D00:Mn2:H1071F51A0,H1071F51B0 +1071F51A0:lH1071F79D8|N +1071F79D8:lI119|H1071FA630 +1071FA630:lI120|H1071FD570 +1071FD570:lI80|H107200628 +107200628:lI114|H1072037D0 +1072037D0:lI101|H107206A00 +107206A00:lI118|H107209CA8 +107209CA8:lI105|H10720CF08 +10720CF08:lI101|H107210118 +107210118:lI119|H107213398 +107213398:lI67|H107216750 +107216750:lI111|H107219CE0 +107219CE0:lI110|H10721D2E0 +10721D2E0:lI116|H1072208A0 +1072208A0:lI114|H107223B98 +107223B98:lI111|H107226B80 +107226B80:lI108|H107229798 +107229798:lI66|H10722C020 +10722C020:lI97|H10722E608 +10722E608:lI114|H107230910 +107230910:lI46|H1072329A8 +1072329A8:lI98|H107234700 +107234700:lI101|H107236188 +107236188:lI97|H1072379C0 +1072379C0:lI109|N +1071F51B0:lH1071F79E8|N +1071F79E8:lI119|H1071FA640 +1071FA640:lI120|H1071FD580 +1071FD580:lI65|H107200638 +107200638:lI117|H1072037E0 +1072037E0:lI105|H107206A10 +107206A10:lI80|H107209CB8 +107209CB8:lI97|H10720CF18 +10720CF18:lI110|H107210128 +107210128:lI101|H1072133A8 +1072133A8:lI73|H107216760 +107216760:lI110|H107219CF0 +107219CF0:lI102|H10721D2F0 +10721D2F0:lI111|H1072208B0 +1072208B0:lI46|H107223BA8 +107223BA8:lI98|H107226B90 +107226B90:lI101|H1072297A8 +1072297A8:lI97|H10722C030 +10722C030:lI109|N +1071F2CF0:lH1071F5190|N +1071F5190:lI119|H1071F79C8 +1071F79C8:lI120|H1071FA620 +1071FA620:lI70|H1071FD560 +1071FD560:lI105|H107200618 +107200618:lI110|H1072037C0 +1072037C0:lI100|H1072069F0 +1072069F0:lI82|H107209C98 +107209C98:lI101|H10720CEF8 +10720CEF8:lI112|H107210108 +107210108:lI108|H107213388 +107213388:lI97|H107216740 +107216740:lI99|H107219CD0 +107219CD0:lI101|H10721D2D0 +10721D2D0:lI68|H107220890 +107220890:lI97|H107223B88 +107223B88:lI116|H107226B70 +107226B70:lI97|H107229788 +107229788:lI46|H10722C010 +10722C010:lI98|H10722E5F8 +10722E5F8:lI101|H107230900 +107230900:lI97|H107232998 +107232998:lI109|N +1071F2CD8:Mn2:H1071F5170,H1071F5180 +1071F5170:lH1071F79A8|N +1071F79A8:lI119|H1071FA600 +1071FA600:lI120|H1071FD540 +1071FD540:lI77|H1072005F8 +1072005F8:lI111|H1072037A0 +1072037A0:lI118|H1072069D0 +1072069D0:lI101|H107209C78 +107209C78:lI69|H10720CED8 +10720CED8:lI118|H1072100E8 +1072100E8:lI101|H107213368 +107213368:lI110|H107216720 +107216720:lI116|H107219CB0 +107219CB0:lI46|H10721D2B0 +10721D2B0:lI98|H107220870 +107220870:lI101|H107223B68 +107223B68:lI97|H107226B50 +107226B50:lI109|N +1071F5180:lH1071F79B8|N +1071F79B8:lI119|H1071FA610 +1071FA610:lI120|H1071FD550 +1071FD550:lI72|H107200608 +107200608:lI116|H1072037B0 +1072037B0:lI109|H1072069E0 +1072069E0:lI108|H107209C88 +107209C88:lI69|H10720CEE8 +10720CEE8:lI97|H1072100F8 +1072100F8:lI115|H107213378 +107213378:lI121|H107216730 +107216730:lI80|H107219CC0 +107219CC0:lI114|H10721D2C0 +10721D2C0:lI105|H107220880 +107220880:lI110|H107223B78 +107223B78:lI116|H107226B60 +107226B60:lI105|H107229778 +107229778:lI110|H10722C000 +10722C000:lI103|H10722E5E8 +10722E5E8:lI46|H1072308F0 +1072308F0:lI98|H107232988 +107232988:lI101|H1072346F0 +1072346F0:lI97|H107236178 +107236178:lI109|N +1071F2CC8:lH1071F5160|N +1071F5160:lI119|H1071F7998 +1071F7998:lI120|H1071FA5F0 +1071FA5F0:lI65|H1071FD530 +1071FD530:lI99|H1072005E8 +1072005E8:lI99|H107203790 +107203790:lI101|H1072069C0 +1072069C0:lI108|H107209C68 +107209C68:lI101|H10720CEC8 +10720CEC8:lI114|H1072100D8 +1072100D8:lI97|H107213358 +107213358:lI116|H107216710 +107216710:lI111|H107219CA0 +107219CA0:lI114|H10721D2A0 +10721D2A0:lI84|H107220860 +107220860:lI97|H107223B58 +107223B58:lI98|H107226B40 +107226B40:lI108|H107229768 +107229768:lI101|H10722BFF0 +10722BFF0:lI46|H10722E5D8 +10722E5D8:lI98|H1072308E0 +1072308E0:lI101|H107232978 +107232978:lI97|H1072346E0 +1072346E0:lI109|N +1071F10B0:MnF:H1071F2B88,H1071F2B98,H1071F2BB0,H1071F2BC8,H1071F2BD8,H1071F2BE8,H1071F2BF8,H1071F2C10,H1071F2C20,H1071F2C40,H1071F2C50,H1071F2C60,H1071F2C78,H1071F2C88,H1071F2CA0 +1071F2B88:lH1071F4FE0|N +1071F4FE0:lI119|H1071F7818 +1071F7818:lI120|H1071FA470 +1071FA470:lI76|H1071FD3B0 +1071FD3B0:lI97|H107200468 +107200468:lI121|H107203610 +107203610:lI111|H107206840 +107206840:lI117|H107209AE8 +107209AE8:lI116|H10720CD48 +10720CD48:lI65|H10720FF58 +10720FF58:lI108|H1072131D8 +1072131D8:lI103|H107216590 +107216590:lI111|H107219B30 +107219B30:lI114|H10721D150 +10721D150:lI105|H107220710 +107220710:lI116|H107223A48 +107223A48:lI104|H107226A60 +107226A60:lI109|H107229698 +107229698:lI46|H10722BF50 +10722BF50:lI98|H10722E538 +10722E538:lI101|H107230860 +107230860:lI97|H107232928 +107232928:lI109|N +1071F2CA0:Mn2:H1071F5130,H1071F5140 +1071F5130:lH1071F7968|N +1071F7968:lI119|H1071FA5C0 +1071FA5C0:lI120|H1071FD500 +1071FD500:lI76|H1072005B8 +1072005B8:lI111|H107203760 +107203760:lI103|H107206990 +107206990:lI78|H107209C38 +107209C38:lI117|H10720CE98 +10720CE98:lI108|H1072100A8 +1072100A8:lI108|H107213328 +107213328:lI46|H1072166E0 +1072166E0:lI98|H107219C70 +107219C70:lI101|H10721D270 +10721D270:lI97|H107220830 +107220830:lI109|N +1071F5140:lH1071F7978|N +1071F7978:lI119|H1071FA5D0 +1071FA5D0:lI120|H1071FD510 +1071FD510:lI71|H1072005C8 +1072005C8:lI114|H107203770 +107203770:lI105|H1072069A0 +1072069A0:lI100|H107209C48 +107209C48:lI67|H10720CEA8 +10720CEA8:lI101|H1072100B8 +1072100B8:lI108|H107213338 +107213338:lI108|H1072166F0 +1072166F0:lI78|H107219C80 +107219C80:lI117|H10721D280 +10721D280:lI109|H107220840 +107220840:lI98|H107223B38 +107223B38:lI101|H107226B20 +107226B20:lI114|H107229748 +107229748:lI82|H10722BFD0 +10722BFD0:lI101|H10722E5B8 +10722E5B8:lI110|H1072308C0 +1072308C0:lI100|H107232968 +107232968:lI101|H1072346D0 +1072346D0:lI114|H107236168 +107236168:lI101|H1072379B0 +1072379B0:lI114|H107239008 +107239008:lI46|H10723A4A0 +10723A4A0:lI98|H10723B7C0 +10723B7C0:lI101|H10723C850 +10723C850:lI97|H10723D6E0 +10723D6E0:lI109|N +1071F2C88:Mn2:H1071F5110,H1071F5120 +1071F5110:lH1071F7948|N +1071F7948:lI119|H1071FA5A0 +1071FA5A0:lI120|H1071FD4E0 +1071FD4E0:lI67|H107200598 +107200598:lI111|H107203740 +107203740:lI108|H107206970 +107206970:lI111|H107209C18 +107209C18:lI117|H10720CE78 +10720CE78:lI114|H107210088 +107210088:lI68|H107213308 +107213308:lI97|H1072166C0 +1072166C0:lI116|H107219C60 +107219C60:lI97|H10721D260 +10721D260:lI46|H107220820 +107220820:lI98|H107223B28 +107223B28:lI101|H107226B10 +107226B10:lI97|H107229738 +107229738:lI109|N +1071F5120:lH1071F7958|N +1071F7958:lI119|H1071FA5B0 +1071FA5B0:lI120|H1071FD4F0 +1071FD4F0:lI73|H1072005A8 +1072005A8:lI99|H107203750 +107203750:lI111|H107206980 +107206980:lI110|H107209C28 +107209C28:lI46|H10720CE88 +10720CE88:lI98|H107210098 +107210098:lI101|H107213318 +107213318:lI97|H1072166D0 +1072166D0:lI109|N +1071F2C78:lH1071F5100|N +1071F5100:lI119|H1071F7938 +1071F7938:lI120|H1071FA590 +1071FA590:lI77|H1071FD4D0 +1071FD4D0:lI105|H107200588 +107200588:lI114|H107203730 +107203730:lI114|H107206960 +107206960:lI111|H107209C08 +107209C08:lI114|H10720CE68 +10720CE68:lI68|H107210078 +107210078:lI67|H1072132F8 +1072132F8:lI46|H1072166B0 +1072166B0:lI98|H107219C50 +107219C50:lI101|H10721D250 +10721D250:lI97|H107220810 +107220810:lI109|N +1071F2C60:Mn2:H1071F50E0,H1071F50F0 +1071F50E0:lH1071F7918|N +1071F7918:lI119|H1071FA570 +1071FA570:lI120|H1071FD4B0 +1071FD4B0:lI65|H107200568 +107200568:lI117|H107203710 +107203710:lI105|H107206940 +107206940:lI83|H107209BE8 +107209BE8:lI105|H10720CE48 +10720CE48:lI109|H107210058 +107210058:lI112|H1072132D8 +1072132D8:lI108|H107216690 +107216690:lI101|H107219C30 +107219C30:lI84|H10721D230 +10721D230:lI97|H1072207F0 +1072207F0:lI98|H107223B08 +107223B08:lI65|H107226AF0 +107226AF0:lI114|H107229718 +107229718:lI116|H10722BFB0 +10722BFB0:lI46|H10722E598 +10722E598:lI98|H1072308B0 +1072308B0:lI101|H107232958 +107232958:lI97|H1072346C0 +1072346C0:lI109|N +1071F50F0:lH1071F7928|N +1071F7928:lI119|H1071FA580 +1071FA580:lI120|H1071FD4C0 +1071FD4C0:lI87|H107200578 +107200578:lI101|H107203720 +107203720:lI98|H107206950 +107206950:lI86|H107209BF8 +107209BF8:lI105|H10720CE58 +10720CE58:lI101|H107210068 +107210068:lI119|H1072132E8 +1072132E8:lI69|H1072166A0 +1072166A0:lI118|H107219C40 +107219C40:lI101|H10721D240 +10721D240:lI110|H107220800 +107220800:lI116|H107223B18 +107223B18:lI46|H107226B00 +107226B00:lI98|H107229728 +107229728:lI101|H10722BFC0 +10722BFC0:lI97|H10722E5A8 +10722E5A8:lI109|N +1071F2C50:lH1071F50D0|N +1071F50D0:lI119|H1071F7908 +1071F7908:lI120|H1071FA560 +1071FA560:lI78|H1071FD4A0 +1071FD4A0:lI111|H107200558 +107200558:lI116|H107203700 +107203700:lI105|H107206930 +107206930:lI102|H107209BD8 +107209BD8:lI121|H10720CE38 +10720CE38:lI69|H107210048 +107210048:lI118|H1072132C8 +1072132C8:lI101|H107216680 +107216680:lI110|H107219C20 +107219C20:lI116|H10721D220 +10721D220:lI46|H1072207E0 +1072207E0:lI98|H107223AF8 +107223AF8:lI101|H107226AE0 +107226AE0:lI97|H107229708 +107229708:lI109|N +1071F2C40:lH1071F50C0|N +1071F50C0:lI119|H1071F78F8 +1071F78F8:lI120|H1071FA550 +1071FA550:lI65|H1071FD490 +1071FD490:lI117|H107200548 +107200548:lI105|H1072036F0 +1072036F0:lI84|H107206920 +107206920:lI97|H107209BC8 +107209BC8:lI98|H10720CE28 +10720CE28:lI65|H107210038 +107210038:lI114|H1072132B8 +1072132B8:lI116|H107216670 +107216670:lI46|H107219C10 +107219C10:lI98|H10721D210 +10721D210:lI101|H1072207D0 +1072207D0:lI97|H107223AE8 +107223AE8:lI109|N +1071F2C20:Mn3:H1071F5090,H1071F50A0,H1071F50B0 +1071F5090:lH1071F78C8|N +1071F78C8:lI119|H1071FA520 +1071FA520:lI120|H1071FD460 +1071FD460:lI77|H107200518 +107200518:lI68|H1072036C0 +1072036C0:lI73|H1072068F0 +1072068F0:lI80|H107209B98 +107209B98:lI97|H10720CDF8 +10720CDF8:lI114|H107210008 +107210008:lI101|H107213288 +107213288:lI110|H107216640 +107216640:lI116|H107219BE0 +107219BE0:lI70|H10721D1E0 +10721D1E0:lI114|H1072207A0 +1072207A0:lI97|H107223AB8 +107223AB8:lI109|H107226AC0 +107226AC0:lI101|H1072296F8 +1072296F8:lI46|H10722BFA0 +10722BFA0:lI98|H10722E588 +10722E588:lI101|H1072308A0 +1072308A0:lI97|H107232948 +107232948:lI109|N +1071F50B0:lH1071F78E8|N +1071F78E8:lI119|H1071FA540 +1071FA540:lI120|H1071FD480 +1071FD480:lI71|H107200538 +107200538:lI114|H1072036E0 +1072036E0:lI105|H107206910 +107206910:lI100|H107209BB8 +107209BB8:lI69|H10720CE18 +10720CE18:lI118|H107210028 +107210028:lI101|H1072132A8 +1072132A8:lI110|H107216660 +107216660:lI116|H107219C00 +107219C00:lI46|H10721D200 +10721D200:lI98|H1072207C0 +1072207C0:lI101|H107223AD8 +107223AD8:lI97|H107226AD0 +107226AD0:lI109|N +1071F50A0:lH1071F78D8|N +1071F78D8:lI119|H1071FA530 +1071FA530:lI120|H1071FD470 +1071FD470:lI83|H107200528 +107200528:lI99|H1072036D0 +1072036D0:lI114|H107206900 +107206900:lI101|H107209BA8 +107209BA8:lI101|H10720CE08 +10720CE08:lI110|H107210018 +107210018:lI68|H107213298 +107213298:lI67|H107216650 +107216650:lI46|H107219BF0 +107219BF0:lI98|H10721D1F0 +10721D1F0:lI101|H1072207B0 +1072207B0:lI97|H107223AC8 +107223AC8:lI109|N +1071F2C10:lH1071F5080|N +1071F5080:lI119|H1071F78B8 +1071F78B8:lI120|H1071FA510 +1071FA510:lI80|H1071FD450 +1071FD450:lI114|H107200508 +107200508:lI105|H1072036B0 +1072036B0:lI110|H1072068E0 +1072068E0:lI116|H107209B88 +107209B88:lI111|H10720CDE8 +10720CDE8:lI117|H10720FFF8 +10720FFF8:lI116|H107213278 +107213278:lI46|H107216630 +107216630:lI98|H107219BD0 +107219BD0:lI101|H10721D1D0 +10721D1D0:lI97|H107220790 +107220790:lI109|N +1071F2BF8:Mn2:H1071F5060,H1071F5070 +1071F5060:lH1071F7898|N +1071F7898:lI119|H1071FA4F0 +1071FA4F0:lI120|H1071FD430 +1071FD430:lI69|H1072004E8 +1072004E8:lI118|H107203690 +107203690:lI116|H1072068C0 +1072068C0:lI72|H107209B68 +107209B68:lI97|H10720CDC8 +10720CDC8:lI110|H10720FFD8 +10720FFD8:lI100|H107213258 +107213258:lI108|H107216610 +107216610:lI101|H107219BB0 +107219BB0:lI114|H10721D1B0 +10721D1B0:lI46|H107220770 +107220770:lI98|H107223A98 +107223A98:lI101|H107226AA0 +107226AA0:lI97|H1072296D8 +1072296D8:lI109|N +1071F5070:lH1071F78A8|N +1071F78A8:lI119|H1071FA500 +1071FA500:lI120|H1071FD440 +1071FD440:lI68|H1072004F8 +1072004F8:lI105|H1072036A0 +1072036A0:lI114|H1072068D0 +1072068D0:lI80|H107209B78 +107209B78:lI105|H10720CDD8 +10720CDD8:lI99|H10720FFE8 +10720FFE8:lI107|H107213268 +107213268:lI101|H107216620 +107216620:lI114|H107219BC0 +107219BC0:lI67|H10721D1C0 +10721D1C0:lI116|H107220780 +107220780:lI114|H107223AA8 +107223AA8:lI108|H107226AB0 +107226AB0:lI46|H1072296E8 +1072296E8:lI98|H10722BF90 +10722BF90:lI101|H10722E578 +10722E578:lI97|H107230890 +107230890:lI109|N +1071F2BE8:lH1071F5050|N +1071F5050:lI119|H1071F7888 +1071F7888:lI120|H1071FA4E0 +1071FA4E0:lI84|H1071FD420 +1071FD420:lI114|H1072004D8 +1072004D8:lI101|H107203680 +107203680:lI101|H1072068B0 +1072068B0:lI98|H107209B58 +107209B58:lI111|H10720CDB8 +10720CDB8:lI111|H10720FFC8 +10720FFC8:lI107|H107213248 +107213248:lI46|H107216600 +107216600:lI98|H107219BA0 +107219BA0:lI101|H10721D1A0 +10721D1A0:lI97|H107220760 +107220760:lI109|N +1071F2BD8:lH1071F5040|N +1071F5040:lI119|H1071F7878 +1071F7878:lI120|H1071FA4D0 +1071FA4D0:lI76|H1071FD410 +1071FD410:lI111|H1072004C8 +1072004C8:lI99|H107203670 +107203670:lI97|H1072068A0 +1072068A0:lI108|H107209B48 +107209B48:lI101|H10720CDA8 +10720CDA8:lI46|H10720FFB8 +10720FFB8:lI98|H107213238 +107213238:lI101|H1072165F0 +1072165F0:lI97|H107219B90 +107219B90:lI109|N +1071F2BC8:lH1071F5030|N +1071F5030:lI119|H1071F7868 +1071F7868:lI120|H1071FA4C0 +1071FA4C0:lI77|H1071FD400 +1071FD400:lI97|H1072004B8 +1072004B8:lI120|H107203660 +107203660:lI105|H107206890 +107206890:lI109|H107209B38 +107209B38:lI105|H10720CD98 +10720CD98:lI122|H10720FFA8 +10720FFA8:lI101|H107213228 +107213228:lI69|H1072165E0 +1072165E0:lI118|H107219B80 +107219B80:lI101|H10721D190 +10721D190:lI110|H107220750 +107220750:lI116|H107223A88 +107223A88:lI46|H107226A90 +107226A90:lI98|H1072296C8 +1072296C8:lI101|H10722BF80 +10722BF80:lI97|H10722E568 +10722E568:lI109|N +1071F2BB0:Mn2:H1071F5010,H1071F5020 +1071F5010:lH1071F7848|N +1071F7848:lI119|H1071FA4A0 +1071FA4A0:lI120|H1071FD3E0 +1071FD3E0:lI77|H107200498 +107200498:lI101|H107203640 +107203640:lI115|H107206870 +107206870:lI115|H107209B18 +107209B18:lI97|H10720CD78 +10720CD78:lI103|H10720FF88 +10720FF88:lI101|H107213208 +107213208:lI68|H1072165C0 +1072165C0:lI105|H107219B60 +107219B60:lI97|H10721D170 +10721D170:lI108|H107220730 +107220730:lI111|H107223A68 +107223A68:lI103|H107226A70 +107226A70:lI46|H1072296A8 +1072296A8:lI98|H10722BF60 +10722BF60:lI101|H10722E548 +10722E548:lI97|H107230870 +107230870:lI109|N +1071F5020:lH1071F7858|N +1071F7858:lI119|H1071FA4B0 +1071FA4B0:lI120|H1071FD3F0 +1071FD3F0:lI71|H1072004A8 +1072004A8:lI101|H107203650 +107203650:lI110|H107206880 +107206880:lI101|H107209B28 +107209B28:lI114|H10720CD88 +10720CD88:lI105|H10720FF98 +10720FF98:lI99|H107213218 +107213218:lI68|H1072165D0 +1072165D0:lI105|H107219B70 +107219B70:lI114|H10721D180 +10721D180:lI67|H107220740 +107220740:lI116|H107223A78 +107223A78:lI114|H107226A80 +107226A80:lI108|H1072296B8 +1072296B8:lI46|H10722BF70 +10722BF70:lI98|H10722E558 +10722E558:lI101|H107230880 +107230880:lI97|H107232938 +107232938:lI109|N +1071F2B98:Mn2:H1071F4FF0,H1071F5000 +1071F4FF0:lH1071F7828|N +1071F7828:lI119|H1071FA480 +1071FA480:lI120|H1071FD3C0 +1071FD3C0:lI71|H107200478 +107200478:lI76|H107203620 +107203620:lI67|H107206850 +107206850:lI97|H107209AF8 +107209AF8:lI110|H10720CD58 +10720CD58:lI118|H10720FF68 +10720FF68:lI97|H1072131E8 +1072131E8:lI115|H1072165A0 +1072165A0:lI46|H107219B40 +107219B40:lI98|H10721D160 +10721D160:lI101|H107220720 +107220720:lI97|H107223A58 +107223A58:lI109|N +1071F5000:lH1071F7838|N +1071F7838:lI119|H1071FA490 +1071FA490:lI120|H1071FD3D0 +1071FD3D0:lI83|H107200488 +107200488:lI105|H107203630 +107203630:lI122|H107206860 +107206860:lI101|H107209B08 +107209B08:lI114|H10720CD68 +10720CD68:lI46|H10720FF78 +10720FF78:lI98|H1072131F8 +1072131F8:lI101|H1072165B0 +1072165B0:lI97|H107219B50 +107219B50:lI109|N +1071F1050:MnB:H1071F2A98,H1071F2AB0,H1071F2AC8,H1071F2AE0,H1071F2AF8,H1071F2B18,H1071F2B28,H1071F2B38,H1071F2B50,H1071F2B60,H1071F2B70 +1071F2A98:Mn2:H1071F4EB0,H1071F4EC0 +1071F4EB0:lH1071F76E8|N +1071F76E8:lI119|H1071FA340 +1071FA340:lI120|H1071FD280 +1071FD280:lI80|H107200338 +107200338:lI97|H1072034E0 +1072034E0:lI110|H107206710 +107206710:lI101|H1072099B8 +1072099B8:lI108|H10720CC18 +10720CC18:lI46|H10720FE28 +10720FE28:lI98|H1072130A8 +1072130A8:lI101|H107216460 +107216460:lI97|H107219A10 +107219A10:lI109|N +1071F4EC0:lH1071F76F8|N +1071F76F8:lI119|H1071FA350 +1071FA350:lI120|H1071FD290 +1071FD290:lI83|H107200348 +107200348:lI116|H1072034F0 +1072034F0:lI97|H107206720 +107206720:lI116|H1072099C8 +1072099C8:lI105|H10720CC28 +10720CC28:lI99|H10720FE38 +10720FE38:lI76|H1072130B8 +1072130B8:lI105|H107216470 +107216470:lI110|H107219A20 +107219A20:lI101|H10721D040 +10721D040:lI46|H107220610 +107220610:lI98|H107223948 +107223948:lI101|H107226980 +107226980:lI97|H1072295F8 +1072295F8:lI109|N +1071F2B70:Mn2:H1071F4FC0,H1071F4FD0 +1071F4FC0:lH1071F77F8|N +1071F77F8:lI119|H1071FA450 +1071FA450:lI120|H1071FD390 +1071FD390:lI67|H107200448 +107200448:lI111|H1072035F0 +1072035F0:lI108|H107206820 +107206820:lI111|H107209AC8 +107209AC8:lI117|H10720CD28 +10720CD28:lI114|H10720FF38 +10720FF38:lI80|H1072131B8 +1072131B8:lI105|H107216570 +107216570:lI99|H107219B10 +107219B10:lI107|H10721D130 +10721D130:lI101|H1072206F0 +1072206F0:lI114|H107223A28 +107223A28:lI67|H107226A40 +107226A40:lI116|H107229678 +107229678:lI114|H10722BF30 +10722BF30:lI108|H10722E518 +10722E518:lI46|H107230840 +107230840:lI98|H107232908 +107232908:lI101|H1072346A0 +1072346A0:lI97|H107236148 +107236148:lI109|N +1071F4FD0:lH1071F7808|N +1071F7808:lI119|H1071FA460 +1071FA460:lI120|H1071FD3A0 +1071FD3A0:lI71|H107200458 +107200458:lI114|H107203600 +107203600:lI105|H107206830 +107206830:lI100|H107209AD8 +107209AD8:lI67|H10720CD38 +10720CD38:lI101|H10720FF48 +10720FF48:lI108|H1072131C8 +1072131C8:lI108|H107216580 +107216580:lI66|H107219B20 +107219B20:lI111|H10721D140 +10721D140:lI111|H107220700 +107220700:lI108|H107223A38 +107223A38:lI82|H107226A50 +107226A50:lI101|H107229688 +107229688:lI110|H10722BF40 +10722BF40:lI100|H10722E528 +10722E528:lI101|H107230850 +107230850:lI114|H107232918 +107232918:lI101|H1072346B0 +1072346B0:lI114|H107236158 +107236158:lI46|H1072379A0 +1072379A0:lI98|H107238FF8 +107238FF8:lI101|H10723A490 +10723A490:lI97|H10723B7B0 +10723B7B0:lI109|N +1071F2B60:lH1071F4FB0|N +1071F4FB0:lI119|H1071F77E8 +1071F77E8:lI120|H1071FA440 +1071FA440:lI70|H1071FD380 +1071FD380:lI111|H107200438 +107200438:lI110|H1072035E0 +1072035E0:lI116|H107206810 +107206810:lI68|H107209AB8 +107209AB8:lI105|H10720CD18 +10720CD18:lI97|H10720FF28 +10720FF28:lI108|H1072131A8 +1072131A8:lI111|H107216560 +107216560:lI103|H107219B00 +107219B00:lI46|H10721D120 +10721D120:lI98|H1072206E0 +1072206E0:lI101|H107223A18 +107223A18:lI97|H107226A30 +107226A30:lI109|N +1071F2B50:lH1071F4FA0|N +1071F4FA0:lI119|H1071F77D8 +1071F77D8:lI120|H1071FA430 +1071FA430:lI77|H1071FD370 +1071FD370:lI105|H107200428 +107200428:lI110|H1072035D0 +1072035D0:lI105|H107206800 +107206800:lI70|H107209AA8 +107209AA8:lI114|H10720CD08 +10720CD08:lI97|H10720FF18 +10720FF18:lI109|H107213198 +107213198:lI101|H107216550 +107216550:lI46|H107219AF0 +107219AF0:lI98|H10721D110 +10721D110:lI101|H1072206D0 +1072206D0:lI97|H107223A08 +107223A08:lI109|N +1071F2B38:Mn2:H1071F4F80,H1071F4F90 +1071F4F80:lH1071F77B8|N +1071F77B8:lI119|H1071FA410 +1071FA410:lI120|H1071FD350 +1071FD350:lI71|H107200408 +107200408:lI114|H1072035B0 +1072035B0:lI105|H1072067E0 +1072067E0:lI100|H107209A88 +107209A88:lI67|H10720CCE8 +10720CCE8:lI101|H10720FEF8 +10720FEF8:lI108|H107213178 +107213178:lI108|H107216530 +107216530:lI78|H107219AD0 +107219AD0:lI117|H10721D0F0 +10721D0F0:lI109|H1072206B0 +1072206B0:lI98|H1072239E8 +1072239E8:lI101|H107226A10 +107226A10:lI114|H107229658 +107229658:lI69|H10722BF10 +10722BF10:lI100|H10722E508 +10722E508:lI105|H107230830 +107230830:lI116|H1072328F8 +1072328F8:lI111|H107234690 +107234690:lI114|H107236138 +107236138:lI46|H107237990 +107237990:lI98|H107238FE8 +107238FE8:lI101|H10723A480 +10723A480:lI97|H10723B7A0 +10723B7A0:lI109|N +1071F4F90:lH1071F77C8|N +1071F77C8:lI119|H1071FA420 +1071FA420:lI120|H1071FD360 +1071FD360:lI83|H107200418 +107200418:lI99|H1072035C0 +1072035C0:lI114|H1072067F0 +1072067F0:lI111|H107209A98 +107209A98:lI108|H10720CCF8 +10720CCF8:lI108|H10720FF08 +10720FF08:lI69|H107213188 +107213188:lI118|H107216540 +107216540:lI101|H107219AE0 +107219AE0:lI110|H10721D100 +10721D100:lI116|H1072206C0 +1072206C0:lI46|H1072239F8 +1072239F8:lI98|H107226A20 +107226A20:lI101|H107229668 +107229668:lI97|H10722BF20 +10722BF20:lI109|N +1071F2B28:lH1071F4F70|N +1071F4F70:lI119|H1071F77A8 +1071F77A8:lI120|H1071FA400 +1071FA400:lI83|H1071FD340 +1071FD340:lI112|H1072003F8 +1072003F8:lI108|H1072035A0 +1072035A0:lI97|H1072067D0 +1072067D0:lI115|H107209A78 +107209A78:lI104|H10720CCD8 +10720CCD8:lI83|H10720FEE8 +10720FEE8:lI99|H107213168 +107213168:lI114|H107216520 +107216520:lI101|H107219AC0 +107219AC0:lI101|H10721D0E0 +10721D0E0:lI110|H1072206A0 +1072206A0:lI46|H1072239D8 +1072239D8:lI98|H107226A00 +107226A00:lI101|H107229648 +107229648:lI97|H10722BF00 +10722BF00:lI109|N +1071F2B18:lH1071F4F60|N +1071F4F60:lI119|H1071F7798 +1071F7798:lI120|H1071FA3F0 +1071FA3F0:lI80|H1071FD330 +1071FD330:lI97|H1072003E8 +1072003E8:lI105|H107203590 +107203590:lI110|H1072067C0 +1072067C0:lI116|H107209A68 +107209A68:lI68|H10720CCC8 +10720CCC8:lI67|H10720FED8 +10720FED8:lI46|H107213158 +107213158:lI98|H107216510 +107216510:lI101|H107219AB0 +107219AB0:lI97|H10721D0D0 +10721D0D0:lI109|N +1071F2AF8:Mn3:H1071F4F30,H1071F4F40,H1071F4F50 +1071F4F30:lH1071F7768|N +1071F7768:lI119|H1071FA3C0 +1071FA3C0:lI120|H1071FD300 +1071FD300:lI71|H1072003B8 +1072003B8:lI67|H107203560 +107203560:lI68|H107206790 +107206790:lI67|H107209A38 +107209A38:lI46|H10720CC98 +10720CC98:lI98|H10720FEA8 +10720FEA8:lI101|H107213128 +107213128:lI97|H1072164E0 +1072164E0:lI109|N +1071F4F50:lH1071F7788|N +1071F7788:lI119|H1071FA3E0 +1071FA3E0:lI120|H1071FD320 +1071FD320:lI84|H1072003D8 +1072003D8:lI101|H107203580 +107203580:lI120|H1072067B0 +1072067B0:lI116|H107209A58 +107209A58:lI68|H10720CCB8 +10720CCB8:lI97|H10720FEC8 +10720FEC8:lI116|H107213148 +107213148:lI97|H107216500 +107216500:lI79|H107219AA0 +107219AA0:lI98|H10721D0C0 +10721D0C0:lI106|H107220690 +107220690:lI101|H1072239C8 +1072239C8:lI99|H1072269F0 +1072269F0:lI116|H107229638 +107229638:lI46|H10722BEF0 +10722BEF0:lI98|H10722E4F8 +10722E4F8:lI101|H107230820 +107230820:lI97|H1072328E8 +1072328E8:lI109|N +1071F4F40:lH1071F7778|N +1071F7778:lI119|H1071FA3D0 +1071FA3D0:lI120|H1071FD310 +1071FD310:lI71|H1072003C8 +1072003C8:lI114|H107203570 +107203570:lI97|H1072067A0 +1072067A0:lI112|H107209A48 +107209A48:lI104|H10720CCA8 +10720CCA8:lI105|H10720FEB8 +10720FEB8:lI99|H107213138 +107213138:lI115|H1072164F0 +1072164F0:lI66|H107219A90 +107219A90:lI114|H10721D0B0 +10721D0B0:lI117|H107220680 +107220680:lI115|H1072239B8 +1072239B8:lI104|H1072269E0 +1072269E0:lI46|H107229628 +107229628:lI98|H10722BEE0 +10722BEE0:lI101|H10722E4E8 +10722E4E8:lI97|H107230810 +107230810:lI109|N +1071F2AE0:Mn2:H1071F4F10,H1071F4F20 +1071F4F10:lH1071F7748|N +1071F7748:lI119|H1071FA3A0 +1071FA3A0:lI120|H1071FD2E0 +1071FD2E0:lI67|H107200398 +107200398:lI108|H107203540 +107203540:lI105|H107206770 +107206770:lI112|H107209A18 +107209A18:lI98|H10720CC78 +10720CC78:lI111|H10720FE88 +10720FE88:lI97|H107213108 +107213108:lI114|H1072164C0 +1072164C0:lI100|H107219A70 +107219A70:lI46|H10721D090 +10721D090:lI98|H107220660 +107220660:lI101|H107223998 +107223998:lI97|H1072269C0 +1072269C0:lI109|N +1071F4F20:lH1071F7758|N +1071F7758:lI119|H1071FA3B0 +1071FA3B0:lI120|H1071FD2F0 +1071FD2F0:lI77|H1072003A8 +1072003A8:lI101|H107203550 +107203550:lI110|H107206780 +107206780:lI117|H107209A28 +107209A28:lI69|H10720CC88 +10720CC88:lI118|H10720FE98 +10720FE98:lI101|H107213118 +107213118:lI110|H1072164D0 +1072164D0:lI116|H107219A80 +107219A80:lI46|H10721D0A0 +10721D0A0:lI98|H107220670 +107220670:lI101|H1072239A8 +1072239A8:lI97|H1072269D0 +1072269D0:lI109|N +1071F2AC8:Mn2:H1071F4EF0,H1071F4F00 +1071F4EF0:lH1071F7728|N +1071F7728:lI119|H1071FA380 +1071FA380:lI120|H1071FD2C0 +1071FD2C0:lI67|H107200378 +107200378:lI108|H107203520 +107203520:lI111|H107206750 +107206750:lI115|H1072099F8 +1072099F8:lI101|H10720CC58 +10720CC58:lI69|H10720FE68 +10720FE68:lI118|H1072130E8 +1072130E8:lI101|H1072164A0 +1072164A0:lI110|H107219A50 +107219A50:lI116|H10721D070 +10721D070:lI46|H107220640 +107220640:lI98|H107223978 +107223978:lI101|H1072269A0 +1072269A0:lI97|H107229618 +107229618:lI109|N +1071F4F00:lH1071F7738|N +1071F7738:lI119|H1071FA390 +1071FA390:lI120|H1071FD2D0 +1071FD2D0:lI83|H107200388 +107200388:lI112|H107203530 +107203530:lI105|H107206760 +107206760:lI110|H107209A08 +107209A08:lI69|H10720CC68 +10720CC68:lI118|H10720FE78 +10720FE78:lI101|H1072130F8 +1072130F8:lI110|H1072164B0 +1072164B0:lI116|H107219A60 +107219A60:lI46|H10721D080 +10721D080:lI98|H107220650 +107220650:lI101|H107223988 +107223988:lI97|H1072269B0 +1072269B0:lI109|N +1071F2AB0:Mn2:H1071F4ED0,H1071F4EE0 +1071F4ED0:lH1071F7708|N +1071F7708:lI119|H1071FA360 +1071FA360:lI120|H1071FD2A0 +1071FD2A0:lI83|H107200358 +107200358:lI97|H107203500 +107203500:lI115|H107206730 +107206730:lI104|H1072099D8 +1072099D8:lI76|H10720CC38 +10720CC38:lI97|H10720FE48 +10720FE48:lI121|H1072130C8 +1072130C8:lI111|H107216480 +107216480:lI117|H107219A30 +107219A30:lI116|H10721D050 +10721D050:lI87|H107220620 +107220620:lI105|H107223958 +107223958:lI110|H107226990 +107226990:lI100|H107229608 +107229608:lI111|H10722BED0 +10722BED0:lI119|H10722E4D8 +10722E4D8:lI46|H107230800 +107230800:lI98|H1072328D8 +1072328D8:lI101|H107234680 +107234680:lI97|H107236128 +107236128:lI109|N +1071F4EE0:lH1071F7718|N +1071F7718:lI119|H1071FA370 +1071FA370:lI120|H1071FD2B0 +1071FD2B0:lI66|H107200368 +107200368:lI111|H107203510 +107203510:lI120|H107206740 +107206740:lI83|H1072099E8 +1072099E8:lI105|H10720CC48 +10720CC48:lI122|H10720FE58 +10720FE58:lI101|H1072130D8 +1072130D8:lI114|H107216490 +107216490:lI46|H107219A40 +107219A40:lI98|H10721D060 +10721D060:lI101|H107220630 +107220630:lI97|H107223968 +107223968:lI109|N +1071F1000:Mn9:H1071F29E0,H1071F29F0,H1071F2A08,H1071F2A18,H1071F2A28,H1071F2A48,H1071F2A58,H1071F2A68,H1071F2A78 +1071F29E0:lH1071F4DD0|N +1071F4DD0:lI119|H1071F7608 +1071F7608:lI120|H1071FA260 +1071FA260:lI80|H1071FD1A0 +1071FD1A0:lI105|H107200258 +107200258:lI99|H107203400 +107203400:lI107|H107206630 +107206630:lI101|H1072098D8 +1072098D8:lI114|H10720CB38 +10720CB38:lI66|H10720FD48 +10720FD48:lI97|H107212FC8 +107212FC8:lI115|H107216380 +107216380:lI101|H107219930 +107219930:lI46|H10721CF70 +10721CF70:lI98|H107220550 +107220550:lI101|H107223898 +107223898:lI97|H1072268D0 +1072268D0:lI109|N +1071F2A78:Mn3:H1071F4E80,H1071F4E90,H1071F4EA0 +1071F4E80:lH1071F76B8|N +1071F76B8:lI119|H1071FA310 +1071FA310:lI120|H1071FD250 +1071FD250:lI71|H107200308 +107200308:lI114|H1072034B0 +1072034B0:lI105|H1072066E0 +1072066E0:lI100|H107209988 +107209988:lI67|H10720CBE8 +10720CBE8:lI101|H10720FDF8 +10720FDF8:lI108|H107213078 +107213078:lI108|H107216430 +107216430:lI69|H1072199E0 +1072199E0:lI100|H10721D010 +10721D010:lI105|H1072205E0 +1072205E0:lI116|H107223918 +107223918:lI111|H107226950 +107226950:lI114|H1072295C8 +1072295C8:lI46|H10722BEA0 +10722BEA0:lI98|H10722E4A8 +10722E4A8:lI101|H1072307D0 +1072307D0:lI97|H1072328A8 +1072328A8:lI109|N +1071F4EA0:lH1071F76D8|N +1071F76D8:lI119|H1071FA330 +1071FA330:lI120|H1071FD270 +1071FD270:lI71|H107200328 +107200328:lI114|H1072034D0 +1072034D0:lI105|H107206700 +107206700:lI100|H1072099A8 +1072099A8:lI67|H10720CC08 +10720CC08:lI101|H10720FE18 +10720FE18:lI108|H107213098 +107213098:lI108|H107216450 +107216450:lI83|H107219A00 +107219A00:lI116|H10721D030 +10721D030:lI114|H107220600 +107220600:lI105|H107223938 +107223938:lI110|H107226970 +107226970:lI103|H1072295E8 +1072295E8:lI82|H10722BEC0 +10722BEC0:lI101|H10722E4C8 +10722E4C8:lI110|H1072307F0 +1072307F0:lI100|H1072328C8 +1072328C8:lI101|H107234670 +107234670:lI114|H107236118 +107236118:lI101|H107237980 +107237980:lI114|H107238FD8 +107238FD8:lI46|H10723A470 +10723A470:lI98|H10723B790 +10723B790:lI101|H10723C840 +10723C840:lI97|H10723D6D0 +10723D6D0:lI109|N +1071F4E90:lH1071F76C8|N +1071F76C8:lI119|H1071FA320 +1071FA320:lI120|H1071FD260 +1071FD260:lI83|H107200318 +107200318:lI116|H1072034C0 +1072034C0:lI121|H1072066F0 +1072066F0:lI108|H107209998 +107209998:lI101|H10720CBF8 +10720CBF8:lI100|H10720FE08 +10720FE08:lI84|H107213088 +107213088:lI101|H107216440 +107216440:lI120|H1072199F0 +1072199F0:lI116|H10721D020 +10721D020:lI69|H1072205F0 +1072205F0:lI118|H107223928 +107223928:lI101|H107226960 +107226960:lI110|H1072295D8 +1072295D8:lI116|H10722BEB0 +10722BEB0:lI46|H10722E4B8 +10722E4B8:lI98|H1072307E0 +1072307E0:lI101|H1072328B8 +1072328B8:lI97|H107234660 +107234660:lI109|N +1071F2A68:lH1071F4E70|N +1071F4E70:lI119|H1071F76A8 +1071F76A8:lI120|H1071FA300 +1071FA300:lI83|H1071FD240 +1071FD240:lI105|H1072002F8 +1072002F8:lI122|H1072034A0 +1072034A0:lI101|H1072066D0 +1072066D0:lI114|H107209978 +107209978:lI70|H10720CBD8 +10720CBD8:lI108|H10720FDE8 +10720FDE8:lI97|H107213068 +107213068:lI103|H107216420 +107216420:lI115|H1072199D0 +1072199D0:lI46|H10721D000 +10721D000:lI98|H1072205D0 +1072205D0:lI101|H107223908 +107223908:lI97|H107226940 +107226940:lI109|N +1071F2A58:lH1071F4E60|N +1071F4E60:lI119|H1071F7698 +1071F7698:lI120|H1071FA2F0 +1071FA2F0:lI77|H1071FD230 +1071FD230:lI117|H1072002E8 +1072002E8:lI108|H107203490 +107203490:lI116|H1072066C0 +1072066C0:lI105|H107209968 +107209968:lI67|H10720CBC8 +10720CBC8:lI104|H10720FDD8 +10720FDD8:lI111|H107213058 +107213058:lI105|H107216410 +107216410:lI99|H1072199C0 +1072199C0:lI101|H10721CFF0 +10721CFF0:lI68|H1072205C0 +1072205C0:lI105|H1072238F8 +1072238F8:lI97|H107226930 +107226930:lI108|H1072295B8 +1072295B8:lI111|H10722BE90 +10722BE90:lI103|H10722E498 +10722E498:lI46|H1072307C0 +1072307C0:lI98|H107232898 +107232898:lI101|H107234650 +107234650:lI97|H107236108 +107236108:lI109|N +1071F2A48:lH1071F4E50|N +1071F4E50:lI119|H1071F7688 +1071F7688:lI120|H1071FA2E0 +1071FA2E0:lI67|H1071FD220 +1071FD220:lI111|H1072002D8 +1072002D8:lI109|H107203480 +107203480:lI98|H1072066B0 +1072066B0:lI111|H107209958 +107209958:lI66|H10720CBB8 +10720CBB8:lI111|H10720FDC8 +10720FDC8:lI120|H107213048 +107213048:lI46|H107216400 +107216400:lI98|H1072199B0 +1072199B0:lI101|H10721CFE0 +10721CFE0:lI97|H1072205B0 +1072205B0:lI109|N +1071F2A28:Mn3:H1071F4E20,H1071F4E30,H1071F4E40 +1071F4E20:lH1071F7658|N +1071F7658:lI119|H1071FA2B0 +1071FA2B0:lI120|H1071FD1F0 +1071FD1F0:lI80|H1072002A8 +1072002A8:lI97|H107203450 +107203450:lI115|H107206680 +107206680:lI115|H107209928 +107209928:lI119|H10720CB88 +10720CB88:lI111|H10720FD98 +10720FD98:lI114|H107213018 +107213018:lI100|H1072163D0 +1072163D0:lI69|H107219980 +107219980:lI110|H10721CFB0 +10721CFB0:lI116|H107220580 +107220580:lI114|H1072238C8 +1072238C8:lI121|H107226900 +107226900:lI68|H107229588 +107229588:lI105|H10722BE60 +10722BE60:lI97|H10722E478 +10722E478:lI108|H1072307A0 +1072307A0:lI111|H107232878 +107232878:lI103|H107234630 +107234630:lI46|H1072360E8 +1072360E8:lI98|H107237960 +107237960:lI101|H107238FB8 +107238FB8:lI97|H10723A460 +10723A460:lI109|N +1071F4E40:lH1071F7678|N +1071F7678:lI119|H1071FA2D0 +1071FA2D0:lI120|H1071FD210 +1071FD210:lI65|H1072002C8 +1072002C8:lI114|H107203470 +107203470:lI116|H1072066A0 +1072066A0:lI80|H107209948 +107209948:lI114|H10720CBA8 +10720CBA8:lI111|H10720FDB8 +10720FDB8:lI118|H107213038 +107213038:lI105|H1072163F0 +1072163F0:lI100|H1072199A0 +1072199A0:lI101|H10721CFD0 +10721CFD0:lI114|H1072205A0 +1072205A0:lI46|H1072238E8 +1072238E8:lI98|H107226920 +107226920:lI101|H1072295A8 +1072295A8:lI97|H10722BE80 +10722BE80:lI109|N +1071F4E30:lH1071F7668|N +1071F7668:lI119|H1071FA2C0 +1071FA2C0:lI120|H1071FD200 +1071FD200:lI83|H1072002B8 +1072002B8:lI105|H107203460 +107203460:lI110|H107206690 +107206690:lI103|H107209938 +107209938:lI108|H10720CB98 +10720CB98:lI101|H10720FDA8 +10720FDA8:lI67|H107213028 +107213028:lI104|H1072163E0 +1072163E0:lI111|H107219990 +107219990:lI105|H10721CFC0 +10721CFC0:lI99|H107220590 +107220590:lI101|H1072238D8 +1072238D8:lI68|H107226910 +107226910:lI105|H107229598 +107229598:lI97|H10722BE70 +10722BE70:lI108|H10722E488 +10722E488:lI111|H1072307B0 +1072307B0:lI103|H107232888 +107232888:lI46|H107234640 +107234640:lI98|H1072360F8 +1072360F8:lI101|H107237970 +107237970:lI97|H107238FC8 +107238FC8:lI109|N +1071F2A18:lH1071F4E10|N +1071F4E10:lI119|H1071F7648 +1071F7648:lI120|H1071FA2A0 +1071FA2A0:lI95|H1071FD1E0 +1071FD1E0:lI111|H107200298 +107200298:lI98|H107203440 +107203440:lI106|H107206670 +107206670:lI101|H107209918 +107209918:lI99|H10720CB78 +10720CB78:lI116|H10720FD88 +10720FD88:lI46|H107213008 +107213008:lI98|H1072163C0 +1072163C0:lI101|H107219970 +107219970:lI97|H10721CFA0 +10721CFA0:lI109|N +1071F2A08:lH1071F4E00|N +1071F4E00:lI119|H1071F7638 +1071F7638:lI120|H1071FA290 +1071FA290:lI65|H1071FD1D0 +1071FD1D0:lI99|H107200288 +107200288:lI99|H107203430 +107203430:lI101|H107206660 +107206660:lI108|H107209908 +107209908:lI101|H10720CB68 +10720CB68:lI114|H10720FD78 +10720FD78:lI97|H107212FF8 +107212FF8:lI116|H1072163B0 +1072163B0:lI111|H107219960 +107219960:lI114|H10721CF90 +10721CF90:lI69|H107220570 +107220570:lI110|H1072238B8 +1072238B8:lI116|H1072268F0 +1072268F0:lI114|H107229578 +107229578:lI121|H10722BE50 +10722BE50:lI46|H10722E468 +10722E468:lI98|H107230790 +107230790:lI101|H107232868 +107232868:lI97|H107234620 +107234620:lI109|N +1071F29F0:Mn2:H1071F4DE0,H1071F4DF0 +1071F4DE0:lH1071F7618|N +1071F7618:lI119|H1071FA270 +1071FA270:lI120|H1071FD1B0 +1071FD1B0:lI70|H107200268 +107200268:lI114|H107203410 +107203410:lI97|H107206640 +107206640:lI109|H1072098E8 +1072098E8:lI101|H10720CB48 +10720CB48:lI46|H10720FD58 +10720FD58:lI98|H107212FD8 +107212FD8:lI101|H107216390 +107216390:lI97|H107219940 +107219940:lI109|N +1071F4DF0:lH1071F7628|N +1071F7628:lI119|H1071FA280 +1071FA280:lI120|H1071FD1C0 +1071FD1C0:lI67|H107200278 +107200278:lI104|H107203420 +107203420:lI105|H107206650 +107206650:lI108|H1072098F8 +1072098F8:lI100|H10720CB58 +10720CB58:lI70|H10720FD68 +10720FD68:lI111|H107212FE8 +107212FE8:lI99|H1072163A0 +1072163A0:lI117|H107219950 +107219950:lI115|H10721CF80 +10721CF80:lI69|H107220560 +107220560:lI118|H1072238A8 +1072238A8:lI101|H1072268E0 +1072268E0:lI110|H107229568 +107229568:lI116|H10722BE40 +10722BE40:lI46|H10722E458 +10722E458:lI98|H107230780 +107230780:lI101|H107232858 +107232858:lI97|H107234610 +107234610:lI109|N +1071F0FA0:MnB:H1071F28F8,H1071F2908,H1071F2918,H1071F2928,H1071F2938,H1071F2948,H1071F2978,H1071F2990,H1071F29A0,H1071F29B8,H1071F29D0 +1071F28F8:lH1071F4CA8|N +1071F4CA8:lI119|H1071F74D8 +1071F74D8:lI120|H1071FA130 +1071FA130:lI71|H1071FD070 +1071FD070:lI76|H107200128 +107200128:lI67|H1072032D0 +1072032D0:lI111|H107206500 +107206500:lI110|H1072097B8 +1072097B8:lI116|H10720CA18 +10720CA18:lI101|H10720FC28 +10720FC28:lI120|H107212EA8 +107212EA8:lI116|H107216260 +107216260:lI46|H107219810 +107219810:lI98|H10721CE50 +10721CE50:lI101|H107220440 +107220440:lI97|H1072237B8 +1072237B8:lI109|N +1071F29D0:lH1071F4DC0|N +1071F4DC0:lI119|H1071F75F8 +1071F75F8:lI120|H1071FA250 +1071FA250:lI78|H1071FD190 +1071FD190:lI111|H107200248 +107200248:lI116|H1072033F0 +1072033F0:lI101|H107206620 +107206620:lI98|H1072098C8 +1072098C8:lI111|H10720CB28 +10720CB28:lI111|H10720FD38 +10720FD38:lI107|H107212FB8 +107212FB8:lI46|H107216370 +107216370:lI98|H107219920 +107219920:lI101|H10721CF60 +10721CF60:lI97|H107220540 +107220540:lI109|N +1071F29B8:Mn2:H1071F4DA0,H1071F4DB0 +1071F4DA0:lH1071F75D8|N +1071F75D8:lI119|H1071FA230 +1071FA230:lI120|H1071FD170 +1071FD170:lI76|H107200228 +107200228:lI105|H1072033D0 +1072033D0:lI115|H107206600 +107206600:lI116|H1072098A8 +1072098A8:lI69|H10720CB08 +10720CB08:lI118|H10720FD18 +10720FD18:lI101|H107212F98 +107212F98:lI110|H107216350 +107216350:lI116|H107219900 +107219900:lI46|H10721CF40 +10721CF40:lI98|H107220520 +107220520:lI101|H107223878 +107223878:lI97|H1072268B0 +1072268B0:lI109|N +1071F4DB0:lH1071F75E8|N +1071F75E8:lI119|H1071FA240 +1071FA240:lI120|H1071FD180 +1071FD180:lI65|H107200238 +107200238:lI117|H1072033E0 +1072033E0:lI105|H107206610 +107206610:lI77|H1072098B8 +1072098B8:lI97|H10720CB18 +10720CB18:lI110|H10720FD28 +10720FD28:lI97|H107212FA8 +107212FA8:lI103|H107216360 +107216360:lI101|H107219910 +107219910:lI114|H10721CF50 +10721CF50:lI46|H107220530 +107220530:lI98|H107223888 +107223888:lI101|H1072268C0 +1072268C0:lI97|H107229558 +107229558:lI109|N +1071F29A0:Mn2:H1071F4D80,H1071F4D90 +1071F4D80:lH1071F75B8|N +1071F75B8:lI119|H1071FA210 +1071FA210:lI120|H1071FD150 +1071FD150:lI87|H107200208 +107200208:lI105|H1072033B0 +1072033B0:lI110|H1072065E0 +1072065E0:lI100|H107209888 +107209888:lI111|H10720CAE8 +10720CAE8:lI119|H10720FCF8 +10720FCF8:lI46|H107212F78 +107212F78:lI98|H107216330 +107216330:lI101|H1072198E0 +1072198E0:lI97|H10721CF20 +10721CF20:lI109|N +1071F4D90:lH1071F75C8|N +1071F75C8:lI119|H1071FA220 +1071FA220:lI120|H1071FD160 +1071FD160:lI80|H107200218 +107200218:lI97|H1072033C0 +1072033C0:lI108|H1072065F0 +1072065F0:lI101|H107209898 +107209898:lI116|H10720CAF8 +10720CAF8:lI116|H10720FD08 +10720FD08:lI101|H107212F88 +107212F88:lI46|H107216340 +107216340:lI98|H1072198F0 +1072198F0:lI101|H10721CF30 +10721CF30:lI97|H107220510 +107220510:lI109|N +1071F2990:lH1071F4D70|N +1071F4D70:lI119|H1071F75A8 +1071F75A8:lI120|H1071FA200 +1071FA200:lI67|H1071FD140 +1071FD140:lI97|H1072001F8 +1072001F8:lI108|H1072033A0 +1072033A0:lI101|H1072065D0 +1072065D0:lI110|H107209878 +107209878:lI100|H10720CAD8 +10720CAD8:lI97|H10720FCE8 +10720FCE8:lI114|H107212F68 +107212F68:lI68|H107216320 +107216320:lI97|H1072198D0 +1072198D0:lI116|H10721CF10 +10721CF10:lI101|H107220500 +107220500:lI65|H107223868 +107223868:lI116|H1072268A0 +1072268A0:lI116|H107229548 +107229548:lI114|H10722BE30 +10722BE30:lI46|H10722E448 +10722E448:lI98|H107230770 +107230770:lI101|H107232848 +107232848:lI97|H107234600 +107234600:lI109|N +1071F2978:Mn2:H1071F4D50,H1071F4D60 +1071F4D50:lH1071F7588|N +1071F7588:lI119|H1071FA1E0 +1071FA1E0:lI120|H1071FD120 +1071FD120:lI84|H1072001D8 +1072001D8:lI101|H107203380 +107203380:lI120|H1072065B0 +1072065B0:lI116|H107209858 +107209858:lI69|H10720CAB8 +10720CAB8:lI110|H10720FCC8 +10720FCC8:lI116|H107212F48 +107212F48:lI114|H107216300 +107216300:lI121|H1072198B0 +1072198B0:lI68|H10721CEF0 +10721CEF0:lI105|H1072204E0 +1072204E0:lI97|H107223858 +107223858:lI108|H107226890 +107226890:lI111|H107229538 +107229538:lI103|H10722BE20 +10722BE20:lI46|H10722E438 +10722E438:lI98|H107230760 +107230760:lI101|H107232838 +107232838:lI97|H1072345F0 +1072345F0:lI109|N +1071F4D60:lH1071F7598|N +1071F7598:lI119|H1071FA1F0 +1071FA1F0:lI120|H1071FD130 +1071FD130:lI84|H1072001E8 +1072001E8:lI111|H107203390 +107203390:lI111|H1072065C0 +1072065C0:lI108|H107209868 +107209868:lI84|H10720CAC8 +10720CAC8:lI105|H10720FCD8 +10720FCD8:lI112|H107212F58 +107212F58:lI46|H107216310 +107216310:lI98|H1072198C0 +1072198C0:lI101|H10721CF00 +10721CF00:lI97|H1072204F0 +1072204F0:lI109|N +1071F2948:Mn5:H1071F4CF8,H1071F4D10,H1071F4D20,H1071F4D30,H1071F4D40 +1071F4CF8:Mn2:H1071F7528,H1071F7538 +1071F7528:lH1071FA180|N +1071FA180:lI119|H1071FD0C0 +1071FD0C0:lI120|H107200178 +107200178:lI83|H107203320 +107203320:lI116|H107206550 +107206550:lI100|H1072097F8 +1072097F8:lI68|H10720CA58 +10720CA58:lI105|H10720FC68 +10720FC68:lI97|H107212EE8 +107212EE8:lI108|H1072162A0 +1072162A0:lI111|H107219850 +107219850:lI103|H10721CE90 +10721CE90:lI66|H107220480 +107220480:lI117|H1072237F8 +1072237F8:lI116|H107226850 +107226850:lI116|H1072294F8 +1072294F8:lI111|H10722BE00 +10722BE00:lI110|H10722E418 +10722E418:lI83|H107230750 +107230750:lI105|H107232828 +107232828:lI122|H1072345E0 +1072345E0:lI101|H1072360D8 +1072360D8:lI114|H107237950 +107237950:lI46|H107238FA8 +107238FA8:lI98|H10723A450 +10723A450:lI101|H10723B780 +10723B780:lI97|H10723C830 +10723C830:lI109|N +1071F7538:lH1071FA190|N +1071FA190:lI119|H1071FD0D0 +1071FD0D0:lI120|H107200188 +107200188:lI83|H107203330 +107203330:lI116|H107206560 +107206560:lI97|H107209808 +107209808:lI116|H10720CA68 +10720CA68:lI105|H10720FC78 +10720FC78:lI99|H107212EF8 +107212EF8:lI66|H1072162B0 +1072162B0:lI111|H107219860 +107219860:lI120|H10721CEA0 +10721CEA0:lI46|H107220490 +107220490:lI98|H107223808 +107223808:lI101|H107226860 +107226860:lI97|H107229508 +107229508:lI109|N +1071F4D40:lH1071F7578|N +1071F7578:lI119|H1071FA1D0 +1071FA1D0:lI120|H1071FD110 +1071FD110:lI73|H1072001C8 +1072001C8:lI99|H107203370 +107203370:lI111|H1072065A0 +1072065A0:lI110|H107209848 +107209848:lI66|H10720CAA8 +10720CAA8:lI117|H10720FCB8 +10720FCB8:lI110|H107212F38 +107212F38:lI100|H1072162F0 +1072162F0:lI108|H1072198A0 +1072198A0:lI101|H10721CEE0 +10721CEE0:lI46|H1072204D0 +1072204D0:lI98|H107223848 +107223848:lI101|H107226880 +107226880:lI97|H107229528 +107229528:lI109|N +1071F4D30:lH1071F7568|N +1071F7568:lI119|H1071FA1C0 +1071FA1C0:lI120|H1071FD100 +1071FD100:lI84|H1072001B8 +1072001B8:lI114|H107203360 +107203360:lI101|H107206590 +107206590:lI101|H107209838 +107209838:lI67|H10720CA98 +10720CA98:lI116|H10720FCA8 +10720FCA8:lI114|H107212F28 +107212F28:lI108|H1072162E0 +1072162E0:lI46|H107219890 +107219890:lI98|H10721CED0 +10721CED0:lI101|H1072204C0 +1072204C0:lI97|H107223838 +107223838:lI109|N +1071F4D20:lH1071F7558|N +1071F7558:lI119|H1071FA1B0 +1071FA1B0:lI120|H1071FD0F0 +1071FD0F0:lI67|H1072001A8 +1072001A8:lI97|H107203350 +107203350:lI108|H107206580 +107206580:lI101|H107209828 +107209828:lI110|H10720CA88 +10720CA88:lI100|H10720FC98 +10720FC98:lI97|H107212F18 +107212F18:lI114|H1072162D0 +1072162D0:lI67|H107219880 +107219880:lI116|H10721CEC0 +10721CEC0:lI114|H1072204B0 +1072204B0:lI108|H107223828 +107223828:lI46|H107226870 +107226870:lI98|H107229518 +107229518:lI101|H10722BE10 +10722BE10:lI97|H10722E428 +10722E428:lI109|N +1071F4D10:lH1071F7548|N +1071F7548:lI119|H1071FA1A0 +1071FA1A0:lI120|H1071FD0E0 +1071FD0E0:lI82|H107200198 +107200198:lI97|H107203340 +107203340:lI100|H107206570 +107206570:lI105|H107209818 +107209818:lI111|H10720CA78 +10720CA78:lI66|H10720FC88 +10720FC88:lI111|H107212F08 +107212F08:lI120|H1072162C0 +1072162C0:lI46|H107219870 +107219870:lI98|H10721CEB0 +10721CEB0:lI101|H1072204A0 +1072204A0:lI97|H107223818 +107223818:lI109|N +1071F2938:lH1071F4CE8|N +1071F4CE8:lI119|H1071F7518 +1071F7518:lI120|H1071FA170 +1071FA170:lI84|H1071FD0B0 +1071FD0B0:lI97|H107200168 +107200168:lI115|H107203310 +107203310:lI107|H107206540 +107206540:lI66|H1072097E8 +1072097E8:lI97|H10720CA48 +10720CA48:lI114|H10720FC58 +10720FC58:lI73|H107212ED8 +107212ED8:lI99|H107216290 +107216290:lI111|H107219840 +107219840:lI110|H10721CE80 +10721CE80:lI69|H107220470 +107220470:lI118|H1072237E8 +1072237E8:lI101|H107226840 +107226840:lI110|H1072294E8 +1072294E8:lI116|H10722BDF0 +10722BDF0:lI46|H10722E408 +10722E408:lI98|H107230740 +107230740:lI101|H107232818 +107232818:lI97|H1072345D0 +1072345D0:lI109|N +1071F2928:lH1071F4CD8|N +1071F4CD8:lI119|H1071F7508 +1071F7508:lI120|H1071FA160 +1071FA160:lI70|H1071FD0A0 +1071FD0A0:lI105|H107200158 +107200158:lI108|H107203300 +107203300:lI101|H107206530 +107206530:lI80|H1072097D8 +1072097D8:lI105|H10720CA38 +10720CA38:lI99|H10720FC48 +10720FC48:lI107|H107212EC8 +107212EC8:lI101|H107216280 +107216280:lI114|H107219830 +107219830:lI67|H10721CE70 +10721CE70:lI116|H107220460 +107220460:lI114|H1072237D8 +1072237D8:lI108|H107226830 +107226830:lI46|H1072294D8 +1072294D8:lI98|H10722BDE0 +10722BDE0:lI101|H10722E3F8 +10722E3F8:lI97|H107230730 +107230730:lI109|N +1071F2918:lH1071F4CC8|N +1071F4CC8:lI119|H1071F74F8 +1071F74F8:lI120|H1071FA150 +1071FA150:lI80|H1071FD090 +1071FD090:lI97|H107200148 +107200148:lI105|H1072032F0 +1072032F0:lI110|H107206520 +107206520:lI116|H1072097C8 +1072097C8:lI69|H10720CA28 +10720CA28:lI118|H10720FC38 +10720FC38:lI101|H107212EB8 +107212EB8:lI110|H107216270 +107216270:lI116|H107219820 +107219820:lI46|H10721CE60 +10721CE60:lI98|H107220450 +107220450:lI101|H1072237C8 +1072237C8:lI97|H107226820 +107226820:lI109|N +1071F2908:lH1071F4CB8|N +1071F4CB8:lI103|H1071F74E8 +1071F74E8:lI108|H1071FA140 +1071FA140:lI46|H1071FD080 +1071FD080:lI98|H107200138 +107200138:lI101|H1072032E0 +1072032E0:lI97|H107206510 +107206510:lI109|N +1071F0F50:Mn9:H1071F2858,H1071F2868,H1071F2878,H1071F2890,H1071F28A0,H1071F28B0,H1071F28C8,H1071F28D8,H1071F28E8 +1071F2858:lH1071F4BF8|N +1071F4BF8:lI119|H1071F7428 +1071F7428:lI120|H1071FA080 +1071FA080:lI70|H1071FCFC0 +1071FCFC0:lI111|H107200078 +107200078:lI110|H107203220 +107203220:lI116|H107206450 +107206450:lI80|H107209708 +107209708:lI105|H10720C968 +10720C968:lI99|H10720FB78 +10720FB78:lI107|H107212E08 +107212E08:lI101|H1072161C0 +1072161C0:lI114|H107219780 +107219780:lI67|H10721CDD0 +10721CDD0:lI116|H1072203D0 +1072203D0:lI114|H107223758 +107223758:lI108|H1072267D0 +1072267D0:lI46|H107229488 +107229488:lI98|H10722BD90 +10722BD90:lI101|H10722E3A8 +10722E3A8:lI97|H1072306F0 +1072306F0:lI109|N +1071F28E8:lH1071F4C98|N +1071F4C98:lI119|H1071F74C8 +1071F74C8:lI120|H1071FA120 +1071FA120:lI76|H1071FD060 +1071FD060:lI105|H107200118 +107200118:lI115|H1072032C0 +1072032C0:lI116|H1072064F0 +1072064F0:lI66|H1072097A8 +1072097A8:lI111|H10720CA08 +10720CA08:lI120|H10720FC18 +10720FC18:lI46|H107212E98 +107212E98:lI98|H107216250 +107216250:lI101|H107219800 +107219800:lI97|H10721CE40 +10721CE40:lI109|N +1071F28D8:lH1071F4C88|N +1071F4C88:lI119|H1071F74B8 +1071F74B8:lI120|H1071FA110 +1071FA110:lI83|H1071FD050 +1071FD050:lI104|H107200108 +107200108:lI111|H1072032B0 +1072032B0:lI119|H1072064E0 +1072064E0:lI69|H107209798 +107209798:lI118|H10720C9F8 +10720C9F8:lI101|H10720FC08 +10720FC08:lI110|H107212E88 +107212E88:lI116|H107216240 +107216240:lI46|H1072197F0 +1072197F0:lI98|H10721CE30 +10721CE30:lI101|H107220430 +107220430:lI97|H1072237A8 +1072237A8:lI109|N +1071F28C8:lH1071F4C78|N +1071F4C78:lI119|H1071F74A8 +1071F74A8:lI120|H1071FA100 +1071FA100:lI71|H1071FD040 +1071FD040:lI114|H1072000F8 +1072000F8:lI105|H1072032A0 +1072032A0:lI100|H1072064D0 +1072064D0:lI67|H107209788 +107209788:lI101|H10720C9E8 +10720C9E8:lI108|H10720FBF8 +10720FBF8:lI108|H107212E78 +107212E78:lI66|H107216230 +107216230:lI111|H1072197E0 +1072197E0:lI111|H10721CE20 +10721CE20:lI108|H107220420 +107220420:lI69|H107223798 +107223798:lI100|H107226810 +107226810:lI105|H1072294C8 +1072294C8:lI116|H10722BDD0 +10722BDD0:lI111|H10722E3E8 +10722E3E8:lI114|H107230720 +107230720:lI46|H107232808 +107232808:lI98|H1072345C0 +1072345C0:lI101|H1072360C8 +1072360C8:lI97|H107237940 +107237940:lI109|N +1071F28B0:Mn2:H1071F4C58,H1071F4C68 +1071F4C58:lH1071F7488|N +1071F7488:lI119|H1071FA0E0 +1071FA0E0:lI120|H1071FD020 +1071FD020:lI77|H1072000D8 +1072000D8:lI68|H107203280 +107203280:lI73|H1072064B0 +1072064B0:lI67|H107209768 +107209768:lI108|H10720C9C8 +10720C9C8:lI105|H10720FBD8 +10720FBD8:lI101|H107212E58 +107212E58:lI110|H107216210 +107216210:lI116|H1072197C0 +1072197C0:lI87|H10721CE00 +10721CE00:lI105|H107220400 +107220400:lI110|H107223788 +107223788:lI100|H107226800 +107226800:lI111|H1072294B8 +1072294B8:lI119|H10722BDC0 +10722BDC0:lI46|H10722E3D8 +10722E3D8:lI98|H107230710 +107230710:lI101|H1072327F8 +1072327F8:lI97|H1072345B0 +1072345B0:lI109|N +1071F4C68:lH1071F7498|N +1071F7498:lI119|H1071FA0F0 +1071FA0F0:lI120|H1071FD030 +1071FD030:lI68|H1072000E8 +1072000E8:lI105|H107203290 +107203290:lI115|H1072064C0 +1072064C0:lI112|H107209778 +107209778:lI108|H10720C9D8 +10720C9D8:lI97|H10720FBE8 +10720FBE8:lI121|H107212E68 +107212E68:lI46|H107216220 +107216220:lI98|H1072197D0 +1072197D0:lI101|H10721CE10 +10721CE10:lI97|H107220410 +107220410:lI109|N +1071F28A0:lH1071F4C48|N +1071F4C48:lI119|H1071F7478 +1071F7478:lI120|H1071FA0D0 +1071FA0D0:lI66|H1071FD010 +1071FD010:lI105|H1072000C8 +1072000C8:lI116|H107203270 +107203270:lI109|H1072064A0 +1072064A0:lI97|H107209758 +107209758:lI112|H10720C9B8 +10720C9B8:lI46|H10720FBC8 +10720FBC8:lI98|H107212E48 +107212E48:lI101|H107216200 +107216200:lI97|H1072197B0 +1072197B0:lI109|N +1071F2890:lH1071F4C38|N +1071F4C38:lI119|H1071F7468 +1071F7468:lI120|H1071FA0C0 +1071FA0C0:lI80|H1071FD000 +1071FD000:lI101|H1072000B8 +1072000B8:lI110|H107203260 +107203260:lI46|H107206490 +107206490:lI98|H107209748 +107209748:lI101|H10720C9A8 +10720C9A8:lI97|H10720FBB8 +10720FBB8:lI109|N +1071F2878:Mn2:H1071F4C18,H1071F4C28 +1071F4C18:lH1071F7448|N +1071F7448:lI119|H1071FA0A0 +1071FA0A0:lI120|H1071FCFE0 +1071FCFE0:lI71|H107200098 +107200098:lI114|H107203240 +107203240:lI97|H107206470 +107206470:lI112|H107209728 +107209728:lI104|H10720C988 +10720C988:lI105|H10720FB98 +10720FB98:lI99|H107212E28 +107212E28:lI115|H1072161E0 +1072161E0:lI67|H1072197A0 +1072197A0:lI111|H10721CDF0 +10721CDF0:lI110|H1072203F0 +1072203F0:lI116|H107223778 +107223778:lI101|H1072267F0 +1072267F0:lI120|H1072294A8 +1072294A8:lI116|H10722BDB0 +10722BDB0:lI46|H10722E3C8 +10722E3C8:lI98|H107230700 +107230700:lI101|H1072327E8 +1072327E8:lI97|H1072345A0 +1072345A0:lI109|N +1071F4C28:lH1071F7458|N +1071F7458:lI119|H1071FA0B0 +1071FA0B0:lI120|H1071FCFF0 +1071FCFF0:lI77|H1072000A8 +1072000A8:lI97|H107203250 +107203250:lI115|H107206480 +107206480:lI107|H107209738 +107209738:lI46|H10720C998 +10720C998:lI98|H10720FBA8 +10720FBA8:lI101|H107212E38 +107212E38:lI97|H1072161F0 +1072161F0:lI109|N +1071F2868:lH1071F4C08|N +1071F4C08:lI119|H1071F7438 +1071F7438:lI120|H1071FA090 +1071FA090:lI83|H1071FCFD0 +1071FCFD0:lI112|H107200088 +107200088:lI108|H107203230 +107203230:lI105|H107206460 +107206460:lI116|H107209718 +107209718:lI116|H10720C978 +10720C978:lI101|H10720FB88 +10720FB88:lI114|H107212E18 +107212E18:lI69|H1072161D0 +1072161D0:lI118|H107219790 +107219790:lI101|H10721CDE0 +10721CDE0:lI110|H1072203E0 +1072203E0:lI116|H107223768 +107223768:lI46|H1072267E0 +1072267E0:lI98|H107229498 +107229498:lI101|H10722BDA0 +10722BDA0:lI97|H10722E3B8 +10722E3B8:lI109|N +1071F0EF8:MnA:H1071F27A8,H1071F27C0,H1071F27D0,H1071F27E8,H1071F27F8,H1071F2808,H1071F2818,H1071F2828,H1071F2838,H1071F2848 +1071F27A8:Mn2:H1071F4B30,H1071F4B40 +1071F4B30:lH1071F7358|N +1071F7358:lI119|H1071F9FB0 +1071F9FB0:lI120|H1071FCEF0 +1071FCEF0:lI72|H1071FFFA8 +1071FFFA8:lI116|H107203150 +107203150:lI109|H107206380 +107206380:lI108|H107209638 +107209638:lI87|H10720C898 +10720C898:lI105|H10720FAA8 +10720FAA8:lI110|H107212D38 +107212D38:lI100|H1072160F0 +1072160F0:lI111|H1072196C0 +1072196C0:lI119|H10721CD30 +10721CD30:lI46|H107220330 +107220330:lI98|H1072236D8 +1072236D8:lI101|H107226750 +107226750:lI97|H107229418 +107229418:lI109|N +1071F4B40:lH1071F7368|N +1071F7368:lI119|H1071F9FC0 +1071F9FC0:lI120|H1071FCF00 +1071FCF00:lI67|H1071FFFB8 +1071FFFB8:lI97|H107203160 +107203160:lI114|H107206390 +107206390:lI101|H107209648 +107209648:lI116|H10720C8A8 +10720C8A8:lI46|H10720FAB8 +10720FAB8:lI98|H107212D48 +107212D48:lI101|H107216100 +107216100:lI97|H1072196D0 +1072196D0:lI109|N +1071F2848:lH1071F4BE8|N +1071F4BE8:lI119|H1071F7418 +1071F7418:lI120|H1071FA070 +1071FA070:lI101|H1071FCFB0 +1071FCFB0:lI95|H107200068 +107200068:lI109|H107203210 +107203210:lI97|H107206440 +107206440:lI115|H1072096F8 +1072096F8:lI116|H10720C958 +10720C958:lI101|H10720FB68 +10720FB68:lI114|H107212DF8 +107212DF8:lI46|H1072161B0 +1072161B0:lI98|H107219770 +107219770:lI101|H10721CDC0 +10721CDC0:lI97|H1072203C0 +1072203C0:lI109|N +1071F2838:Mn1:H1071F4BD0 +1071F4BD0:Mn2:H1071F73F8,H1071F7408 +1071F73F8:lH1071FA050|N +1071FA050:lI119|H1071FCF90 +1071FCF90:lI120|H107200048 +107200048:lI65|H1072031F0 +1072031F0:lI117|H107206420 +107206420:lI105|H1072096D8 +1072096D8:lI78|H10720C938 +10720C938:lI111|H10720FB48 +10720FB48:lI116|H107212DD8 +107212DD8:lI101|H107216190 +107216190:lI98|H107219750 +107219750:lI111|H10721CDA0 +10721CDA0:lI111|H1072203A0 +1072203A0:lI107|H107223738 +107223738:lI46|H1072267B0 +1072267B0:lI98|H107229468 +107229468:lI101|H10722BD70 +10722BD70:lI97|H10722E388 +10722E388:lI109|N +1071F7408:lH1071FA060|N +1071FA060:lI119|H1071FCFA0 +1071FCFA0:lI120|H107200058 +107200058:lI85|H107203200 +107203200:lI112|H107206430 +107206430:lI100|H1072096E8 +1072096E8:lI97|H10720C948 +10720C948:lI116|H10720FB58 +10720FB58:lI101|H107212DE8 +107212DE8:lI85|H1072161A0 +1072161A0:lI73|H107219760 +107219760:lI69|H10721CDB0 +10721CDB0:lI118|H1072203B0 +1072203B0:lI101|H107223748 +107223748:lI110|H1072267C0 +1072267C0:lI116|H107229478 +107229478:lI46|H10722BD80 +10722BD80:lI98|H10722E398 +10722E398:lI101|H1072306E0 +1072306E0:lI97|H1072327D8 +1072327D8:lI109|N +1071F2828:lH1071F4BC0|N +1071F4BC0:lI119|H1071F73E8 +1071F73E8:lI120|H1071FA040 +1071FA040:lI101|H1071FCF80 +1071FCF80:lI95|H107200038 +107200038:lI115|H1072031E0 +1072031E0:lI101|H107206410 +107206410:lI114|H1072096C8 +1072096C8:lI118|H10720C928 +10720C928:lI101|H10720FB38 +10720FB38:lI114|H107212DC8 +107212DC8:lI46|H107216180 +107216180:lI98|H107219740 +107219740:lI101|H10721CD90 +10721CD90:lI97|H107220390 +107220390:lI109|N +1071F2818:lH1071F4BB0|N +1071F4BB0:lI119|H1071F73D8 +1071F73D8:lI120|H1071FA030 +1071FA030:lI67|H1071FCF70 +1071FCF70:lI111|H107200028 +107200028:lI109|H1072031D0 +1072031D0:lI109|H107206400 +107206400:lI97|H1072096B8 +1072096B8:lI110|H10720C918 +10720C918:lI100|H10720FB28 +10720FB28:lI69|H107212DB8 +107212DB8:lI118|H107216170 +107216170:lI101|H107219730 +107219730:lI110|H10721CD80 +10721CD80:lI116|H107220380 +107220380:lI46|H107223728 +107223728:lI98|H1072267A0 +1072267A0:lI101|H107229458 +107229458:lI97|H10722BD60 +10722BD60:lI109|N +1071F2808:lH1071F4BA0|N +1071F4BA0:lI119|H1071F73C8 +1071F73C8:lI120|H1071FA020 +1071FA020:lI67|H1071FCF60 +1071FCF60:lI104|H107200018 +107200018:lI111|H1072031C0 +1072031C0:lI105|H1072063F0 +1072063F0:lI99|H1072096A8 +1072096A8:lI101|H10720C908 +10720C908:lI46|H10720FB18 +10720FB18:lI98|H107212DA8 +107212DA8:lI101|H107216160 +107216160:lI97|H107219720 +107219720:lI109|N +1071F27F8:lH1071F4B90|N +1071F4B90:lI119|H1071F73B8 +1071F73B8:lI120|H1071FA010 +1071FA010:lI71|H1071FCF50 +1071FCF50:lI114|H107200008 +107200008:lI105|H1072031B0 +1072031B0:lI100|H1072063E0 +1072063E0:lI66|H107209698 +107209698:lI97|H10720C8F8 +10720C8F8:lI103|H10720FB08 +10720FB08:lI83|H107212D98 +107212D98:lI105|H107216150 +107216150:lI122|H107219710 +107219710:lI101|H10721CD70 +10721CD70:lI114|H107220370 +107220370:lI46|H107223718 +107223718:lI98|H107226790 +107226790:lI101|H107229448 +107229448:lI97|H10722BD50 +10722BD50:lI109|N +1071F27E8:lH1071F4B80|N +1071F4B80:lI119|H1071F73A8 +1071F73A8:lI120|H1071FA000 +1071FA000:lI71|H1071FCF40 +1071FCF40:lI97|H1071FFFF8 +1071FFFF8:lI117|H1072031A0 +1072031A0:lI103|H1072063D0 +1072063D0:lI101|H107209688 +107209688:lI46|H10720C8E8 +10720C8E8:lI98|H10720FAF8 +10720FAF8:lI101|H107212D88 +107212D88:lI97|H107216140 +107216140:lI109|N +1071F27D0:Mn2:H1071F4B60,H1071F4B70 +1071F4B60:lH1071F7388|N +1071F7388:lI119|H1071F9FE0 +1071F9FE0:lI120|H1071FCF20 +1071FCF20:lI72|H1071FFFD8 +1071FFFD8:lI101|H107203180 +107203180:lI108|H1072063B0 +1072063B0:lI112|H107209668 +107209668:lI69|H10720C8C8 +10720C8C8:lI118|H10720FAD8 +10720FAD8:lI101|H107212D68 +107212D68:lI110|H107216120 +107216120:lI116|H1072196F0 +1072196F0:lI46|H10721CD50 +10721CD50:lI98|H107220350 +107220350:lI101|H1072236F8 +1072236F8:lI97|H107226770 +107226770:lI109|N +1071F4B70:lH1071F7398|N +1071F7398:lI119|H1071F9FF0 +1071F9FF0:lI120|H1071FCF30 +1071FCF30:lI67|H1071FFFE8 +1071FFFE8:lI104|H107203190 +107203190:lI101|H1072063C0 +1072063C0:lI99|H107209678 +107209678:lI107|H10720C8D8 +10720C8D8:lI76|H10720FAE8 +10720FAE8:lI105|H107212D78 +107212D78:lI115|H107216130 +107216130:lI116|H107219700 +107219700:lI66|H10721CD60 +10721CD60:lI111|H107220360 +107220360:lI120|H107223708 +107223708:lI46|H107226780 +107226780:lI98|H107229438 +107229438:lI101|H10722BD40 +10722BD40:lI97|H10722E378 +10722E378:lI109|N +1071F27C0:lH1071F4B50|N +1071F4B50:lI119|H1071F7378 +1071F7378:lI120|H1071F9FD0 +1071F9FD0:lI80|H1071FCF10 +1071FCF10:lI114|H1071FFFC8 +1071FFFC8:lI105|H107203170 +107203170:lI110|H1072063A0 +1072063A0:lI116|H107209658 +107209658:lI68|H10720C8B8 +10720C8B8:lI105|H10720FAC8 +10720FAC8:lI97|H107212D58 +107212D58:lI108|H107216110 +107216110:lI111|H1072196E0 +1072196E0:lI103|H10721CD40 +10721CD40:lI46|H107220340 +107220340:lI98|H1072236E8 +1072236E8:lI101|H107226760 +107226760:lI97|H107229428 +107229428:lI109|N +1071F02B8:lI47|H1071F0E78 +1071F0E78:lI111|H1071F2698 +1071F2698:lI112|H1071F49F0 +1071F49F0:lI116|H1071F7218 +1071F7218:lI47|H1071F9E70 +1071F9E70:lI104|H1071FCDB0 +1071FCDB0:lI111|H1071FFE68 +1071FFE68:lI109|H107203010 +107203010:lI101|H107206240 +107206240:lI98|H1072094F8 +1072094F8:lI114|H10720C758 +10720C758:lI101|H10720F968 +10720F968:lI119|H107212BF8 +107212BF8:lI47|H107215FC0 +107215FC0:lI67|H1072195A0 +1072195A0:lI101|H10721CC10 +10721CC10:lI108|H107220220 +107220220:lI108|H1072235C8 +1072235C8:lI97|H107226660 +107226660:lI114|H107229358 +107229358:lI47|H10722BCA0 +10722BCA0:lI101|H10722E2E8 +10722E2E8:lI114|H107230670 +107230670:lI108|H107232768 +107232768:lI97|H107234560 +107234560:lI110|H107236088 +107236088:lI103|H107237900 +107237900:lI47|H107238F78 +107238F78:lI50|H10723A430 +10723A430:lI54|H10723B760 +10723B760:lI46|H10723C820 +10723C820:lI48|H10723D6C0 +10723D6C0:lI46|H10723E440 +10723E440:lI50|H10723F050 +10723F050:lI47|H10723FB20 +10723FB20:lI108|H107240470 +107240470:lI105|H107240CF0 +107240CF0:lI98|H107241480 +107241480:lI47|H107241BB0 +107241BB0:lI101|H107242280 +107242280:lI114|H1072428F0 +1072428F0:lI108|H107242EF0 +107242EF0:lI97|H107243460 +107243460:lI110|H1072439A0 +1072439A0:lI103|H107243E90 +107243E90:lI47|H107244380 +107244380:lI108|H107244830 +107244830:lI105|H107244CA0 +107244CA0:lI98|H107245100 +107245100:lI47|H107245550 +107245550:lI119|H107245950 +107245950:lI120|H107245D10 +107245D10:lI45|H1072460A0 +1072460A0:lI50|H107246430 +107246430:lI46|H1072467C0 +1072467C0:lI51|H107246B50 +107246B50:lI47|H280052C20 +10724AF50:lH10724AFC0|H10724AFD8 +10724AFC0:t2:H1071F0378,H1071F0388 +1071F0388:Mf10:H1071F1440:N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N +1071F1440:t10:H1071F3338,H1071F3348,H1071F3358,H1071F3368,H1071F3378,H1071F3388,H1071F3398,H1071F33A8,H1071F33B8,H1071F33C8,H1071F33D8,H1071F33E8,H1071F33F8,H1071F3408,H1071F3418,H1071F3428 +1071F3428:lI120|H1071F5A10 +1071F5A10:lI114|H1071F8278 +1071F8278:lI101|H1071FAED0 +1071FAED0:lI102|H1071FDE10 +1071FDE10:lI95|H107200EC8 +107200EC8:lI117|H107204070 +107204070:lI116|H1072072A0 +1072072A0:lI105|H10720A528 +10720A528:lI108|H10720D738 +10720D738:lI115|H1072108E8 +1072108E8:lI46|H107213B48 +107213B48:lI98|H107216F00 +107216F00:lI101|H10721A470 +10721A470:lI97|H10721DA20 +10721DA20:lI109|N +1071F3418:lI120|H1071F5A00 +1071F5A00:lI114|H1071F8268 +1071F8268:lI101|H1071FAEC0 +1071FAEC0:lI102|H1071FDE00 +1071FDE00:lI95|H107200EB8 +107200EB8:lI115|H107204060 +107204060:lI99|H107207290 +107207290:lI97|H10720A518 +10720A518:lI110|H10720D728 +10720D728:lI110|H1072108D8 +1072108D8:lI101|H107213B38 +107213B38:lI114|H107216EF0 +107216EF0:lI46|H10721A460 +10721A460:lI98|H10721DA10 +10721DA10:lI101|H107220F60 +107220F60:lI97|H1072241A8 +1072241A8:lI109|N +1071F3408:lI120|H1071F59F0 +1071F59F0:lI114|H1071F8258 +1071F8258:lI101|H1071FAEB0 +1071FAEB0:lI102|H1071FDDF0 +1071FDDF0:lI95|H107200EA8 +107200EA8:lI114|H107204050 +107204050:lI101|H107207280 +107207280:lI97|H10720A508 +10720A508:lI100|H10720D718 +10720D718:lI101|H1072108C8 +1072108C8:lI114|H107213B28 +107213B28:lI46|H107216EE0 +107216EE0:lI98|H10721A450 +10721A450:lI101|H10721DA00 +10721DA00:lI97|H107220F50 +107220F50:lI109|N +1071F33F8:lI120|H1071F59E0 +1071F59E0:lI114|H1071F8248 +1071F8248:lI101|H1071FAEA0 +1071FAEA0:lI102|H1071FDDE0 +1071FDDE0:lI95|H107200E98 +107200E98:lI112|H107204040 +107204040:lI97|H107207270 +107207270:lI114|H10720A4F8 +10720A4F8:lI115|H10720D708 +10720D708:lI101|H1072108B8 +1072108B8:lI114|H107213B18 +107213B18:lI46|H107216ED0 +107216ED0:lI98|H10721A440 +10721A440:lI101|H10721D9F0 +10721D9F0:lI97|H107220F40 +107220F40:lI109|N +1071F33E8:lI120|H1071F59D0 +1071F59D0:lI114|H1071F8238 +1071F8238:lI101|H1071FAE90 +1071FAE90:lI102|H1071FDDD0 +1071FDDD0:lI95|H107200E88 +107200E88:lI99|H107204030 +107204030:lI111|H107207260 +107207260:lI109|H10720A4E8 +10720A4E8:lI112|H10720D6F8 +10720D6F8:lI105|H1072108A8 +1072108A8:lI108|H107213B08 +107213B08:lI101|H107216EC0 +107216EC0:lI114|H10721A430 +10721A430:lI46|H10721D9E0 +10721D9E0:lI98|H107220F30 +107220F30:lI101|H107224198 +107224198:lI97|H1072270E0 +1072270E0:lI109|N +1071F33D8:lI120|H1071F59C0 +1071F59C0:lI114|H1071F8228 +1071F8228:lI101|H1071FAE80 +1071FAE80:lI102|H1071FDDC0 +1071FDDC0:lI95|H107200E78 +107200E78:lI98|H107204020 +107204020:lI97|H107207250 +107207250:lI115|H10720A4D8 +10720A4D8:lI101|H10720D6E8 +10720D6E8:lI46|H107210898 +107210898:lI98|H107213AF8 +107213AF8:lI101|H107216EB0 +107216EB0:lI97|H10721A420 +10721A420:lI109|N +1071F33C8:lI120|H1071F59B0 +1071F59B0:lI114|H1071F8218 +1071F8218:lI101|H1071FAE70 +1071FAE70:lI102|H1071FDDB0 +1071FDDB0:lI46|H107200E68 +107200E68:lI98|H107204010 +107204010:lI101|H107207240 +107207240:lI97|H10720A4C8 +10720A4C8:lI109|N +1071F33B8:lI116|H1071F59A0 +1071F59A0:lI111|H1071F8208 +1071F8208:lI111|H1071FAE60 +1071FAE60:lI108|H1071FDDA0 +1071FDDA0:lI115|H107200E58 +107200E58:lI46|H107204000 +107204000:lI97|H107207230 +107207230:lI112|H10720A4B8 +10720A4B8:lI112|H10720D6D8 +10720D6D8:lI117|H107210888 +107210888:lI112|N +1071F33A8:lI116|H1071F5990 +1071F5990:lI111|H1071F81F8 +1071F81F8:lI111|H1071FAE50 +1071FAE50:lI108|H1071FDD90 +1071FDD90:lI115|H107200E48 +107200E48:lI46|H107203FF0 +107203FF0:lI97|H107207220 +107207220:lI112|H10720A4A8 +10720A4A8:lI112|N +1071F3398:lI116|H1071F5980 +1071F5980:lI97|H1071F81E8 +1071F81E8:lI103|H1071FAE40 +1071FAE40:lI115|H1071FDD80 +1071FDD80:lI46|H107200E38 +107200E38:lI98|H107203FE0 +107203FE0:lI101|H107207210 +107207210:lI97|H10720A498 +10720A498:lI109|N +1071F3388:lI109|H1071F5970 +1071F5970:lI97|H1071F81D8 +1071F81D8:lI107|H1071FAE30 +1071FAE30:lI101|H1071FDD70 +1071FDD70:lI46|H107200E28 +107200E28:lI98|H107203FD0 +107203FD0:lI101|H107207200 +107207200:lI97|H10720A488 +10720A488:lI109|N +1071F3378:lI108|H1071F5960 +1071F5960:lI99|H1071F81C8 +1071F81C8:lI110|H1071FAE20 +1071FAE20:lI116|H1071FDD60 +1071FDD60:lI46|H107200E18 +107200E18:lI98|H107203FC0 +107203FC0:lI101|H1072071F0 +1072071F0:lI97|H10720A478 +10720A478:lI109|N +1071F3368:lI102|H1071F5950 +1071F5950:lI112|H1071F81B8 +1071F81B8:lI114|H1071FAE10 +1071FAE10:lI111|H1071FDD50 +1071FDD50:lI102|H107200E08 +107200E08:lI46|H107203FB0 +107203FB0:lI98|H1072071E0 +1072071E0:lI101|H10720A468 +10720A468:lI97|H10720D6C8 +10720D6C8:lI109|N +1071F3358:lI101|H1071F5940 +1071F5940:lI112|H1071F81A8 +1071F81A8:lI114|H1071FAE00 +1071FAE00:lI111|H1071FDD40 +1071FDD40:lI102|H107200DF8 +107200DF8:lI46|H107203FA0 +107203FA0:lI98|H1072071D0 +1072071D0:lI101|H10720A458 +10720A458:lI97|H10720D6B8 +10720D6B8:lI109|N +1071F3348:lI99|H1071F5930 +1071F5930:lI112|H1071F8198 +1071F8198:lI114|H1071FADF0 +1071FADF0:lI111|H1071FDD30 +1071FDD30:lI102|H107200DE8 +107200DE8:lI46|H107203F90 +107203F90:lI98|H1072071C0 +1072071C0:lI101|H10720A448 +10720A448:lI97|H10720D6A8 +10720D6A8:lI109|N +1071F3338:lI99|H1071F5920 +1071F5920:lI111|H1071F8188 +1071F8188:lI118|H1071FADE0 +1071FADE0:lI101|H1071FDD20 +1071FDD20:lI114|H107200DD8 +107200DD8:lI46|H107203F80 +107203F80:lI98|H1072071B0 +1072071B0:lI101|H10720A438 +10720A438:lI97|H10720D698 +10720D698:lI109|N +1071F0378:lI47|H1071F1430 +1071F1430:lI111|H1071F3328 +1071F3328:lI112|H1071F5910 +1071F5910:lI116|H1071F8178 +1071F8178:lI47|H1071FADD0 +1071FADD0:lI104|H1071FDD10 +1071FDD10:lI111|H107200DC8 +107200DC8:lI109|H107203F70 +107203F70:lI101|H1072071A0 +1072071A0:lI98|H10720A428 +10720A428:lI114|H10720D688 +10720D688:lI101|H107210878 +107210878:lI119|H107213AE8 +107213AE8:lI47|H107216EA0 +107216EA0:lI67|H10721A410 +10721A410:lI101|H10721D9D0 +10721D9D0:lI108|H107220F20 +107220F20:lI108|H107224188 +107224188:lI97|H1072270D0 +1072270D0:lI114|H107229C38 +107229C38:lI47|H10722C460 +10722C460:lI101|H10722E9A8 +10722E9A8:lI114|H107230C20 +107230C20:lI108|H107232C18 +107232C18:lI97|H1072348F0 +1072348F0:lI110|H107236328 +107236328:lI103|H107237AF0 +107237AF0:lI47|H107239108 +107239108:lI50|H10723A5A0 +10723A5A0:lI54|H10723B860 +10723B860:lI46|H10723C8B0 +10723C8B0:lI48|H10723D720 +10723D720:lI46|H10723E480 +10723E480:lI50|H10723F090 +10723F090:lI47|H10723FB50 +10723FB50:lI108|H1072404A0 +1072404A0:lI105|H107240D20 +107240D20:lI98|H1072414B0 +1072414B0:lI47|H107241BE0 +107241BE0:lI101|H1072422B0 +1072422B0:lI114|H107242920 +107242920:lI108|H107242F20 +107242F20:lI97|H107243490 +107243490:lI110|H1072439D0 +1072439D0:lI103|H107243EC0 +107243EC0:lI47|H1072443B0 +1072443B0:lI108|H107244860 +107244860:lI105|H107244CD0 +107244CD0:lI98|H107245130 +107245130:lI47|H107245580 +107245580:lI116|H107245980 +107245980:lI111|H107245D40 +107245D40:lI111|H1072460D0 +1072460D0:lI108|H107246460 +107246460:lI115|H1072467F0 +1072467F0:lI45|H107246B80 +107246B80:lI51|H107246EB0 +107246EB0:lI46|H1072471D0 +1072471D0:lI54|H1072474F0 +1072474F0:lI47|H280052C20 +10724AFD8:lH10724B048|H10724B060 +10724B048:t2:H1071F0440,H1071F0450 +1071F0450:MfA:H1071F14F8:N,N,N,N,N,N,N,N,N,N +1071F14F8:tA:H1071F3468,H1071F3478,H1071F3488,H1071F3498,H1071F34A8,H1071F34B8,H1071F34C8,H1071F34D8,H1071F34E8,H1071F34F8 +1071F34F8:lI116|H1071F5AE0 +1071F5AE0:lI102|H1071F8348 +1071F8348:lI116|H1071FAFA0 +1071FAFA0:lI112|H1071FDEE0 +1071FDEE0:lI95|H107200F98 +107200F98:lI115|H107204140 +107204140:lI117|H107207370 +107207370:lI112|H10720A5E8 +10720A5E8:lI46|H10720D7E8 +10720D7E8:lI98|H107210988 +107210988:lI101|H107213BE8 +107213BE8:lI97|H107216FA0 +107216FA0:lI109|N +1071F34E8:lI116|H1071F5AD0 +1071F5AD0:lI102|H1071F8338 +1071F8338:lI116|H1071FAF90 +1071FAF90:lI112|H1071FDED0 +1071FDED0:lI95|H107200F88 +107200F88:lI108|H107204130 +107204130:lI111|H107207360 +107207360:lI103|H10720A5D8 +10720A5D8:lI103|H10720D7D8 +10720D7D8:lI101|H107210978 +107210978:lI114|H107213BD8 +107213BD8:lI46|H107216F90 +107216F90:lI98|H10721A4E0 +10721A4E0:lI101|H10721DA80 +10721DA80:lI97|H107220FC0 +107220FC0:lI109|N +1071F34D8:lI116|H1071F5AC0 +1071F5AC0:lI102|H1071F8328 +1071F8328:lI116|H1071FAF80 +1071FAF80:lI112|H1071FDEC0 +1071FDEC0:lI95|H107200F78 +107200F78:lI108|H107204120 +107204120:lI105|H107207350 +107207350:lI98|H10720A5C8 +10720A5C8:lI46|H10720D7C8 +10720D7C8:lI98|H107210968 +107210968:lI101|H107213BC8 +107213BC8:lI97|H107216F80 +107216F80:lI109|N +1071F34C8:lI116|H1071F5AB0 +1071F5AB0:lI102|H1071F8318 +1071F8318:lI116|H1071FAF70 +1071FAF70:lI112|H1071FDEB0 +1071FDEB0:lI95|H107200F68 +107200F68:lI102|H107204110 +107204110:lI105|H107207340 +107207340:lI108|H10720A5B8 +10720A5B8:lI101|H10720D7B8 +10720D7B8:lI46|H107210958 +107210958:lI98|H107213BB8 +107213BB8:lI101|H107216F70 +107216F70:lI97|H10721A4D0 +10721A4D0:lI109|N +1071F34B8:lI116|H1071F5AA0 +1071F5AA0:lI102|H1071F8308 +1071F8308:lI116|H1071FAF60 +1071FAF60:lI112|H1071FDEA0 +1071FDEA0:lI95|H107200F58 +107200F58:lI101|H107204100 +107204100:lI110|H107207330 +107207330:lI103|H10720A5A8 +10720A5A8:lI105|H10720D7A8 +10720D7A8:lI110|H107210948 +107210948:lI101|H107213BA8 +107213BA8:lI46|H107216F60 +107216F60:lI98|H10721A4C0 +10721A4C0:lI101|H10721DA70 +10721DA70:lI97|H107220FB0 +107220FB0:lI109|N +1071F34A8:lI116|H1071F5A90 +1071F5A90:lI102|H1071F82F8 +1071F82F8:lI116|H1071FAF50 +1071FAF50:lI112|H1071FDE90 +1071FDE90:lI95|H107200F48 +107200F48:lI98|H1072040F0 +1072040F0:lI105|H107207320 +107207320:lI110|H10720A598 +10720A598:lI97|H10720D798 +10720D798:lI114|H107210938 +107210938:lI121|H107213B98 +107213B98:lI46|H107216F50 +107216F50:lI98|H10721A4B0 +10721A4B0:lI101|H10721DA60 +10721DA60:lI97|H107220FA0 +107220FA0:lI109|N +1071F3498:lI116|H1071F5A80 +1071F5A80:lI102|H1071F82E8 +1071F82E8:lI116|H1071FAF40 +1071FAF40:lI112|H1071FDE80 +1071FDE80:lI95|H107200F38 +107200F38:lI97|H1072040E0 +1072040E0:lI112|H107207310 +107207310:lI112|H10720A588 +10720A588:lI46|H10720D788 +10720D788:lI98|H107210928 +107210928:lI101|H107213B88 +107213B88:lI97|H107216F40 +107216F40:lI109|N +1071F3488:lI116|H1071F5A70 +1071F5A70:lI102|H1071F82D8 +1071F82D8:lI116|H1071FAF30 +1071FAF30:lI112|H1071FDE70 +1071FDE70:lI46|H107200F28 +107200F28:lI98|H1072040D0 +1072040D0:lI101|H107207300 +107207300:lI97|H10720A578 +10720A578:lI109|N +1071F3478:lI116|H1071F5A60 +1071F5A60:lI102|H1071F82C8 +1071F82C8:lI116|H1071FAF20 +1071FAF20:lI112|H1071FDE60 +1071FDE60:lI46|H107200F18 +107200F18:lI97|H1072040C0 +1072040C0:lI112|H1072072F0 +1072072F0:lI112|H10720A568 +10720A568:lI117|H10720D778 +10720D778:lI112|N +1071F3468:lI116|H1071F5A50 +1071F5A50:lI102|H1071F82B8 +1071F82B8:lI116|H1071FAF10 +1071FAF10:lI112|H1071FDE50 +1071FDE50:lI46|H107200F08 +107200F08:lI97|H1072040B0 +1072040B0:lI112|H1072072E0 +1072072E0:lI112|N +1071F0440:lI47|H1071F14E8 +1071F14E8:lI111|H1071F3458 +1071F3458:lI112|H1071F5A40 +1071F5A40:lI116|H1071F82A8 +1071F82A8:lI47|H1071FAF00 +1071FAF00:lI104|H1071FDE40 +1071FDE40:lI111|H107200EF8 +107200EF8:lI109|H1072040A0 +1072040A0:lI101|H1072072D0 +1072072D0:lI98|H10720A558 +10720A558:lI114|H10720D768 +10720D768:lI101|H107210918 +107210918:lI119|H107213B78 +107213B78:lI47|H107216F30 +107216F30:lI67|H10721A4A0 +10721A4A0:lI101|H10721DA50 +10721DA50:lI108|H107220F90 +107220F90:lI108|H1072241D8 +1072241D8:lI97|H107227110 +107227110:lI114|H107229C68 +107229C68:lI47|H10722C490 +10722C490:lI101|H10722E9D8 +10722E9D8:lI114|H107230C50 +107230C50:lI108|H107232C48 +107232C48:lI97|H107234920 +107234920:lI110|H107236358 +107236358:lI103|H107237B20 +107237B20:lI47|H107239138 +107239138:lI50|H10723A5D0 +10723A5D0:lI54|H10723B890 +10723B890:lI46|H10723C8E0 +10723C8E0:lI48|H10723D750 +10723D750:lI46|H10723E4B0 +10723E4B0:lI50|H10723F0C0 +10723F0C0:lI47|H10723FB80 +10723FB80:lI108|H1072404D0 +1072404D0:lI105|H107240D50 +107240D50:lI98|H1072414E0 +1072414E0:lI47|H107241C10 +107241C10:lI101|H1072422E0 +1072422E0:lI114|H107242950 +107242950:lI108|H107242F50 +107242F50:lI97|H1072434C0 +1072434C0:lI110|H107243A00 +107243A00:lI103|H107243EF0 +107243EF0:lI47|H1072443E0 +1072443E0:lI108|H107244890 +107244890:lI105|H107244D00 +107244D00:lI98|H107245160 +107245160:lI47|H1072455B0 +1072455B0:lI116|H1072459B0 +1072459B0:lI102|H107245D70 +107245D70:lI116|H107246100 +107246100:lI112|H107246490 +107246490:lI45|H107246820 +107246820:lI49|H107246BB0 +107246BB0:lI46|H107246EE0 +107246EE0:lI49|H107247200 +107247200:lI47|H280052C20 +10724B060:lH10724B0D0|H10724B0E8 +10724B0D0:t2:H1071F04B8,H1071F04C8 +1071F04C8:MfB:H1071F1560:N,N,N,N,N,N,N,N,N,N,N +1071F1560:tB:H1071F3518,H1071F3528,H1071F3538,H1071F3548,H1071F3558,H1071F3568,H1071F3578,H1071F3588,H1071F3598,H1071F35A8,H1071F35B8 +1071F35B8:lI115|H1071F5BA0 +1071F5BA0:lI121|H1071F8408 +1071F8408:lI110|H1071FB060 +1071FB060:lI116|H1071FDFA0 +1071FDFA0:lI97|H107201058 +107201058:lI120|H107204200 +107204200:lI95|H107207430 +107207430:lI116|H10720A6A8 +10720A6A8:lI111|H10720D898 +10720D898:lI111|H107210A38 +107210A38:lI108|H107213C98 +107213C98:lI115|H107217050 +107217050:lI46|H10721A580 +10721A580:lI97|H10721DB20 +10721DB20:lI112|H107221040 +107221040:lI112|H107224248 +107224248:lI117|H107227170 +107227170:lI112|N +1071F35A8:lI115|H1071F5B90 +1071F5B90:lI121|H1071F83F8 +1071F83F8:lI110|H1071FB050 +1071FB050:lI116|H1071FDF90 +1071FDF90:lI97|H107201048 +107201048:lI120|H1072041F0 +1072041F0:lI95|H107207420 +107207420:lI116|H10720A698 +10720A698:lI111|H10720D888 +10720D888:lI111|H107210A28 +107210A28:lI108|H107213C88 +107213C88:lI115|H107217040 +107217040:lI46|H10721A570 +10721A570:lI97|H10721DB10 +10721DB10:lI112|H107221030 +107221030:lI112|N +1071F3598:lI112|H1071F5B80 +1071F5B80:lI114|H1071F83E8 +1071F83E8:lI101|H1071FB040 +1071FB040:lI116|H1071FDF80 +1071FDF80:lI116|H107201038 +107201038:lI121|H1072041E0 +1072041E0:lI112|H107207410 +107207410:lI114|H10720A688 +10720A688:lI46|H10720D878 +10720D878:lI98|H107210A18 +107210A18:lI101|H107213C78 +107213C78:lI97|H107217030 +107217030:lI109|N +1071F3588:lI109|H1071F5B70 +1071F5B70:lI101|H1071F83D8 +1071F83D8:lI114|H1071FB030 +1071FB030:lI108|H1071FDF70 +1071FDF70:lI95|H107201028 +107201028:lI116|H1072041D0 +1072041D0:lI114|H107207400 +107207400:lI97|H10720A678 +10720A678:lI110|H10720D868 +10720D868:lI115|H107210A08 +107210A08:lI102|H107213C68 +107213C68:lI111|H107217020 +107217020:lI114|H10721A560 +10721A560:lI109|H10721DB00 +10721DB00:lI46|H107221020 +107221020:lI98|H107224238 +107224238:lI101|H107227160 +107227160:lI97|H107229CA8 +107229CA8:lI109|N +1071F3578:lI109|H1071F5B60 +1071F5B60:lI101|H1071F83C8 +1071F83C8:lI114|H1071FB020 +1071FB020:lI108|H1071FDF60 +1071FDF60:lI46|H107201018 +107201018:lI98|H1072041C0 +1072041C0:lI101|H1072073F0 +1072073F0:lI97|H10720A668 +10720A668:lI109|N +1071F3568:lI101|H1071F5B50 +1071F5B50:lI114|H1071F83B8 +1071F83B8:lI108|H1071FB010 +1071FB010:lI95|H1071FDF50 +1071FDF50:lI115|H107201008 +107201008:lI121|H1072041B0 +1072041B0:lI110|H1072073E0 +1072073E0:lI116|H10720A658 +10720A658:lI97|H10720D858 +10720D858:lI120|H1072109F8 +1072109F8:lI95|H107213C58 +107213C58:lI108|H107217010 +107217010:lI105|H10721A550 +10721A550:lI98|H10721DAF0 +10721DAF0:lI46|H107221010 +107221010:lI98|H107224228 +107224228:lI101|H107227150 +107227150:lI97|H107229C98 +107229C98:lI109|N +1071F3558:lI101|H1071F5B40 +1071F5B40:lI114|H1071F83A8 +1071F83A8:lI108|H1071FB000 +1071FB000:lI95|H1071FDF40 +1071FDF40:lI115|H107200FF8 +107200FF8:lI121|H1072041A0 +1072041A0:lI110|H1072073D0 +1072073D0:lI116|H10720A648 +10720A648:lI97|H10720D848 +10720D848:lI120|H1072109E8 +1072109E8:lI46|H107213C48 +107213C48:lI98|H107217000 +107217000:lI101|H10721A540 +10721A540:lI97|H10721DAE0 +10721DAE0:lI109|N +1071F3548:lI101|H1071F5B30 +1071F5B30:lI114|H1071F8398 +1071F8398:lI108|H1071FAFF0 +1071FAFF0:lI95|H1071FDF30 +1071FDF30:lI114|H107200FE8 +107200FE8:lI101|H107204190 +107204190:lI99|H1072073C0 +1072073C0:lI111|H10720A638 +10720A638:lI109|H10720D838 +10720D838:lI109|H1072109D8 +1072109D8:lI101|H107213C38 +107213C38:lI110|H107216FF0 +107216FF0:lI116|H10721A530 +10721A530:lI46|H10721DAD0 +10721DAD0:lI98|H107221000 +107221000:lI101|H107224218 +107224218:lI97|H107227140 +107227140:lI109|N +1071F3538:lI101|H1071F5B20 +1071F5B20:lI114|H1071F8388 +1071F8388:lI108|H1071FAFE0 +1071FAFE0:lI95|H1071FDF20 +1071FDF20:lI112|H107200FD8 +107200FD8:lI114|H107204180 +107204180:lI101|H1072073B0 +1072073B0:lI116|H10720A628 +10720A628:lI116|H10720D828 +10720D828:lI121|H1072109C8 +1072109C8:lI112|H107213C28 +107213C28:lI114|H107216FE0 +107216FE0:lI46|H10721A520 +10721A520:lI98|H10721DAC0 +10721DAC0:lI101|H107220FF0 +107220FF0:lI97|H107224208 +107224208:lI109|N +1071F3528:lI101|H1071F5B10 +1071F5B10:lI114|H1071F8378 +1071F8378:lI108|H1071FAFD0 +1071FAFD0:lI95|H1071FDF10 +1071FDF10:lI99|H107200FC8 +107200FC8:lI111|H107204170 +107204170:lI109|H1072073A0 +1072073A0:lI109|H10720A618 +10720A618:lI101|H10720D818 +10720D818:lI110|H1072109B8 +1072109B8:lI116|H107213C18 +107213C18:lI95|H107216FD0 +107216FD0:lI115|H10721A510 +10721A510:lI99|H10721DAB0 +10721DAB0:lI97|H107220FE0 +107220FE0:lI110|H1072241F8 +1072241F8:lI46|H107227130 +107227130:lI98|H107229C88 +107229C88:lI101|H10722C4B0 +10722C4B0:lI97|H10722E9F8 +10722E9F8:lI109|N +1071F3518:lI101|H1071F5B00 +1071F5B00:lI112|H1071F8368 +1071F8368:lI112|H1071FAFC0 +1071FAFC0:lI95|H1071FDF00 +1071FDF00:lI100|H107200FB8 +107200FB8:lI111|H107204160 +107204160:lI100|H107207390 +107207390:lI103|H10720A608 +10720A608:lI101|H10720D808 +10720D808:lI114|H1072109A8 +1072109A8:lI46|H107213C08 +107213C08:lI98|H107216FC0 +107216FC0:lI101|H10721A500 +10721A500:lI97|H10721DAA0 +10721DAA0:lI109|N +1071F04B8:lI47|H1071F1550 +1071F1550:lI111|H1071F3508 +1071F3508:lI112|H1071F5AF0 +1071F5AF0:lI116|H1071F8358 +1071F8358:lI47|H1071FAFB0 +1071FAFB0:lI104|H1071FDEF0 +1071FDEF0:lI111|H107200FA8 +107200FA8:lI109|H107204150 +107204150:lI101|H107207380 +107207380:lI98|H10720A5F8 +10720A5F8:lI114|H10720D7F8 +10720D7F8:lI101|H107210998 +107210998:lI119|H107213BF8 +107213BF8:lI47|H107216FB0 +107216FB0:lI67|H10721A4F0 +10721A4F0:lI101|H10721DA90 +10721DA90:lI108|H107220FD0 +107220FD0:lI108|H1072241E8 +1072241E8:lI97|H107227120 +107227120:lI114|H107229C78 +107229C78:lI47|H10722C4A0 +10722C4A0:lI101|H10722E9E8 +10722E9E8:lI114|H107230C60 +107230C60:lI108|H107232C58 +107232C58:lI97|H107234930 +107234930:lI110|H107236368 +107236368:lI103|H107237B30 +107237B30:lI47|H107239148 +107239148:lI50|H10723A5E0 +10723A5E0:lI54|H10723B8A0 +10723B8A0:lI46|H10723C8F0 +10723C8F0:lI48|H10723D760 +10723D760:lI46|H10723E4C0 +10723E4C0:lI50|H10723F0D0 +10723F0D0:lI47|H10723FB90 +10723FB90:lI108|H1072404E0 +1072404E0:lI105|H107240D60 +107240D60:lI98|H1072414F0 +1072414F0:lI47|H107241C20 +107241C20:lI101|H1072422F0 +1072422F0:lI114|H107242960 +107242960:lI108|H107242F60 +107242F60:lI97|H1072434D0 +1072434D0:lI110|H107243A10 +107243A10:lI103|H107243F00 +107243F00:lI47|H1072443F0 +1072443F0:lI108|H1072448A0 +1072448A0:lI105|H107244D10 +107244D10:lI98|H107245170 +107245170:lI47|H1072455C0 +1072455C0:lI115|H1072459C0 +1072459C0:lI121|H107245D80 +107245D80:lI110|H107246110 +107246110:lI116|H1072464A0 +1072464A0:lI97|H107246830 +107246830:lI120|H107246BC0 +107246BC0:lI95|H107246EF0 +107246EF0:lI116|H107247210 +107247210:lI111|H107247520 +107247520:lI111|H107247820 +107247820:lI108|H107247B20 +107247B20:lI115|H107247E10 +107247E10:lI45|H1072480E0 +1072480E0:lI51|H1072483A0 +1072483A0:lI46|H107248660 +107248660:lI49|H107248910 +107248910:lI47|H280052C20 +10724B0E8:lH10724B158|H1071F0538 +10724B158:t2:H1071F0548,H1071F0558 +1071F0558:Mh4A:10:H1071F15F8,H1071F1610,H1071F1640,H1071F1678,H1071F16A8,H1071F16D8,H1071F16F8,H1071F1728,H1071F1748,H1071F1770,H1071F1790,H1071F17B8,H1071F17F0,H1071F1810,H1071F1838,H1071F1850 +1071F15F8:Mn2:H1071F36A0,H1071F36B0 +1071F36A0:lH1071F5E60|N +1071F5E60:lI115|H1071F8AB0 +1071F8AB0:lI115|H1071FB9F0 +1071FB9F0:lI108|H1071FEAA8 +1071FEAA8:lI46|H107201C50 +107201C50:lI97|H107204E90 +107204E90:lI112|H107208188 +107208188:lI112|N +1071F36B0:lH1071F5E70|N +1071F5E70:lI116|H1071F8AC0 +1071F8AC0:lI108|H1071FBA00 +1071FBA00:lI115|H1071FEAB8 +1071FEAB8:lI95|H107201C60 +107201C60:lI114|H107204EA0 +107204EA0:lI101|H107208198 +107208198:lI99|H10720B468 +10720B468:lI111|H10720E728 +10720E728:lI114|H107211AA8 +107211AA8:lI100|H107214F80 +107214F80:lI46|H107218620 +107218620:lI98|H10721BE80 +10721BE80:lI101|H10721F5B0 +10721F5B0:lI97|H107222AB8 +107222AB8:lI109|N +1071F1850:Mn3:H1071F3AB8,H1071F3AC8,H1071F3AD8 +1071F3AB8:lH1071F62D0|N +1071F62D0:lI116|H1071F8F20 +1071F8F20:lI108|H1071FBE60 +1071FBE60:lI115|H1071FEF18 +1071FEF18:lI95|H1072020C0 +1072020C0:lI99|H107205300 +107205300:lI108|H1072085F8 +1072085F8:lI105|H10720B8C8 +10720B8C8:lI101|H10720EB88 +10720EB88:lI110|H107211EE8 +107211EE8:lI116|H1072153C0 +1072153C0:lI95|H107218A50 +107218A50:lI99|H10721C280 +10721C280:lI111|H10721F980 +10721F980:lI110|H107222E78 +107222E78:lI110|H107225FE0 +107225FE0:lI101|H107228DC8 +107228DC8:lI99|H10722B800 +10722B800:lI116|H10722DED8 +10722DED8:lI105|H107230300 +107230300:lI111|H107232478 +107232478:lI110|H1072342F0 +1072342F0:lI95|H107235E58 +107235E58:lI49|H107237750 +107237750:lI95|H107238DD8 +107238DD8:lI51|H10723A2B0 +10723A2B0:lI46|H10723B610 +10723B610:lI98|H10723C700 +10723C700:lI101|H10723D5C0 +10723D5C0:lI97|H10723E340 +10723E340:lI109|N +1071F3AD8:lH1071F62F0|N +1071F62F0:lI116|H1071F8F40 +1071F8F40:lI108|H1071FBE80 +1071FBE80:lI115|H1071FEF38 +1071FEF38:lI95|H1072020E0 +1072020E0:lI98|H107205320 +107205320:lI108|H107208618 +107208618:lI111|H10720B8E8 +10720B8E8:lI111|H10720EBA8 +10720EBA8:lI109|H107211F08 +107211F08:lI95|H1072153E0 +1072153E0:lI102|H107218A70 +107218A70:lI105|H10721C2A0 +10721C2A0:lI108|H10721F9A0 +10721F9A0:lI116|H107222E98 +107222E98:lI101|H107226000 +107226000:lI114|H107228DE8 +107228DE8:lI46|H10722B820 +10722B820:lI98|H10722DEF8 +10722DEF8:lI101|H107230320 +107230320:lI97|H107232498 +107232498:lI109|N +1071F3AC8:lH1071F62E0|N +1071F62E0:lI115|H1071F8F30 +1071F8F30:lI115|H1071FBE70 +1071FBE70:lI108|H1071FEF28 +1071FEF28:lI95|H1072020D0 +1072020D0:lI108|H107205310 +107205310:lI105|H107208608 +107208608:lI115|H10720B8D8 +10720B8D8:lI116|H10720EB98 +10720EB98:lI101|H107211EF8 +107211EF8:lI110|H1072153D0 +1072153D0:lI95|H107218A60 +107218A60:lI116|H10721C290 +10721C290:lI114|H10721F990 +10721F990:lI97|H107222E88 +107222E88:lI99|H107225FF0 +107225FF0:lI107|H107228DD8 +107228DD8:lI101|H10722B810 +10722B810:lI114|H10722DEE8 +10722DEE8:lI95|H107230310 +107230310:lI115|H107232488 +107232488:lI117|H107234300 +107234300:lI112|H107235E68 +107235E68:lI46|H107237760 +107237760:lI98|H107238DE8 +107238DE8:lI101|H10723A2C0 +10723A2C0:lI97|H10723B620 +10723B620:lI109|N +1071F1838:Mn2:H1071F3A98,H1071F3AA8 +1071F3A98:lH1071F62B0|N +1071F62B0:lI100|H1071F8F00 +1071F8F00:lI116|H1071FBE40 +1071FBE40:lI108|H1071FEEF8 +1071FEEF8:lI115|H1072020A0 +1072020A0:lI95|H1072052E0 +1072052E0:lI104|H1072085D8 +1072085D8:lI97|H10720B8A8 +10720B8A8:lI110|H10720EB68 +10720EB68:lI100|H107211EC8 +107211EC8:lI115|H1072153A0 +1072153A0:lI104|H107218A30 +107218A30:lI97|H10721C260 +10721C260:lI107|H10721F960 +10721F960:lI101|H107222E58 +107222E58:lI46|H107225FC0 +107225FC0:lI98|H107228DA8 +107228DA8:lI101|H10722B7E0 +10722B7E0:lI97|H10722DEC8 +10722DEC8:lI109|N +1071F3AA8:lH1071F62C0|N +1071F62C0:lI115|H1071F8F10 +1071F8F10:lI115|H1071FBE50 +1071FBE50:lI108|H1071FEF08 +1071FEF08:lI95|H1072020B0 +1072020B0:lI104|H1072052F0 +1072052F0:lI97|H1072085E8 +1072085E8:lI110|H10720B8B8 +10720B8B8:lI100|H10720EB78 +10720EB78:lI115|H107211ED8 +107211ED8:lI104|H1072153B0 +1072153B0:lI97|H107218A40 +107218A40:lI107|H10721C270 +10721C270:lI101|H10721F970 +10721F970:lI46|H107222E68 +107222E68:lI98|H107225FD0 +107225FD0:lI101|H107228DB8 +107228DB8:lI97|H10722B7F0 +10722B7F0:lI109|N +1071F1810:Mn4:H1071F3A58,H1071F3A68,H1071F3A78,H1071F3A88 +1071F3A58:lH1071F6270|N +1071F6270:lI116|H1071F8EC0 +1071F8EC0:lI108|H1071FBE00 +1071FBE00:lI115|H1071FEEB8 +1071FEEB8:lI95|H107202060 +107202060:lI115|H1072052A0 +1072052A0:lI101|H107208598 +107208598:lI114|H10720B868 +10720B868:lI118|H10720EB28 +10720EB28:lI101|H107211E88 +107211E88:lI114|H107215360 +107215360:lI95|H107218A00 +107218A00:lI115|H10721C230 +10721C230:lI101|H10721F930 +10721F930:lI115|H107222E28 +107222E28:lI115|H107225F90 +107225F90:lI105|H107228D88 +107228D88:lI111|H10722B7D0 +10722B7D0:lI110|H10722DEB8 +10722DEB8:lI95|H1072302F0 +1072302F0:lI116|H107232468 +107232468:lI105|H1072342E0 +1072342E0:lI99|H107235E48 +107235E48:lI107|H107237740 +107237740:lI101|H107238DC8 +107238DC8:lI116|H10723A2A0 +10723A2A0:lI95|H10723B600 +10723B600:lI115|H10723C6F0 +10723C6F0:lI117|H10723D5B0 +10723D5B0:lI112|H10723E330 +10723E330:lI46|H10723EF50 +10723EF50:lI98|H10723FA20 +10723FA20:lI101|H107240370 +107240370:lI97|H107240BF0 +107240BF0:lI109|N +1071F3A88:lH1071F62A0|N +1071F62A0:lI116|H1071F8EF0 +1071F8EF0:lI108|H1071FBE30 +1071FBE30:lI115|H1071FEEE8 +1071FEEE8:lI95|H107202090 +107202090:lI118|H1072052D0 +1072052D0:lI49|H1072085C8 +1072085C8:lI46|H10720B898 +10720B898:lI98|H10720EB58 +10720EB58:lI101|H107211EB8 +107211EB8:lI97|H107215390 +107215390:lI109|N +1071F3A78:lH1071F6290|N +1071F6290:lI116|H1071F8EE0 +1071F8EE0:lI108|H1071FBE20 +1071FBE20:lI115|H1071FEED8 +1071FEED8:lI95|H107202080 +107202080:lI100|H1072052C0 +1072052C0:lI105|H1072085B8 +1072085B8:lI115|H10720B888 +10720B888:lI116|H10720EB48 +10720EB48:lI95|H107211EA8 +107211EA8:lI115|H107215380 +107215380:lI117|H107218A20 +107218A20:lI112|H10721C250 +10721C250:lI46|H10721F950 +10721F950:lI98|H107222E48 +107222E48:lI101|H107225FB0 +107225FB0:lI97|H107228D98 +107228D98:lI109|N +1071F3A68:lH1071F6280|N +1071F6280:lI115|H1071F8ED0 +1071F8ED0:lI115|H1071FBE10 +1071FBE10:lI108|H1071FEEC8 +1071FEEC8:lI95|H107202070 +107202070:lI112|H1072052B0 +1072052B0:lI107|H1072085A8 +1072085A8:lI105|H10720B878 +10720B878:lI120|H10720EB38 +10720EB38:lI95|H107211E98 +107211E98:lI100|H107215370 +107215370:lI98|H107218A10 +107218A10:lI46|H10721C240 +10721C240:lI98|H10721F940 +10721F940:lI101|H107222E38 +107222E38:lI97|H107225FA0 +107225FA0:lI109|N +1071F17F0:Mn3:H1071F3A20,H1071F3A30,H1071F3A40 +1071F3A20:lH1071F6230|N +1071F6230:lI100|H1071F8E80 +1071F8E80:lI116|H1071FBDC0 +1071FBDC0:lI108|H1071FEE78 +1071FEE78:lI115|H107202020 +107202020:lI95|H107205260 +107205260:lI115|H107208558 +107208558:lI111|H10720B828 +10720B828:lI99|H10720EAE8 +10720EAE8:lI107|H107211E48 +107211E48:lI101|H107215320 +107215320:lI116|H1072189C0 +1072189C0:lI46|H10721C1F0 +10721C1F0:lI98|H10721F8F0 +10721F8F0:lI101|H107222DE8 +107222DE8:lI97|H107225F50 +107225F50:lI109|N +1071F3A40:Mn2:H1071F6250,H1071F6260 +1071F6250:lH1071F8EA0|N +1071F8EA0:lI115|H1071FBDE0 +1071FBDE0:lI115|H1071FEE98 +1071FEE98:lI108|H107202040 +107202040:lI95|H107205280 +107205280:lI108|H107208578 +107208578:lI111|H10720B848 +10720B848:lI103|H10720EB08 +10720EB08:lI103|H107211E68 +107211E68:lI101|H107215340 +107215340:lI114|H1072189E0 +1072189E0:lI46|H10721C210 +10721C210:lI98|H10721F910 +10721F910:lI101|H107222E08 +107222E08:lI97|H107225F70 +107225F70:lI109|N +1071F6260:lH1071F8EB0|N +1071F8EB0:lI116|H1071FBDF0 +1071FBDF0:lI108|H1071FEEA8 +1071FEEA8:lI115|H107202050 +107202050:lI95|H107205290 +107205290:lI99|H107208588 +107208588:lI111|H10720B858 +10720B858:lI110|H10720EB18 +10720EB18:lI110|H107211E78 +107211E78:lI101|H107215350 +107215350:lI99|H1072189F0 +1072189F0:lI116|H10721C220 +10721C220:lI105|H10721F920 +10721F920:lI111|H107222E18 +107222E18:lI110|H107225F80 +107225F80:lI95|H107228D78 +107228D78:lI115|H10722B7C0 +10722B7C0:lI117|H10722DEA8 +10722DEA8:lI112|H1072302E0 +1072302E0:lI46|H107232458 +107232458:lI98|H1072342D0 +1072342D0:lI101|H107235E38 +107235E38:lI97|H107237730 +107237730:lI109|N +1071F3A30:lH1071F6240|N +1071F6240:lI115|H1071F8E90 +1071F8E90:lI115|H1071FBDD0 +1071FBDD0:lI108|H1071FEE88 +1071FEE88:lI95|H107202030 +107202030:lI112|H107205270 +107205270:lI101|H107208568 +107208568:lI109|H10720B838 +10720B838:lI95|H10720EAF8 +10720EAF8:lI99|H107211E58 +107211E58:lI97|H107215330 +107215330:lI99|H1072189D0 +1072189D0:lI104|H10721C200 +10721C200:lI101|H10721F900 +10721F900:lI46|H107222DF8 +107222DF8:lI98|H107225F60 +107225F60:lI101|H107228D68 +107228D68:lI97|H10722B7B0 +10722B7B0:lI109|N +1071F17B8:Mn6:H1071F39C0,H1071F39D0,H1071F39E0,H1071F39F0,H1071F3A00,H1071F3A10 +1071F39C0:lH1071F61D0|N +1071F61D0:lI115|H1071F8E20 +1071F8E20:lI115|H1071FBD60 +1071FBD60:lI108|H1071FEE18 +1071FEE18:lI95|H107201FC0 +107201FC0:lI100|H107205200 +107205200:lI104|H1072084F8 +1072084F8:lI95|H10720B7C8 +10720B7C8:lI103|H10720EA88 +10720EA88:lI114|H107211DE8 +107211DE8:lI111|H1072152C0 +1072152C0:lI117|H107218960 +107218960:lI112|H10721C190 +10721C190:lI115|H10721F890 +10721F890:lI46|H107222D88 +107222D88:lI98|H107225EF0 +107225EF0:lI101|H107228D08 +107228D08:lI97|H10722B750 +10722B750:lI109|N +1071F3A10:lH1071F6220|N +1071F6220:lI115|H1071F8E70 +1071F8E70:lI115|H1071FBDB0 +1071FBDB0:lI108|H1071FEE68 +1071FEE68:lI95|H107202010 +107202010:lI99|H107205250 +107205250:lI105|H107208548 +107208548:lI112|H10720B818 +10720B818:lI104|H10720EAD8 +10720EAD8:lI101|H107211E38 +107211E38:lI114|H107215310 +107215310:lI95|H1072189B0 +1072189B0:lI102|H10721C1E0 +10721C1E0:lI111|H10721F8E0 +10721F8E0:lI114|H107222DD8 +107222DD8:lI109|H107225F40 +107225F40:lI97|H107228D58 +107228D58:lI116|H10722B7A0 +10722B7A0:lI46|H10722DE98 +10722DE98:lI98|H1072302D0 +1072302D0:lI101|H107232448 +107232448:lI97|H1072342C0 +1072342C0:lI109|N +1071F3A00:lH1071F6210|N +1071F6210:lI116|H1071F8E60 +1071F8E60:lI108|H1071FBDA0 +1071FBDA0:lI115|H1071FEE58 +1071FEE58:lI95|H107202000 +107202000:lI103|H107205240 +107205240:lI101|H107208538 +107208538:lI110|H10720B808 +10720B808:lI95|H10720EAC8 +10720EAC8:lI99|H107211E28 +107211E28:lI111|H107215300 +107215300:lI110|H1072189A0 +1072189A0:lI110|H10721C1D0 +10721C1D0:lI101|H10721F8D0 +10721F8D0:lI99|H107222DC8 +107222DC8:lI116|H107225F30 +107225F30:lI105|H107228D48 +107228D48:lI111|H10722B790 +10722B790:lI110|H10722DE88 +10722DE88:lI95|H1072302C0 +1072302C0:lI49|H107232438 +107232438:lI95|H1072342B0 +1072342B0:lI51|H107235E28 +107235E28:lI46|H107237720 +107237720:lI98|H107238DB8 +107238DB8:lI101|H10723A290 +10723A290:lI97|H10723B5F0 +10723B5F0:lI109|N +1071F39F0:lH1071F6200|N +1071F6200:lI115|H1071F8E50 +1071F8E50:lI115|H1071FBD90 +1071FBD90:lI108|H1071FEE48 +1071FEE48:lI95|H107201FF0 +107201FF0:lI115|H107205230 +107205230:lI114|H107208528 +107208528:lI112|H10720B7F8 +10720B7F8:lI95|H10720EAB8 +10720EAB8:lI112|H107211E18 +107211E18:lI114|H1072152F0 +1072152F0:lI105|H107218990 +107218990:lI109|H10721C1C0 +10721C1C0:lI101|H10721F8C0 +10721F8C0:lI115|H107222DB8 +107222DB8:lI46|H107225F20 +107225F20:lI98|H107228D38 +107228D38:lI101|H10722B780 +10722B780:lI97|H10722DE78 +10722DE78:lI109|N +1071F39E0:lH1071F61F0|N +1071F61F0:lI105|H1071F8E40 +1071F8E40:lI110|H1071FBD80 +1071FBD80:lI101|H1071FEE38 +1071FEE38:lI116|H107201FE0 +107201FE0:lI54|H107205220 +107205220:lI95|H107208518 +107208518:lI116|H10720B7E8 +10720B7E8:lI108|H10720EAA8 +10720EAA8:lI115|H107211E08 +107211E08:lI95|H1072152E0 +1072152E0:lI100|H107218980 +107218980:lI105|H10721C1B0 +10721C1B0:lI115|H10721F8B0 +10721F8B0:lI116|H107222DA8 +107222DA8:lI46|H107225F10 +107225F10:lI98|H107228D28 +107228D28:lI101|H10722B770 +10722B770:lI97|H10722DE68 +10722DE68:lI109|N +1071F39D0:lH1071F61E0|N +1071F61E0:lI115|H1071F8E30 +1071F8E30:lI115|H1071FBD70 +1071FBD70:lI108|H1071FEE28 +1071FEE28:lI95|H107201FD0 +107201FD0:lI115|H107205210 +107205210:lI101|H107208508 +107208508:lI114|H10720B7D8 +10720B7D8:lI118|H10720EA98 +10720EA98:lI101|H107211DF8 +107211DF8:lI114|H1072152D0 +1072152D0:lI95|H107218970 +107218970:lI115|H10721C1A0 +10721C1A0:lI101|H10721F8A0 +10721F8A0:lI115|H107222D98 +107222D98:lI115|H107225F00 +107225F00:lI105|H107228D18 +107228D18:lI111|H10722B760 +10722B760:lI110|H10722DE58 +10722DE58:lI95|H1072302B0 +1072302B0:lI99|H107232428 +107232428:lI97|H1072342A0 +1072342A0:lI99|H107235E18 +107235E18:lI104|H107237710 +107237710:lI101|H107238DA8 +107238DA8:lI95|H10723A280 +10723A280:lI115|H10723B5E0 +10723B5E0:lI117|H10723C6E0 +10723C6E0:lI112|H10723D5A0 +10723D5A0:lI46|H10723E320 +10723E320:lI98|H10723EF40 +10723EF40:lI101|H10723FA10 +10723FA10:lI97|H107240360 +107240360:lI109|N +1071F1790:Mn4:H1071F3980,H1071F3990,H1071F39A0,H1071F39B0 +1071F3980:lH1071F6190|N +1071F6190:lI116|H1071F8DE0 +1071F8DE0:lI108|H1071FBD20 +1071FBD20:lI115|H1071FEDD8 +1071FEDD8:lI95|H107201F80 +107201F80:lI115|H1072051C0 +1072051C0:lI101|H1072084B8 +1072084B8:lI114|H10720B788 +10720B788:lI118|H10720EA48 +10720EA48:lI101|H107211DA8 +107211DA8:lI114|H107215280 +107215280:lI95|H107218920 +107218920:lI115|H10721C150 +10721C150:lI101|H10721F850 +10721F850:lI115|H107222D48 +107222D48:lI115|H107225EC0 +107225EC0:lI105|H107228CD8 +107228CD8:lI111|H10722B720 +10722B720:lI110|H10722DE28 +10722DE28:lI95|H1072302A0 +1072302A0:lI116|H107232418 +107232418:lI105|H107234290 +107234290:lI99|H107235E08 +107235E08:lI107|H107237700 +107237700:lI101|H107238D98 +107238D98:lI116|H10723A270 +10723A270:lI46|H10723B5D0 +10723B5D0:lI98|H10723C6D0 +10723C6D0:lI101|H10723D590 +10723D590:lI97|H10723E310 +10723E310:lI109|N +1071F39B0:lH1071F61C0|N +1071F61C0:lI115|H1071F8E10 +1071F8E10:lI115|H1071FBD50 +1071FBD50:lI108|H1071FEE08 +1071FEE08:lI95|H107201FB0 +107201FB0:lI103|H1072051F0 +1072051F0:lI101|H1072084E8 +1072084E8:lI110|H10720B7B8 +10720B7B8:lI95|H10720EA78 +10720EA78:lI115|H107211DD8 +107211DD8:lI116|H1072152B0 +1072152B0:lI97|H107218950 +107218950:lI116|H10721C180 +10721C180:lI101|H10721F880 +10721F880:lI109|H107222D78 +107222D78:lI46|H107225EE0 +107225EE0:lI98|H107228CF8 +107228CF8:lI101|H10722B740 +10722B740:lI97|H10722DE48 +10722DE48:lI109|N +1071F39A0:lH1071F61B0|N +1071F61B0:lI116|H1071F8E00 +1071F8E00:lI108|H1071FBD40 +1071FBD40:lI115|H1071FEDF8 +1071FEDF8:lI95|H107201FA0 +107201FA0:lI99|H1072051E0 +1072051E0:lI111|H1072084D8 +1072084D8:lI110|H10720B7A8 +10720B7A8:lI110|H10720EA68 +10720EA68:lI101|H107211DC8 +107211DC8:lI99|H1072152A0 +1072152A0:lI116|H107218940 +107218940:lI105|H10721C170 +10721C170:lI111|H10721F870 +10721F870:lI110|H107222D68 +107222D68:lI46|H107225ED0 +107225ED0:lI98|H107228CE8 +107228CE8:lI101|H10722B730 +10722B730:lI97|H10722DE38 +10722DE38:lI109|N +1071F3990:lH1071F61A0|N +1071F61A0:lI115|H1071F8DF0 +1071F8DF0:lI115|H1071FBD30 +1071FBD30:lI108|H1071FEDE8 +1071FEDE8:lI95|H107201F90 +107201F90:lI99|H1072051D0 +1072051D0:lI105|H1072084C8 +1072084C8:lI112|H10720B798 +10720B798:lI104|H10720EA58 +10720EA58:lI101|H107211DB8 +107211DB8:lI114|H107215290 +107215290:lI46|H107218930 +107218930:lI98|H10721C160 +10721C160:lI101|H10721F860 +10721F860:lI97|H107222D58 +107222D58:lI109|N +1071F1770:Mn3:H1071F3940,H1071F3958,H1071F3968 +1071F3940:Mn2:H1071F6140,H1071F6150 +1071F6140:lH1071F8D90|N +1071F8D90:lI115|H1071FBCD0 +1071FBCD0:lI115|H1071FED88 +1071FED88:lI108|H107201F30 +107201F30:lI95|H107205170 +107205170:lI114|H107208468 +107208468:lI101|H10720B738 +10720B738:lI99|H10720E9F8 +10720E9F8:lI111|H107211D58 +107211D58:lI114|H107215230 +107215230:lI100|H1072188D0 +1072188D0:lI46|H10721C100 +10721C100:lI98|H10721F800 +10721F800:lI101|H107222CF8 +107222CF8:lI97|H107225E70 +107225E70:lI109|N +1071F6150:lH1071F8DA0|N +1071F8DA0:lI116|H1071FBCE0 +1071FBCE0:lI108|H1071FED98 +1071FED98:lI115|H107201F40 +107201F40:lI95|H107205180 +107205180:lI99|H107208478 +107208478:lI108|H10720B748 +10720B748:lI105|H10720EA08 +10720EA08:lI101|H107211D68 +107211D68:lI110|H107215240 +107215240:lI116|H1072188E0 +1072188E0:lI95|H10721C110 +10721C110:lI116|H10721F810 +10721F810:lI105|H107222D08 +107222D08:lI99|H107225E80 +107225E80:lI107|H107228C98 +107228C98:lI101|H10722B6E0 +10722B6E0:lI116|H10722DDE8 +10722DDE8:lI95|H107230260 +107230260:lI115|H1072323D8 +1072323D8:lI116|H107234250 +107234250:lI111|H107235DD8 +107235DD8:lI114|H1072376D0 +1072376D0:lI101|H107238D68 +107238D68:lI46|H10723A250 +10723A250:lI98|H10723B5B0 +10723B5B0:lI101|H10723C6B0 +10723C6B0:lI97|H10723D570 +10723D570:lI109|N +1071F3968:Mn2:H1071F6170,H1071F6180 +1071F6170:lH1071F8DC0|N +1071F8DC0:lI115|H1071FBD00 +1071FBD00:lI115|H1071FEDB8 +1071FEDB8:lI108|H107201F60 +107201F60:lI95|H1072051A0 +1072051A0:lI100|H107208498 +107208498:lI105|H10720B768 +10720B768:lI115|H10720EA28 +10720EA28:lI116|H107211D88 +107211D88:lI95|H107215260 +107215260:lI99|H107218900 +107218900:lI111|H10721C130 +10721C130:lI110|H10721F830 +10721F830:lI110|H107222D28 +107222D28:lI101|H107225EA0 +107225EA0:lI99|H107228CB8 +107228CB8:lI116|H10722B700 +10722B700:lI105|H10722DE08 +10722DE08:lI111|H107230280 +107230280:lI110|H1072323F8 +1072323F8:lI95|H107234270 +107234270:lI115|H107235DE8 +107235DE8:lI117|H1072376E0 +1072376E0:lI112|H107238D78 +107238D78:lI46|H10723A260 +10723A260:lI98|H10723B5C0 +10723B5C0:lI101|H10723C6C0 +10723C6C0:lI97|H10723D580 +10723D580:lI109|N +1071F6180:lH1071F8DD0|N +1071F8DD0:lI100|H1071FBD10 +1071FBD10:lI116|H1071FEDC8 +1071FEDC8:lI108|H107201F70 +107201F70:lI115|H1072051B0 +1072051B0:lI95|H1072084A8 +1072084A8:lI99|H10720B778 +10720B778:lI111|H10720EA38 +10720EA38:lI110|H107211D98 +107211D98:lI110|H107215270 +107215270:lI101|H107218910 +107218910:lI99|H10721C140 +10721C140:lI116|H10721F840 +10721F840:lI105|H107222D38 +107222D38:lI111|H107225EB0 +107225EB0:lI110|H107228CC8 +107228CC8:lI95|H10722B710 +10722B710:lI115|H10722DE18 +10722DE18:lI117|H107230290 +107230290:lI112|H107232408 +107232408:lI46|H107234280 +107234280:lI98|H107235DF8 +107235DF8:lI101|H1072376F0 +1072376F0:lI97|H107238D88 +107238D88:lI109|N +1071F3958:lH1071F6160|N +1071F6160:lI115|H1071F8DB0 +1071F8DB0:lI115|H1071FBCF0 +1071FBCF0:lI108|H1071FEDA8 +1071FEDA8:lI95|H107201F50 +107201F50:lI99|H107205190 +107205190:lI114|H107208488 +107208488:lI108|H10720B758 +10720B758:lI95|H10720EA18 +10720EA18:lI99|H107211D78 +107211D78:lI97|H107215250 +107215250:lI99|H1072188F0 +1072188F0:lI104|H10721C120 +10721C120:lI101|H10721F820 +10721F820:lI95|H107222D18 +107222D18:lI97|H107225E90 +107225E90:lI112|H107228CA8 +107228CA8:lI105|H10722B6F0 +10722B6F0:lI46|H10722DDF8 +10722DDF8:lI98|H107230270 +107230270:lI101|H1072323E8 +1072323E8:lI97|H107234260 +107234260:lI109|N +1071F1748:Mn4:H1071F3900,H1071F3910,H1071F3920,H1071F3930 +1071F3900:lH1071F6100|N +1071F6100:lI115|H1071F8D50 +1071F8D50:lI115|H1071FBC90 +1071FBC90:lI108|H1071FED48 +1071FED48:lI95|H107201EF0 +107201EF0:lI117|H107205130 +107205130:lI112|H107208428 +107208428:lI103|H10720B6F8 +10720B6F8:lI114|H10720E9B8 +10720E9B8:lI97|H107211D18 +107211D18:lI100|H1072151F0 +1072151F0:lI101|H107218890 +107218890:lI95|H10721C0C0 +10721C0C0:lI115|H10721F7C0 +10721F7C0:lI101|H107222CB8 +107222CB8:lI114|H107225E30 +107225E30:lI118|H107228C68 +107228C68:lI101|H10722B6B0 +10722B6B0:lI114|H10722DDB8 +10722DDB8:lI95|H107230230 +107230230:lI115|H1072323A8 +1072323A8:lI101|H107234230 +107234230:lI115|H107235DB8 +107235DB8:lI115|H1072376B0 +1072376B0:lI105|H107238D58 +107238D58:lI111|H10723A240 +10723A240:lI110|H10723B5A0 +10723B5A0:lI95|H10723C6A0 +10723C6A0:lI99|H10723D560 +10723D560:lI97|H10723E300 +10723E300:lI99|H10723EF30 +10723EF30:lI104|H10723FA00 +10723FA00:lI101|H107240350 +107240350:lI95|H107240BE0 +107240BE0:lI115|H107241380 +107241380:lI117|H107241AB0 +107241AB0:lI112|H107242180 +107242180:lI46|H1072427F0 +1072427F0:lI98|H107242DF0 +107242DF0:lI101|H107243360 +107243360:lI97|H1072438A0 +1072438A0:lI109|N +1071F3930:lH1071F6130|N +1071F6130:lI115|H1071F8D80 +1071F8D80:lI115|H1071FBCC0 +1071FBCC0:lI108|H1071FED78 +1071FED78:lI95|H107201F20 +107201F20:lI99|H107205160 +107205160:lI114|H107208458 +107208458:lI108|H10720B728 +10720B728:lI95|H10720E9E8 +10720E9E8:lI104|H107211D48 +107211D48:lI97|H107215220 +107215220:lI115|H1072188C0 +1072188C0:lI104|H10721C0F0 +10721C0F0:lI95|H10721F7F0 +10721F7F0:lI100|H107222CE8 +107222CE8:lI105|H107225E60 +107225E60:lI114|H107228C88 +107228C88:lI46|H10722B6D0 +10722B6D0:lI98|H10722DDD8 +10722DDD8:lI101|H107230250 +107230250:lI97|H1072323C8 +1072323C8:lI109|N +1071F3920:lH1071F6120|N +1071F6120:lI115|H1071F8D70 +1071F8D70:lI115|H1071FBCB0 +1071FBCB0:lI108|H1071FED68 +1071FED68:lI95|H107201F10 +107201F10:lI109|H107205150 +107205150:lI97|H107208448 +107208448:lI110|H10720B718 +10720B718:lI97|H10720E9D8 +10720E9D8:lI103|H107211D38 +107211D38:lI101|H107215210 +107215210:lI114|H1072188B0 +1072188B0:lI46|H10721C0E0 +10721C0E0:lI98|H10721F7E0 +10721F7E0:lI101|H107222CD8 +107222CD8:lI97|H107225E50 +107225E50:lI109|N +1071F3910:lH1071F6110|N +1071F6110:lI100|H1071F8D60 +1071F8D60:lI116|H1071FBCA0 +1071FBCA0:lI108|H1071FED58 +1071FED58:lI115|H107201F00 +107201F00:lI95|H107205140 +107205140:lI103|H107208438 +107208438:lI101|H10720B708 +10720B708:lI110|H10720E9C8 +10720E9C8:lI95|H107211D28 +107211D28:lI99|H107215200 +107215200:lI111|H1072188A0 +1072188A0:lI110|H10721C0D0 +10721C0D0:lI110|H10721F7D0 +10721F7D0:lI101|H107222CC8 +107222CC8:lI99|H107225E40 +107225E40:lI116|H107228C78 +107228C78:lI105|H10722B6C0 +10722B6C0:lI111|H10722DDC8 +10722DDC8:lI110|H107230240 +107230240:lI46|H1072323B8 +1072323B8:lI98|H107234240 +107234240:lI101|H107235DC8 +107235DC8:lI97|H1072376C0 +1072376C0:lI109|N +1071F1728:Mn3:H1071F38D0,H1071F38E0,H1071F38F0 +1071F38D0:lH1071F60D0|N +1071F60D0:lI116|H1071F8D20 +1071F8D20:lI108|H1071FBC60 +1071FBC60:lI115|H1071FED18 +1071FED18:lI95|H107201EC0 +107201EC0:lI100|H107205100 +107205100:lI105|H1072083F8 +1072083F8:lI115|H10720B6C8 +10720B6C8:lI116|H10720E988 +10720E988:lI95|H107211CF8 +107211CF8:lI115|H1072151D0 +1072151D0:lI101|H107218870 +107218870:lI114|H10721C0A0 +10721C0A0:lI118|H10721F7A0 +10721F7A0:lI101|H107222C98 +107222C98:lI114|H107225E10 +107225E10:lI95|H107228C48 +107228C48:lI115|H10722B6A0 +10722B6A0:lI117|H10722DDA8 +10722DDA8:lI112|H107230220 +107230220:lI46|H107232398 +107232398:lI98|H107234220 +107234220:lI101|H107235DA8 +107235DA8:lI97|H1072376A0 +1072376A0:lI109|N +1071F38F0:lH1071F60F0|N +1071F60F0:lI115|H1071F8D40 +1071F8D40:lI115|H1071FBC80 +1071FBC80:lI108|H1071FED38 +1071FED38:lI95|H107201EE0 +107201EE0:lI100|H107205120 +107205120:lI105|H107208418 +107208418:lI115|H10720B6E8 +10720B6E8:lI116|H10720E9A8 +10720E9A8:lI95|H107211D08 +107211D08:lI115|H1072151E0 +1072151E0:lI117|H107218880 +107218880:lI112|H10721C0B0 +10721C0B0:lI46|H10721F7B0 +10721F7B0:lI98|H107222CA8 +107222CA8:lI101|H107225E20 +107225E20:lI97|H107228C58 +107228C58:lI109|N +1071F38E0:lH1071F60E0|N +1071F60E0:lI115|H1071F8D30 +1071F8D30:lI115|H1071FBC70 +1071FBC70:lI108|H1071FED28 +1071FED28:lI46|H107201ED0 +107201ED0:lI97|H107205110 +107205110:lI112|H107208408 +107208408:lI112|H10720B6D8 +10720B6D8:lI117|H10720E998 +10720E998:lI112|N +1071F16F8:Mn5:H1071F3878,H1071F3888,H1071F38A0,H1071F38B0,H1071F38C0 +1071F3878:lH1071F6070|N +1071F6070:lI100|H1071F8CC0 +1071F8CC0:lI116|H1071FBC00 +1071FBC00:lI108|H1071FECB8 +1071FECB8:lI115|H107201E60 +107201E60:lI95|H1072050A0 +1072050A0:lI115|H107208398 +107208398:lI117|H10720B668 +10720B668:lI112|H10720E928 +10720E928:lI46|H107211CA8 +107211CA8:lI98|H107215180 +107215180:lI101|H107218820 +107218820:lI97|H10721C060 +10721C060:lI109|N +1071F38C0:lH1071F60C0|N +1071F60C0:lI116|H1071F8D10 +1071F8D10:lI108|H1071FBC50 +1071FBC50:lI115|H1071FED08 +1071FED08:lI95|H107201EB0 +107201EB0:lI115|H1072050F0 +1072050F0:lI101|H1072083E8 +1072083E8:lI110|H10720B6B8 +10720B6B8:lI100|H10720E978 +10720E978:lI101|H107211CE8 +107211CE8:lI114|H1072151C0 +1072151C0:lI46|H107218860 +107218860:lI98|H10721C090 +10721C090:lI101|H10721F790 +10721F790:lI97|H107222C88 +107222C88:lI109|N +1071F38B0:lH1071F60B0|N +1071F60B0:lI100|H1071F8D00 +1071F8D00:lI116|H1071FBC40 +1071FBC40:lI108|H1071FECF8 +1071FECF8:lI115|H107201EA0 +107201EA0:lI95|H1072050E0 +1072050E0:lI118|H1072083D8 +1072083D8:lI49|H10720B6A8 +10720B6A8:lI46|H10720E968 +10720E968:lI98|H107211CD8 +107211CD8:lI101|H1072151B0 +1072151B0:lI97|H107218850 +107218850:lI109|N +1071F38A0:lH1071F60A0|N +1071F60A0:lI115|H1071F8CF0 +1071F8CF0:lI115|H1071FBC30 +1071FBC30:lI108|H1071FECE8 +1071FECE8:lI95|H107201E90 +107201E90:lI99|H1072050D0 +1072050D0:lI101|H1072083C8 +1072083C8:lI114|H10720B698 +10720B698:lI116|H10720E958 +10720E958:lI105|H107211CC8 +107211CC8:lI102|H1072151A0 +1072151A0:lI105|H107218840 +107218840:lI99|H10721C080 +10721C080:lI97|H10721F780 +10721F780:lI116|H107222C78 +107222C78:lI101|H107225E00 +107225E00:lI46|H107228C38 +107228C38:lI98|H10722B690 +10722B690:lI101|H10722DD98 +10722DD98:lI97|H107230210 +107230210:lI109|N +1071F3888:Mn2:H1071F6080,H1071F6090 +1071F6080:lH1071F8CD0|N +1071F8CD0:lI115|H1071FBC10 +1071FBC10:lI115|H1071FECC8 +1071FECC8:lI108|H107201E70 +107201E70:lI46|H1072050B0 +1072050B0:lI98|H1072083A8 +1072083A8:lI101|H10720B678 +10720B678:lI97|H10720E938 +10720E938:lI109|N +1071F6090:lH1071F8CE0|N +1071F8CE0:lI115|H1071FBC20 +1071FBC20:lI115|H1071FECD8 +1071FECD8:lI108|H107201E80 +107201E80:lI95|H1072050C0 +1072050C0:lI115|H1072083B8 +1072083B8:lI101|H10720B688 +10720B688:lI115|H10720E948 +10720E948:lI115|H107211CB8 +107211CB8:lI105|H107215190 +107215190:lI111|H107218830 +107218830:lI110|H10721C070 +10721C070:lI95|H10721F770 +10721F770:lI99|H107222C68 +107222C68:lI97|H107225DF0 +107225DF0:lI99|H107228C28 +107228C28:lI104|H10722B680 +10722B680:lI101|H10722DD88 +10722DD88:lI95|H107230200 +107230200:lI97|H107232388 +107232388:lI112|H107234210 +107234210:lI105|H107235D98 +107235D98:lI46|H107237690 +107237690:lI98|H107238D48 +107238D48:lI101|H10723A230 +10723A230:lI97|H10723B590 +10723B590:lI109|N +1071F16D8:Mn3:H1071F3840,H1071F3858,H1071F3868 +1071F3840:Mn2:H1071F6030,H1071F6040 +1071F6030:lH1071F8C80|N +1071F8C80:lI115|H1071FBBC0 +1071FBBC0:lI115|H1071FEC78 +1071FEC78:lI108|H107201E20 +107201E20:lI95|H107205060 +107205060:lI99|H107208358 +107208358:lI111|H10720B628 +10720B628:lI110|H10720E8E8 +10720E8E8:lI102|H107211C68 +107211C68:lI105|H107215140 +107215140:lI103|H1072187E0 +1072187E0:lI46|H10721C020 +10721C020:lI98|H10721F730 +10721F730:lI101|H107222C28 +107222C28:lI97|H107225DB0 +107225DB0:lI109|N +1071F6040:lH1071F8C90|N +1071F8C90:lI116|H1071FBBD0 +1071FBBD0:lI108|H1071FEC88 +1071FEC88:lI115|H107201E30 +107201E30:lI95|H107205070 +107205070:lI114|H107208368 +107208368:lI101|H10720B638 +10720B638:lI99|H10720E8F8 +10720E8F8:lI111|H107211C78 +107211C78:lI114|H107215150 +107215150:lI100|H1072187F0 +1072187F0:lI95|H10721C030 +10721C030:lI49|H10721F740 +10721F740:lI95|H107222C38 +107222C38:lI51|H107225DC0 +107225DC0:lI46|H107228C08 +107228C08:lI98|H10722B660 +10722B660:lI101|H10722DD68 +10722DD68:lI97|H1072301E0 +1072301E0:lI109|N +1071F3868:lH1071F6060|N +1071F6060:lI115|H1071F8CB0 +1071F8CB0:lI115|H1071FBBF0 +1071FBBF0:lI108|H1071FECA8 +1071FECA8:lI95|H107201E50 +107201E50:lI115|H107205090 +107205090:lI101|H107208388 +107208388:lI115|H10720B658 +10720B658:lI115|H10720E918 +10720E918:lI105|H107211C98 +107211C98:lI111|H107215170 +107215170:lI110|H107218810 +107218810:lI46|H10721C050 +10721C050:lI98|H10721F760 +10721F760:lI101|H107222C58 +107222C58:lI97|H107225DE0 +107225DE0:lI109|N +1071F3858:lH1071F6050|N +1071F6050:lI115|H1071F8CA0 +1071F8CA0:lI115|H1071FBBE0 +1071FBBE0:lI108|H1071FEC98 +1071FEC98:lI95|H107201E40 +107201E40:lI115|H107205080 +107205080:lI101|H107208378 +107208378:lI114|H10720B648 +10720B648:lI118|H10720E908 +10720E908:lI101|H107211C88 +107211C88:lI114|H107215160 +107215160:lI95|H107218800 +107218800:lI115|H10721C040 +10721C040:lI101|H10721F750 +10721F750:lI115|H107222C48 +107222C48:lI115|H107225DD0 +107225DD0:lI105|H107228C18 +107228C18:lI111|H10722B670 +10722B670:lI110|H10722DD78 +10722DD78:lI95|H1072301F0 +1072301F0:lI99|H107232378 +107232378:lI97|H107234200 +107234200:lI99|H107235D88 +107235D88:lI104|H107237680 +107237680:lI101|H107238D38 +107238D38:lI95|H10723A220 +10723A220:lI100|H10723B580 +10723B580:lI98|H10723C690 +10723C690:lI46|H10723D550 +10723D550:lI98|H10723E2F0 +10723E2F0:lI101|H10723EF20 +10723EF20:lI97|H10723F9F0 +10723F9F0:lI109|N +1071F16A8:Mn5:H1071F37F0,H1071F3800,H1071F3810,H1071F3820,H1071F3830 +1071F37F0:lH1071F5FE0|N +1071F5FE0:lI100|H1071F8C30 +1071F8C30:lI116|H1071FBB70 +1071FBB70:lI108|H1071FEC28 +1071FEC28:lI115|H107201DD0 +107201DD0:lI95|H107205010 +107205010:lI115|H107208308 +107208308:lI101|H10720B5D8 +10720B5D8:lI114|H10720E898 +10720E898:lI118|H107211C18 +107211C18:lI101|H1072150F0 +1072150F0:lI114|H107218790 +107218790:lI95|H10721BFD0 +10721BFD0:lI115|H10721F6E0 +10721F6E0:lI117|H107222BD8 +107222BD8:lI112|H107225D60 +107225D60:lI46|H107228BB8 +107228BB8:lI98|H10722B610 +10722B610:lI101|H10722DD28 +10722DD28:lI97|H1072301A0 +1072301A0:lI109|N +1071F3830:lH1071F6020|N +1071F6020:lI116|H1071F8C70 +1071F8C70:lI108|H1071FBBB0 +1071FBBB0:lI115|H1071FEC68 +1071FEC68:lI95|H107201E10 +107201E10:lI103|H107205050 +107205050:lI101|H107208348 +107208348:lI110|H10720B618 +10720B618:lI95|H10720E8D8 +10720E8D8:lI99|H107211C58 +107211C58:lI111|H107215130 +107215130:lI110|H1072187D0 +1072187D0:lI110|H10721C010 +10721C010:lI101|H10721F720 +10721F720:lI99|H107222C18 +107222C18:lI116|H107225DA0 +107225DA0:lI105|H107228BF8 +107228BF8:lI111|H10722B650 +10722B650:lI110|H10722DD58 +10722DD58:lI46|H1072301D0 +1072301D0:lI98|H107232368 +107232368:lI101|H1072341F0 +1072341F0:lI97|H107235D78 +107235D78:lI109|N +1071F3820:lH1071F6010|N +1071F6010:lI105|H1071F8C60 +1071F8C60:lI110|H1071FBBA0 +1071FBBA0:lI101|H1071FEC58 +1071FEC58:lI116|H107201E00 +107201E00:lI95|H107205040 +107205040:lI116|H107208338 +107208338:lI108|H10720B608 +10720B608:lI115|H10720E8C8 +10720E8C8:lI95|H107211C48 +107211C48:lI100|H107215120 +107215120:lI105|H1072187C0 +1072187C0:lI115|H10721C000 +10721C000:lI116|H10721F710 +10721F710:lI46|H107222C08 +107222C08:lI98|H107225D90 +107225D90:lI101|H107228BE8 +107228BE8:lI97|H10722B640 +10722B640:lI109|N +1071F3810:lH1071F6000|N +1071F6000:lI115|H1071F8C50 +1071F8C50:lI115|H1071FBB90 +1071FBB90:lI108|H1071FEC48 +1071FEC48:lI95|H107201DF0 +107201DF0:lI99|H107205030 +107205030:lI111|H107208328 +107208328:lI110|H10720B5F8 +10720B5F8:lI110|H10720E8B8 +10720E8B8:lI101|H107211C38 +107211C38:lI99|H107215110 +107215110:lI116|H1072187B0 +1072187B0:lI105|H10721BFF0 +10721BFF0:lI111|H10721F700 +10721F700:lI110|H107222BF8 +107222BF8:lI95|H107225D80 +107225D80:lI115|H107228BD8 +107228BD8:lI117|H10722B630 +10722B630:lI112|H10722DD48 +10722DD48:lI46|H1072301C0 +1072301C0:lI98|H107232358 +107232358:lI101|H1072341E0 +1072341E0:lI97|H107235D68 +107235D68:lI109|N +1071F3800:lH1071F5FF0|N +1071F5FF0:lI115|H1071F8C40 +1071F8C40:lI115|H1071FBB80 +1071FBB80:lI108|H1071FEC38 +1071FEC38:lI95|H107201DE0 +107201DE0:lI100|H107205020 +107205020:lI105|H107208318 +107208318:lI115|H10720B5E8 +10720B5E8:lI116|H10720E8A8 +10720E8A8:lI95|H107211C28 +107211C28:lI97|H107215100 +107215100:lI100|H1072187A0 +1072187A0:lI109|H10721BFE0 +10721BFE0:lI105|H10721F6F0 +10721F6F0:lI110|H107222BE8 +107222BE8:lI95|H107225D70 +107225D70:lI115|H107228BC8 +107228BC8:lI117|H10722B620 +10722B620:lI112|H10722DD38 +10722DD38:lI46|H1072301B0 +1072301B0:lI98|H107232348 +107232348:lI101|H1072341D0 +1072341D0:lI97|H107235D58 +107235D58:lI109|N +1071F1678:Mn5:H1071F37A0,H1071F37B0,H1071F37C0,H1071F37D0,H1071F37E0 +1071F37A0:lH1071F5F90|N +1071F5F90:lI116|H1071F8BE0 +1071F8BE0:lI108|H1071FBB20 +1071FBB20:lI115|H1071FEBD8 +1071FEBD8:lI95|H107201D80 +107201D80:lI115|H107204FC0 +107204FC0:lI111|H1072082B8 +1072082B8:lI99|H10720B588 +10720B588:lI107|H10720E848 +10720E848:lI101|H107211BC8 +107211BC8:lI116|H1072150A0 +1072150A0:lI46|H107218740 +107218740:lI98|H10721BF90 +10721BF90:lI101|H10721F6A0 +10721F6A0:lI97|H107222BA8 +107222BA8:lI109|N +1071F37E0:lH1071F5FD0|N +1071F5FD0:lI115|H1071F8C20 +1071F8C20:lI115|H1071FBB60 +1071FBB60:lI108|H1071FEC18 +1071FEC18:lI95|H107201DC0 +107201DC0:lI99|H107205000 +107205000:lI114|H1072082F8 +1072082F8:lI108|H10720B5C8 +10720B5C8:lI46|H10720E888 +10720E888:lI98|H107211C08 +107211C08:lI101|H1072150E0 +1072150E0:lI97|H107218780 +107218780:lI109|N +1071F37D0:lH1071F5FC0|N +1071F5FC0:lI115|H1071F8C10 +1071F8C10:lI115|H1071FBB50 +1071FBB50:lI108|H1071FEC08 +1071FEC08:lI95|H107201DB0 +107201DB0:lI116|H107204FF0 +107204FF0:lI114|H1072082E8 +1072082E8:lI97|H10720B5B8 +10720B5B8:lI99|H10720E878 +10720E878:lI101|H107211BF8 +107211BF8:lI46|H1072150D0 +1072150D0:lI98|H107218770 +107218770:lI101|H10721BFC0 +10721BFC0:lI97|H10721F6D0 +10721F6D0:lI109|N +1071F37C0:lH1071F5FB0|N +1071F5FB0:lI100|H1071F8C00 +1071F8C00:lI116|H1071FBB40 +1071FBB40:lI108|H1071FEBF8 +1071FEBF8:lI115|H107201DA0 +107201DA0:lI95|H107204FE0 +107204FE0:lI114|H1072082D8 +1072082D8:lI101|H10720B5A8 +10720B5A8:lI99|H10720E868 +10720E868:lI111|H107211BE8 +107211BE8:lI114|H1072150C0 +1072150C0:lI100|H107218760 +107218760:lI46|H10721BFB0 +10721BFB0:lI98|H10721F6C0 +10721F6C0:lI101|H107222BC8 +107222BC8:lI97|H107225D50 +107225D50:lI109|N +1071F37B0:lH1071F5FA0|N +1071F5FA0:lI100|H1071F8BF0 +1071F8BF0:lI116|H1071FBB30 +1071FBB30:lI108|H1071FEBE8 +1071FEBE8:lI115|H107201D90 +107201D90:lI95|H107204FD0 +107204FD0:lI108|H1072082C8 +1072082C8:lI105|H10720B598 +10720B598:lI115|H10720E858 +10720E858:lI116|H107211BD8 +107211BD8:lI101|H1072150B0 +1072150B0:lI110|H107218750 +107218750:lI101|H10721BFA0 +10721BFA0:lI114|H10721F6B0 +10721F6B0:lI95|H107222BB8 +107222BB8:lI115|H107225D40 +107225D40:lI117|H107228BA8 +107228BA8:lI112|H10722B600 +10722B600:lI46|H10722DD18 +10722DD18:lI98|H107230190 +107230190:lI101|H107232338 +107232338:lI97|H1072341C0 +1072341C0:lI109|N +1071F1640:Mn6:H1071F3720,H1071F3740,H1071F3750,H1071F3760,H1071F3780,H1071F3790 +1071F3720:Mn3:H1071F5EF0,H1071F5F00,H1071F5F10 +1071F5EF0:lH1071F8B40|N +1071F8B40:lI115|H1071FBA80 +1071FBA80:lI115|H1071FEB38 +1071FEB38:lI108|H107201CE0 +107201CE0:lI95|H107204F20 +107204F20:lI115|H107208218 +107208218:lI101|H10720B4E8 +10720B4E8:lI114|H10720E7A8 +10720E7A8:lI118|H107211B28 +107211B28:lI101|H107215000 +107215000:lI114|H1072186A0 +1072186A0:lI95|H10721BF00 +10721BF00:lI115|H10721F620 +10721F620:lI101|H107222B28 +107222B28:lI115|H107225CD0 +107225CD0:lI115|H107228B38 +107228B38:lI105|H10722B590 +10722B590:lI111|H10722DCA8 +10722DCA8:lI110|H107230140 +107230140:lI95|H1072322E8 +1072322E8:lI99|H107234170 +107234170:lI97|H107235D08 +107235D08:lI99|H107237630 +107237630:lI104|H107238CE8 +107238CE8:lI101|H10723A1D0 +10723A1D0:lI46|H10723B530 +10723B530:lI98|H10723C640 +10723C640:lI101|H10723D510 +10723D510:lI97|H10723E2B0 +10723E2B0:lI109|N +1071F5F10:lH1071F8B60|N +1071F8B60:lI116|H1071FBAA0 +1071FBAA0:lI108|H1071FEB58 +1071FEB58:lI115|H107201D00 +107201D00:lI95|H107204F40 +107204F40:lI100|H107208238 +107208238:lI121|H10720B508 +10720B508:lI110|H10720E7C8 +10720E7C8:lI95|H107211B48 +107211B48:lI99|H107215020 +107215020:lI111|H1072186C0 +1072186C0:lI110|H10721BF20 +10721BF20:lI110|H10721F640 +10721F640:lI101|H107222B48 +107222B48:lI99|H107225CF0 +107225CF0:lI116|H107228B58 +107228B58:lI105|H10722B5B0 +10722B5B0:lI111|H10722DCC8 +10722DCC8:lI110|H107230150 +107230150:lI95|H1072322F8 +1072322F8:lI115|H107234180 +107234180:lI117|H107235D18 +107235D18:lI112|H107237640 +107237640:lI46|H107238CF8 +107238CF8:lI98|H10723A1E0 +10723A1E0:lI101|H10723B540 +10723B540:lI97|H10723C650 +10723C650:lI109|N +1071F5F00:lH1071F8B50|N +1071F8B50:lI116|H1071FBA90 +1071FBA90:lI108|H1071FEB48 +1071FEB48:lI115|H107201CF0 +107201CF0:lI95|H107204F30 +107204F30:lI104|H107208228 +107208228:lI97|H10720B4F8 +10720B4F8:lI110|H10720E7B8 +10720E7B8:lI100|H107211B38 +107211B38:lI115|H107215010 +107215010:lI104|H1072186B0 +1072186B0:lI97|H10721BF10 +10721BF10:lI107|H10721F630 +10721F630:lI101|H107222B38 +107222B38:lI46|H107225CE0 +107225CE0:lI98|H107228B48 +107228B48:lI101|H10722B5A0 +10722B5A0:lI97|H10722DCB8 +10722DCB8:lI109|N +1071F3790:lH1071F5F80|N +1071F5F80:lI115|H1071F8BD0 +1071F8BD0:lI115|H1071FBB10 +1071FBB10:lI108|H1071FEBC8 +1071FEBC8:lI95|H107201D70 +107201D70:lI99|H107204FB0 +107204FB0:lI108|H1072082A8 +1072082A8:lI105|H10720B578 +10720B578:lI101|H10720E838 +10720E838:lI110|H107211BB8 +107211BB8:lI116|H107215090 +107215090:lI95|H107218730 +107218730:lI115|H10721BF80 +10721BF80:lI101|H10721F690 +10721F690:lI115|H107222B98 +107222B98:lI115|H107225D30 +107225D30:lI105|H107228B98 +107228B98:lI111|H10722B5F0 +10722B5F0:lI110|H10722DD08 +10722DD08:lI95|H107230180 +107230180:lI99|H107232328 +107232328:lI97|H1072341B0 +1072341B0:lI99|H107235D48 +107235D48:lI104|H107237670 +107237670:lI101|H107238D28 +107238D28:lI95|H10723A210 +10723A210:lI100|H10723B570 +10723B570:lI98|H10723C680 +10723C680:lI46|H10723D540 +10723D540:lI98|H10723E2E0 +10723E2E0:lI101|H10723EF10 +10723EF10:lI97|H10723F9E0 +10723F9E0:lI109|N +1071F3780:lH1071F5F70|N +1071F5F70:lI115|H1071F8BC0 +1071F8BC0:lI115|H1071FBB00 +1071FBB00:lI108|H1071FEBB8 +1071FEBB8:lI95|H107201D60 +107201D60:lI97|H107204FA0 +107204FA0:lI112|H107208298 +107208298:lI112|H10720B568 +10720B568:lI46|H10720E828 +10720E828:lI98|H107211BA8 +107211BA8:lI101|H107215080 +107215080:lI97|H107218720 +107218720:lI109|N +1071F3760:Mn3:H1071F5F40,H1071F5F50,H1071F5F60 +1071F5F40:lH1071F8B90|N +1071F8B90:lI115|H1071FBAD0 +1071FBAD0:lI115|H1071FEB88 +1071FEB88:lI108|H107201D30 +107201D30:lI95|H107204F70 +107204F70:lI115|H107208268 +107208268:lI117|H10720B538 +10720B538:lI112|H10720E7F8 +10720E7F8:lI46|H107211B78 +107211B78:lI98|H107215050 +107215050:lI101|H1072186F0 +1072186F0:lI97|H10721BF50 +10721BF50:lI109|N +1071F5F60:lH1071F8BB0|N +1071F8BB0:lI116|H1071FBAF0 +1071FBAF0:lI108|H1071FEBA8 +1071FEBA8:lI115|H107201D50 +107201D50:lI95|H107204F90 +107204F90:lI115|H107208288 +107208288:lI101|H10720B558 +10720B558:lI114|H10720E818 +10720E818:lI118|H107211B98 +107211B98:lI101|H107215070 +107215070:lI114|H107218710 +107218710:lI95|H10721BF70 +10721BF70:lI99|H10721F680 +10721F680:lI111|H107222B88 +107222B88:lI110|H107225D20 +107225D20:lI110|H107228B88 +107228B88:lI101|H10722B5E0 +10722B5E0:lI99|H10722DCF8 +10722DCF8:lI116|H107230170 +107230170:lI105|H107232318 +107232318:lI111|H1072341A0 +1072341A0:lI110|H107235D38 +107235D38:lI95|H107237660 +107237660:lI49|H107238D18 +107238D18:lI95|H10723A200 +10723A200:lI51|H10723B560 +10723B560:lI46|H10723C670 +10723C670:lI98|H10723D530 +10723D530:lI101|H10723E2D0 +10723E2D0:lI97|H10723EF00 +10723EF00:lI109|N +1071F5F50:lH1071F8BA0|N +1071F8BA0:lI115|H1071FBAE0 +1071FBAE0:lI115|H1071FEB98 +1071FEB98:lI108|H107201D40 +107201D40:lI95|H107204F80 +107204F80:lI97|H107208278 +107208278:lI108|H10720B548 +10720B548:lI101|H10720E808 +10720E808:lI114|H107211B88 +107211B88:lI116|H107215060 +107215060:lI46|H107218700 +107218700:lI98|H10721BF60 +10721BF60:lI101|H10721F670 +10721F670:lI97|H107222B78 +107222B78:lI109|N +1071F3750:lH1071F5F30|N +1071F5F30:lI100|H1071F8B80 +1071F8B80:lI116|H1071FBAC0 +1071FBAC0:lI108|H1071FEB78 +1071FEB78:lI115|H107201D20 +107201D20:lI95|H107204F60 +107204F60:lI115|H107208258 +107208258:lI101|H10720B528 +10720B528:lI114|H10720E7E8 +10720E7E8:lI118|H107211B68 +107211B68:lI101|H107215040 +107215040:lI114|H1072186E0 +1072186E0:lI95|H10721BF40 +10721BF40:lI115|H10721F660 +10721F660:lI101|H107222B68 +107222B68:lI115|H107225D10 +107225D10:lI115|H107228B78 +107228B78:lI105|H10722B5D0 +10722B5D0:lI111|H10722DCE8 +10722DCE8:lI110|H107230160 +107230160:lI95|H107232308 +107232308:lI99|H107234190 +107234190:lI97|H107235D28 +107235D28:lI99|H107237650 +107237650:lI104|H107238D08 +107238D08:lI101|H10723A1F0 +10723A1F0:lI95|H10723B550 +10723B550:lI115|H10723C660 +10723C660:lI117|H10723D520 +10723D520:lI112|H10723E2C0 +10723E2C0:lI46|H10723EEF0 +10723EEF0:lI98|H10723F9D0 +10723F9D0:lI101|H107240340 +107240340:lI97|H107240BD0 +107240BD0:lI109|N +1071F3740:lH1071F5F20|N +1071F5F20:lI116|H1071F8B70 +1071F8B70:lI108|H1071FBAB0 +1071FBAB0:lI115|H1071FEB68 +1071FEB68:lI95|H107201D10 +107201D10:lI115|H107204F50 +107204F50:lI101|H107208248 +107208248:lI114|H10720B518 +10720B518:lI118|H10720E7D8 +10720E7D8:lI101|H107211B58 +107211B58:lI114|H107215030 +107215030:lI95|H1072186D0 +1072186D0:lI115|H10721BF30 +10721BF30:lI117|H10721F650 +10721F650:lI112|H107222B58 +107222B58:lI46|H107225D00 +107225D00:lI98|H107228B68 +107228B68:lI101|H10722B5C0 +10722B5C0:lI97|H10722DCD8 +10722DCD8:lI109|N +1071F1610:Mn5:H1071F36C0,H1071F36D8,H1071F36E8,H1071F36F8,H1071F3708 +1071F36C0:Mn2:H1071F5E80,H1071F5E90 +1071F5E80:lH1071F8AD0|N +1071F8AD0:lI116|H1071FBA10 +1071FBA10:lI108|H1071FEAC8 +1071FEAC8:lI115|H107201C70 +107201C70:lI95|H107204EB0 +107204EB0:lI104|H1072081A8 +1072081A8:lI97|H10720B478 +10720B478:lI110|H10720E738 +10720E738:lI100|H107211AB8 +107211AB8:lI115|H107214F90 +107214F90:lI104|H107218630 +107218630:lI97|H10721BE90 +10721BE90:lI107|H10721F5C0 +10721F5C0:lI101|H107222AC8 +107222AC8:lI95|H107225C70 +107225C70:lI49|H107228AD8 +107228AD8:lI95|H10722B530 +10722B530:lI51|H10722DC58 +10722DC58:lI46|H107230100 +107230100:lI98|H1072322A8 +1072322A8:lI101|H107234140 +107234140:lI97|H107235CE8 +107235CE8:lI109|N +1071F5E90:lH1071F8AE0|N +1071F8AE0:lI115|H1071FBA20 +1071FBA20:lI115|H1071FEAD8 +1071FEAD8:lI108|H107201C80 +107201C80:lI95|H107204EC0 +107204EC0:lI97|H1072081B8 +1072081B8:lI100|H10720B488 +10720B488:lI109|H10720E748 +10720E748:lI105|H107211AC8 +107211AC8:lI110|H107214FA0 +107214FA0:lI95|H107218640 +107218640:lI115|H10721BEA0 +10721BEA0:lI117|H10721F5D0 +10721F5D0:lI112|H107222AD8 +107222AD8:lI46|H107225C80 +107225C80:lI98|H107228AE8 +107228AE8:lI101|H10722B540 +10722B540:lI97|H10722DC68 +10722DC68:lI109|N +1071F3708:Mn2:H1071F5ED0,H1071F5EE0 +1071F5ED0:lH1071F8B20|N +1071F8B20:lI116|H1071FBA60 +1071FBA60:lI108|H1071FEB18 +1071FEB18:lI115|H107201CC0 +107201CC0:lI95|H107204F00 +107204F00:lI115|H1072081F8 +1072081F8:lI117|H10720B4C8 +10720B4C8:lI112|H10720E788 +10720E788:lI46|H107211B08 +107211B08:lI98|H107214FE0 +107214FE0:lI101|H107218680 +107218680:lI97|H10721BEE0 +10721BEE0:lI109|N +1071F5EE0:lH1071F8B30|N +1071F8B30:lI100|H1071FBA70 +1071FBA70:lI116|H1071FEB28 +1071FEB28:lI108|H107201CD0 +107201CD0:lI115|H107204F10 +107204F10:lI95|H107208208 +107208208:lI99|H10720B4D8 +10720B4D8:lI111|H10720E798 +10720E798:lI110|H107211B18 +107211B18:lI110|H107214FF0 +107214FF0:lI101|H107218690 +107218690:lI99|H10721BEF0 +10721BEF0:lI116|H10721F610 +10721F610:lI105|H107222B18 +107222B18:lI111|H107225CC0 +107225CC0:lI110|H107228B28 +107228B28:lI46|H10722B580 +10722B580:lI98|H10722DC98 +10722DC98:lI101|H107230130 +107230130:lI97|H1072322D8 +1072322D8:lI109|N +1071F36F8:lH1071F5EC0|N +1071F5EC0:lI115|H1071F8B10 +1071F8B10:lI115|H1071FBA50 +1071FBA50:lI108|H1071FEB08 +1071FEB08:lI95|H107201CB0 +107201CB0:lI99|H107204EF0 +107204EF0:lI114|H1072081E8 +1072081E8:lI108|H10720B4B8 +10720B4B8:lI95|H10720E778 +10720E778:lI99|H107211AF8 +107211AF8:lI97|H107214FD0 +107214FD0:lI99|H107218670 +107218670:lI104|H10721BED0 +10721BED0:lI101|H10721F600 +10721F600:lI46|H107222B08 +107222B08:lI98|H107225CB0 +107225CB0:lI101|H107228B18 +107228B18:lI97|H10722B570 +10722B570:lI109|N +1071F36E8:lH1071F5EB0|N +1071F5EB0:lI100|H1071F8B00 +1071F8B00:lI116|H1071FBA40 +1071FBA40:lI108|H1071FEAF8 +1071FEAF8:lI115|H107201CA0 +107201CA0:lI95|H107204EE0 +107204EE0:lI112|H1072081D8 +1072081D8:lI97|H10720B4A8 +10720B4A8:lI99|H10720E768 +10720E768:lI107|H107211AE8 +107211AE8:lI101|H107214FC0 +107214FC0:lI116|H107218660 +107218660:lI95|H10721BEC0 +10721BEC0:lI100|H10721F5F0 +10721F5F0:lI101|H107222AF8 +107222AF8:lI109|H107225CA0 +107225CA0:lI117|H107228B08 +107228B08:lI120|H10722B560 +10722B560:lI46|H10722DC88 +10722DC88:lI98|H107230120 +107230120:lI101|H1072322C8 +1072322C8:lI97|H107234160 +107234160:lI109|N +1071F36D8:lH1071F5EA0|N +1071F5EA0:lI116|H1071F8AF0 +1071F8AF0:lI108|H1071FBA30 +1071FBA30:lI115|H1071FEAE8 +1071FEAE8:lI95|H107201C90 +107201C90:lI100|H107204ED0 +107204ED0:lI116|H1072081C8 +1072081C8:lI108|H10720B498 +10720B498:lI115|H10720E758 +10720E758:lI95|H107211AD8 +107211AD8:lI99|H107214FB0 +107214FB0:lI111|H107218650 +107218650:lI110|H10721BEB0 +10721BEB0:lI110|H10721F5E0 +10721F5E0:lI101|H107222AE8 +107222AE8:lI99|H107225C90 +107225C90:lI116|H107228AF8 +107228AF8:lI105|H10722B550 +10722B550:lI111|H10722DC78 +10722DC78:lI110|H107230110 +107230110:lI46|H1072322B8 +1072322B8:lI98|H107234150 +107234150:lI101|H107235CF8 +107235CF8:lI97|H107237620 +107237620:lI109|N +1071F0548:lI47|H1071F15E8 +1071F15E8:lI111|H1071F3690 +1071F3690:lI112|H1071F5E50 +1071F5E50:lI116|H1071F8AA0 +1071F8AA0:lI47|H1071FB9E0 +1071FB9E0:lI104|H1071FEA98 +1071FEA98:lI111|H107201C40 +107201C40:lI109|H107204E80 +107204E80:lI101|H107208178 +107208178:lI98|H10720B458 +10720B458:lI114|H10720E718 +10720E718:lI101|H107211A98 +107211A98:lI119|H107214F70 +107214F70:lI47|H107218610 +107218610:lI67|H10721BE70 +10721BE70:lI101|H10721F5A0 +10721F5A0:lI108|H107222AA8 +107222AA8:lI108|H107225C60 +107225C60:lI97|H107228AC8 +107228AC8:lI114|H10722B520 +10722B520:lI47|H10722DC48 +10722DC48:lI101|H1072300F0 +1072300F0:lI114|H107232298 +107232298:lI108|H107234130 +107234130:lI97|H107235CD8 +107235CD8:lI110|H107237610 +107237610:lI103|H107238CD8 +107238CD8:lI47|H10723A1C0 +10723A1C0:lI50|H10723B520 +10723B520:lI54|H10723C630 +10723C630:lI46|H10723D500 +10723D500:lI48|H10723E2A0 +10723E2A0:lI46|H10723EEE0 +10723EEE0:lI50|H10723F9C0 +10723F9C0:lI47|H107240330 +107240330:lI108|H107240BC0 +107240BC0:lI105|H107241370 +107241370:lI98|H107241AA0 +107241AA0:lI47|H107242170 +107242170:lI101|H1072427E0 +1072427E0:lI114|H107242DE0 +107242DE0:lI108|H107243350 +107243350:lI97|H107243890 +107243890:lI110|H107243DA0 +107243DA0:lI103|H107244290 +107244290:lI47|H107244740 +107244740:lI108|H107244BB0 +107244BB0:lI105|H107245010 +107245010:lI98|H107245460 +107245460:lI47|H107245860 +107245860:lI115|H107245C20 +107245C20:lI115|H107245FB0 +107245FB0:lI108|H107246340 +107246340:lI45|H1072466D0 +1072466D0:lI49|H107246A60 +107246A60:lI49|H107246DA0 +107246DA0:lI46|H1072470C0 +1072470C0:lI48|H1072473E0 +1072473E0:lI46|H1072476F0 +1072476F0:lI50|H1072479F0 +1072479F0:lI47|H280052C20 +1071F0538:lH1071F15C0|H1071F15D8 +1071F15C0:t2:H1071F35C8,H1071F35D8 +1071F35D8:Mh2B:10:H1071F5BC0,H1071F5BF8,H1071F5C10,H1071F5C30,H1071F5C48,H1071F5C58,H1071F5C70,H1071F5C90,H1071F5CA8,H1071F5CD0,H1071F5CE8,H1071F5D10,H1071F5D20,H1071F5D40,H1071F5D58,H1071F5D70 +1071F5BC0:Mn6:H1071F8428,H1071F8438,H1071F8450,H1071F8460,H1071F8470,H1071F8480 +1071F8428:lH1071FB080|N +1071FB080:lI115|H1071FDFC0 +1071FDFC0:lI115|H107201078 +107201078:lI104|H107204220 +107204220:lI95|H107207450 +107207450:lI99|H10720A6C8 +10720A6C8:lI108|H10720D8B8 +10720D8B8:lI105|H107210A58 +107210A58:lI101|H107213CB8 +107213CB8:lI110|H107217070 +107217070:lI116|H10721A5A0 +10721A5A0:lI95|H10721DB40 +10721DB40:lI99|H107221060 +107221060:lI104|H107224268 +107224268:lI97|H107227190 +107227190:lI110|H107229CC8 +107229CC8:lI110|H10722C4D0 +10722C4D0:lI101|H10722EA18 +10722EA18:lI108|H107230C80 +107230C80:lI46|H107232C78 +107232C78:lI98|H107234950 +107234950:lI101|H107236388 +107236388:lI97|H107237B50 +107237B50:lI109|N +1071F8480:lH1071FB0E0|N +1071FB0E0:lI115|H1071FE020 +1071FE020:lI115|H1072010D8 +1072010D8:lI104|H107204280 +107204280:lI95|H1072074B0 +1072074B0:lI115|H10720A728 +10720A728:lI101|H10720D918 +10720D918:lI114|H107210AA8 +107210AA8:lI118|H107213D08 +107213D08:lI101|H1072170C0 +1072170C0:lI114|H10721A5F0 +10721A5F0:lI95|H10721DB90 +10721DB90:lI99|H1072210B0 +1072210B0:lI104|H1072242B8 +1072242B8:lI97|H1072271D0 +1072271D0:lI110|H107229D08 +107229D08:lI110|H10722C500 +10722C500:lI101|H10722EA48 +10722EA48:lI108|H107230CB0 +107230CB0:lI46|H107232CA8 +107232CA8:lI98|H107234980 +107234980:lI101|H1072363A8 +1072363A8:lI97|H107237B70 +107237B70:lI109|N +1071F8470:lH1071FB0D0|N +1071FB0D0:lI115|H1071FE010 +1071FE010:lI115|H1072010C8 +1072010C8:lI104|H107204270 +107204270:lI95|H1072074A0 +1072074A0:lI115|H10720A718 +10720A718:lI101|H10720D908 +10720D908:lI114|H107210A98 +107210A98:lI118|H107213CF8 +107213CF8:lI101|H1072170B0 +1072170B0:lI114|H10721A5E0 +10721A5E0:lI95|H10721DB80 +10721DB80:lI107|H1072210A0 +1072210A0:lI101|H1072242A8 +1072242A8:lI121|H1072271C0 +1072271C0:lI95|H107229CF8 +107229CF8:lI97|H10722C4F0 +10722C4F0:lI112|H10722EA38 +10722EA38:lI105|H107230CA0 +107230CA0:lI46|H107232C98 +107232C98:lI98|H107234970 +107234970:lI101|H107236398 +107236398:lI97|H107237B60 +107237B60:lI109|N +1071F8460:lH1071FB0C0|N +1071FB0C0:lI115|H1071FE000 +1071FE000:lI115|H1072010B8 +1072010B8:lI104|H107204260 +107204260:lI95|H107207490 +107207490:lI109|H10720A708 +10720A708:lI101|H10720D8F8 +10720D8F8:lI115|H107210A88 +107210A88:lI115|H107213CE8 +107213CE8:lI97|H1072170A0 +1072170A0:lI103|H10721A5D0 +10721A5D0:lI101|H10721DB70 +10721DB70:lI46|H107221090 +107221090:lI98|H107224298 +107224298:lI101|H1072271B0 +1072271B0:lI97|H107229CE8 +107229CE8:lI109|N +1071F8450:lH1071FB0B0|N +1071FB0B0:lI115|H1071FDFF0 +1071FDFF0:lI115|H1072010A8 +1072010A8:lI104|H107204250 +107204250:lI46|H107207480 +107207480:lI97|H10720A6F8 +10720A6F8:lI112|H10720D8E8 +10720D8E8:lI112|N +1071F8438:Mn2:H1071FB090,H1071FB0A0 +1071FB090:lH1071FDFD0|N +1071FDFD0:lI115|H107201088 +107201088:lI115|H107204230 +107204230:lI104|H107207460 +107207460:lI95|H10720A6D8 +10720A6D8:lI99|H10720D8C8 +10720D8C8:lI104|H107210A68 +107210A68:lI97|H107213CC8 +107213CC8:lI110|H107217080 +107217080:lI110|H10721A5B0 +10721A5B0:lI101|H10721DB50 +10721DB50:lI108|H107221070 +107221070:lI95|H107224278 +107224278:lI115|H1072271A0 +1072271A0:lI117|H107229CD8 +107229CD8:lI112|H10722C4E0 +10722C4E0:lI46|H10722EA28 +10722EA28:lI98|H107230C90 +107230C90:lI101|H107232C88 +107232C88:lI97|H107234960 +107234960:lI109|N +1071FB0A0:lH1071FDFE0|N +1071FDFE0:lI115|H107201098 +107201098:lI115|H107204240 +107204240:lI104|H107207470 +107207470:lI95|H10720A6E8 +10720A6E8:lI115|H10720D8D8 +10720D8D8:lI102|H107210A78 +107210A78:lI116|H107213CD8 +107213CD8:lI112|H107217090 +107217090:lI46|H10721A5C0 +10721A5C0:lI98|H10721DB60 +10721DB60:lI101|H107221080 +107221080:lI97|H107224288 +107224288:lI109|N +1071F5D70:Mn2:H1071F86A8,H1071F86B8 +1071F86A8:lH1071FB310|N +1071FB310:lI115|H1071FE250 +1071FE250:lI115|H107201308 +107201308:lI104|H1072044B0 +1072044B0:lI95|H1072076E0 +1072076E0:lI115|H10720A958 +10720A958:lI102|H10720DB48 +10720DB48:lI116|H107210CD8 +107210CD8:lI112|H107213F38 +107213F38:lI100|H1072172D0 +1072172D0:lI95|H10721A800 +10721A800:lI102|H10721DD80 +10721DD80:lI105|H107221280 +107221280:lI108|H107224428 +107224428:lI101|H107227300 +107227300:lI46|H107229E38 +107229E38:lI98|H10722C620 +10722C620:lI101|H10722EB58 +10722EB58:lI97|H107230DB0 +107230DB0:lI109|N +1071F86B8:lH1071FB320|N +1071FB320:lI115|H1071FE260 +1071FE260:lI115|H107201318 +107201318:lI104|H1072044C0 +1072044C0:lI95|H1072076F0 +1072076F0:lI99|H10720A968 +10720A968:lI104|H10720DB58 +10720DB58:lI97|H107210CE8 +107210CE8:lI110|H107213F48 +107213F48:lI110|H1072172E0 +1072172E0:lI101|H10721A810 +10721A810:lI108|H10721DD90 +10721DD90:lI46|H107221290 +107221290:lI98|H107224438 +107224438:lI101|H107227310 +107227310:lI97|H107229E48 +107229E48:lI109|N +1071F5D58:Mn2:H1071F8688,H1071F8698 +1071F8688:lH1071FB2F0|N +1071FB2F0:lI115|H1071FE230 +1071FE230:lI115|H1072012E8 +1072012E8:lI104|H107204490 +107204490:lI95|H1072076C0 +1072076C0:lI97|H10720A938 +10720A938:lI99|H10720DB28 +10720DB28:lI99|H107210CB8 +107210CB8:lI101|H107213F18 +107213F18:lI112|H1072172B0 +1072172B0:lI116|H10721A7E0 +10721A7E0:lI111|H10721DD60 +10721DD60:lI114|H107221260 +107221260:lI46|H107224418 +107224418:lI98|H1072272F0 +1072272F0:lI101|H107229E28 +107229E28:lI97|H10722C610 +10722C610:lI109|N +1071F8698:lH1071FB300|N +1071FB300:lI115|H1071FE240 +1071FE240:lI115|H1072012F8 +1072012F8:lI104|H1072044A0 +1072044A0:lI95|H1072076D0 +1072076D0:lI102|H10720A948 +10720A948:lI105|H10720DB38 +10720DB38:lI108|H107210CC8 +107210CC8:lI101|H107213F28 +107213F28:lI46|H1072172C0 +1072172C0:lI98|H10721A7F0 +10721A7F0:lI101|H10721DD70 +10721DD70:lI97|H107221270 +107221270:lI109|N +1071F5D40:Mn2:H1071F8668,H1071F8678 +1071F8668:lH1071FB2D0|N +1071FB2D0:lI115|H1071FE210 +1071FE210:lI115|H1072012C8 +1072012C8:lI104|H107204470 +107204470:lI95|H1072076A0 +1072076A0:lI115|H10720A918 +10720A918:lI117|H10720DB08 +10720DB08:lI98|H107210C98 +107210C98:lI115|H107213EF8 +107213EF8:lI121|H107217290 +107217290:lI115|H10721A7C0 +10721A7C0:lI116|H10721DD40 +10721DD40:lI101|H107221240 +107221240:lI109|H1072243F8 +1072243F8:lI95|H1072272D0 +1072272D0:lI115|H107229E08 +107229E08:lI117|H10722C5F0 +10722C5F0:lI112|H10722EB38 +10722EB38:lI46|H107230D90 +107230D90:lI98|H107232D68 +107232D68:lI101|H107234A30 +107234A30:lI97|H107236448 +107236448:lI109|N +1071F8678:lH1071FB2E0|N +1071FB2E0:lI115|H1071FE220 +1071FE220:lI115|H1072012D8 +1072012D8:lI104|H107204480 +107204480:lI95|H1072076B0 +1072076B0:lI102|H10720A928 +10720A928:lI115|H10720DB18 +10720DB18:lI109|H107210CA8 +107210CA8:lI95|H107213F08 +107213F08:lI117|H1072172A0 +1072172A0:lI115|H10721A7D0 +10721A7D0:lI101|H10721DD50 +10721DD50:lI114|H107221250 +107221250:lI97|H107224408 +107224408:lI117|H1072272E0 +1072272E0:lI116|H107229E18 +107229E18:lI104|H10722C600 +10722C600:lI95|H10722EB48 +10722EB48:lI99|H107230DA0 +107230DA0:lI108|H107232D78 +107232D78:lI105|H107234A40 +107234A40:lI101|H107236458 +107236458:lI110|H107237C10 +107237C10:lI116|H1072391C8 +1072391C8:lI46|H10723A660 +10723A660:lI98|H10723B920 +10723B920:lI101|H10723C950 +10723C950:lI97|H10723D7C0 +10723D7C0:lI109|N +1071F5D20:Mn3:H1071F8638,H1071F8648,H1071F8658 +1071F8638:lH1071FB2A0|N +1071FB2A0:lI115|H1071FE1E0 +1071FE1E0:lI115|H107201298 +107201298:lI104|H107204440 +107204440:lI95|H107207670 +107207670:lI97|H10720A8E8 +10720A8E8:lI103|H10720DAD8 +10720DAD8:lI101|H107210C68 +107210C68:lI110|H107213EC8 +107213EC8:lI116|H107217260 +107217260:lI46|H10721A790 +10721A790:lI98|H10721DD10 +10721DD10:lI101|H107221210 +107221210:lI97|H1072243C8 +1072243C8:lI109|N +1071F8658:lH1071FB2C0|N +1071FB2C0:lI115|H1071FE200 +1071FE200:lI115|H1072012B8 +1072012B8:lI104|H107204460 +107204460:lI95|H107207690 +107207690:lI100|H10720A908 +10720A908:lI97|H10720DAF8 +10720DAF8:lI101|H107210C88 +107210C88:lI109|H107213EE8 +107213EE8:lI111|H107217280 +107217280:lI110|H10721A7B0 +10721A7B0:lI95|H10721DD30 +10721DD30:lI99|H107221230 +107221230:lI104|H1072243E8 +1072243E8:lI97|H1072272C0 +1072272C0:lI110|H107229DF8 +107229DF8:lI110|H10722C5E0 +10722C5E0:lI101|H10722EB28 +10722EB28:lI108|H107230D80 +107230D80:lI46|H107232D58 +107232D58:lI98|H107234A20 +107234A20:lI101|H107236438 +107236438:lI97|H107237C00 +107237C00:lI109|N +1071F8648:lH1071FB2B0|N +1071FB2B0:lI115|H1071FE1F0 +1071FE1F0:lI115|H1072012A8 +1072012A8:lI104|H107204450 +107204450:lI95|H107207680 +107207680:lI116|H10720A8F8 +10720A8F8:lI99|H10720DAE8 +10720DAE8:lI112|H107210C78 +107210C78:lI105|H107213ED8 +107213ED8:lI112|H107217270 +107217270:lI95|H10721A7A0 +10721A7A0:lI102|H10721DD20 +10721DD20:lI111|H107221220 +107221220:lI114|H1072243D8 +1072243D8:lI119|H1072272B0 +1072272B0:lI97|H107229DE8 +107229DE8:lI114|H10722C5D0 +10722C5D0:lI100|H10722EB18 +10722EB18:lI95|H107230D70 +107230D70:lI99|H107232D48 +107232D48:lI108|H107234A10 +107234A10:lI105|H107236428 +107236428:lI101|H107237BF0 +107237BF0:lI110|H1072391B8 +1072391B8:lI116|H10723A650 +10723A650:lI46|H10723B910 +10723B910:lI98|H10723C940 +10723C940:lI101|H10723D7B0 +10723D7B0:lI97|H10723E500 +10723E500:lI109|N +1071F5D10:lH1071F8628|N +1071F8628:lI115|H1071FB290 +1071FB290:lI115|H1071FE1D0 +1071FE1D0:lI104|H107201288 +107201288:lI95|H107204430 +107204430:lI97|H107207660 +107207660:lI112|H10720A8D8 +10720A8D8:lI112|H10720DAC8 +10720DAC8:lI46|H107210C58 +107210C58:lI98|H107213EB8 +107213EB8:lI101|H107217250 +107217250:lI97|H10721A780 +10721A780:lI109|N +1071F5CE8:Mn4:H1071F85E8,H1071F85F8,H1071F8608,H1071F8618 +1071F85E8:lH1071FB250|N +1071FB250:lI115|H1071FE190 +1071FE190:lI115|H107201248 +107201248:lI104|H1072043F0 +1072043F0:lI95|H107207620 +107207620:lI120|H10720A898 +10720A898:lI102|H10720DA88 +10720DA88:lI101|H107210C18 +107210C18:lI114|H107213E78 +107213E78:lI46|H107217210 +107217210:lI98|H10721A740 +10721A740:lI101|H10721DCD0 +10721DCD0:lI97|H1072211D0 +1072211D0:lI109|N +1071F8618:lH1071FB280|N +1071FB280:lI115|H1071FE1C0 +1071FE1C0:lI115|H107201278 +107201278:lI104|H107204420 +107204420:lI95|H107207650 +107207650:lI98|H10720A8C8 +10720A8C8:lI105|H10720DAB8 +10720DAB8:lI116|H107210C48 +107210C48:lI115|H107213EA8 +107213EA8:lI46|H107217240 +107217240:lI98|H10721A770 +10721A770:lI101|H10721DD00 +10721DD00:lI97|H107221200 +107221200:lI109|N +1071F8608:lH1071FB270|N +1071FB270:lI115|H1071FE1B0 +1071FE1B0:lI115|H107201268 +107201268:lI104|H107204410 +107204410:lI95|H107207640 +107207640:lI102|H10720A8B8 +10720A8B8:lI115|H10720DAA8 +10720DAA8:lI109|H107210C38 +107210C38:lI95|H107213E98 +107213E98:lI107|H107217230 +107217230:lI101|H10721A760 +10721A760:lI120|H10721DCF0 +10721DCF0:lI105|H1072211F0 +1072211F0:lI110|H1072243B8 +1072243B8:lI105|H1072272A0 +1072272A0:lI116|H107229DD8 +107229DD8:lI46|H10722C5C0 +10722C5C0:lI98|H10722EB08 +10722EB08:lI101|H107230D60 +107230D60:lI97|H107232D38 +107232D38:lI109|N +1071F85F8:lH1071FB260|N +1071FB260:lI115|H1071FE1A0 +1071FE1A0:lI115|H107201258 +107201258:lI104|H107204400 +107204400:lI95|H107207630 +107207630:lI111|H10720A8A8 +10720A8A8:lI112|H10720DA98 +10720DA98:lI116|H107210C28 +107210C28:lI105|H107213E88 +107213E88:lI111|H107217220 +107217220:lI110|H10721A750 +10721A750:lI115|H10721DCE0 +10721DCE0:lI46|H1072211E0 +1072211E0:lI98|H1072243A8 +1072243A8:lI101|H107227290 +107227290:lI97|H107229DC8 +107229DC8:lI109|N +1071F5CD0:Mn2:H1071F85C8,H1071F85D8 +1071F85C8:lH1071FB230|N +1071FB230:lI115|H1071FE170 +1071FE170:lI115|H107201228 +107201228:lI104|H1072043D0 +1072043D0:lI95|H107207600 +107207600:lI116|H10720A878 +10720A878:lI99|H10720DA68 +10720DA68:lI112|H107210BF8 +107210BF8:lI105|H107213E58 +107213E58:lI112|H1072171F0 +1072171F0:lI95|H10721A720 +10721A720:lI102|H10721DCB0 +10721DCB0:lI111|H1072211B0 +1072211B0:lI114|H107224388 +107224388:lI119|H107227270 +107227270:lI97|H107229DA8 +107229DA8:lI114|H10722C5A0 +10722C5A0:lI100|H10722EAE8 +10722EAE8:lI95|H107230D40 +107230D40:lI97|H107232D28 +107232D28:lI99|H107234A00 +107234A00:lI99|H107236418 +107236418:lI101|H107237BE0 +107237BE0:lI112|H1072391A8 +1072391A8:lI116|H10723A640 +10723A640:lI111|H10723B900 +10723B900:lI114|H10723C930 +10723C930:lI95|H10723D7A0 +10723D7A0:lI115|H10723E4F0 +10723E4F0:lI117|H10723F100 +10723F100:lI112|H10723FBC0 +10723FBC0:lI46|H107240500 +107240500:lI98|H107240D80 +107240D80:lI101|H107241510 +107241510:lI97|H107241C40 +107241C40:lI109|N +1071F85D8:lH1071FB240|N +1071FB240:lI115|H1071FE180 +1071FE180:lI115|H107201238 +107201238:lI104|H1072043E0 +1072043E0:lI95|H107207610 +107207610:lI115|H10720A888 +10720A888:lI121|H10720DA78 +10720DA78:lI115|H107210C08 +107210C08:lI116|H107213E68 +107213E68:lI101|H107217200 +107217200:lI109|H10721A730 +10721A730:lI95|H10721DCC0 +10721DCC0:lI115|H1072211C0 +1072211C0:lI117|H107224398 +107224398:lI112|H107227280 +107227280:lI46|H107229DB8 +107229DB8:lI98|H10722C5B0 +10722C5B0:lI101|H10722EAF8 +10722EAF8:lI97|H107230D50 +107230D50:lI109|N +1071F5CA8:Mn4:H1071F8588,H1071F8598,H1071F85A8,H1071F85B8 +1071F8588:lH1071FB1F0|N +1071FB1F0:lI115|H1071FE130 +1071FE130:lI115|H1072011E8 +1072011E8:lI104|H107204390 +107204390:lI95|H1072075C0 +1072075C0:lI116|H10720A838 +10720A838:lI99|H10720DA28 +10720DA28:lI112|H107210BB8 +107210BB8:lI105|H107213E18 +107213E18:lI112|H1072171B0 +1072171B0:lI95|H10721A6E0 +10721A6E0:lI102|H10721DC70 +10721DC70:lI111|H107221170 +107221170:lI114|H107224358 +107224358:lI119|H107227250 +107227250:lI97|H107229D88 +107229D88:lI114|H10722C580 +10722C580:lI100|H10722EAC8 +10722EAC8:lI95|H107230D30 +107230D30:lI115|H107232D18 +107232D18:lI114|H1072349F0 +1072349F0:lI118|H107236408 +107236408:lI46|H107237BD0 +107237BD0:lI98|H107239198 +107239198:lI101|H10723A630 +10723A630:lI97|H10723B8F0 +10723B8F0:lI109|N +1071F85B8:lH1071FB220|N +1071FB220:lI115|H1071FE160 +1071FE160:lI115|H107201218 +107201218:lI104|H1072043C0 +1072043C0:lI95|H1072075F0 +1072075F0:lI97|H10720A868 +10720A868:lI117|H10720DA58 +10720DA58:lI116|H107210BE8 +107210BE8:lI104|H107213E48 +107213E48:lI46|H1072171E0 +1072171E0:lI98|H10721A710 +10721A710:lI101|H10721DCA0 +10721DCA0:lI97|H1072211A0 +1072211A0:lI109|N +1071F85A8:lH1071FB210|N +1071FB210:lI115|H1071FE150 +1071FE150:lI115|H107201208 +107201208:lI104|H1072043B0 +1072043B0:lI95|H1072075E0 +1072075E0:lI116|H10720A858 +10720A858:lI114|H10720DA48 +10720DA48:lI97|H107210BD8 +107210BD8:lI110|H107213E38 +107213E38:lI115|H1072171D0 +1072171D0:lI112|H10721A700 +10721A700:lI111|H10721DC90 +10721DC90:lI114|H107221190 +107221190:lI116|H107224378 +107224378:lI46|H107227260 +107227260:lI98|H107229D98 +107229D98:lI101|H10722C590 +10722C590:lI97|H10722EAD8 +10722EAD8:lI109|N +1071F8598:lH1071FB200|N +1071FB200:lI115|H1071FE140 +1071FE140:lI115|H1072011F8 +1072011F8:lI104|H1072043A0 +1072043A0:lI95|H1072075D0 +1072075D0:lI115|H10720A848 +10720A848:lI104|H10720DA38 +10720DA38:lI101|H107210BC8 +107210BC8:lI108|H107213E28 +107213E28:lI108|H1072171C0 +1072171C0:lI46|H10721A6F0 +10721A6F0:lI98|H10721DC80 +10721DC80:lI101|H107221180 +107221180:lI97|H107224368 +107224368:lI109|N +1071F5C90:Mn2:H1071F8568,H1071F8578 +1071F8568:lH1071FB1D0|N +1071FB1D0:lI115|H1071FE110 +1071FE110:lI115|H1072011C8 +1072011C8:lI104|H107204370 +107204370:lI95|H1072075A0 +1072075A0:lI102|H10720A818 +10720A818:lI115|H10720DA08 +10720DA08:lI109|H107210B98 +107210B98:lI95|H107213DF8 +107213DF8:lI117|H107217190 +107217190:lI115|H10721A6C0 +10721A6C0:lI101|H10721DC50 +10721DC50:lI114|H107221150 +107221150:lI97|H107224338 +107224338:lI117|H107227230 +107227230:lI116|H107229D68 +107229D68:lI104|H10722C560 +10722C560:lI95|H10722EAA8 +10722EAA8:lI115|H107230D10 +107230D10:lI101|H107232CF8 +107232CF8:lI114|H1072349D0 +1072349D0:lI118|H1072363E8 +1072363E8:lI101|H107237BB0 +107237BB0:lI114|H107239188 +107239188:lI46|H10723A620 +10723A620:lI98|H10723B8E0 +10723B8E0:lI101|H10723C920 +10723C920:lI97|H10723D790 +10723D790:lI109|N +1071F8578:lH1071FB1E0|N +1071FB1E0:lI115|H1071FE120 +1071FE120:lI115|H1072011D8 +1072011D8:lI104|H107204380 +107204380:lI95|H1072075B0 +1072075B0:lI99|H10720A828 +10720A828:lI108|H10720DA18 +10720DA18:lI105|H107210BA8 +107210BA8:lI101|H107213E08 +107213E08:lI110|H1072171A0 +1072171A0:lI116|H10721A6D0 +10721A6D0:lI95|H10721DC60 +10721DC60:lI107|H107221160 +107221160:lI101|H107224348 +107224348:lI121|H107227240 +107227240:lI95|H107229D78 +107229D78:lI97|H10722C570 +10722C570:lI112|H10722EAB8 +10722EAB8:lI105|H107230D20 +107230D20:lI46|H107232D08 +107232D08:lI98|H1072349E0 +1072349E0:lI101|H1072363F8 +1072363F8:lI97|H107237BC0 +107237BC0:lI109|N +1071F5C70:Mn3:H1071F8538,H1071F8548,H1071F8558 +1071F8538:lH1071FB1A0|N +1071FB1A0:lI115|H1071FE0E0 +1071FE0E0:lI115|H107201198 +107201198:lI104|H107204340 +107204340:lI46|H107207570 +107207570:lI97|H10720A7E8 +10720A7E8:lI112|H10720D9D8 +10720D9D8:lI112|H107210B68 +107210B68:lI117|H107213DC8 +107213DC8:lI112|N +1071F8558:lH1071FB1C0|N +1071FB1C0:lI115|H1071FE100 +1071FE100:lI115|H1072011B8 +1072011B8:lI104|H107204360 +107204360:lI95|H107207590 +107207590:lI105|H10720A808 +10720A808:lI111|H10720D9F8 +10720D9F8:lI46|H107210B88 +107210B88:lI98|H107213DE8 +107213DE8:lI101|H107217180 +107217180:lI97|H10721A6B0 +10721A6B0:lI109|N +1071F8548:lH1071FB1B0|N +1071FB1B0:lI115|H1071FE0F0 +1071FE0F0:lI115|H1072011A8 +1072011A8:lI104|H107204350 +107204350:lI95|H107207580 +107207580:lI99|H10720A7F8 +10720A7F8:lI111|H10720D9E8 +10720D9E8:lI110|H107210B78 +107210B78:lI110|H107213DD8 +107213DD8:lI101|H107217170 +107217170:lI99|H10721A6A0 +10721A6A0:lI116|H10721DC40 +10721DC40:lI105|H107221140 +107221140:lI111|H107224328 +107224328:lI110|H107227220 +107227220:lI46|H107229D58 +107229D58:lI98|H10722C550 +10722C550:lI101|H10722EA98 +10722EA98:lI97|H107230D00 +107230D00:lI109|N +1071F5C58:Mn2:H1071F8518,H1071F8528 +1071F8518:lH1071FB180|N +1071FB180:lI115|H1071FE0C0 +1071FE0C0:lI115|H107201178 +107201178:lI104|H107204320 +107204320:lI95|H107207550 +107207550:lI115|H10720A7C8 +10720A7C8:lI102|H10720D9B8 +10720D9B8:lI116|H107210B48 +107210B48:lI112|H107213DA8 +107213DA8:lI100|H107217150 +107217150:lI95|H10721A680 +10721A680:lI102|H10721DC20 +10721DC20:lI105|H107221120 +107221120:lI108|H107224318 +107224318:lI101|H107227210 +107227210:lI95|H107229D48 +107229D48:lI97|H10722C540 +10722C540:lI112|H10722EA88 +10722EA88:lI105|H107230CF0 +107230CF0:lI46|H107232CE8 +107232CE8:lI98|H1072349C0 +1072349C0:lI101|H1072363D8 +1072363D8:lI97|H107237BA0 +107237BA0:lI109|N +1071F8528:lH1071FB190|N +1071FB190:lI115|H1071FE0D0 +1071FE0D0:lI115|H107201188 +107201188:lI104|H107204330 +107204330:lI95|H107207560 +107207560:lI105|H10720A7D8 +10720A7D8:lI110|H10720D9C8 +10720D9C8:lI102|H107210B58 +107210B58:lI111|H107213DB8 +107213DB8:lI46|H107217160 +107217160:lI98|H10721A690 +10721A690:lI101|H10721DC30 +10721DC30:lI97|H107221130 +107221130:lI109|N +1071F5C48:lH1071F8508|N +1071F8508:lI115|H1071FB170 +1071FB170:lI115|H1071FE0B0 +1071FE0B0:lI104|H107201168 +107201168:lI95|H107204310 +107204310:lI99|H107207540 +107207540:lI111|H10720A7B8 +10720A7B8:lI110|H10720D9A8 +10720D9A8:lI110|H107210B38 +107210B38:lI101|H107213D98 +107213D98:lI99|H107217140 +107217140:lI116|H10721A670 +10721A670:lI105|H10721DC10 +10721DC10:lI111|H107221110 +107221110:lI110|H107224308 +107224308:lI95|H107227200 +107227200:lI104|H107229D38 +107229D38:lI97|H10722C530 +10722C530:lI110|H10722EA78 +10722EA78:lI100|H107230CE0 +107230CE0:lI108|H107232CD8 +107232CD8:lI101|H1072349B0 +1072349B0:lI114|H1072363C8 +1072363C8:lI46|H107237B90 +107237B90:lI98|H107239178 +107239178:lI101|H10723A610 +10723A610:lI97|H10723B8D0 +10723B8D0:lI109|N +1071F5C30:Mn2:H1071F84E0,H1071F84F8 +1071F84E0:Mn2:H1071FB140,H1071FB150 +1071FB140:lH1071FE080|N +1071FE080:lI115|H107201138 +107201138:lI115|H1072042E0 +1072042E0:lI104|H107207510 +107207510:lI95|H10720A788 +10720A788:lI100|H10720D978 +10720D978:lI98|H107210B08 +107210B08:lI103|H107213D68 +107213D68:lI46|H107217120 +107217120:lI98|H10721A650 +10721A650:lI101|H10721DBF0 +10721DBF0:lI97|H1072210F0 +1072210F0:lI109|N +1071FB150:lH1071FE090|N +1071FE090:lI115|H107201148 +107201148:lI115|H1072042F0 +1072042F0:lI104|H107207520 +107207520:lI46|H10720A798 +10720A798:lI98|H10720D988 +10720D988:lI101|H107210B18 +107210B18:lI97|H107213D78 +107213D78:lI109|N +1071F84F8:lH1071FB160|N +1071FB160:lI115|H1071FE0A0 +1071FE0A0:lI115|H107201158 +107201158:lI104|H107204300 +107204300:lI95|H107207530 +107207530:lI115|H10720A7A8 +10720A7A8:lI102|H10720D998 +10720D998:lI116|H107210B28 +107210B28:lI112|H107213D88 +107213D88:lI100|H107217130 +107217130:lI46|H10721A660 +10721A660:lI98|H10721DC00 +10721DC00:lI101|H107221100 +107221100:lI97|H1072242F8 +1072242F8:lI109|N +1071F5C10:Mn3:H1071F84B0,H1071F84C0,H1071F84D0 +1071F84B0:lH1071FB110|N +1071FB110:lI115|H1071FE050 +1071FE050:lI115|H107201108 +107201108:lI104|H1072042B0 +1072042B0:lI95|H1072074E0 +1072074E0:lI110|H10720A758 +10720A758:lI111|H10720D948 +10720D948:lI95|H107210AD8 +107210AD8:lI105|H107213D38 +107213D38:lI111|H1072170F0 +1072170F0:lI46|H10721A620 +10721A620:lI98|H10721DBC0 +10721DBC0:lI101|H1072210D0 +1072210D0:lI97|H1072242D8 +1072242D8:lI109|N +1071F84D0:lH1071FB130|N +1071FB130:lI115|H1071FE070 +1071FE070:lI115|H107201128 +107201128:lI104|H1072042D0 +1072042D0:lI95|H107207500 +107207500:lI99|H10720A778 +10720A778:lI108|H10720D968 +10720D968:lI105|H107210AF8 +107210AF8:lI46|H107213D58 +107213D58:lI98|H107217110 +107217110:lI101|H10721A640 +10721A640:lI97|H10721DBE0 +10721DBE0:lI109|N +1071F84C0:lH1071FB120|N +1071FB120:lI115|H1071FE060 +1071FE060:lI115|H107201118 +107201118:lI104|H1072042C0 +1072042C0:lI95|H1072074F0 +1072074F0:lI116|H10720A768 +10720A768:lI99|H10720D958 +10720D958:lI112|H107210AE8 +107210AE8:lI105|H107213D48 +107213D48:lI112|H107217100 +107217100:lI95|H10721A630 +10721A630:lI102|H10721DBD0 +10721DBD0:lI111|H1072210E0 +1072210E0:lI114|H1072242E8 +1072242E8:lI119|H1072271F0 +1072271F0:lI97|H107229D28 +107229D28:lI114|H10722C520 +10722C520:lI100|H10722EA68 +10722EA68:lI95|H107230CD0 +107230CD0:lI97|H107232CC8 +107232CC8:lI99|H1072349A0 +1072349A0:lI99|H1072363B8 +1072363B8:lI101|H107237B80 +107237B80:lI112|H107239168 +107239168:lI116|H10723A600 +10723A600:lI111|H10723B8C0 +10723B8C0:lI114|H10723C910 +10723C910:lI46|H10723D780 +10723D780:lI98|H10723E4E0 +10723E4E0:lI101|H10723F0F0 +10723F0F0:lI97|H10723FBB0 +10723FBB0:lI109|N +1071F5BF8:Mn2:H1071F8490,H1071F84A0 +1071F8490:lH1071FB0F0|N +1071FB0F0:lI115|H1071FE030 +1071FE030:lI115|H1072010E8 +1072010E8:lI104|H107204290 +107204290:lI95|H1072074C0 +1072074C0:lI97|H10720A738 +10720A738:lI99|H10720D928 +10720D928:lI99|H107210AB8 +107210AB8:lI101|H107213D18 +107213D18:lI112|H1072170D0 +1072170D0:lI116|H10721A600 +10721A600:lI111|H10721DBA0 +10721DBA0:lI114|H1072210C0 +1072210C0:lI95|H1072242C8 +1072242C8:lI115|H1072271E0 +1072271E0:lI117|H107229D18 +107229D18:lI112|H10722C510 +10722C510:lI46|H10722EA58 +10722EA58:lI98|H107230CC0 +107230CC0:lI101|H107232CB8 +107232CB8:lI97|H107234990 +107234990:lI109|N +1071F84A0:lH1071FB100|N +1071FB100:lI115|H1071FE040 +1071FE040:lI115|H1072010F8 +1072010F8:lI104|H1072042A0 +1072042A0:lI95|H1072074D0 +1072074D0:lI108|H10720A748 +10720A748:lI105|H10720D938 +10720D938:lI98|H107210AC8 +107210AC8:lI46|H107213D28 +107213D28:lI98|H1072170E0 +1072170E0:lI101|H10721A610 +10721A610:lI97|H10721DBB0 +10721DBB0:lI109|N +1071F35C8:lI47|H1071F5BB0 +1071F5BB0:lI111|H1071F8418 +1071F8418:lI112|H1071FB070 +1071FB070:lI116|H1071FDFB0 +1071FDFB0:lI47|H107201068 +107201068:lI104|H107204210 +107204210:lI111|H107207440 +107207440:lI109|H10720A6B8 +10720A6B8:lI101|H10720D8A8 +10720D8A8:lI98|H107210A48 +107210A48:lI114|H107213CA8 +107213CA8:lI101|H107217060 +107217060:lI119|H10721A590 +10721A590:lI47|H10721DB30 +10721DB30:lI67|H107221050 +107221050:lI101|H107224258 +107224258:lI108|H107227180 +107227180:lI108|H107229CB8 +107229CB8:lI97|H10722C4C0 +10722C4C0:lI114|H10722EA08 +10722EA08:lI47|H107230C70 +107230C70:lI101|H107232C68 +107232C68:lI114|H107234940 +107234940:lI108|H107236378 +107236378:lI97|H107237B40 +107237B40:lI110|H107239158 +107239158:lI103|H10723A5F0 +10723A5F0:lI47|H10723B8B0 +10723B8B0:lI50|H10723C900 +10723C900:lI54|H10723D770 +10723D770:lI46|H10723E4D0 +10723E4D0:lI48|H10723F0E0 +10723F0E0:lI46|H10723FBA0 +10723FBA0:lI50|H1072404F0 +1072404F0:lI47|H107240D70 +107240D70:lI108|H107241500 +107241500:lI105|H107241C30 +107241C30:lI98|H107242300 +107242300:lI47|H107242970 +107242970:lI101|H107242F70 +107242F70:lI114|H1072434E0 +1072434E0:lI108|H107243A20 +107243A20:lI97|H107243F10 +107243F10:lI110|H107244400 +107244400:lI103|H1072448B0 +1072448B0:lI47|H107244D20 +107244D20:lI108|H107245180 +107245180:lI105|H1072455D0 +1072455D0:lI98|H1072459D0 +1072459D0:lI47|H107245D90 +107245D90:lI115|H107246120 +107246120:lI115|H1072464B0 +1072464B0:lI104|H107246840 +107246840:lI45|H107246BD0 +107246BD0:lI53|H107246F00 +107246F00:lI46|H107247220 +107247220:lI48|H107247530 +107247530:lI46|H107247830 +107247830:lI49|H107247B30 +107247B30:lI47|H280052C20 +1071F15D8:lH1071F3668|H1071F3680 +1071F3668:t2:H1071F5D88,H1071F5D98 +1071F5D98:Mh5B:10:H1071F86D8,H1071F8700,H1071F8720,H1071F8740,H1071F8778,H1071F8788,H1071F87B8,H1071F87D8,H1071F87F8,H1071F8840,H1071F8878,H1071F8898,H1071F88E0,H1071F8920,H1071F8950,H1071F8988 +1071F86D8:Mn4:H1071FB340,H1071FB350,H1071FB370,H1071FB380 +1071FB340:lH1071FE280|N +1071FE280:lI115|H107201338 +107201338:lI110|H1072044E0 +1072044E0:lI109|H107207710 +107207710:lI112|H10720A988 +10720A988:lI95|H10720DB78 +10720DB78:lI118|H107210D08 +107210D08:lI105|H107213F68 +107213F68:lI101|H107217300 +107217300:lI119|H10721A830 +10721A830:lI95|H10721DDB0 +10721DDB0:lI98|H1072212B0 +1072212B0:lI97|H107224458 +107224458:lI115|H107227330 +107227330:lI101|H107229E68 +107229E68:lI100|H10722C640 +10722C640:lI95|H10722EB78 +10722EB78:lI97|H107230DD0 +107230DD0:lI99|H107232D98 +107232D98:lI109|H107234A60 +107234A60:lI95|H107236478 +107236478:lI109|H107237C30 +107237C30:lI105|H1072391E8 +1072391E8:lI98|H10723A680 +10723A680:lI46|H10723B940 +10723B940:lI98|H10723C970 +10723C970:lI101|H10723D7E0 +10723D7E0:lI97|H10723E520 +10723E520:lI109|N +1071FB380:lH1071FE2D0|N +1071FE2D0:lI115|H107201388 +107201388:lI110|H107204530 +107204530:lI109|H107207760 +107207760:lI112|H10720A9D8 +10720A9D8:lI97|H10720DBC8 +10720DBC8:lI95|H107210D58 +107210D58:lI97|H107213FB8 +107213FB8:lI103|H107217350 +107217350:lI101|H10721A880 +10721A880:lI110|H10721DE00 +10721DE00:lI116|H107221300 +107221300:lI95|H1072244A8 +1072244A8:lI115|H107227380 +107227380:lI117|H107229EB8 +107229EB8:lI112|H10722C670 +10722C670:lI46|H10722EBA8 +10722EBA8:lI98|H107230E00 +107230E00:lI101|H107232DC8 +107232DC8:lI97|H107234A90 +107234A90:lI109|N +1071FB370:lH1071FE2C0|N +1071FE2C0:lI115|H107201378 +107201378:lI110|H107204520 +107204520:lI109|H107207750 +107207750:lI112|H10720A9C8 +10720A9C8:lI97|H10720DBB8 +10720DBB8:lI95|H107210D48 +107210D48:lI115|H107213FA8 +107213FA8:lI118|H107217340 +107217340:lI98|H10721A870 +10721A870:lI108|H10721DDF0 +10721DDF0:lI46|H1072212F0 +1072212F0:lI98|H107224498 +107224498:lI101|H107227370 +107227370:lI97|H107229EA8 +107229EA8:lI109|N +1071FB350:Mn3:H1071FE290,H1071FE2A0,H1071FE2B0 +1071FE290:lH107201348|N +107201348:lI115|H1072044F0 +1072044F0:lI110|H107207720 +107207720:lI109|H10720A998 +10720A998:lI112|H10720DB88 +10720DB88:lI95|H107210D18 +107210D18:lI102|H107213F78 +107213F78:lI114|H107217310 +107217310:lI97|H10721A840 +10721A840:lI109|H10721DDC0 +10721DDC0:lI101|H1072212C0 +1072212C0:lI119|H107224468 +107224468:lI111|H107227340 +107227340:lI114|H107229E78 +107229E78:lI107|H10722C650 +10722C650:lI95|H10722EB88 +10722EB88:lI109|H107230DE0 +107230DE0:lI105|H107232DA8 +107232DA8:lI98|H107234A70 +107234A70:lI46|H107236488 +107236488:lI98|H107237C40 +107237C40:lI101|H1072391F8 +1072391F8:lI97|H10723A690 +10723A690:lI109|N +1071FE2B0:lH107201368|N +107201368:lI115|H107204510 +107204510:lI110|H107207740 +107207740:lI109|H10720A9B8 +10720A9B8:lI112|H10720DBA8 +10720DBA8:lI97|H107210D38 +107210D38:lI95|H107213F98 +107213F98:lI97|H107217330 +107217330:lI99|H10721A860 +10721A860:lI109|H10721DDE0 +10721DDE0:lI46|H1072212E0 +1072212E0:lI98|H107224488 +107224488:lI101|H107227360 +107227360:lI97|H107229E98 +107229E98:lI109|N +1071FE2A0:lH107201358|N +107201358:lI115|H107204500 +107204500:lI110|H107207730 +107207730:lI109|H10720A9A8 +10720A9A8:lI112|H10720DB98 +10720DB98:lI109|H107210D28 +107210D28:lI95|H107213F88 +107213F88:lI117|H107217320 +107217320:lI115|H10721A850 +10721A850:lI101|H10721DDD0 +10721DDD0:lI114|H1072212D0 +1072212D0:lI95|H107224478 +107224478:lI100|H107227350 +107227350:lI101|H107229E88 +107229E88:lI102|H10722C660 +10722C660:lI97|H10722EB98 +10722EB98:lI117|H107230DF0 +107230DF0:lI108|H107232DB8 +107232DB8:lI116|H107234A80 +107234A80:lI46|H107236498 +107236498:lI98|H107237C50 +107237C50:lI101|H107239208 +107239208:lI97|H10723A6A0 +10723A6A0:lI109|N +1071F8988:Mn5:H1071FB820,H1071FB830,H1071FB840,H1071FB850,H1071FB860 +1071FB820:lH1071FE7D0|N +1071FE7D0:lI115|H107201888 +107201888:lI110|H107204A30 +107204A30:lI109|H107207C60 +107207C60:lI112|H10720AED8 +10720AED8:lI97|H10720E0C8 +10720E0C8:lI95|H107211258 +107211258:lI116|H1072144B8 +1072144B8:lI97|H107217850 +107217850:lI114|H10721AD60 +10721AD60:lI103|H10721E2C0 +10721E2C0:lI101|H1072217A0 +1072217A0:lI116|H107224948 +107224948:lI95|H1072277E0 +1072277E0:lI99|H10722A268 +10722A268:lI97|H10722C9C0 +10722C9C0:lI99|H10722EED8 +10722EED8:lI104|H107231100 +107231100:lI101|H107233058 +107233058:lI46|H107234CC0 +107234CC0:lI98|H107236688 +107236688:lI101|H107237DF0 +107237DF0:lI97|H107239388 +107239388:lI109|N +1071FB860:lH1071FE818|N +1071FE818:lI115|H1072018D8 +1072018D8:lI110|H107204A80 +107204A80:lI109|H107207CB0 +107207CB0:lI112|H10720AF28 +10720AF28:lI97|H10720E118 +10720E118:lI95|H1072112A8 +1072112A8:lI109|H107214508 +107214508:lI105|H1072178A0 +1072178A0:lI98|H10721ADB0 +10721ADB0:lI95|H10721E310 +10721E310:lI100|H1072217F0 +1072217F0:lI97|H107224998 +107224998:lI116|H107227830 +107227830:lI97|H10722A2B8 +10722A2B8:lI95|H10722CA10 +10722CA10:lI116|H10722EF28 +10722EF28:lI116|H107231140 +107231140:lI116|H107233078 +107233078:lI110|H107234CE0 +107234CE0:lI46|H1072366A8 +1072366A8:lI98|H107237E10 +107237E10:lI101|H1072393A8 +1072393A8:lI97|H10723A800 +10723A800:lI109|N +1071FB850:Mn1:H1071FE800 +1071FE800:Mn2:H1072018B8,H1072018C8 +1072018B8:lH107204A60|N +107204A60:lI115|H107207C90 +107207C90:lI110|H10720AF08 +10720AF08:lI109|H10720E0F8 +10720E0F8:lI112|H107211288 +107211288:lI95|H1072144E8 +1072144E8:lI105|H107217880 +107217880:lI110|H10721AD90 +10721AD90:lI100|H10721E2F0 +10721E2F0:lI101|H1072217D0 +1072217D0:lI120|H107224978 +107224978:lI46|H107227810 +107227810:lI98|H10722A298 +10722A298:lI101|H10722C9F0 +10722C9F0:lI97|H10722EF08 +10722EF08:lI109|N +1072018C8:lH107204A70|N +107204A70:lI115|H107207CA0 +107207CA0:lI110|H10720AF18 +10720AF18:lI109|H10720E108 +10720E108:lI112|H107211298 +107211298:lI97|H1072144F8 +1072144F8:lI95|H107217890 +107217890:lI97|H10721ADA0 +10721ADA0:lI103|H10721E300 +10721E300:lI101|H1072217E0 +1072217E0:lI110|H107224988 +107224988:lI116|H107227820 +107227820:lI46|H10722A2A8 +10722A2A8:lI98|H10722CA00 +10722CA00:lI101|H10722EF18 +10722EF18:lI97|H107231130 +107231130:lI109|N +1071FB840:lH1071FE7F0|N +1071FE7F0:lI115|H1072018A8 +1072018A8:lI110|H107204A50 +107204A50:lI109|H107207C80 +107207C80:lI112|H10720AEF8 +10720AEF8:lI97|H10720E0E8 +10720E0E8:lI95|H107211278 +107211278:lI103|H1072144D8 +1072144D8:lI101|H107217870 +107217870:lI116|H10721AD80 +10721AD80:lI95|H10721E2E0 +10721E2E0:lI108|H1072217C0 +1072217C0:lI105|H107224968 +107224968:lI98|H107227800 +107227800:lI46|H10722A288 +10722A288:lI98|H10722C9E0 +10722C9E0:lI101|H10722EEF8 +10722EEF8:lI97|H107231120 +107231120:lI109|N +1071FB830:lH1071FE7E0|N +1071FE7E0:lI115|H107201898 +107201898:lI110|H107204A40 +107204A40:lI109|H107207C70 +107207C70:lI112|H10720AEE8 +10720AEE8:lI97|H10720E0D8 +10720E0D8:lI95|H107211268 +107211268:lI109|H1072144C8 +1072144C8:lI105|H107217860 +107217860:lI98|H10721AD70 +10721AD70:lI95|H10721E2D0 +10721E2D0:lI115|H1072217B0 +1072217B0:lI116|H107224958 +107224958:lI111|H1072277F0 +1072277F0:lI114|H10722A278 +10722A278:lI97|H10722C9D0 +10722C9D0:lI103|H10722EEE8 +10722EEE8:lI101|H107231110 +107231110:lI95|H107233068 +107233068:lI109|H107234CD0 +107234CD0:lI110|H107236698 +107236698:lI101|H107237E00 +107237E00:lI115|H107239398 +107239398:lI105|H10723A7F0 +10723A7F0:lI97|H10723BA30 +10723BA30:lI46|H10723CA60 +10723CA60:lI98|H10723D8C0 +10723D8C0:lI101|H10723E5C0 +10723E5C0:lI97|H10723F1A0 +10723F1A0:lI109|N +1071F8950:Mn6:H1071FB7B8,H1071FB7C8,H1071FB7D8,H1071FB7E8,H1071FB7F8,H1071FB808 +1071FB7B8:lH1071FE760|N +1071FE760:lI115|H107201818 +107201818:lI110|H1072049C0 +1072049C0:lI109|H107207BF0 +107207BF0:lI112|H10720AE68 +10720AE68:lI97|H10720E058 +10720E058:lI95|H1072111E8 +1072111E8:lI108|H107214448 +107214448:lI111|H1072177E0 +1072177E0:lI99|H10721AD00 +10721AD00:lI97|H10721E270 +10721E270:lI108|H107221750 +107221750:lI95|H1072248F8 +1072248F8:lI100|H107227790 +107227790:lI98|H10722A218 +10722A218:lI46|H10722C970 +10722C970:lI98|H10722EE88 +10722EE88:lI101|H1072310B0 +1072310B0:lI97|H107233008 +107233008:lI109|N +1071FB808:Mn2:H1071FE7B0,H1071FE7C0 +1071FE7B0:lH107201868|N +107201868:lI115|H107204A10 +107204A10:lI110|H107207C40 +107207C40:lI109|H10720AEB8 +10720AEB8:lI112|H10720E0A8 +10720E0A8:lI46|H107211238 +107211238:lI97|H107214498 +107214498:lI112|H107217830 +107217830:lI112|N +1071FE7C0:lH107201878|N +107201878:lI115|H107204A20 +107204A20:lI110|H107207C50 +107207C50:lI109|H10720AEC8 +10720AEC8:lI112|H10720E0B8 +10720E0B8:lI97|H107211248 +107211248:lI95|H1072144A8 +1072144A8:lI109|H107217840 +107217840:lI105|H10721AD50 +10721AD50:lI98|H10721E2B0 +10721E2B0:lI95|H107221790 +107221790:lI115|H107224938 +107224938:lI116|H1072277D0 +1072277D0:lI111|H10722A258 +10722A258:lI114|H10722C9B0 +10722C9B0:lI97|H10722EEC8 +10722EEC8:lI103|H1072310F0 +1072310F0:lI101|H107233048 +107233048:lI95|H107234CB0 +107234CB0:lI101|H107236678 +107236678:lI116|H107237DE0 +107237DE0:lI115|H107239378 +107239378:lI46|H10723A7E0 +10723A7E0:lI98|H10723BA20 +10723BA20:lI101|H10723CA50 +10723CA50:lI97|H10723D8B0 +10723D8B0:lI109|N +1071FB7F8:lH1071FE7A0|N +1071FE7A0:lI115|H107201858 +107201858:lI110|H107204A00 +107204A00:lI109|H107207C30 +107207C30:lI112|H10720AEA8 +10720AEA8:lI97|H10720E098 +10720E098:lI46|H107211228 +107211228:lI98|H107214488 +107214488:lI101|H107217820 +107217820:lI97|H10721AD40 +10721AD40:lI109|N +1071FB7E8:lH1071FE790|N +1071FE790:lI115|H107201848 +107201848:lI110|H1072049F0 +1072049F0:lI109|H107207C20 +107207C20:lI112|H10720AE98 +10720AE98:lI109|H10720E088 +10720E088:lI95|H107211218 +107211218:lI115|H107214478 +107214478:lI117|H107217810 +107217810:lI112|H10721AD30 +10721AD30:lI101|H10721E2A0 +10721E2A0:lI114|H107221780 +107221780:lI118|H107224928 +107224928:lI105|H1072277C0 +1072277C0:lI115|H10722A248 +10722A248:lI111|H10722C9A0 +10722C9A0:lI114|H10722EEB8 +10722EEB8:lI46|H1072310E0 +1072310E0:lI98|H107233038 +107233038:lI101|H107234CA0 +107234CA0:lI97|H107236668 +107236668:lI109|N +1071FB7D8:lH1071FE780|N +1071FE780:lI115|H107201838 +107201838:lI110|H1072049E0 +1072049E0:lI109|H107207C10 +107207C10:lI112|H10720AE88 +10720AE88:lI97|H10720E078 +10720E078:lI95|H107211208 +107211208:lI103|H107214468 +107214468:lI101|H107217800 +107217800:lI116|H10721AD20 +10721AD20:lI95|H10721E290 +10721E290:lI109|H107221770 +107221770:lI101|H107224918 +107224918:lI99|H1072277B0 +1072277B0:lI104|H10722A238 +10722A238:lI97|H10722C990 +10722C990:lI110|H10722EEA8 +10722EEA8:lI105|H1072310D0 +1072310D0:lI115|H107233028 +107233028:lI109|H107234C90 +107234C90:lI46|H107236658 +107236658:lI98|H107237DD0 +107237DD0:lI101|H107239368 +107239368:lI97|H10723A7D0 +10723A7D0:lI109|N +1071FB7C8:lH1071FE770|N +1071FE770:lI115|H107201828 +107201828:lI110|H1072049D0 +1072049D0:lI109|H107207C00 +107207C00:lI112|H10720AE78 +10720AE78:lI97|H10720E068 +10720E068:lI95|H1072111F8 +1072111F8:lI110|H107214458 +107214458:lI101|H1072177F0 +1072177F0:lI116|H10721AD10 +10721AD10:lI95|H10721E280 +10721E280:lI105|H107221760 +107221760:lI102|H107224908 +107224908:lI95|H1072277A0 +1072277A0:lI102|H10722A228 +10722A228:lI105|H10722C980 +10722C980:lI108|H10722EE98 +10722EE98:lI116|H1072310C0 +1072310C0:lI101|H107233018 +107233018:lI114|H107234C80 +107234C80:lI46|H107236648 +107236648:lI98|H107237DC0 +107237DC0:lI101|H107239358 +107239358:lI97|H10723A7C0 +10723A7C0:lI109|N +1071F8920:Mn5:H1071FB760,H1071FB778,H1071FB788,H1071FB798,H1071FB7A8 +1071FB760:Mn2:H1071FE700,H1071FE710 +1071FE700:lH1072017B8|N +1072017B8:lI115|H107204960 +107204960:lI110|H107207B90 +107207B90:lI109|H10720AE08 +10720AE08:lI112|H10720DFF8 +10720DFF8:lI97|H107211188 +107211188:lI95|H1072143E8 +1072143E8:lI101|H107217780 +107217780:lI114|H10721ACA0 +10721ACA0:lI114|H10721E210 +10721E210:lI111|H1072216F0 +1072216F0:lI114|H107224898 +107224898:lI46|H107227740 +107227740:lI98|H10722A1C8 +10722A1C8:lI101|H10722C920 +10722C920:lI97|H10722EE38 +10722EE38:lI109|N +1071FE710:lH1072017C8|N +1072017C8:lI115|H107204970 +107204970:lI110|H107207BA0 +107207BA0:lI109|H10720AE18 +10720AE18:lI112|H10720E008 +10720E008:lI109|H107211198 +107211198:lI95|H1072143F8 +1072143F8:lI110|H107217790 +107217790:lI101|H10721ACB0 +10721ACB0:lI116|H10721E220 +10721E220:lI95|H107221700 +107221700:lI105|H1072248A8 +1072248A8:lI102|H107227750 +107227750:lI46|H10722A1D8 +10722A1D8:lI98|H10722C930 +10722C930:lI101|H10722EE48 +10722EE48:lI97|H107231080 +107231080:lI109|N +1071FB7A8:lH1071FE750|N +1071FE750:lI115|H107201808 +107201808:lI110|H1072049B0 +1072049B0:lI109|H107207BE0 +107207BE0:lI112|H10720AE58 +10720AE58:lI109|H10720E048 +10720E048:lI95|H1072111D8 +1072111D8:lI109|H107214438 +107214438:lI105|H1072177D0 +1072177D0:lI115|H10721ACF0 +10721ACF0:lI99|H10721E260 +10721E260:lI95|H107221740 +107221740:lI115|H1072248E8 +1072248E8:lI117|H107227780 +107227780:lI112|H10722A208 +10722A208:lI46|H10722C960 +10722C960:lI98|H10722EE78 +10722EE78:lI101|H1072310A0 +1072310A0:lI97|H107232FF8 +107232FF8:lI109|N +1071FB798:lH1071FE740|N +1071FE740:lI115|H1072017F8 +1072017F8:lI110|H1072049A0 +1072049A0:lI109|H107207BD0 +107207BD0:lI112|H10720AE48 +10720AE48:lI95|H10720E038 +10720E038:lI117|H1072111C8 +1072111C8:lI115|H107214428 +107214428:lI109|H1072177C0 +1072177C0:lI46|H10721ACE0 +10721ACE0:lI98|H10721E250 +10721E250:lI101|H107221730 +107221730:lI97|H1072248D8 +1072248D8:lI109|N +1071FB788:lH1071FE730|N +1071FE730:lI115|H1072017E8 +1072017E8:lI110|H107204990 +107204990:lI109|H107207BC0 +107207BC0:lI112|H10720AE38 +10720AE38:lI109|H10720E028 +10720E028:lI95|H1072111B8 +1072111B8:lI117|H107214418 +107214418:lI115|H1072177B0 +1072177B0:lI101|H10721ACD0 +10721ACD0:lI114|H10721E240 +10721E240:lI95|H107221720 +107221720:lI111|H1072248C8 +1072248C8:lI108|H107227770 +107227770:lI100|H10722A1F8 +10722A1F8:lI46|H10722C950 +10722C950:lI98|H10722EE68 +10722EE68:lI101|H107231090 +107231090:lI97|H107232FE8 +107232FE8:lI109|N +1071FB778:lH1071FE720|N +1071FE720:lI115|H1072017D8 +1072017D8:lI110|H107204980 +107204980:lI109|H107207BB0 +107207BB0:lI112|H10720AE28 +10720AE28:lI95|H10720E018 +10720E018:lI103|H1072111A8 +1072111A8:lI101|H107214408 +107214408:lI110|H1072177A0 +1072177A0:lI101|H10721ACC0 +10721ACC0:lI114|H10721E230 +10721E230:lI105|H107221710 +107221710:lI99|H1072248B8 +1072248B8:lI46|H107227760 +107227760:lI98|H10722A1E8 +10722A1E8:lI101|H10722C940 +10722C940:lI97|H10722EE58 +10722EE58:lI109|N +1071F88E0:Mn7:H1071FB6E8,H1071FB6F8,H1071FB708,H1071FB718,H1071FB728,H1071FB740,H1071FB750 +1071FB6E8:lH1071FE680|N +1071FE680:lI115|H107201738 +107201738:lI110|H1072048E0 +1072048E0:lI109|H107207B10 +107207B10:lI112|H10720AD88 +10720AD88:lI99|H10720DF78 +10720DF78:lI95|H107211108 +107211108:lI109|H107214368 +107214368:lI105|H107217700 +107217700:lI98|H10721AC30 +10721AC30:lI95|H10721E1A0 +10721E1A0:lI116|H107221680 +107221680:lI111|H107224828 +107224828:lI95|H1072276D0 +1072276D0:lI104|H10722A158 +10722A158:lI114|H10722C8C0 +10722C8C0:lI108|H10722EDD8 +10722EDD8:lI46|H107231020 +107231020:lI98|H107232F88 +107232F88:lI101|H107234C30 +107234C30:lI97|H1072365F8 +1072365F8:lI109|N +1071FB750:lH1071FE6F0|N +1071FE6F0:lI115|H1072017A8 +1072017A8:lI110|H107204950 +107204950:lI109|H107207B80 +107207B80:lI112|H10720ADF8 +10720ADF8:lI97|H10720DFE8 +10720DFE8:lI95|H107211178 +107211178:lI109|H1072143D8 +1072143D8:lI105|H107217770 +107217770:lI115|H10721AC90 +10721AC90:lI99|H10721E200 +10721E200:lI95|H1072216E0 +1072216E0:lI115|H107224888 +107224888:lI117|H107227730 +107227730:lI112|H10722A1B8 +10722A1B8:lI46|H10722C910 +10722C910:lI98|H10722EE28 +10722EE28:lI101|H107231070 +107231070:lI97|H107232FD8 +107232FD8:lI109|N +1071FB740:lH1071FE6E0|N +1071FE6E0:lI115|H107201798 +107201798:lI110|H107204940 +107204940:lI109|H107207B70 +107207B70:lI112|H10720ADE8 +10720ADE8:lI97|H10720DFD8 +10720DFD8:lI95|H107211168 +107211168:lI99|H1072143C8 +1072143C8:lI111|H107217760 +107217760:lI110|H10721AC80 +10721AC80:lI102|H10721E1F0 +10721E1F0:lI46|H1072216D0 +1072216D0:lI98|H107224878 +107224878:lI101|H107227720 +107227720:lI97|H10722A1A8 +10722A1A8:lI109|N +1071FB728:Mn2:H1071FE6C0,H1071FE6D0 +1071FE6C0:lH107201778|N +107201778:lI115|H107204920 +107204920:lI110|H107207B50 +107207B50:lI109|H10720ADC8 +10720ADC8:lI112|H10720DFB8 +10720DFB8:lI95|H107211148 +107211148:lI110|H1072143A8 +1072143A8:lI111|H107217740 +107217740:lI116|H10721AC60 +10721AC60:lI101|H10721E1D0 +10721E1D0:lI95|H1072216B0 +1072216B0:lI115|H107224858 +107224858:lI116|H107227700 +107227700:lI111|H10722A188 +10722A188:lI114|H10722C8F0 +10722C8F0:lI101|H10722EE08 +10722EE08:lI46|H107231050 +107231050:lI98|H107232FB8 +107232FB8:lI101|H107234C60 +107234C60:lI97|H107236628 +107236628:lI109|N +1071FE6D0:lH107201788|N +107201788:lI115|H107204930 +107204930:lI110|H107207B60 +107207B60:lI109|H10720ADD8 +10720ADD8:lI112|H10720DFC8 +10720DFC8:lI97|H107211158 +107211158:lI95|H1072143B8 +1072143B8:lI100|H107217750 +107217750:lI105|H10721AC70 +10721AC70:lI115|H10721E1E0 +10721E1E0:lI99|H1072216C0 +1072216C0:lI111|H107224868 +107224868:lI118|H107227710 +107227710:lI101|H10722A198 +10722A198:lI114|H10722C900 +10722C900:lI121|H10722EE18 +10722EE18:lI95|H107231060 +107231060:lI104|H107232FC8 +107232FC8:lI97|H107234C70 +107234C70:lI110|H107236638 +107236638:lI100|H107237DB0 +107237DB0:lI108|H107239348 +107239348:lI101|H10723A7B0 +10723A7B0:lI114|H10723BA10 +10723BA10:lI46|H10723CA40 +10723CA40:lI98|H10723D8A0 +10723D8A0:lI101|H10723E5B0 +10723E5B0:lI97|H10723F190 +10723F190:lI109|N +1071FB718:lH1071FE6B0|N +1071FE6B0:lI115|H107201768 +107201768:lI110|H107204910 +107204910:lI109|H107207B40 +107207B40:lI112|H10720ADB8 +10720ADB8:lI109|H10720DFA8 +10720DFA8:lI95|H107211138 +107211138:lI115|H107214398 +107214398:lI101|H107217730 +107217730:lI114|H10721AC50 +10721AC50:lI118|H10721E1C0 +10721E1C0:lI101|H1072216A0 +1072216A0:lI114|H107224848 +107224848:lI95|H1072276F0 +1072276F0:lI115|H10722A178 +10722A178:lI117|H10722C8E0 +10722C8E0:lI112|H10722EDF8 +10722EDF8:lI46|H107231040 +107231040:lI98|H107232FA8 +107232FA8:lI101|H107234C50 +107234C50:lI97|H107236618 +107236618:lI109|N +1071FB708:lH1071FE6A0|N +1071FE6A0:lI115|H107201758 +107201758:lI110|H107204900 +107204900:lI109|H107207B30 +107207B30:lI112|H10720ADA8 +10720ADA8:lI46|H10720DF98 +10720DF98:lI98|H107211128 +107211128:lI101|H107214388 +107214388:lI97|H107217720 +107217720:lI109|N +1071FB6F8:lH1071FE690|N +1071FE690:lI115|H107201748 +107201748:lI110|H1072048F0 +1072048F0:lI109|H107207B20 +107207B20:lI112|H10720AD98 +10720AD98:lI97|H10720DF88 +10720DF88:lI95|H107211118 +107211118:lI100|H107214378 +107214378:lI105|H107217710 +107217710:lI115|H10721AC40 +10721AC40:lI99|H10721E1B0 +10721E1B0:lI111|H107221690 +107221690:lI118|H107224838 +107224838:lI101|H1072276E0 +1072276E0:lI114|H10722A168 +10722A168:lI121|H10722C8D0 +10722C8D0:lI95|H10722EDE8 +10722EDE8:lI104|H107231030 +107231030:lI97|H107232F98 +107232F98:lI110|H107234C40 +107234C40:lI100|H107236608 +107236608:lI108|H107237DA0 +107237DA0:lI101|H107239338 +107239338:lI114|H10723A7A0 +10723A7A0:lI95|H10723BA00 +10723BA00:lI100|H10723CA30 +10723CA30:lI101|H10723D890 +10723D890:lI102|H10723E5A0 +10723E5A0:lI97|H10723F180 +10723F180:lI117|H10723FC30 +10723FC30:lI108|H107240570 +107240570:lI116|H107240DE0 +107240DE0:lI46|H107241570 +107241570:lI98|H107241C90 +107241C90:lI101|H107242350 +107242350:lI97|H1072429B0 +1072429B0:lI109|N +1071F8898:Mn8:H1071FB650,H1071FB660,H1071FB680,H1071FB690,H1071FB6A0,H1071FB6B0,H1071FB6C0,H1071FB6D0 +1071FB650:lH1071FE5D0|N +1071FE5D0:lI115|H107201688 +107201688:lI110|H107204830 +107204830:lI109|H107207A60 +107207A60:lI112|H10720ACD8 +10720ACD8:lI95|H10720DEC8 +10720DEC8:lI115|H107211058 +107211058:lI104|H1072142B8 +1072142B8:lI97|H107217650 +107217650:lI100|H10721AB80 +10721AB80:lI111|H10721E0F0 +10721E0F0:lI119|H1072215E0 +1072215E0:lI95|H107224788 +107224788:lI116|H107227640 +107227640:lI97|H10722A0E8 +10722A0E8:lI98|H10722C860 +10722C860:lI108|H10722ED88 +10722ED88:lI101|H107230FD0 +107230FD0:lI46|H107232F48 +107232F48:lI98|H107234BF0 +107234BF0:lI101|H1072365B8 +1072365B8:lI97|H107237D60 +107237D60:lI109|N +1071FB6D0:Mn2:H1071FE660,H1071FE670 +1071FE660:lH107201718|N +107201718:lI115|H1072048C0 +1072048C0:lI110|H107207AF0 +107207AF0:lI109|H10720AD68 +10720AD68:lI112|H10720DF58 +10720DF58:lI97|H1072110E8 +1072110E8:lI95|H107214348 +107214348:lI118|H1072176E0 +1072176E0:lI97|H10721AC10 +10721AC10:lI99|H10721E180 +10721E180:lI109|H107221670 +107221670:lI46|H107224818 +107224818:lI98|H1072276C0 +1072276C0:lI101|H10722A148 +10722A148:lI97|H10722C8B0 +10722C8B0:lI109|N +1071FE670:lH107201728|N +107201728:lI115|H1072048D0 +1072048D0:lI110|H107207B00 +107207B00:lI109|H10720AD78 +10720AD78:lI112|H10720DF68 +10720DF68:lI109|H1072110F8 +1072110F8:lI46|H107214358 +107214358:lI98|H1072176F0 +1072176F0:lI101|H10721AC20 +10721AC20:lI97|H10721E190 +10721E190:lI109|N +1071FB6C0:lH1071FE650|N +1071FE650:lI115|H107201708 +107201708:lI110|H1072048B0 +1072048B0:lI109|H107207AE0 +107207AE0:lI112|H10720AD58 +10720AD58:lI95|H10720DF48 +10720DF48:lI112|H1072110D8 +1072110D8:lI100|H107214338 +107214338:lI117|H1072176D0 +1072176D0:lI115|H10721AC00 +10721AC00:lI46|H10721E170 +10721E170:lI98|H107221660 +107221660:lI101|H107224808 +107224808:lI97|H1072276B0 +1072276B0:lI109|N +1071FB6B0:lH1071FE640|N +1071FE640:lI115|H1072016F8 +1072016F8:lI110|H1072048A0 +1072048A0:lI109|H107207AD0 +107207AD0:lI112|H10720AD48 +10720AD48:lI97|H10720DF38 +10720DF38:lI95|H1072110C8 +1072110C8:lI116|H107214328 +107214328:lI114|H1072176C0 +1072176C0:lI97|H10721ABF0 +10721ABF0:lI112|H10721E160 +10721E160:lI46|H107221650 +107221650:lI98|H1072247F8 +1072247F8:lI101|H1072276A0 +1072276A0:lI97|H10722A138 +10722A138:lI109|N +1071FB6A0:lH1071FE630|N +1071FE630:lI115|H1072016E8 +1072016E8:lI110|H107204890 +107204890:lI109|H107207AC0 +107207AC0:lI112|H10720AD38 +10720AD38:lI97|H10720DF28 +10720DF28:lI95|H1072110B8 +1072110B8:lI109|H107214318 +107214318:lI112|H1072176B0 +1072176B0:lI100|H10721ABE0 +10721ABE0:lI46|H10721E150 +10721E150:lI98|H107221640 +107221640:lI101|H1072247E8 +1072247E8:lI97|H107227690 +107227690:lI109|N +1071FB690:lH1071FE620|N +1071FE620:lI115|H1072016D8 +1072016D8:lI110|H107204880 +107204880:lI109|H107207AB0 +107207AB0:lI112|H10720AD28 +10720AD28:lI97|H10720DF18 +10720DF18:lI95|H1072110A8 +1072110A8:lI110|H107214308 +107214308:lI111|H1072176A0 +1072176A0:lI116|H10721ABD0 +10721ABD0:lI105|H10721E140 +10721E140:lI102|H107221630 +107221630:lI105|H1072247D8 +1072247D8:lI99|H107227680 +107227680:lI97|H10722A128 +10722A128:lI116|H10722C8A0 +10722C8A0:lI105|H10722EDC8 +10722EDC8:lI111|H107231010 +107231010:lI110|H107232F78 +107232F78:lI95|H107234C20 +107234C20:lI100|H1072365E8 +1072365E8:lI101|H107237D90 +107237D90:lI108|H107239328 +107239328:lI105|H10723A790 +10723A790:lI118|H10723B9F0 +10723B9F0:lI101|H10723CA20 +10723CA20:lI114|H10723D880 +10723D880:lI121|H10723E590 +10723E590:lI95|H10723F170 +10723F170:lI105|H10723FC20 +10723FC20:lI110|H107240560 +107240560:lI102|H107240DD0 +107240DD0:lI111|H107241560 +107241560:lI95|H107241C80 +107241C80:lI114|H107242340 +107242340:lI101|H1072429A0 +1072429A0:lI99|H107242F90 +107242F90:lI101|H107243500 +107243500:lI105|H107243A40 +107243A40:lI118|H107243F30 +107243F30:lI101|H107244420 +107244420:lI114|H1072448D0 +1072448D0:lI46|H107244D40 +107244D40:lI98|H1072451A0 +1072451A0:lI101|H1072455F0 +1072455F0:lI97|H1072459F0 +1072459F0:lI109|N +1071FB680:lH1071FE610|N +1071FE610:lI115|H1072016C8 +1072016C8:lI110|H107204870 +107204870:lI109|H107207AA0 +107207AA0:lI112|H10720AD18 +10720AD18:lI95|H10720DF08 +10720DF08:lI108|H107211098 +107211098:lI111|H1072142F8 +1072142F8:lI103|H107217690 +107217690:lI46|H10721ABC0 +10721ABC0:lI98|H10721E130 +10721E130:lI101|H107221620 +107221620:lI97|H1072247C8 +1072247C8:lI109|N +1071FB660:Mn3:H1071FE5E0,H1071FE5F0,H1071FE600 +1071FE5E0:lH107201698|N +107201698:lI115|H107204840 +107204840:lI110|H107207A70 +107207A70:lI109|H10720ACE8 +10720ACE8:lI112|H10720DED8 +10720DED8:lI95|H107211068 +107211068:lI99|H1072142C8 +1072142C8:lI111|H107217660 +107217660:lI109|H10721AB90 +10721AB90:lI109|H10721E100 +10721E100:lI117|H1072215F0 +1072215F0:lI110|H107224798 +107224798:lI105|H107227650 +107227650:lI116|H10722A0F8 +10722A0F8:lI121|H10722C870 +10722C870:lI95|H10722ED98 +10722ED98:lI109|H107230FE0 +107230FE0:lI105|H107232F58 +107232F58:lI98|H107234C00 +107234C00:lI46|H1072365C8 +1072365C8:lI98|H107237D70 +107237D70:lI101|H107239308 +107239308:lI97|H10723A770 +10723A770:lI109|N +1071FE600:lH1072016B8|N +1072016B8:lI115|H107204860 +107204860:lI110|H107207A90 +107207A90:lI109|H10720AD08 +10720AD08:lI112|H10720DEF8 +10720DEF8:lI109|H107211088 +107211088:lI95|H1072142E8 +1072142E8:lI115|H107217680 +107217680:lI101|H10721ABB0 +10721ABB0:lI114|H10721E120 +10721E120:lI118|H107221610 +107221610:lI101|H1072247B8 +1072247B8:lI114|H107227670 +107227670:lI46|H10722A118 +10722A118:lI98|H10722C890 +10722C890:lI101|H10722EDB8 +10722EDB8:lI97|H107231000 +107231000:lI109|N +1071FE5F0:lH1072016A8|N +1072016A8:lI115|H107204850 +107204850:lI110|H107207A80 +107207A80:lI109|H10720ACF8 +10720ACF8:lI112|H10720DEE8 +10720DEE8:lI97|H107211078 +107211078:lI95|H1072142D8 +1072142D8:lI110|H107217670 +107217670:lI101|H10721ABA0 +10721ABA0:lI116|H10721E110 +10721E110:lI119|H107221600 +107221600:lI111|H1072247A8 +1072247A8:lI114|H107227660 +107227660:lI107|H10722A108 +10722A108:lI95|H10722C880 +10722C880:lI105|H10722EDA8 +10722EDA8:lI110|H107230FF0 +107230FF0:lI116|H107232F68 +107232F68:lI101|H107234C10 +107234C10:lI114|H1072365D8 +1072365D8:lI102|H107237D80 +107237D80:lI97|H107239318 +107239318:lI99|H10723A780 +10723A780:lI101|H10723B9E0 +10723B9E0:lI46|H10723CA10 +10723CA10:lI98|H10723D870 +10723D870:lI101|H10723E580 +10723E580:lI97|H10723F160 +10723F160:lI109|N +1071F8878:Mn3:H1071FB620,H1071FB630,H1071FB640 +1071FB620:lH1071FE5A0|N +1071FE5A0:lI115|H107201658 +107201658:lI110|H107204800 +107204800:lI109|H107207A30 +107207A30:lI112|H10720ACA8 +10720ACA8:lI95|H10720DE98 +10720DE98:lI116|H107211028 +107211028:lI97|H107214288 +107214288:lI114|H107217620 +107217620:lI103|H10721AB50 +10721AB50:lI101|H10721E0C0 +10721E0C0:lI116|H1072215B0 +1072215B0:lI95|H107224758 +107224758:lI109|H107227610 +107227610:lI105|H10722A0C8 +10722A0C8:lI98|H10722C850 +10722C850:lI46|H10722ED78 +10722ED78:lI98|H107230FC0 +107230FC0:lI101|H107232F38 +107232F38:lI97|H107234BE0 +107234BE0:lI109|N +1071FB640:lH1071FE5C0|N +1071FE5C0:lI115|H107201678 +107201678:lI110|H107204820 +107204820:lI109|H107207A50 +107207A50:lI112|H10720ACC8 +10720ACC8:lI95|H10720DEB8 +10720DEB8:lI109|H107211048 +107211048:lI105|H1072142A8 +1072142A8:lI115|H107217640 +107217640:lI99|H10721AB70 +10721AB70:lI46|H10721E0E0 +10721E0E0:lI98|H1072215D0 +1072215D0:lI101|H107224778 +107224778:lI97|H107227630 +107227630:lI109|N +1071FB630:lH1071FE5B0|N +1071FE5B0:lI115|H107201668 +107201668:lI110|H107204810 +107204810:lI109|H107207A40 +107207A40:lI112|H10720ACB8 +10720ACB8:lI99|H10720DEA8 +10720DEA8:lI95|H107211038 +107211038:lI109|H107214298 +107214298:lI105|H107217630 +107217630:lI115|H10721AB60 +10721AB60:lI99|H10721E0D0 +10721E0D0:lI46|H1072215C0 +1072215C0:lI98|H107224768 +107224768:lI101|H107227620 +107227620:lI97|H10722A0D8 +10722A0D8:lI109|N +1071F8840:Mn6:H1071FB5B8,H1071FB5C8,H1071FB5D8,H1071FB5E8,H1071FB5F8,H1071FB610 +1071FB5B8:lH1071FE530|N +1071FE530:lI115|H1072015E8 +1072015E8:lI110|H107204790 +107204790:lI109|H1072079C0 +1072079C0:lI112|H10720AC38 +10720AC38:lI97|H10720DE28 +10720DE28:lI95|H107210FB8 +107210FB8:lI115|H107214218 +107214218:lI101|H1072175B0 +1072175B0:lI116|H10721AAE0 +10721AAE0:lI46|H10721E050 +10721E050:lI98|H107221540 +107221540:lI101|H1072246E8 +1072246E8:lI97|H1072275A0 +1072275A0:lI109|N +1071FB610:lH1071FE590|N +1071FE590:lI115|H107201648 +107201648:lI110|H1072047F0 +1072047F0:lI109|H107207A20 +107207A20:lI112|H10720AC98 +10720AC98:lI109|H10720DE88 +10720DE88:lI95|H107211018 +107211018:lI110|H107214278 +107214278:lI101|H107217610 +107217610:lI116|H10721AB40 +10721AB40:lI119|H10721E0B0 +10721E0B0:lI111|H1072215A0 +1072215A0:lI114|H107224748 +107224748:lI107|H107227600 +107227600:lI95|H10722A0B8 +10722A0B8:lI105|H10722C840 +10722C840:lI110|H10722ED68 +10722ED68:lI116|H107230FB0 +107230FB0:lI101|H107232F28 +107232F28:lI114|H107234BD0 +107234BD0:lI102|H1072365A8 +1072365A8:lI97|H107237D50 +107237D50:lI99|H1072392F8 +1072392F8:lI101|H10723A760 +10723A760:lI95|H10723B9D0 +10723B9D0:lI102|H10723CA00 +10723CA00:lI105|H10723D860 +10723D860:lI108|H10723E570 +10723E570:lI116|H10723F150 +10723F150:lI101|H10723FC10 +10723FC10:lI114|H107240550 +107240550:lI46|H107240DC0 +107240DC0:lI98|H107241550 +107241550:lI101|H107241C70 +107241C70:lI97|H107242330 +107242330:lI109|N +1071FB5F8:Mn2:H1071FE570,H1071FE580 +1071FE570:lH107201628|N +107201628:lI115|H1072047D0 +1072047D0:lI110|H107207A00 +107207A00:lI109|H10720AC78 +10720AC78:lI112|H10720DE68 +10720DE68:lI97|H107210FF8 +107210FF8:lI95|H107214258 +107214258:lI110|H1072175F0 +1072175F0:lI111|H10721AB20 +10721AB20:lI116|H10721E090 +10721E090:lI105|H107221580 +107221580:lI102|H107224728 +107224728:lI105|H1072275E0 +1072275E0:lI99|H10722A098 +10722A098:lI97|H10722C820 +10722C820:lI116|H10722ED48 +10722ED48:lI105|H107230F90 +107230F90:lI111|H107232F08 +107232F08:lI110|H107234BB0 +107234BB0:lI95|H107236588 +107236588:lI102|H107237D30 +107237D30:lI105|H1072392D8 +1072392D8:lI108|H10723A740 +10723A740:lI116|H10723B9B0 +10723B9B0:lI101|H10723C9E0 +10723C9E0:lI114|H10723D850 +10723D850:lI46|H10723E560 +10723E560:lI98|H10723F140 +10723F140:lI101|H10723FC00 +10723FC00:lI97|H107240540 +107240540:lI109|N +1071FE580:lH107201638|N +107201638:lI115|H1072047E0 +1072047E0:lI110|H107207A10 +107207A10:lI109|H10720AC88 +10720AC88:lI112|H10720DE78 +10720DE78:lI97|H107211008 +107211008:lI95|H107214268 +107214268:lI115|H107217600 +107217600:lI121|H10721AB30 +10721AB30:lI109|H10721E0A0 +10721E0A0:lI98|H107221590 +107221590:lI111|H107224738 +107224738:lI108|H1072275F0 +1072275F0:lI105|H10722A0A8 +10722A0A8:lI99|H10722C830 +10722C830:lI95|H10722ED58 +10722ED58:lI115|H107230FA0 +107230FA0:lI116|H107232F18 +107232F18:lI111|H107234BC0 +107234BC0:lI114|H107236598 +107236598:lI101|H107237D40 +107237D40:lI46|H1072392E8 +1072392E8:lI98|H10723A750 +10723A750:lI101|H10723B9C0 +10723B9C0:lI97|H10723C9F0 +10723C9F0:lI109|N +1071FB5E8:lH1071FE560|N +1071FE560:lI115|H107201618 +107201618:lI110|H1072047C0 +1072047C0:lI109|H1072079F0 +1072079F0:lI112|H10720AC68 +10720AC68:lI109|H10720DE58 +10720DE58:lI95|H107210FE8 +107210FE8:lI110|H107214248 +107214248:lI101|H1072175E0 +1072175E0:lI116|H10721AB10 +10721AB10:lI119|H10721E080 +10721E080:lI111|H107221570 +107221570:lI114|H107224718 +107224718:lI107|H1072275D0 +1072275D0:lI95|H10722A088 +10722A088:lI105|H10722C810 +10722C810:lI110|H10722ED38 +10722ED38:lI116|H107230F80 +107230F80:lI101|H107232EF8 +107232EF8:lI114|H107234BA0 +107234BA0:lI102|H107236578 +107236578:lI97|H107237D20 +107237D20:lI99|H1072392C8 +1072392C8:lI101|H10723A730 +10723A730:lI46|H10723B9A0 +10723B9A0:lI98|H10723C9D0 +10723C9D0:lI101|H10723D840 +10723D840:lI97|H10723E550 +10723E550:lI109|N +1071FB5D8:lH1071FE550|N +1071FE550:lI115|H107201608 +107201608:lI110|H1072047B0 +1072047B0:lI109|H1072079E0 +1072079E0:lI112|H10720AC58 +10720AC58:lI109|H10720DE48 +10720DE48:lI95|H107210FD8 +107210FD8:lI117|H107214238 +107214238:lI115|H1072175D0 +1072175D0:lI101|H10721AB00 +10721AB00:lI114|H10721E070 +10721E070:lI46|H107221560 +107221560:lI98|H107224708 +107224708:lI101|H1072275C0 +1072275C0:lI97|H10722A078 +10722A078:lI109|N +1071FB5C8:lH1071FE540|N +1071FE540:lI115|H1072015F8 +1072015F8:lI110|H1072047A0 +1072047A0:lI109|H1072079D0 +1072079D0:lI112|H10720AC48 +10720AC48:lI95|H10720DE38 +10720DE38:lI99|H107210FC8 +107210FC8:lI111|H107214228 +107214228:lI110|H1072175C0 +1072175C0:lI102|H10721AAF0 +10721AAF0:lI105|H10721E060 +10721E060:lI103|H107221550 +107221550:lI46|H1072246F8 +1072246F8:lI98|H1072275B0 +1072275B0:lI101|H10722A068 +10722A068:lI97|H10722C800 +10722C800:lI109|N +1071F87F8:Mn8:H1071FB538,H1071FB548,H1071FB558,H1071FB568,H1071FB578,H1071FB588,H1071FB598,H1071FB5A8 +1071FB538:lH1071FE4B0|N +1071FE4B0:lI115|H107201568 +107201568:lI110|H107204710 +107204710:lI109|H107207940 +107207940:lI112|H10720ABB8 +10720ABB8:lI97|H10720DDA8 +10720DDA8:lI95|H107210F38 +107210F38:lI117|H107214198 +107214198:lI115|H107217530 +107217530:lI109|H10721AA60 +10721AA60:lI46|H10721DFD0 +10721DFD0:lI98|H1072214C0 +1072214C0:lI101|H107224668 +107224668:lI97|H107227520 +107227520:lI109|N +1071FB5A8:lH1071FE520|N +1071FE520:lI115|H1072015D8 +1072015D8:lI110|H107204780 +107204780:lI109|H1072079B0 +1072079B0:lI112|H10720AC28 +10720AC28:lI97|H10720DE18 +10720DE18:lI95|H107210FA8 +107210FA8:lI101|H107214208 +107214208:lI114|H1072175A0 +1072175A0:lI114|H10721AAD0 +10721AAD0:lI111|H10721E040 +10721E040:lI114|H107221530 +107221530:lI95|H1072246D8 +1072246D8:lI108|H107227590 +107227590:lI111|H10722A058 +10722A058:lI103|H10722C7F0 +10722C7F0:lI103|H10722ED28 +10722ED28:lI101|H107230F70 +107230F70:lI114|H107232EE8 +107232EE8:lI46|H107234B90 +107234B90:lI98|H107236568 +107236568:lI101|H107237D10 +107237D10:lI97|H1072392B8 +1072392B8:lI109|N +1071FB598:lH1071FE510|N +1071FE510:lI115|H1072015C8 +1072015C8:lI110|H107204770 +107204770:lI109|H1072079A0 +1072079A0:lI112|H10720AC18 +10720AC18:lI97|H10720DE08 +10720DE08:lI95|H107210F98 +107210F98:lI101|H1072141F8 +1072141F8:lI114|H107217590 +107217590:lI114|H10721AAC0 +10721AAC0:lI111|H10721E030 +10721E030:lI114|H107221520 +107221520:lI95|H1072246C8 +1072246C8:lI105|H107227580 +107227580:lI111|H10722A048 +10722A048:lI46|H10722C7E0 +10722C7E0:lI98|H10722ED18 +10722ED18:lI101|H107230F60 +107230F60:lI97|H107232ED8 +107232ED8:lI109|N +1071FB588:lH1071FE500|N +1071FE500:lI115|H1072015B8 +1072015B8:lI110|H107204760 +107204760:lI109|H107207990 +107207990:lI112|H10720AC08 +10720AC08:lI95|H10720DDF8 +10720DDF8:lI99|H107210F88 +107210F88:lI111|H1072141E8 +1072141E8:lI110|H107217580 +107217580:lI102|H10721AAB0 +10721AAB0:lI46|H10721E020 +10721E020:lI98|H107221510 +107221510:lI101|H1072246B8 +1072246B8:lI97|H107227570 +107227570:lI109|N +1071FB578:lH1071FE4F0|N +1071FE4F0:lI115|H1072015A8 +1072015A8:lI110|H107204750 +107204750:lI109|H107207980 +107207980:lI112|H10720ABF8 +10720ABF8:lI97|H10720DDE8 +10720DDE8:lI95|H107210F78 +107210F78:lI109|H1072141D8 +1072141D8:lI105|H107217570 +107217570:lI98|H10721AAA0 +10721AAA0:lI95|H10721E010 +10721E010:lI115|H107221500 +107221500:lI116|H1072246A8 +1072246A8:lI111|H107227560 +107227560:lI114|H10722A038 +10722A038:lI97|H10722C7D0 +10722C7D0:lI103|H10722ED08 +10722ED08:lI101|H107230F50 +107230F50:lI95|H107232EC8 +107232EC8:lI100|H107234B80 +107234B80:lI101|H107236558 +107236558:lI116|H107237D00 +107237D00:lI115|H1072392A8 +1072392A8:lI46|H10723A720 +10723A720:lI98|H10723B990 +10723B990:lI101|H10723C9C0 +10723C9C0:lI97|H10723D830 +10723D830:lI109|N +1071FB568:lH1071FE4E0|N +1071FE4E0:lI115|H107201598 +107201598:lI110|H107204740 +107204740:lI109|H107207970 +107207970:lI112|H10720ABE8 +10720ABE8:lI97|H10720DDD8 +10720DDD8:lI95|H107210F68 +107210F68:lI109|H1072141C8 +1072141C8:lI105|H107217560 +107217560:lI98|H10721AA90 +10721AA90:lI95|H10721E000 +10721E000:lI108|H1072214F0 +1072214F0:lI105|H107224698 +107224698:lI98|H107227550 +107227550:lI46|H10722A028 +10722A028:lI98|H10722C7C0 +10722C7C0:lI101|H10722ECF8 +10722ECF8:lI97|H107230F40 +107230F40:lI109|N +1071FB558:lH1071FE4D0|N +1071FE4D0:lI115|H107201588 +107201588:lI110|H107204730 +107204730:lI109|H107207960 +107207960:lI112|H10720ABD8 +10720ABD8:lI95|H10720DDC8 +10720DDC8:lI109|H107210F58 +107210F58:lI105|H1072141B8 +1072141B8:lI110|H107217550 +107217550:lI105|H10721AA80 +10721AA80:lI95|H10721DFF0 +10721DFF0:lI109|H1072214E0 +1072214E0:lI105|H107224688 +107224688:lI98|H107227540 +107227540:lI46|H10722A018 +10722A018:lI98|H10722C7B0 +10722C7B0:lI101|H10722ECE8 +10722ECE8:lI97|H107230F30 +107230F30:lI109|N +1071FB548:lH1071FE4C0|N +1071FE4C0:lI115|H107201578 +107201578:lI110|H107204720 +107204720:lI109|H107207950 +107207950:lI112|H10720ABC8 +10720ABC8:lI97|H10720DDB8 +10720DDB8:lI95|H107210F48 +107210F48:lI97|H1072141A8 +1072141A8:lI117|H107217540 +107217540:lI116|H10721AA70 +10721AA70:lI104|H10721DFE0 +10721DFE0:lI101|H1072214D0 +1072214D0:lI110|H107224678 +107224678:lI116|H107227530 +107227530:lI105|H10722A008 +10722A008:lI99|H10722C7A0 +10722C7A0:lI97|H10722ECD8 +10722ECD8:lI116|H107230F20 +107230F20:lI105|H107232EB8 +107232EB8:lI111|H107234B70 +107234B70:lI110|H107236548 +107236548:lI95|H107237CF0 +107237CF0:lI115|H107239298 +107239298:lI101|H10723A710 +10723A710:lI114|H10723B980 +10723B980:lI118|H10723C9B0 +10723C9B0:lI105|H10723D820 +10723D820:lI99|H10723E540 +10723E540:lI101|H10723F130 +10723F130:lI46|H10723FBF0 +10723FBF0:lI98|H107240530 +107240530:lI101|H107240DB0 +107240DB0:lI97|H107241540 +107241540:lI109|N +1071F87D8:Mn3:H1071FB500,H1071FB518,H1071FB528 +1071FB500:Mn2:H1071FE470,H1071FE480 +1071FE470:lH107201528|N +107201528:lI115|H1072046D0 +1072046D0:lI110|H107207900 +107207900:lI109|H10720AB78 +10720AB78:lI112|H10720DD68 +10720DD68:lI99|H107210EF8 +107210EF8:lI95|H107214158 +107214158:lI109|H1072174F0 +1072174F0:lI105|H10721AA20 +10721AA20:lI98|H10721DF90 +10721DF90:lI95|H107221480 +107221480:lI103|H107224628 +107224628:lI114|H1072274E0 +1072274E0:lI97|H107229FD8 +107229FD8:lI109|H10722C770 +10722C770:lI46|H10722ECA8 +10722ECA8:lI98|H107230EF0 +107230EF0:lI101|H107232E88 +107232E88:lI97|H107234B50 +107234B50:lI109|N +1071FE480:lH107201538|N +107201538:lI115|H1072046E0 +1072046E0:lI110|H107207910 +107207910:lI109|H10720AB88 +10720AB88:lI112|H10720DD78 +10720DD78:lI97|H107210F08 +107210F08:lI95|H107214168 +107214168:lI110|H107217500 +107217500:lI101|H10721AA30 +10721AA30:lI116|H10721DFA0 +10721DFA0:lI119|H107221490 +107221490:lI111|H107224638 +107224638:lI114|H1072274F0 +1072274F0:lI107|H107229FE8 +107229FE8:lI95|H10722C780 +10722C780:lI105|H10722ECB8 +10722ECB8:lI110|H107230F00 +107230F00:lI116|H107232E98 +107232E98:lI101|H107234B60 +107234B60:lI114|H107236538 +107236538:lI102|H107237CE0 +107237CE0:lI97|H107239288 +107239288:lI99|H10723A700 +10723A700:lI101|H10723B970 +10723B970:lI95|H10723C9A0 +10723C9A0:lI102|H10723D810 +10723D810:lI105|H10723E530 +10723E530:lI108|H10723F120 +10723F120:lI116|H10723FBE0 +10723FBE0:lI101|H107240520 +107240520:lI114|H107240DA0 +107240DA0:lI46|H107241530 +107241530:lI98|H107241C60 +107241C60:lI101|H107242320 +107242320:lI97|H107242990 +107242990:lI109|N +1071FB528:lH1071FE4A0|N +1071FE4A0:lI115|H107201558 +107201558:lI110|H107204700 +107204700:lI109|H107207930 +107207930:lI112|H10720ABA8 +10720ABA8:lI109|H10720DD98 +10720DD98:lI95|H107210F28 +107210F28:lI117|H107214188 +107214188:lI115|H107217520 +107217520:lI109|H10721AA50 +10721AA50:lI46|H10721DFC0 +10721DFC0:lI98|H1072214B0 +1072214B0:lI101|H107224658 +107224658:lI97|H107227510 +107227510:lI109|N +1071FB518:lH1071FE490|N +1071FE490:lI115|H107201548 +107201548:lI110|H1072046F0 +1072046F0:lI109|H107207920 +107207920:lI112|H10720AB98 +10720AB98:lI97|H10720DD88 +10720DD88:lI95|H107210F18 +107210F18:lI109|H107214178 +107214178:lI105|H107217510 +107217510:lI98|H10721AA40 +10721AA40:lI95|H10721DFB0 +10721DFB0:lI100|H1072214A0 +1072214A0:lI97|H107224648 +107224648:lI116|H107227500 +107227500:lI97|H107229FF8 +107229FF8:lI46|H10722C790 +10722C790:lI98|H10722ECC8 +10722ECC8:lI101|H107230F10 +107230F10:lI97|H107232EA8 +107232EA8:lI109|N +1071F87B8:Mn3:H1071FB4D0,H1071FB4E0,H1071FB4F0 +1071FB4D0:lH1071FE440|N +1071FE440:lI115|H1072014F8 +1072014F8:lI110|H1072046A0 +1072046A0:lI109|H1072078D0 +1072078D0:lI112|H10720AB48 +10720AB48:lI97|H10720DD38 +10720DD38:lI95|H107210EC8 +107210EC8:lI109|H107214128 +107214128:lI105|H1072174C0 +1072174C0:lI98|H10721A9F0 +10721A9F0:lI46|H10721DF70 +10721DF70:lI98|H107221460 +107221460:lI101|H107224608 +107224608:lI97|H1072274C0 +1072274C0:lI109|N +1071FB4F0:lH1071FE460|N +1071FE460:lI115|H107201518 +107201518:lI110|H1072046C0 +1072046C0:lI109|H1072078F0 +1072078F0:lI112|H10720AB68 +10720AB68:lI46|H10720DD58 +10720DD58:lI97|H107210EE8 +107210EE8:lI112|H107214148 +107214148:lI112|H1072174E0 +1072174E0:lI117|H10721AA10 +10721AA10:lI112|N +1071FB4E0:lH1071FE450|N +1071FE450:lI115|H107201508 +107201508:lI110|H1072046B0 +1072046B0:lI109|H1072078E0 +1072078E0:lI112|H10720AB58 +10720AB58:lI109|H10720DD48 +10720DD48:lI95|H107210ED8 +107210ED8:lI99|H107214138 +107214138:lI111|H1072174D0 +1072174D0:lI110|H10721AA00 +10721AA00:lI102|H10721DF80 +10721DF80:lI105|H107221470 +107221470:lI103|H107224618 +107224618:lI46|H1072274D0 +1072274D0:lI98|H107229FC8 +107229FC8:lI101|H10722C760 +10722C760:lI97|H10722EC98 +10722EC98:lI109|N +1071F8788:Mn5:H1071FB480,H1071FB490,H1071FB4A0,H1071FB4B0,H1071FB4C0 +1071FB480:lH1071FE3F0|N +1071FE3F0:lI115|H1072014A8 +1072014A8:lI110|H107204650 +107204650:lI109|H107207880 +107207880:lI112|H10720AAF8 +10720AAF8:lI97|H10720DCE8 +10720DCE8:lI95|H107210E78 +107210E78:lI115|H1072140D8 +1072140D8:lI101|H107217470 +107217470:lI116|H10721A9A0 +10721A9A0:lI95|H10721DF20 +10721DF20:lI109|H107221410 +107221410:lI101|H1072245B8 +1072245B8:lI99|H107227470 +107227470:lI104|H107229F98 +107229F98:lI97|H10722C730 +10722C730:lI110|H10722EC68 +10722EC68:lI105|H107230EC0 +107230EC0:lI115|H107232E58 +107232E58:lI109|H107234B20 +107234B20:lI46|H107236508 +107236508:lI98|H107237CB0 +107237CB0:lI101|H107239258 +107239258:lI97|H10723A6D0 +10723A6D0:lI109|N +1071FB4C0:lH1071FE430|N +1071FE430:lI115|H1072014E8 +1072014E8:lI110|H107204690 +107204690:lI109|H1072078C0 +1072078C0:lI112|H10720AB38 +10720AB38:lI95|H10720DD28 +10720DD28:lI103|H107210EB8 +107210EB8:lI101|H107214118 +107214118:lI110|H1072174B0 +1072174B0:lI101|H10721A9E0 +10721A9E0:lI114|H10721DF60 +10721DF60:lI105|H107221450 +107221450:lI99|H1072245F8 +1072245F8:lI95|H1072274B0 +1072274B0:lI109|H107229FB8 +107229FB8:lI110|H10722C750 +10722C750:lI101|H10722EC88 +10722EC88:lI115|H107230EE0 +107230EE0:lI105|H107232E78 +107232E78:lI97|H107234B40 +107234B40:lI46|H107236528 +107236528:lI98|H107237CD0 +107237CD0:lI101|H107239278 +107239278:lI97|H10723A6F0 +10723A6F0:lI109|N +1071FB4B0:lH1071FE420|N +1071FE420:lI115|H1072014D8 +1072014D8:lI110|H107204680 +107204680:lI109|H1072078B0 +1072078B0:lI112|H10720AB28 +10720AB28:lI97|H10720DD18 +10720DD18:lI95|H107210EA8 +107210EA8:lI97|H107214108 +107214108:lI112|H1072174A0 +1072174A0:lI112|H10721A9D0 +10721A9D0:lI46|H10721DF50 +10721DF50:lI98|H107221440 +107221440:lI101|H1072245E8 +1072245E8:lI97|H1072274A0 +1072274A0:lI109|N +1071FB4A0:lH1071FE410|N +1071FE410:lI115|H1072014C8 +1072014C8:lI110|H107204670 +107204670:lI109|H1072078A0 +1072078A0:lI112|H10720AB18 +10720AB18:lI109|H10720DD08 +10720DD08:lI95|H107210E98 +107210E98:lI110|H1072140F8 +1072140F8:lI101|H107217490 +107217490:lI116|H10721A9C0 +10721A9C0:lI95|H10721DF40 +10721DF40:lI105|H107221430 +107221430:lI102|H1072245D8 +1072245D8:lI95|H107227490 +107227490:lI102|H107229FA8 +107229FA8:lI105|H10722C740 +10722C740:lI108|H10722EC78 +10722EC78:lI116|H107230ED0 +107230ED0:lI101|H107232E68 +107232E68:lI114|H107234B30 +107234B30:lI46|H107236518 +107236518:lI98|H107237CC0 +107237CC0:lI101|H107239268 +107239268:lI97|H10723A6E0 +10723A6E0:lI109|N +1071FB490:lH1071FE400|N +1071FE400:lI115|H1072014B8 +1072014B8:lI110|H107204660 +107204660:lI109|H107207890 +107207890:lI112|H10720AB08 +10720AB08:lI99|H10720DCF8 +10720DCF8:lI95|H107210E88 +107210E88:lI116|H1072140E8 +1072140E8:lI111|H107217480 +107217480:lI107|H10721A9B0 +10721A9B0:lI46|H10721DF30 +10721DF30:lI98|H107221420 +107221420:lI101|H1072245C8 +1072245C8:lI97|H107227480 +107227480:lI109|N +1071F8778:lH1071FB470|N +1071FB470:lI115|H1071FE3E0 +1071FE3E0:lI110|H107201498 +107201498:lI109|H107204640 +107204640:lI112|H107207870 +107207870:lI97|H10720AAE8 +10720AAE8:lI95|H10720DCD8 +10720DCD8:lI103|H107210E68 +107210E68:lI101|H1072140C8 +1072140C8:lI116|H107217460 +107217460:lI46|H10721A990 +10721A990:lI98|H10721DF10 +10721DF10:lI101|H107221400 +107221400:lI97|H1072245A8 +1072245A8:lI109|N +1071F8740:Mn6:H1071FB408,H1071FB418,H1071FB428,H1071FB438,H1071FB450,H1071FB460 +1071FB408:lH1071FE370|N +1071FE370:lI115|H107201428 +107201428:lI110|H1072045D0 +1072045D0:lI109|H107207800 +107207800:lI112|H10720AA78 +10720AA78:lI95|H10720DC68 +10720DC68:lI117|H107210DF8 +107210DF8:lI115|H107214058 +107214058:lI101|H1072173F0 +1072173F0:lI114|H10721A920 +10721A920:lI95|H10721DEA0 +10721DEA0:lI98|H107221390 +107221390:lI97|H107224538 +107224538:lI115|H107227410 +107227410:lI101|H107229F48 +107229F48:lI100|H10722C6E0 +10722C6E0:lI95|H10722EC18 +10722EC18:lI115|H107230E70 +107230E70:lI109|H107232E18 +107232E18:lI95|H107234AE0 +107234AE0:lI109|H1072364D8 +1072364D8:lI105|H107237C80 +107237C80:lI98|H107239238 +107239238:lI46|H10723A6C0 +10723A6C0:lI98|H10723B960 +10723B960:lI101|H10723C990 +10723C990:lI97|H10723D800 +10723D800:lI109|N +1071FB460:lH1071FE3D0|N +1071FE3D0:lI115|H107201488 +107201488:lI110|H107204630 +107204630:lI109|H107207860 +107207860:lI112|H10720AAD8 +10720AAD8:lI99|H10720DCC8 +10720DCC8:lI95|H107210E58 +107210E58:lI108|H1072140B8 +1072140B8:lI105|H107217450 +107217450:lI98|H10721A980 +10721A980:lI46|H10721DF00 +10721DF00:lI98|H1072213F0 +1072213F0:lI101|H107224598 +107224598:lI97|H107227460 +107227460:lI109|N +1071FB450:lH1071FE3C0|N +1071FE3C0:lI115|H107201478 +107201478:lI110|H107204620 +107204620:lI109|H107207850 +107207850:lI112|H10720AAC8 +10720AAC8:lI95|H10720DCB8 +10720DCB8:lI115|H107210E48 +107210E48:lI116|H1072140A8 +1072140A8:lI97|H107217440 +107217440:lI110|H10721A970 +10721A970:lI100|H10721DEF0 +10721DEF0:lI97|H1072213E0 +1072213E0:lI114|H107224588 +107224588:lI100|H107227450 +107227450:lI95|H107229F88 +107229F88:lI109|H10722C720 +10722C720:lI105|H10722EC58 +10722EC58:lI98|H107230EB0 +107230EB0:lI46|H107232E48 +107232E48:lI98|H107234B10 +107234B10:lI101|H1072364F8 +1072364F8:lI97|H107237CA0 +107237CA0:lI109|N +1071FB438:Mn2:H1071FE3A0,H1071FE3B0 +1071FE3A0:lH107201458|N +107201458:lI115|H107204600 +107204600:lI110|H107207830 +107207830:lI109|H10720AAA8 +10720AAA8:lI112|H10720DC98 +10720DC98:lI95|H107210E28 +107210E28:lI118|H107214088 +107214088:lI101|H107217420 +107217420:lI114|H10721A950 +10721A950:lI98|H10721DED0 +10721DED0:lI111|H1072213C0 +1072213C0:lI115|H107224568 +107224568:lI105|H107227430 +107227430:lI116|H107229F68 +107229F68:lI121|H10722C700 +10722C700:lI46|H10722EC38 +10722EC38:lI98|H107230E90 +107230E90:lI101|H107232E38 +107232E38:lI97|H107234B00 +107234B00:lI109|N +1071FE3B0:lH107201468|N +107201468:lI115|H107204610 +107204610:lI110|H107207840 +107207840:lI109|H10720AAB8 +10720AAB8:lI112|H10720DCA8 +10720DCA8:lI97|H107210E38 +107210E38:lI95|H107214098 +107214098:lI110|H107217430 +107217430:lI101|H10721A960 +10721A960:lI116|H10721DEE0 +10721DEE0:lI95|H1072213D0 +1072213D0:lI105|H107224578 +107224578:lI102|H107227440 +107227440:lI46|H107229F78 +107229F78:lI98|H10722C710 +10722C710:lI101|H10722EC48 +10722EC48:lI97|H107230EA0 +107230EA0:lI109|N +1071FB428:lH1071FE390|N +1071FE390:lI115|H107201448 +107201448:lI110|H1072045F0 +1072045F0:lI109|H107207820 +107207820:lI112|H10720AA98 +10720AA98:lI95|H10720DC88 +10720DC88:lI97|H107210E18 +107210E18:lI112|H107214078 +107214078:lI112|H107217410 +107217410:lI46|H10721A940 +10721A940:lI98|H10721DEC0 +10721DEC0:lI101|H1072213B0 +1072213B0:lI97|H107224558 +107224558:lI109|N +1071FB418:lH1071FE380|N +1071FE380:lI115|H107201438 +107201438:lI110|H1072045E0 +1072045E0:lI109|H107207810 +107207810:lI112|H10720AA88 +10720AA88:lI97|H10720DC78 +10720DC78:lI95|H107210E08 +107210E08:lI101|H107214068 +107214068:lI114|H107217400 +107217400:lI114|H10721A930 +10721A930:lI111|H10721DEB0 +10721DEB0:lI114|H1072213A0 +1072213A0:lI95|H107224548 +107224548:lI114|H107227420 +107227420:lI101|H107229F58 +107229F58:lI112|H10722C6F0 +10722C6F0:lI111|H10722EC28 +10722EC28:lI114|H107230E80 +107230E80:lI116|H107232E28 +107232E28:lI46|H107234AF0 +107234AF0:lI98|H1072364E8 +1072364E8:lI101|H107237C90 +107237C90:lI97|H107239248 +107239248:lI109|N +1071F8720:Mn3:H1071FB3C8,H1071FB3D8,H1071FB3E8 +1071FB3C8:lH1071FE320|N +1071FE320:lI115|H1072013D8 +1072013D8:lI110|H107204580 +107204580:lI109|H1072077B0 +1072077B0:lI112|H10720AA28 +10720AA28:lI109|H10720DC18 +10720DC18:lI95|H107210DA8 +107210DA8:lI110|H107214008 +107214008:lI101|H1072173A0 +1072173A0:lI116|H10721A8D0 +10721A8D0:lI95|H10721DE50 +10721DE50:lI105|H107221350 +107221350:lI102|H1072244F8 +1072244F8:lI95|H1072273D0 +1072273D0:lI109|H107229F08 +107229F08:lI116|H10722C6A0 +10722C6A0:lI46|H10722EBD8 +10722EBD8:lI98|H107230E30 +107230E30:lI101|H107232DF8 +107232DF8:lI97|H107234AC0 +107234AC0:lI109|N +1071FB3E8:Mn3:H1071FE340,H1071FE350,H1071FE360 +1071FE340:lH1072013F8|N +1072013F8:lI115|H1072045A0 +1072045A0:lI110|H1072077D0 +1072077D0:lI109|H10720AA48 +10720AA48:lI112|H10720DC38 +10720DC38:lI97|H107210DC8 +107210DC8:lI95|H107214028 +107214028:lI109|H1072173C0 +1072173C0:lI105|H10721A8F0 +10721A8F0:lI98|H10721DE70 +10721DE70:lI95|H107221370 +107221370:lI115|H107224518 +107224518:lI116|H1072273F0 +1072273F0:lI111|H107229F28 +107229F28:lI114|H10722C6C0 +10722C6C0:lI97|H10722EBF8 +10722EBF8:lI103|H107230E50 +107230E50:lI101|H107232E08 +107232E08:lI46|H107234AD0 +107234AD0:lI98|H1072364C8 +1072364C8:lI101|H107237C70 +107237C70:lI97|H107239228 +107239228:lI109|N +1071FE360:lH107201418|N +107201418:lI115|H1072045C0 +1072045C0:lI110|H1072077F0 +1072077F0:lI109|H10720AA68 +10720AA68:lI112|H10720DC58 +10720DC58:lI95|H107210DE8 +107210DE8:lI97|H107214048 +107214048:lI112|H1072173E0 +1072173E0:lI112|H10721A910 +10721A910:lI95|H10721DE90 +10721DE90:lI115|H107221380 +107221380:lI117|H107224528 +107224528:lI112|H107227400 +107227400:lI46|H107229F38 +107229F38:lI98|H10722C6D0 +10722C6D0:lI101|H10722EC08 +10722EC08:lI97|H107230E60 +107230E60:lI109|N +1071FE350:lH107201408|N +107201408:lI115|H1072045B0 +1072045B0:lI110|H1072077E0 +1072077E0:lI109|H10720AA58 +10720AA58:lI112|H10720DC48 +10720DC48:lI99|H107210DD8 +107210DD8:lI46|H107214038 +107214038:lI98|H1072173D0 +1072173D0:lI101|H10721A900 +10721A900:lI97|H10721DE80 +10721DE80:lI109|N +1071FB3D8:lH1071FE330|N +1071FE330:lI115|H1072013E8 +1072013E8:lI110|H107204590 +107204590:lI109|H1072077C0 +1072077C0:lI112|H10720AA38 +10720AA38:lI97|H10720DC28 +10720DC28:lI95|H107210DB8 +107210DB8:lI115|H107214018 +107214018:lI101|H1072173B0 +1072173B0:lI116|H10721A8E0 +10721A8E0:lI95|H10721DE60 +10721DE60:lI108|H107221360 +107221360:lI105|H107224508 +107224508:lI98|H1072273E0 +1072273E0:lI46|H107229F18 +107229F18:lI98|H10722C6B0 +10722C6B0:lI101|H10722EBE8 +10722EBE8:lI97|H107230E40 +107230E40:lI109|N +1071F8700:Mn3:H1071FB390,H1071FB3A0,H1071FB3B0 +1071FB390:lH1071FE2E0|N +1071FE2E0:lI115|H107201398 +107201398:lI110|H107204540 +107204540:lI109|H107207770 +107207770:lI112|H10720A9E8 +10720A9E8:lI97|H10720DBD8 +10720DBD8:lI95|H107210D68 +107210D68:lI115|H107213FC8 +107213FC8:lI117|H107217360 +107217360:lI112|H10721A890 +10721A890:lI101|H10721DE10 +10721DE10:lI114|H107221310 +107221310:lI118|H1072244B8 +1072244B8:lI105|H107227390 +107227390:lI115|H107229EC8 +107229EC8:lI111|H10722C680 +10722C680:lI114|H10722EBB8 +10722EBB8:lI46|H107230E10 +107230E10:lI98|H107232DD8 +107232DD8:lI101|H107234AA0 +107234AA0:lI97|H1072364A8 +1072364A8:lI109|N +1071FB3B0:Mn2:H1071FE300,H1071FE310 +1071FE300:lH1072013B8|N +1072013B8:lI115|H107204560 +107204560:lI110|H107207790 +107207790:lI109|H10720AA08 +10720AA08:lI112|H10720DBF8 +10720DBF8:lI95|H107210D88 +107210D88:lI110|H107213FE8 +107213FE8:lI111|H107217380 +107217380:lI116|H10721A8B0 +10721A8B0:lI105|H10721DE30 +10721DE30:lI102|H107221330 +107221330:lI105|H1072244D8 +1072244D8:lI99|H1072273B0 +1072273B0:lI97|H107229EE8 +107229EE8:lI116|H10722C690 +10722C690:lI105|H10722EBC8 +10722EBC8:lI111|H107230E20 +107230E20:lI110|H107232DE8 +107232DE8:lI95|H107234AB0 +107234AB0:lI109|H1072364B8 +1072364B8:lI105|H107237C60 +107237C60:lI98|H107239218 +107239218:lI46|H10723A6B0 +10723A6B0:lI98|H10723B950 +10723B950:lI101|H10723C980 +10723C980:lI97|H10723D7F0 +10723D7F0:lI109|N +1071FE310:lH1072013C8|N +1072013C8:lI115|H107204570 +107204570:lI110|H1072077A0 +1072077A0:lI109|H10720AA18 +10720AA18:lI112|H10720DC08 +10720DC08:lI109|H107210D98 +107210D98:lI95|H107213FF8 +107213FF8:lI109|H107217390 +107217390:lI112|H10721A8C0 +10721A8C0:lI100|H10721DE40 +10721DE40:lI46|H107221340 +107221340:lI98|H1072244E8 +1072244E8:lI101|H1072273C0 +1072273C0:lI97|H107229EF8 +107229EF8:lI109|N +1071FB3A0:lH1071FE2F0|N +1071FE2F0:lI115|H1072013A8 +1072013A8:lI110|H107204550 +107204550:lI109|H107207780 +107207780:lI112|H10720A9F8 +10720A9F8:lI109|H10720DBE8 +10720DBE8:lI95|H107210D78 +107210D78:lI99|H107213FD8 +107213FD8:lI111|H107217370 +107217370:lI110|H10721A8A0 +10721A8A0:lI102|H10721DE20 +10721DE20:lI46|H107221320 +107221320:lI98|H1072244C8 +1072244C8:lI101|H1072273A0 +1072273A0:lI97|H107229ED8 +107229ED8:lI109|N +1071F5D88:lI47|H1071F86C8 +1071F86C8:lI111|H1071FB330 +1071FB330:lI112|H1071FE270 +1071FE270:lI116|H107201328 +107201328:lI47|H1072044D0 +1072044D0:lI104|H107207700 +107207700:lI111|H10720A978 +10720A978:lI109|H10720DB68 +10720DB68:lI101|H107210CF8 +107210CF8:lI98|H107213F58 +107213F58:lI114|H1072172F0 +1072172F0:lI101|H10721A820 +10721A820:lI119|H10721DDA0 +10721DDA0:lI47|H1072212A0 +1072212A0:lI67|H107224448 +107224448:lI101|H107227320 +107227320:lI108|H107229E58 +107229E58:lI108|H10722C630 +10722C630:lI97|H10722EB68 +10722EB68:lI114|H107230DC0 +107230DC0:lI47|H107232D88 +107232D88:lI101|H107234A50 +107234A50:lI114|H107236468 +107236468:lI108|H107237C20 +107237C20:lI97|H1072391D8 +1072391D8:lI110|H10723A670 +10723A670:lI103|H10723B930 +10723B930:lI47|H10723C960 +10723C960:lI50|H10723D7D0 +10723D7D0:lI54|H10723E510 +10723E510:lI46|H10723F110 +10723F110:lI48|H10723FBD0 +10723FBD0:lI46|H107240510 +107240510:lI50|H107240D90 +107240D90:lI47|H107241520 +107241520:lI108|H107241C50 +107241C50:lI105|H107242310 +107242310:lI98|H107242980 +107242980:lI47|H107242F80 +107242F80:lI101|H1072434F0 +1072434F0:lI114|H107243A30 +107243A30:lI108|H107243F20 +107243F20:lI97|H107244410 +107244410:lI110|H1072448C0 +1072448C0:lI103|H107244D30 +107244D30:lI47|H107245190 +107245190:lI108|H1072455E0 +1072455E0:lI105|H1072459E0 +1072459E0:lI98|H107245DA0 +107245DA0:lI47|H107246130 +107246130:lI115|H1072464C0 +1072464C0:lI110|H107246850 +107246850:lI109|H107246BE0 +107246BE0:lI112|H107246F10 +107246F10:lI45|H107247230 +107247230:lI53|H107247540 +107247540:lI46|H107247840 +107247840:lI49|H107247B40 +107247B40:lI52|H107247E20 +107247E20:lI47|H280052C20 +1071F3680:lH1071F5E28|H1071F5E40 +1071F5E28:t2:H1071F89B8,H1071F89C8 +1071F89C8:Mf13:H1071FB880:N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N +1071FB880:t13:H1071FE838,H1071FE848,H1071FE858,H1071FE868,H1071FE878,H1071FE888,H1071FE898,H1071FE8A8,H1071FE8B8,H1071FE8C8,H1071FE8D8,H1071FE8E8,H1071FE8F8,H1071FE908,H1071FE918,H1071FE928,H1071FE938,H1071FE948,H1071FE958 +1071FE958:lI115|H107201A18 +107201A18:lI121|H107204BC0 +107204BC0:lI115|H107207DF0 +107207DF0:lI116|H10720B068 +10720B068:lI111|H10720E258 +10720E258:lI111|H1072113E8 +1072113E8:lI108|H107214638 +107214638:lI115|H1072179C0 +1072179C0:lI95|H10721AEC0 +10721AEC0:lI114|H10721E410 +10721E410:lI101|H1072218E0 +1072218E0:lI108|H107224A88 +107224A88:lI117|H107227910 +107227910:lI112|H10722A388 +10722A388:lI46|H10722CAE0 +10722CAE0:lI98|H10722EFD8 +10722EFD8:lI101|H1072311E0 +1072311E0:lI97|H1072330F8 +1072330F8:lI109|N +1071FE948:lI115|H107201A08 +107201A08:lI121|H107204BB0 +107204BB0:lI115|H107207DE0 +107207DE0:lI116|H10720B058 +10720B058:lI111|H10720E248 +10720E248:lI111|H1072113D8 +1072113D8:lI108|H107214628 +107214628:lI115|H1072179B0 +1072179B0:lI95|H10721AEB0 +10721AEB0:lI114|H10721E400 +10721E400:lI99|H1072218D0 +1072218D0:lI46|H107224A78 +107224A78:lI98|H107227900 +107227900:lI101|H10722A378 +10722A378:lI97|H10722CAD0 +10722CAD0:lI109|N +1071FE938:lI115|H1072019F8 +1072019F8:lI121|H107204BA0 +107204BA0:lI115|H107207DD0 +107207DD0:lI116|H10720B048 +10720B048:lI111|H10720E238 +10720E238:lI111|H1072113C8 +1072113C8:lI108|H107214618 +107214618:lI115|H1072179A0 +1072179A0:lI95|H10721AEA0 +10721AEA0:lI109|H10721E3F0 +10721E3F0:lI97|H1072218C0 +1072218C0:lI107|H107224A68 +107224A68:lI101|H1072278F0 +1072278F0:lI46|H10722A368 +10722A368:lI98|H10722CAC0 +10722CAC0:lI101|H10722EFC8 +10722EFC8:lI97|H1072311D0 +1072311D0:lI109|N +1071FE928:lI115|H1072019E8 +1072019E8:lI121|H107204B90 +107204B90:lI115|H107207DC0 +107207DC0:lI116|H10720B038 +10720B038:lI111|H10720E228 +10720E228:lI111|H1072113B8 +1072113B8:lI108|H107214608 +107214608:lI115|H107217990 +107217990:lI95|H10721AE90 +10721AE90:lI108|H10721E3E0 +10721E3E0:lI105|H1072218B0 +1072218B0:lI98|H107224A58 +107224A58:lI46|H1072278E0 +1072278E0:lI98|H10722A358 +10722A358:lI101|H10722CAB0 +10722CAB0:lI97|H10722EFB8 +10722EFB8:lI109|N +1071FE918:lI115|H1072019D8 +1072019D8:lI121|H107204B80 +107204B80:lI115|H107207DB0 +107207DB0:lI116|H10720B028 +10720B028:lI111|H10720E218 +10720E218:lI111|H1072113A8 +1072113A8:lI108|H1072145F8 +1072145F8:lI115|H107217980 +107217980:lI46|H10721AE80 +10721AE80:lI98|H10721E3D0 +10721E3D0:lI101|H1072218A0 +1072218A0:lI97|H107224A48 +107224A48:lI109|N +1071FE908:lI115|H1072019C8 +1072019C8:lI97|H107204B70 +107204B70:lI115|H107207DA0 +107207DA0:lI108|H10720B018 +10720B018:lI95|H10720E208 +10720E208:lI114|H107211398 +107211398:lI101|H1072145E8 +1072145E8:lI112|H107217970 +107217970:lI111|H10721AE70 +10721AE70:lI114|H10721E3C0 +10721E3C0:lI116|H107221890 +107221890:lI95|H107224A38 +107224A38:lI116|H1072278D0 +1072278D0:lI116|H10722A348 +10722A348:lI121|H10722CAA0 +10722CAA0:lI95|H10722EFA8 +10722EFA8:lI104|H1072311C0 +1072311C0:lI46|H1072330E8 +1072330E8:lI98|H107234D40 +107234D40:lI101|H1072366E8 +1072366E8:lI97|H107237E50 +107237E50:lI109|N +1071FE8F8:lI115|H1072019B8 +1072019B8:lI97|H107204B60 +107204B60:lI115|H107207D90 +107207D90:lI108|H10720B008 +10720B008:lI95|H10720E1F8 +10720E1F8:lI114|H107211388 +107211388:lI101|H1072145D8 +1072145D8:lI112|H107217960 +107217960:lI111|H10721AE60 +10721AE60:lI114|H10721E3B0 +10721E3B0:lI116|H107221880 +107221880:lI95|H107224A28 +107224A28:lI102|H1072278C0 +1072278C0:lI105|H10722A338 +10722A338:lI108|H10722CA90 +10722CA90:lI101|H10722EF98 +10722EF98:lI95|H1072311B0 +1072311B0:lI104|H1072330D8 +1072330D8:lI46|H107234D30 +107234D30:lI98|H1072366D8 +1072366D8:lI101|H107237E40 +107237E40:lI97|H1072393C8 +1072393C8:lI109|N +1071FE8E8:lI115|H1072019A8 +1072019A8:lI97|H107204B50 +107204B50:lI115|H107207D80 +107207D80:lI108|H10720AFF8 +10720AFF8:lI95|H10720E1E8 +10720E1E8:lI114|H107211378 +107211378:lI101|H1072145C8 +1072145C8:lI112|H107217950 +107217950:lI111|H10721AE50 +10721AE50:lI114|H10721E3A0 +10721E3A0:lI116|H107221870 +107221870:lI46|H107224A18 +107224A18:lI98|H1072278B0 +1072278B0:lI101|H10722A328 +10722A328:lI97|H10722CA80 +10722CA80:lI109|N +1071FE8D8:lI115|H107201998 +107201998:lI97|H107204B40 +107204B40:lI115|H107207D70 +107207D70:lI108|H10720AFE8 +10720AFE8:lI46|H10720E1D8 +10720E1D8:lI98|H107211368 +107211368:lI101|H1072145B8 +1072145B8:lI97|H107217940 +107217940:lI109|N +1071FE8C8:lI115|H107201988 +107201988:lI97|H107204B30 +107204B30:lI115|H107207D60 +107207D60:lI108|H10720AFD8 +10720AFD8:lI46|H10720E1C8 +10720E1C8:lI97|H107211358 +107211358:lI112|H1072145A8 +1072145A8:lI112|H107217930 +107217930:lI117|H10721AE40 +10721AE40:lI112|N +1071FE8B8:lI115|H107201978 +107201978:lI97|H107204B20 +107204B20:lI115|H107207D50 +107207D50:lI108|H10720AFC8 +10720AFC8:lI46|H10720E1B8 +10720E1B8:lI97|H107211348 +107211348:lI112|H107214598 +107214598:lI112|N +1071FE8A8:lI114|H107201968 +107201968:lI101|H107204B10 +107204B10:lI108|H107207D40 +107207D40:lI101|H10720AFB8 +10720AFB8:lI97|H10720E1A8 +10720E1A8:lI115|H107211338 +107211338:lI101|H107214588 +107214588:lI95|H107217920 +107217920:lI104|H10721AE30 +10721AE30:lI97|H10721E390 +10721E390:lI110|H107221860 +107221860:lI100|H107224A08 +107224A08:lI108|H1072278A0 +1072278A0:lI101|H10722A318 +10722A318:lI114|H10722CA70 +10722CA70:lI95|H10722EF88 +10722EF88:lI49|H1072311A0 +1072311A0:lI46|H1072330C8 +1072330C8:lI98|H107234D20 +107234D20:lI101|H1072366C8 +1072366C8:lI97|H107237E30 +107237E30:lI109|N +1071FE898:lI114|H107201958 +107201958:lI101|H107204B00 +107204B00:lI108|H107207D30 +107207D30:lI101|H10720AFA8 +10720AFA8:lI97|H10720E198 +10720E198:lI115|H107211328 +107211328:lI101|H107214578 +107214578:lI95|H107217910 +107217910:lI104|H10721AE20 +10721AE20:lI97|H10721E380 +10721E380:lI110|H107221850 +107221850:lI100|H1072249F8 +1072249F8:lI108|H107227890 +107227890:lI101|H10722A308 +10722A308:lI114|H10722CA60 +10722CA60:lI46|H10722EF78 +10722EF78:lI98|H107231190 +107231190:lI101|H1072330B8 +1072330B8:lI97|H107234D10 +107234D10:lI109|N +1071FE888:lI114|H107201948 +107201948:lI98|H107204AF0 +107204AF0:lI95|H107207D20 +107207D20:lI102|H10720AF98 +10720AF98:lI111|H10720E188 +10720E188:lI114|H107211318 +107211318:lI109|H107214568 +107214568:lI97|H107217900 +107217900:lI116|H10721AE10 +10721AE10:lI95|H10721E370 +10721E370:lI115|H107221840 +107221840:lI117|H1072249E8 +1072249E8:lI112|H107227880 +107227880:lI112|H10722A2F8 +10722A2F8:lI46|H10722CA50 +10722CA50:lI98|H10722EF68 +10722EF68:lI101|H107231180 +107231180:lI97|H1072330A8 +1072330A8:lI109|N +1071FE878:lI114|H107201938 +107201938:lI98|H107204AE0 +107204AE0:lI46|H107207D10 +107207D10:lI98|H10720AF88 +10720AF88:lI101|H10720E178 +10720E178:lI97|H107211308 +107211308:lI109|N +1071FE868:lI109|H107201928 +107201928:lI105|H107204AD0 +107204AD0:lI115|H107207D00 +107207D00:lI99|H10720AF78 +10720AF78:lI95|H10720E168 +10720E168:lI115|H1072112F8 +1072112F8:lI117|H107214558 +107214558:lI112|H1072178F0 +1072178F0:lI112|H10721AE00 +10721AE00:lI46|H10721E360 +10721E360:lI98|H107221830 +107221830:lI101|H1072249D8 +1072249D8:lI97|H107227870 +107227870:lI109|N +1071FE858:lI102|H107201918 +107201918:lI111|H107204AC0 +107204AC0:lI114|H107207CF0 +107207CF0:lI109|H10720AF68 +10720AF68:lI97|H10720E158 +10720E158:lI116|H1072112E8 +1072112E8:lI95|H107214548 +107214548:lI108|H1072178E0 +1072178E0:lI105|H10721ADF0 +10721ADF0:lI98|H10721E350 +10721E350:lI95|H107221820 +107221820:lI115|H1072249C8 +1072249C8:lI117|H107227860 +107227860:lI112|H10722A2E8 +10722A2E8:lI112|H10722CA40 +10722CA40:lI46|H10722EF58 +10722EF58:lI98|H107231170 +107231170:lI101|H107233098 +107233098:lI97|H107234D00 +107234D00:lI109|N +1071FE848:lI101|H107201908 +107201908:lI114|H107204AB0 +107204AB0:lI108|H107207CE0 +107207CE0:lI115|H10720AF58 +10720AF58:lI114|H10720E148 +10720E148:lI118|H1072112D8 +1072112D8:lI46|H107214538 +107214538:lI98|H1072178D0 +1072178D0:lI101|H10721ADE0 +10721ADE0:lI97|H10721E340 +10721E340:lI109|N +1071FE838:lI97|H1072018F8 +1072018F8:lI108|H107204AA0 +107204AA0:lI97|H107207CD0 +107207CD0:lI114|H10720AF48 +10720AF48:lI109|H10720E138 +10720E138:lI95|H1072112C8 +1072112C8:lI104|H107214528 +107214528:lI97|H1072178C0 +1072178C0:lI110|H10721ADD0 +10721ADD0:lI100|H10721E330 +10721E330:lI108|H107221810 +107221810:lI101|H1072249B8 +1072249B8:lI114|H107227850 +107227850:lI46|H10722A2D8 +10722A2D8:lI98|H10722CA30 +10722CA30:lI101|H10722EF48 +10722EF48:lI97|H107231160 +107231160:lI109|N +1071F89B8:lI47|H1071FB870 +1071FB870:lI111|H1071FE828 +1071FE828:lI112|H1072018E8 +1072018E8:lI116|H107204A90 +107204A90:lI47|H107207CC0 +107207CC0:lI104|H10720AF38 +10720AF38:lI111|H10720E128 +10720E128:lI109|H1072112B8 +1072112B8:lI101|H107214518 +107214518:lI98|H1072178B0 +1072178B0:lI114|H10721ADC0 +10721ADC0:lI101|H10721E320 +10721E320:lI119|H107221800 +107221800:lI47|H1072249A8 +1072249A8:lI67|H107227840 +107227840:lI101|H10722A2C8 +10722A2C8:lI108|H10722CA20 +10722CA20:lI108|H10722EF38 +10722EF38:lI97|H107231150 +107231150:lI114|H107233088 +107233088:lI47|H107234CF0 +107234CF0:lI101|H1072366B8 +1072366B8:lI114|H107237E20 +107237E20:lI108|H1072393B8 +1072393B8:lI97|H10723A810 +10723A810:lI110|H10723BA40 +10723BA40:lI103|H10723CA70 +10723CA70:lI47|H10723D8D0 +10723D8D0:lI50|H10723E5D0 +10723E5D0:lI54|H10723F1B0 +10723F1B0:lI46|H10723FC40 +10723FC40:lI48|H107240580 +107240580:lI46|H107240DF0 +107240DF0:lI50|H107241580 +107241580:lI47|H107241CA0 +107241CA0:lI108|H107242360 +107242360:lI105|H1072429C0 +1072429C0:lI98|H107242FA0 +107242FA0:lI47|H107243510 +107243510:lI101|H107243A50 +107243A50:lI114|H107243F40 +107243F40:lI108|H107244430 +107244430:lI97|H1072448E0 +1072448E0:lI110|H107244D50 +107244D50:lI103|H1072451B0 +1072451B0:lI47|H107245600 +107245600:lI108|H107245A00 +107245A00:lI105|H107245DB0 +107245DB0:lI98|H107246140 +107246140:lI47|H1072464D0 +1072464D0:lI115|H107246860 +107246860:lI97|H107246BF0 +107246BF0:lI115|H107246F20 +107246F20:lI108|H107247240 +107247240:lI45|H107247550 +107247550:lI52|H107247850 +107247850:lI46|H107247B50 +107247B50:lI50|H107247E30 +107247E30:lI46|H1072480F0 +1072480F0:lI49|H1072483B0 +1072483B0:lI47|H280052C20 +1071F5E40:lH1071F8A78|H1071F8A90 +1071F8A78:t2:H1071FB920,H1071FB930 +1071FB930:MfE:H1071FE978:N,N,N,N,N,N,N,N,N,N,N,N,N,N +1071FE978:tE:H107201A38,H107201A48,H107201A58,H107201A68,H107201A78,H107201A88,H107201A98,H107201AA8,H107201AB8,H107201AC8,H107201AD8,H107201AE8,H107201AF8,H107201B08 +107201B08:lI116|H107204CB0 +107204CB0:lI116|H107207EE0 +107207EE0:lI98|H10720B158 +10720B158:lI95|H10720E348 +10720E348:lI97|H1072114D8 +1072114D8:lI117|H107214728 +107214728:lI116|H107217AB0 +107217AB0:lI111|H10721AFA0 +10721AFA0:lI115|H10721E4F0 +10721E4F0:lI116|H1072219B0 +1072219B0:lI97|H107224B58 +107224B58:lI114|H1072279E0 +1072279E0:lI116|H10722A448 +10722A448:lI46|H10722CB90 +10722CB90:lI98|H10722F078 +10722F078:lI101|H107231270 +107231270:lI97|H107233178 +107233178:lI109|N +107201AF8:lI115|H107204CA0 +107204CA0:lI121|H107207ED0 +107207ED0:lI115|H10720B148 +10720B148:lI116|H10720E338 +10720E338:lI101|H1072114C8 +1072114C8:lI109|H107214718 +107214718:lI95|H107217AA0 +107217AA0:lI105|H10721AF90 +10721AF90:lI110|H10721E4E0 +10721E4E0:lI102|H1072219A0 +1072219A0:lI111|H107224B48 +107224B48:lI114|H1072279D0 +1072279D0:lI109|H10722A438 +10722A438:lI97|H10722CB80 +10722CB80:lI116|H10722F068 +10722F068:lI105|H107231260 +107231260:lI111|H107233168 +107233168:lI110|H107234DA0 +107234DA0:lI46|H107236738 +107236738:lI98|H107237EA0 +107237EA0:lI101|H107239408 +107239408:lI97|H10723A830 +10723A830:lI109|N +107201AE8:lI115|H107204C90 +107204C90:lI99|H107207EC0 +107207EC0:lI104|H10720B138 +10720B138:lI101|H10720E328 +10720E328:lI100|H1072114B8 +1072114B8:lI117|H107214708 +107214708:lI108|H107217A90 +107217A90:lI101|H10721AF80 +10721AF80:lI114|H10721E4D0 +10721E4D0:lI46|H107221990 +107221990:lI98|H107224B38 +107224B38:lI101|H1072279C0 +1072279C0:lI97|H10722A428 +10722A428:lI109|N +107201AD8:lI114|H107204C80 +107204C80:lI117|H107207EB0 +107207EB0:lI110|H10720B128 +10720B128:lI116|H10720E318 +10720E318:lI105|H1072114A8 +1072114A8:lI109|H1072146F8 +1072146F8:lI101|H107217A80 +107217A80:lI95|H10721AF70 +10721AF70:lI116|H10721E4C0 +10721E4C0:lI111|H107221980 +107221980:lI111|H107224B28 +107224B28:lI108|H1072279B0 +1072279B0:lI115|H10722A418 +10722A418:lI95|H10722CB70 +10722CB70:lI115|H10722F058 +10722F058:lI117|H107231250 +107231250:lI112|H107233158 +107233158:lI46|H107234D90 +107234D90:lI98|H107236728 +107236728:lI101|H107237E90 +107237E90:lI97|H1072393F8 +1072393F8:lI109|N +107201AC8:lI114|H107204C70 +107204C70:lI117|H107207EA0 +107207EA0:lI110|H10720B118 +10720B118:lI116|H10720E308 +10720E308:lI105|H107211498 +107211498:lI109|H1072146E8 +1072146E8:lI101|H107217A70 +107217A70:lI95|H10721AF60 +10721AF60:lI116|H10721E4B0 +10721E4B0:lI111|H107221970 +107221970:lI111|H107224B18 +107224B18:lI108|H1072279A0 +1072279A0:lI115|H10722A408 +10722A408:lI46|H10722CB60 +10722CB60:lI98|H10722F048 +10722F048:lI101|H107231240 +107231240:lI97|H107233148 +107233148:lI109|N +107201AB8:lI114|H107204C60 +107204C60:lI117|H107207E90 +107207E90:lI110|H10720B108 +10720B108:lI116|H10720E2F8 +10720E2F8:lI105|H107211488 +107211488:lI109|H1072146D8 +1072146D8:lI101|H107217A60 +107217A60:lI95|H10721AF50 +10721AF50:lI116|H10721E4A0 +10721E4A0:lI111|H107221960 +107221960:lI111|H107224B08 +107224B08:lI108|H107227990 +107227990:lI115|H10722A3F8 +10722A3F8:lI46|H10722CB50 +10722CB50:lI97|H10722F038 +10722F038:lI112|H107231230 +107231230:lI112|H107233138 +107233138:lI117|H107234D80 +107234D80:lI112|N +107201AA8:lI114|H107204C50 +107204C50:lI117|H107207E80 +107207E80:lI110|H10720B0F8 +10720B0F8:lI116|H10720E2E8 +10720E2E8:lI105|H107211478 +107211478:lI109|H1072146C8 +1072146C8:lI101|H107217A50 +107217A50:lI95|H10721AF40 +10721AF40:lI116|H10721E490 +10721E490:lI111|H107221950 +107221950:lI111|H107224AF8 +107224AF8:lI108|H107227980 +107227980:lI115|H10722A3E8 +10722A3E8:lI46|H10722CB40 +10722CB40:lI97|H10722F028 +10722F028:lI112|H107231220 +107231220:lI112|N +107201A98:lI111|H107204C40 +107204C40:lI98|H107207E70 +107207E70:lI115|H10720B0E8 +10720B0E8:lI101|H10720E2D8 +10720E2D8:lI114|H107211468 +107211468:lI118|H1072146B8 +1072146B8:lI101|H107217A40 +107217A40:lI114|H10721AF30 +10721AF30:lI95|H10721E480 +10721E480:lI98|H107221940 +107221940:lI97|H107224AE8 +107224AE8:lI99|H107227970 +107227970:lI107|H10722A3D8 +10722A3D8:lI101|H10722CB30 +10722CB30:lI110|H10722F018 +10722F018:lI100|H107231210 +107231210:lI46|H107233128 +107233128:lI98|H107234D70 +107234D70:lI101|H107236718 +107236718:lI97|H107237E80 +107237E80:lI109|N +107201A88:lI109|H107204C30 +107204C30:lI115|H107207E60 +107207E60:lI97|H10720B0D8 +10720B0D8:lI99|H10720E2C8 +10720E2C8:lI99|H107211458 +107211458:lI46|H1072146A8 +1072146A8:lI98|H107217A30 +107217A30:lI101|H10721AF20 +10721AF20:lI97|H10721E470 +10721E470:lI109|N +107201A78:lI105|H107204C20 +107204C20:lI110|H107207E50 +107207E50:lI115|H10720B0C8 +10720B0C8:lI116|H10720E2B8 +10720E2B8:lI114|H107211448 +107211448:lI117|H107214698 +107214698:lI109|H107217A20 +107217A20:lI101|H10721AF10 +10721AF10:lI110|H10721E460 +10721E460:lI116|H107221930 +107221930:lI46|H107224AD8 +107224AD8:lI98|H107227960 +107227960:lI101|H10722A3C8 +10722A3C8:lI97|H10722CB20 +10722CB20:lI109|N +107201A68:lI101|H107204C10 +107204C10:lI114|H107207E40 +107207E40:lI116|H10720B0B8 +10720B0B8:lI115|H10720E2A8 +10720E2A8:lI95|H107211438 +107211438:lI97|H107214688 +107214688:lI108|H107217A10 +107217A10:lI108|H10721AF00 +10721AF00:lI111|H10721E450 +10721E450:lI99|H107221920 +107221920:lI95|H107224AC8 +107224AC8:lI99|H107227950 +107227950:lI111|H10722A3B8 +10722A3B8:lI110|H10722CB10 +10722CB10:lI102|H10722F008 +10722F008:lI105|H107231200 +107231200:lI103|H107233118 +107233118:lI46|H107234D60 +107234D60:lI98|H107236708 +107236708:lI101|H107237E70 +107237E70:lI97|H1072393E8 +1072393E8:lI109|N +107201A58:lI100|H107204C00 +107204C00:lI121|H107207E30 +107207E30:lI110|H10720B0A8 +10720B0A8:lI116|H10720E298 +10720E298:lI114|H107211428 +107211428:lI97|H107214678 +107214678:lI99|H107217A00 +107217A00:lI101|H10721AEF0 +10721AEF0:lI46|H10721E440 +10721E440:lI98|H107221910 +107221910:lI101|H107224AB8 +107224AB8:lI97|H107227940 +107227940:lI109|N +107201A48:lI100|H107204BF0 +107204BF0:lI98|H107207E20 +107207E20:lI103|H10720B098 +10720B098:lI46|H10720E288 +10720E288:lI98|H107211418 +107211418:lI101|H107214668 +107214668:lI97|H1072179F0 +1072179F0:lI109|N +107201A38:lI97|H107204BE0 +107204BE0:lI112|H107207E10 +107207E10:lI112|H10720B088 +10720B088:lI109|H10720E278 +10720E278:lI111|H107211408 +107211408:lI110|H107214658 +107214658:lI95|H1072179E0 +1072179E0:lI105|H10721AEE0 +10721AEE0:lI110|H10721E430 +10721E430:lI102|H107221900 +107221900:lI111|H107224AA8 +107224AA8:lI46|H107227930 +107227930:lI98|H10722A3A8 +10722A3A8:lI101|H10722CB00 +10722CB00:lI97|H10722EFF8 +10722EFF8:lI109|N +1071FB920:lI47|H1071FE968 +1071FE968:lI111|H107201A28 +107201A28:lI112|H107204BD0 +107204BD0:lI116|H107207E00 +107207E00:lI47|H10720B078 +10720B078:lI104|H10720E268 +10720E268:lI111|H1072113F8 +1072113F8:lI109|H107214648 +107214648:lI101|H1072179D0 +1072179D0:lI98|H10721AED0 +10721AED0:lI114|H10721E420 +10721E420:lI101|H1072218F0 +1072218F0:lI119|H107224A98 +107224A98:lI47|H107227920 +107227920:lI67|H10722A398 +10722A398:lI101|H10722CAF0 +10722CAF0:lI108|H10722EFE8 +10722EFE8:lI108|H1072311F0 +1072311F0:lI97|H107233108 +107233108:lI114|H107234D50 +107234D50:lI47|H1072366F8 +1072366F8:lI101|H107237E60 +107237E60:lI114|H1072393D8 +1072393D8:lI108|H10723A820 +10723A820:lI97|H10723BA50 +10723BA50:lI110|H10723CA80 +10723CA80:lI103|H10723D8E0 +10723D8E0:lI47|H10723E5E0 +10723E5E0:lI50|H10723F1C0 +10723F1C0:lI54|H10723FC50 +10723FC50:lI46|H107240590 +107240590:lI48|H107240E00 +107240E00:lI46|H107241590 +107241590:lI50|H107241CB0 +107241CB0:lI47|H107242370 +107242370:lI108|H1072429D0 +1072429D0:lI105|H107242FB0 +107242FB0:lI98|H107243520 +107243520:lI47|H107243A60 +107243A60:lI101|H107243F50 +107243F50:lI114|H107244440 +107244440:lI108|H1072448F0 +1072448F0:lI97|H107244D60 +107244D60:lI110|H1072451C0 +1072451C0:lI103|H107245610 +107245610:lI47|H107245A10 +107245A10:lI108|H107245DC0 +107245DC0:lI105|H107246150 +107246150:lI98|H1072464E0 +1072464E0:lI47|H107246870 +107246870:lI114|H107246C00 +107246C00:lI117|H107246F30 +107246F30:lI110|H107247250 +107247250:lI116|H107247560 +107247560:lI105|H107247860 +107247860:lI109|H107247B60 +107247B60:lI101|H107247E40 +107247E40:lI95|H107248100 +107248100:lI116|H1072483C0 +1072483C0:lI111|H107248670 +107248670:lI111|H107248920 +107248920:lI108|H107248BA0 +107248BA0:lI115|H107248E20 +107248E20:lI45|H107249090 +107249090:lI50|H107249300 +107249300:lI46|H107249560 +107249560:lI48|H1072497C0 +1072497C0:lI47|H280052C20 +1071F8A90:lH1071FB9B8|H1071FB9D0 +1071FB9B8:t2:H1071FE9F0,H1071FEA00 +1071FEA00:MfB:H107201B28:N,N,N,N,N,N,N,N,N,N,N +107201B28:tB:H107204CD0,H107204CE0,H107204CF0,H107204D00,H107204D10,H107204D20,H107204D30,H107204D40,H107204D50,H107204D60,H107204D70 +107204D70:lI114|H107207FA0 +107207FA0:lI101|H10720B218 +10720B218:lI108|H10720E408 +10720E408:lI116|H107211598 +107211598:lI111|H1072147E8 +1072147E8:lI111|H107217B70 +107217B70:lI108|H10721B060 +10721B060:lI95|H10721E5B0 +10721E5B0:lI117|H107221A70 +107221A70:lI116|H107224C18 +107224C18:lI105|H107227A90 +107227A90:lI108|H10722A4E8 +10722A4E8:lI115|H10722CC20 +10722CC20:lI46|H10722F108 +10722F108:lI98|H107231300 +107231300:lI101|H107233208 +107233208:lI97|H107234E30 +107234E30:lI109|N +107204D60:lI114|H107207F90 +107207F90:lI101|H10720B208 +10720B208:lI108|H10720E3F8 +10720E3F8:lI116|H107211588 +107211588:lI111|H1072147D8 +1072147D8:lI111|H107217B60 +107217B60:lI108|H10721B050 +10721B050:lI95|H10721E5A0 +10721E5A0:lI116|H107221A60 +107221A60:lI97|H107224C08 +107224C08:lI114|H107227A80 +107227A80:lI103|H10722A4D8 +10722A4D8:lI101|H10722CC10 +10722CC10:lI116|H10722F0F8 +10722F0F8:lI46|H1072312F0 +1072312F0:lI98|H1072331F8 +1072331F8:lI101|H107234E20 +107234E20:lI97|H1072367B8 +1072367B8:lI109|N +107204D50:lI114|H107207F80 +107207F80:lI101|H10720B1F8 +10720B1F8:lI108|H10720E3E8 +10720E3E8:lI116|H107211578 +107211578:lI111|H1072147C8 +1072147C8:lI111|H107217B50 +107217B50:lI108|H10721B040 +10721B040:lI95|H10721E590 +10721E590:lI115|H107221A50 +107221A50:lI121|H107224BF8 +107224BF8:lI115|H107227A70 +107227A70:lI95|H10722A4C8 +10722A4C8:lI119|H10722CC00 +10722CC00:lI105|H10722F0E8 +10722F0E8:lI110|H1072312E0 +1072312E0:lI46|H1072331E8 +1072331E8:lI98|H107234E10 +107234E10:lI101|H1072367A8 +1072367A8:lI97|H107237EF0 +107237EF0:lI109|N +107204D40:lI114|H107207F70 +107207F70:lI101|H10720B1E8 +10720B1E8:lI108|H10720E3D8 +10720E3D8:lI116|H107211568 +107211568:lI111|H1072147B8 +1072147B8:lI111|H107217B40 +107217B40:lI108|H10721B030 +10721B030:lI95|H10721E580 +10721E580:lI115|H107221A40 +107221A40:lI101|H107224BE8 +107224BE8:lI114|H107227A60 +107227A60:lI118|H10722A4B8 +10722A4B8:lI101|H10722CBF0 +10722CBF0:lI114|H10722F0D8 +10722F0D8:lI46|H1072312D0 +1072312D0:lI98|H1072331D8 +1072331D8:lI101|H107234E00 +107234E00:lI97|H107236798 +107236798:lI109|N +107204D30:lI114|H107207F60 +107207F60:lI101|H10720B1D8 +10720B1D8:lI108|H10720E3C8 +10720E3C8:lI116|H107211558 +107211558:lI111|H1072147A8 +1072147A8:lI111|H107217B30 +107217B30:lI108|H10721B020 +10721B020:lI95|H10721E570 +10721E570:lI109|H107221A30 +107221A30:lI111|H107224BD8 +107224BD8:lI100|H107227A50 +107227A50:lI95|H10722A4A8 +10722A4A8:lI119|H10722CBE0 +10722CBE0:lI105|H10722F0C8 +10722F0C8:lI110|H1072312C0 +1072312C0:lI46|H1072331C8 +1072331C8:lI98|H107234DF0 +107234DF0:lI101|H107236788 +107236788:lI97|H107237EE0 +107237EE0:lI109|N +107204D20:lI114|H107207F50 +107207F50:lI101|H10720B1C8 +10720B1C8:lI108|H10720E3B8 +10720E3B8:lI116|H107211548 +107211548:lI111|H107214798 +107214798:lI111|H107217B20 +107217B20:lI108|H10721B010 +10721B010:lI95|H10721E560 +10721E560:lI102|H107221A20 +107221A20:lI103|H107224BC8 +107224BC8:lI114|H107227A40 +107227A40:lI97|H10722A498 +10722A498:lI112|H10722CBD0 +10722CBD0:lI104|H10722F0B8 +10722F0B8:lI95|H1072312B0 +1072312B0:lI119|H1072331B8 +1072331B8:lI105|H107234DE0 +107234DE0:lI110|H107236778 +107236778:lI46|H107237ED0 +107237ED0:lI98|H107239428 +107239428:lI101|H10723A850 +10723A850:lI97|H10723BA70 +10723BA70:lI109|N +107204D10:lI114|H107207F40 +107207F40:lI101|H10720B1B8 +10720B1B8:lI108|H10720E3A8 +10720E3A8:lI116|H107211538 +107211538:lI111|H107214788 +107214788:lI111|H107217B10 +107217B10:lI108|H10721B000 +10721B000:lI95|H10721E550 +10721E550:lI102|H107221A10 +107221A10:lI103|H107224BB8 +107224BB8:lI114|H107227A30 +107227A30:lI97|H10722A488 +10722A488:lI112|H10722CBC0 +10722CBC0:lI104|H10722F0A8 +10722F0A8:lI46|H1072312A0 +1072312A0:lI98|H1072331A8 +1072331A8:lI101|H107234DD0 +107234DD0:lI97|H107236768 +107236768:lI109|N +107204D00:lI114|H107207F30 +107207F30:lI101|H10720B1A8 +10720B1A8:lI108|H10720E398 +10720E398:lI116|H107211528 +107211528:lI111|H107214778 +107214778:lI111|H107217B00 +107217B00:lI108|H10721AFF0 +10721AFF0:lI95|H10721E540 +10721E540:lI97|H107221A00 +107221A00:lI112|H107224BA8 +107224BA8:lI112|H107227A20 +107227A20:lI95|H10722A478 +10722A478:lI119|H10722CBB0 +10722CBB0:lI105|H10722F098 +10722F098:lI110|H107231290 +107231290:lI46|H107233198 +107233198:lI98|H107234DC0 +107234DC0:lI101|H107236758 +107236758:lI97|H107237EC0 +107237EC0:lI109|N +107204CF0:lI114|H107207F20 +107207F20:lI101|H10720B198 +10720B198:lI108|H10720E388 +10720E388:lI116|H107211518 +107211518:lI111|H107214768 +107214768:lI111|H107217AF0 +107217AF0:lI108|H10721AFE0 +10721AFE0:lI46|H10721E530 +10721E530:lI98|H1072219F0 +1072219F0:lI101|H107224B98 +107224B98:lI97|H107227A10 +107227A10:lI109|N +107204CE0:lI114|H107207F10 +107207F10:lI101|H10720B188 +10720B188:lI108|H10720E378 +10720E378:lI116|H107211508 +107211508:lI111|H107214758 +107214758:lI111|H107217AE0 +107217AE0:lI108|H10721AFD0 +10721AFD0:lI46|H10721E520 +10721E520:lI97|H1072219E0 +1072219E0:lI112|H107224B88 +107224B88:lI112|H107227A00 +107227A00:lI117|H10722A468 +10722A468:lI112|N +107204CD0:lI114|H107207F00 +107207F00:lI101|H10720B178 +10720B178:lI108|H10720E368 +10720E368:lI116|H1072114F8 +1072114F8:lI111|H107214748 +107214748:lI111|H107217AD0 +107217AD0:lI108|H10721AFC0 +10721AFC0:lI46|H10721E510 +10721E510:lI97|H1072219D0 +1072219D0:lI112|H107224B78 +107224B78:lI112|N +1071FE9F0:lI47|H107201B18 +107201B18:lI111|H107204CC0 +107204CC0:lI112|H107207EF0 +107207EF0:lI116|H10720B168 +10720B168:lI47|H10720E358 +10720E358:lI104|H1072114E8 +1072114E8:lI111|H107214738 +107214738:lI109|H107217AC0 +107217AC0:lI101|H10721AFB0 +10721AFB0:lI98|H10721E500 +10721E500:lI114|H1072219C0 +1072219C0:lI101|H107224B68 +107224B68:lI119|H1072279F0 +1072279F0:lI47|H10722A458 +10722A458:lI67|H10722CBA0 +10722CBA0:lI101|H10722F088 +10722F088:lI108|H107231280 +107231280:lI108|H107233188 +107233188:lI97|H107234DB0 +107234DB0:lI114|H107236748 +107236748:lI47|H107237EB0 +107237EB0:lI101|H107239418 +107239418:lI114|H10723A840 +10723A840:lI108|H10723BA60 +10723BA60:lI97|H10723CA90 +10723CA90:lI110|H10723D8F0 +10723D8F0:lI103|H10723E5F0 +10723E5F0:lI47|H10723F1D0 +10723F1D0:lI50|H10723FC60 +10723FC60:lI54|H1072405A0 +1072405A0:lI46|H107240E10 +107240E10:lI48|H1072415A0 +1072415A0:lI46|H107241CC0 +107241CC0:lI50|H107242380 +107242380:lI47|H1072429E0 +1072429E0:lI108|H107242FC0 +107242FC0:lI105|H107243530 +107243530:lI98|H107243A70 +107243A70:lI47|H107243F60 +107243F60:lI101|H107244450 +107244450:lI114|H107244900 +107244900:lI108|H107244D70 +107244D70:lI97|H1072451D0 +1072451D0:lI110|H107245620 +107245620:lI103|H107245A20 +107245A20:lI47|H107245DD0 +107245DD0:lI108|H107246160 +107246160:lI105|H1072464F0 +1072464F0:lI98|H107246880 +107246880:lI47|H107246C10 +107246C10:lI114|H107246F40 +107246F40:lI101|H107247260 +107247260:lI108|H107247570 +107247570:lI116|H107247870 +107247870:lI111|H107247B70 +107247B70:lI111|H107247E50 +107247E50:lI108|H107248110 +107248110:lI45|H1072483D0 +1072483D0:lI49|H107248680 +107248680:lI46|H107248930 +107248930:lI48|H107248BB0 +107248BB0:lI47|H280052C20 +1071FB9D0:lH1071FEA70|H1071FEA88 +1071FEA70:t2:H107201B88,H107201B98 +107201B98:MfD:H107204D90:N,N,N,N,N,N,N,N,N,N,N,N,N +107204D90:tD:H107207FC0,H107207FD0,H107207FE0,H107207FF0,H107208000,H107208010,H107208020,H107208030,H107208040,H107208050,H107208060,H107208070,H107208080 +107208080:lI112|H10720B2F8 +10720B2F8:lI117|H10720E4E8 +10720E4E8:lI98|H107211678 +107211678:lI108|H1072148C8 +1072148C8:lI105|H107217C50 +107217C50:lI99|H10721B140 +10721B140:lI95|H10721E690 +10721E690:lI107|H107221B50 +107221B50:lI101|H107224CF8 +107224CF8:lI121|H107227B70 +107227B70:lI46|H10722A5C8 +10722A5C8:lI98|H10722CD00 +10722CD00:lI101|H10722F1E8 +10722F1E8:lI97|H1072313D0 +1072313D0:lI109|N +107208070:lI112|H10720B2E8 +10720B2E8:lI117|H10720E4D8 +10720E4D8:lI98|H107211668 +107211668:lI108|H1072148B8 +1072148B8:lI105|H107217C40 +107217C40:lI99|H10721B130 +10721B130:lI95|H10721E680 +10721E680:lI107|H107221B40 +107221B40:lI101|H107224CE8 +107224CE8:lI121|H107227B60 +107227B60:lI46|H10722A5B8 +10722A5B8:lI97|H10722CCF0 +10722CCF0:lI112|H10722F1D8 +10722F1D8:lI112|H1072313C0 +1072313C0:lI117|H107233278 +107233278:lI112|N +107208060:lI112|H10720B2D8 +10720B2D8:lI117|H10720E4C8 +10720E4C8:lI98|H107211658 +107211658:lI108|H1072148A8 +1072148A8:lI105|H107217C30 +107217C30:lI99|H10721B120 +10721B120:lI95|H10721E670 +10721E670:lI107|H107221B30 +107221B30:lI101|H107224CD8 +107224CD8:lI121|H107227B50 +107227B50:lI46|H10722A5A8 +10722A5A8:lI97|H10722CCE0 +10722CCE0:lI112|H10722F1C8 +10722F1C8:lI112|N +107208050:lI112|H10720B2C8 +10720B2C8:lI117|H10720E4B8 +10720E4B8:lI98|H107211648 +107211648:lI107|H107214898 +107214898:lI101|H107217C20 +107217C20:lI121|H10721B110 +10721B110:lI95|H10721E660 +10721E660:lI115|H107221B20 +107221B20:lI115|H107224CC8 +107224CC8:lI104|H107227B40 +107227B40:lI46|H10722A598 +10722A598:lI98|H10722CCD0 +10722CCD0:lI101|H10722F1B8 +10722F1B8:lI97|H1072313B0 +1072313B0:lI109|N +107208040:lI112|H10720B2B8 +10720B2B8:lI117|H10720E4A8 +10720E4A8:lI98|H107211638 +107211638:lI107|H107214888 +107214888:lI101|H107217C10 +107217C10:lI121|H10721B100 +10721B100:lI95|H10721E650 +10721E650:lI112|H107221B10 +107221B10:lI101|H107224CB8 +107224CB8:lI109|H107227B30 +107227B30:lI46|H10722A588 +10722A588:lI98|H10722CCC0 +10722CCC0:lI101|H10722F1A8 +10722F1A8:lI97|H1072313A0 +1072313A0:lI109|N +107208030:lI112|H10720B2A8 +10720B2A8:lI117|H10720E498 +10720E498:lI98|H107211628 +107211628:lI107|H107214878 +107214878:lI101|H107217C00 +107217C00:lI121|H10721B0F0 +10721B0F0:lI95|H10721E640 +10721E640:lI112|H107221B00 +107221B00:lI98|H107224CA8 +107224CA8:lI101|H107227B20 +107227B20:lI46|H10722A578 +10722A578:lI98|H10722CCB0 +10722CCB0:lI101|H10722F198 +10722F198:lI97|H107231390 +107231390:lI109|N +107208020:lI112|H10720B298 +10720B298:lI117|H10720E488 +10720E488:lI98|H107211618 +107211618:lI107|H107214868 +107214868:lI101|H107217BF0 +107217BF0:lI121|H10721B0E0 +10721B0E0:lI95|H10721E630 +10721E630:lI111|H107221AF0 +107221AF0:lI115|H107224C98 +107224C98:lI95|H107227B10 +107227B10:lI99|H10722A568 +10722A568:lI97|H10722CCA0 +10722CCA0:lI99|H10722F188 +10722F188:lI101|H107231380 +107231380:lI114|H107233268 +107233268:lI116|H107234E60 +107234E60:lI115|H1072367E8 +1072367E8:lI46|H107237F20 +107237F20:lI98|H107239458 +107239458:lI101|H10723A880 +10723A880:lI97|H10723BAA0 +10723BAA0:lI109|N +107208010:lI112|H10720B288 +10720B288:lI117|H10720E478 +10720E478:lI98|H107211608 +107211608:lI107|H107214858 +107214858:lI101|H107217BE0 +107217BE0:lI121|H10721B0D0 +10721B0D0:lI95|H10721E620 +10721E620:lI111|H107221AE0 +107221AE0:lI99|H107224C88 +107224C88:lI115|H107227B00 +107227B00:lI112|H10722A558 +10722A558:lI46|H10722CC90 +10722CC90:lI98|H10722F178 +10722F178:lI101|H107231370 +107231370:lI97|H107233258 +107233258:lI109|N +107208000:lI112|H10720B278 +10720B278:lI117|H10720E468 +10720E468:lI98|H1072115F8 +1072115F8:lI107|H107214848 +107214848:lI101|H107217BD0 +107217BD0:lI121|H10721B0C0 +10721B0C0:lI95|H10721E610 +10721E610:lI99|H107221AD0 +107221AD0:lI114|H107224C78 +107224C78:lI108|H107227AF0 +107227AF0:lI46|H10722A548 +10722A548:lI98|H10722CC80 +10722CC80:lI101|H10722F168 +10722F168:lI97|H107231360 +107231360:lI109|N +107207FF0:lI112|H10720B268 +10720B268:lI117|H10720E458 +10720E458:lI98|H1072115E8 +1072115E8:lI107|H107214838 +107214838:lI101|H107217BC0 +107217BC0:lI121|H10721B0B0 +10721B0B0:lI95|H10721E600 +10721E600:lI99|H107221AC0 +107221AC0:lI101|H107224C68 +107224C68:lI114|H107227AE0 +107227AE0:lI116|H10722A538 +10722A538:lI95|H10722CC70 +10722CC70:lI114|H10722F158 +10722F158:lI101|H107231350 +107231350:lI99|H107233248 +107233248:lI111|H107234E50 +107234E50:lI114|H1072367D8 +1072367D8:lI100|H107237F10 +107237F10:lI115|H107239448 +107239448:lI46|H10723A870 +10723A870:lI98|H10723BA90 +10723BA90:lI101|H10723CAB0 +10723CAB0:lI97|H10723D910 +10723D910:lI109|N +107207FE0:lI112|H10720B258 +10720B258:lI117|H10720E448 +10720E448:lI98|H1072115D8 +1072115D8:lI107|H107214828 +107214828:lI101|H107217BB0 +107217BB0:lI121|H10721B0A0 +10721B0A0:lI95|H10721E5F0 +10721E5F0:lI99|H107221AB0 +107221AB0:lI101|H107224C58 +107224C58:lI114|H107227AD0 +107227AD0:lI116|H10722A528 +10722A528:lI46|H10722CC60 +10722CC60:lI98|H10722F148 +10722F148:lI101|H107231340 +107231340:lI97|H107233238 +107233238:lI109|N +107207FD0:lI80|H10720B248 +10720B248:lI75|H10720E438 +10720E438:lI67|H1072115C8 +1072115C8:lI83|H107214818 +107214818:lI45|H107217BA0 +107217BA0:lI70|H10721B090 +10721B090:lI82|H10721E5E0 +10721E5E0:lI65|H107221AA0 +107221AA0:lI77|H107224C48 +107224C48:lI69|H107227AC0 +107227AC0:lI46|H10722A518 +10722A518:lI98|H10722CC50 +10722CC50:lI101|H10722F138 +10722F138:lI97|H107231330 +107231330:lI109|N +107207FC0:lI79|H10720B238 +10720B238:lI84|H10720E428 +10720E428:lI80|H1072115B8 +1072115B8:lI45|H107214808 +107214808:lI80|H107217B90 +107217B90:lI85|H10721B080 +10721B080:lI66|H10721E5D0 +10721E5D0:lI45|H107221A90 +107221A90:lI75|H107224C38 +107224C38:lI69|H107227AB0 +107227AB0:lI89|H10722A508 +10722A508:lI46|H10722CC40 +10722CC40:lI98|H10722F128 +10722F128:lI101|H107231320 +107231320:lI97|H107233228 +107233228:lI109|N +107201B88:lI47|H107204D80 +107204D80:lI111|H107207FB0 +107207FB0:lI112|H10720B228 +10720B228:lI116|H10720E418 +10720E418:lI47|H1072115A8 +1072115A8:lI104|H1072147F8 +1072147F8:lI111|H107217B80 +107217B80:lI109|H10721B070 +10721B070:lI101|H10721E5C0 +10721E5C0:lI98|H107221A80 +107221A80:lI114|H107224C28 +107224C28:lI101|H107227AA0 +107227AA0:lI119|H10722A4F8 +10722A4F8:lI47|H10722CC30 +10722CC30:lI67|H10722F118 +10722F118:lI101|H107231310 +107231310:lI108|H107233218 +107233218:lI108|H107234E40 +107234E40:lI97|H1072367C8 +1072367C8:lI114|H107237F00 +107237F00:lI47|H107239438 +107239438:lI101|H10723A860 +10723A860:lI114|H10723BA80 +10723BA80:lI108|H10723CAA0 +10723CAA0:lI97|H10723D900 +10723D900:lI110|H10723E600 +10723E600:lI103|H10723F1E0 +10723F1E0:lI47|H10723FC70 +10723FC70:lI50|H1072405B0 +1072405B0:lI54|H107240E20 +107240E20:lI46|H1072415B0 +1072415B0:lI48|H107241CD0 +107241CD0:lI46|H107242390 +107242390:lI50|H1072429F0 +1072429F0:lI47|H107242FD0 +107242FD0:lI108|H107243540 +107243540:lI105|H107243A80 +107243A80:lI98|H107243F70 +107243F70:lI47|H107244460 +107244460:lI101|H107244910 +107244910:lI114|H107244D80 +107244D80:lI108|H1072451E0 +1072451E0:lI97|H107245630 +107245630:lI110|H107245A30 +107245A30:lI103|H107245DE0 +107245DE0:lI47|H107246170 +107246170:lI108|H107246500 +107246500:lI105|H107246890 +107246890:lI98|H107246C20 +107246C20:lI47|H107246F50 +107246F50:lI112|H107247270 +107247270:lI117|H107247580 +107247580:lI98|H107247880 +107247880:lI108|H107247B80 +107247B80:lI105|H107247E60 +107247E60:lI99|H107248120 +107248120:lI95|H1072483E0 +1072483E0:lI107|H107248690 +107248690:lI101|H107248940 +107248940:lI121|H107248BC0 +107248BC0:lI45|H107248E30 +107248E30:lI49|H1072490A0 +1072490A0:lI46|H107249310 +107249310:lI49|H107249570 +107249570:lI52|H1072497D0 +1072497D0:lI47|H280052C20 +1071FEA88:lH107201C18|H107201C30 +107201C18:t2:H107204E00,H107204E10 +107204E10:Mf6:H1072080A0:N,N,N,N,N,N +1072080A0:t6:H10720B318,H10720B328,H10720B338,H10720B348,H10720B358,H10720B368 +10720B368:lI121|H10720E558 +10720E558:lI101|H1072116E8 +1072116E8:lI99|H107214938 +107214938:lI99|H107217CC0 +107217CC0:lI115|H10721B1B0 +10721B1B0:lI99|H10721E700 +10721E700:lI97|H107221BC0 +107221BC0:lI110|H107224D68 +107224D68:lI46|H107227BC0 +107227BC0:lI98|H10722A618 +10722A618:lI101|H10722CD50 +10722CD50:lI97|H10722F238 +10722F238:lI109|N +10720B358:lI121|H10720E548 +10720E548:lI101|H1072116D8 +1072116D8:lI99|H107214928 +107214928:lI99|H107217CB0 +107217CB0:lI112|H10721B1A0 +10721B1A0:lI97|H10721E6F0 +10721E6F0:lI114|H107221BB0 +107221BB0:lI115|H107224D58 +107224D58:lI101|H107227BB0 +107227BB0:lI114|H10722A608 +10722A608:lI46|H10722CD40 +10722CD40:lI98|H10722F228 +10722F228:lI101|H107231410 +107231410:lI97|H1072332A8 +1072332A8:lI109|N +10720B348:lI121|H10720E538 +10720E538:lI101|H1072116C8 +1072116C8:lI99|H107214918 +107214918:lI99|H107217CA0 +107217CA0:lI46|H10721B190 +10721B190:lI98|H10721E6E0 +10721E6E0:lI101|H107221BA0 +107221BA0:lI97|H107224D48 +107224D48:lI109|N +10720B338:lI112|H10720E528 +10720E528:lI97|H1072116B8 +1072116B8:lI114|H107214908 +107214908:lI115|H107217C90 +107217C90:lI101|H10721B180 +10721B180:lI116|H10721E6D0 +10721E6D0:lI111|H107221B90 +107221B90:lI111|H107224D38 +107224D38:lI108|H107227BA0 +107227BA0:lI115|H10722A5F8 +10722A5F8:lI46|H10722CD30 +10722CD30:lI97|H10722F218 +10722F218:lI112|H107231400 +107231400:lI112|H107233298 +107233298:lI117|H107234E80 +107234E80:lI112|N +10720B328:lI112|H10720E518 +10720E518:lI97|H1072116A8 +1072116A8:lI114|H1072148F8 +1072148F8:lI115|H107217C80 +107217C80:lI101|H10721B170 +10721B170:lI116|H10721E6C0 +10721E6C0:lI111|H107221B80 +107221B80:lI111|H107224D28 +107224D28:lI108|H107227B90 +107227B90:lI115|H10722A5E8 +10722A5E8:lI46|H10722CD20 +10722CD20:lI97|H10722F208 +10722F208:lI112|H1072313F0 +1072313F0:lI112|N +10720B318:lI108|H10720E508 +10720E508:lI101|H107211698 +107211698:lI101|H1072148E8 +1072148E8:lI120|H107217C70 +107217C70:lI46|H10721B160 +10721B160:lI98|H10721E6B0 +10721E6B0:lI101|H107221B70 +107221B70:lI97|H107224D18 +107224D18:lI109|N +107204E00:lI47|H107208090 +107208090:lI111|H10720B308 +10720B308:lI112|H10720E4F8 +10720E4F8:lI116|H107211688 +107211688:lI47|H1072148D8 +1072148D8:lI104|H107217C60 +107217C60:lI111|H10721B150 +10721B150:lI109|H10721E6A0 +10721E6A0:lI101|H107221B60 +107221B60:lI98|H107224D08 +107224D08:lI114|H107227B80 +107227B80:lI101|H10722A5D8 +10722A5D8:lI119|H10722CD10 +10722CD10:lI47|H10722F1F8 +10722F1F8:lI67|H1072313E0 +1072313E0:lI101|H107233288 +107233288:lI108|H107234E70 +107234E70:lI108|H1072367F8 +1072367F8:lI97|H107237F30 +107237F30:lI114|H107239468 +107239468:lI47|H10723A890 +10723A890:lI101|H10723BAB0 +10723BAB0:lI114|H10723CAC0 +10723CAC0:lI108|H10723D920 +10723D920:lI97|H10723E610 +10723E610:lI110|H10723F1F0 +10723F1F0:lI103|H10723FC80 +10723FC80:lI47|H1072405C0 +1072405C0:lI50|H107240E30 +107240E30:lI54|H1072415C0 +1072415C0:lI46|H107241CE0 +107241CE0:lI48|H1072423A0 +1072423A0:lI46|H107242A00 +107242A00:lI50|H107242FE0 +107242FE0:lI47|H107243550 +107243550:lI108|H107243A90 +107243A90:lI105|H107243F80 +107243F80:lI98|H107244470 +107244470:lI47|H107244920 +107244920:lI101|H107244D90 +107244D90:lI114|H1072451F0 +1072451F0:lI108|H107245640 +107245640:lI97|H107245A40 +107245A40:lI110|H107245DF0 +107245DF0:lI103|H107246180 +107246180:lI47|H107246510 +107246510:lI108|H1072468A0 +1072468A0:lI105|H107246C30 +107246C30:lI98|H107246F60 +107246F60:lI47|H107247280 +107247280:lI112|H107247590 +107247590:lI97|H107247890 +107247890:lI114|H107247B90 +107247B90:lI115|H107247E70 +107247E70:lI101|H107248130 +107248130:lI116|H1072483F0 +1072483F0:lI111|H1072486A0 +1072486A0:lI111|H107248950 +107248950:lI108|H107248BD0 +107248BD0:lI115|H107248E40 +107248E40:lI45|H1072490B0 +1072490B0:lI50|H107249320 +107249320:lI46|H107249580 +107249580:lI53|H1072497E0 +1072497E0:lI47|H280052C20 +107201C30:lH107204E58|H107204E70 +107204E58:t2:H1072080D8,H1072080E8 +1072080E8:MfA:H10720B388:N,N,N,N,N,N,N,N,N,N +10720B388:tA:H10720E578,H10720E588,H10720E598,H10720E5A8,H10720E5B8,H10720E5C8,H10720E5D8,H10720E5E8,H10720E5F8,H10720E608 +10720E608:lI111|H107211798 +107211798:lI115|H1072149E8 +1072149E8:lI95|H107217D70 +107217D70:lI115|H10721B260 +10721B260:lI117|H10721E7B0 +10721E7B0:lI112|H107221C70 +107221C70:lI46|H107224E18 +107224E18:lI98|H107227C70 +107227C70:lI101|H10722A6C8 +10722A6C8:lI97|H10722CDF0 +10722CDF0:lI109|N +10720E5F8:lI111|H107211788 +107211788:lI115|H1072149D8 +1072149D8:lI95|H107217D60 +107217D60:lI109|H10721B250 +10721B250:lI111|H10721E7A0 +10721E7A0:lI110|H107221C60 +107221C60:lI95|H107224E08 +107224E08:lI115|H107227C60 +107227C60:lI121|H10722A6B8 +10722A6B8:lI115|H10722CDE0 +10722CDE0:lI105|H10722F2A8 +10722F2A8:lI110|H107231450 +107231450:lI102|H1072332E8 +1072332E8:lI111|H107234EC0 +107234EC0:lI46|H107236818 +107236818:lI98|H107237F50 +107237F50:lI101|H107239488 +107239488:lI97|H10723A8B0 +10723A8B0:lI109|N +10720E5E8:lI111|H107211778 +107211778:lI115|H1072149C8 +1072149C8:lI95|H107217D50 +107217D50:lI109|H10721B240 +10721B240:lI111|H10721E790 +10721E790:lI110|H107221C50 +107221C50:lI95|H107224DF8 +107224DF8:lI109|H107227C50 +107227C50:lI105|H10722A6A8 +10722A6A8:lI98|H10722CDD0 +10722CDD0:lI46|H10722F298 +10722F298:lI98|H107231440 +107231440:lI101|H1072332D8 +1072332D8:lI97|H107234EB0 +107234EB0:lI109|N +10720E5D8:lI111|H107211768 +107211768:lI115|H1072149B8 +1072149B8:lI95|H107217D40 +107217D40:lI109|H10721B230 +10721B230:lI111|H10721E780 +10721E780:lI110|H107221C40 +107221C40:lI46|H107224DE8 +107224DE8:lI98|H107227C40 +107227C40:lI101|H10722A698 +10722A698:lI97|H10722CDC0 +10722CDC0:lI109|N +10720E5C8:lI111|H107211758 +107211758:lI115|H1072149A8 +1072149A8:lI95|H107217D30 +107217D30:lI109|H10721B220 +10721B220:lI111|H10721E770 +10721E770:lI110|H107221C30 +107221C30:lI46|H107224DD8 +107224DD8:lI97|H107227C30 +107227C30:lI112|H10722A688 +10722A688:lI112|H10722CDB0 +10722CDB0:lI117|H10722F288 +10722F288:lI112|N +10720E5B8:lI111|H107211748 +107211748:lI115|H107214998 +107214998:lI95|H107217D20 +107217D20:lI109|H10721B210 +10721B210:lI111|H10721E760 +10721E760:lI110|H107221C20 +107221C20:lI46|H107224DC8 +107224DC8:lI97|H107227C20 +107227C20:lI112|H10722A678 +10722A678:lI112|N +10720E5A8:lI110|H107211738 +107211738:lI116|H107214988 +107214988:lI101|H107217D10 +107217D10:lI118|H10721B200 +10721B200:lI101|H10721E750 +10721E750:lI110|H107221C10 +107221C10:lI116|H107224DB8 +107224DB8:lI108|H107227C10 +107227C10:lI111|H10722A668 +10722A668:lI103|H10722CDA0 +10722CDA0:lI46|H10722F278 +10722F278:lI98|H107231430 +107231430:lI101|H1072332C8 +1072332C8:lI97|H107234EA0 +107234EA0:lI109|N +10720E598:lI109|H107211728 +107211728:lI101|H107214978 +107214978:lI109|H107217D00 +107217D00:lI115|H10721B1F0 +10721B1F0:lI117|H10721E740 +10721E740:lI112|H107221C00 +107221C00:lI46|H107224DA8 +107224DA8:lI98|H107227C00 +107227C00:lI101|H10722A658 +10722A658:lI97|H10722CD90 +10722CD90:lI109|N +10720E588:lI100|H107211718 +107211718:lI105|H107214968 +107214968:lI115|H107217CF0 +107217CF0:lI107|H10721B1E0 +10721B1E0:lI115|H10721E730 +10721E730:lI117|H107221BF0 +107221BF0:lI112|H107224D98 +107224D98:lI46|H107227BF0 +107227BF0:lI98|H10722A648 +10722A648:lI101|H10722CD80 +10722CD80:lI97|H10722F268 +10722F268:lI109|N +10720E578:lI99|H107211708 +107211708:lI112|H107214958 +107214958:lI117|H107217CE0 +107217CE0:lI95|H10721B1D0 +10721B1D0:lI115|H10721E720 +10721E720:lI117|H107221BE0 +107221BE0:lI112|H107224D88 +107224D88:lI46|H107227BE0 +107227BE0:lI98|H10722A638 +10722A638:lI101|H10722CD70 +10722CD70:lI97|H10722F258 +10722F258:lI109|N +1072080D8:lI47|H10720B378 +10720B378:lI111|H10720E568 +10720E568:lI112|H1072116F8 +1072116F8:lI116|H107214948 +107214948:lI47|H107217CD0 +107217CD0:lI104|H10721B1C0 +10721B1C0:lI111|H10721E710 +10721E710:lI109|H107221BD0 +107221BD0:lI101|H107224D78 +107224D78:lI98|H107227BD0 +107227BD0:lI114|H10722A628 +10722A628:lI101|H10722CD60 +10722CD60:lI119|H10722F248 +10722F248:lI47|H107231420 +107231420:lI67|H1072332B8 +1072332B8:lI101|H107234E90 +107234E90:lI108|H107236808 +107236808:lI108|H107237F40 +107237F40:lI97|H107239478 +107239478:lI114|H10723A8A0 +10723A8A0:lI47|H10723BAC0 +10723BAC0:lI101|H10723CAD0 +10723CAD0:lI114|H10723D930 +10723D930:lI108|H10723E620 +10723E620:lI97|H10723F200 +10723F200:lI110|H10723FC90 +10723FC90:lI103|H1072405D0 +1072405D0:lI47|H107240E40 +107240E40:lI50|H1072415D0 +1072415D0:lI54|H107241CF0 +107241CF0:lI46|H1072423B0 +1072423B0:lI48|H107242A10 +107242A10:lI46|H107242FF0 +107242FF0:lI50|H107243560 +107243560:lI47|H107243AA0 +107243AA0:lI108|H107243F90 +107243F90:lI105|H107244480 +107244480:lI98|H107244930 +107244930:lI47|H107244DA0 +107244DA0:lI101|H107245200 +107245200:lI114|H107245650 +107245650:lI108|H107245A50 +107245A50:lI97|H107245E00 +107245E00:lI110|H107246190 +107246190:lI103|H107246520 +107246520:lI47|H1072468B0 +1072468B0:lI108|H107246C40 +107246C40:lI105|H107246F70 +107246F70:lI98|H107247290 +107247290:lI47|H1072475A0 +1072475A0:lI111|H1072478A0 +1072478A0:lI115|H107247BA0 +107247BA0:lI95|H107247E80 +107247E80:lI109|H107248140 +107248140:lI111|H107248400 +107248400:lI110|H1072486B0 +1072486B0:lI45|H107248960 +107248960:lI50|H107248BE0 +107248BE0:lI46|H107248E50 +107248E50:lI57|H1072490C0 +1072490C0:lI47|H280052C20 +107204E70:lH107208150|H107208168 +107208150:t2:H10720B3E0,H10720B3F0 +10720B3F0:Mf5:H10720E628:N,N,N,N,N +10720E628:t5:H1072117B8,H1072117C8,H1072117D8,H1072117E8,H1072117F8 +1072117F8:lI111|H107214A48 +107214A48:lI100|H107217DD0 +107217DD0:lI98|H10721B2C0 +10721B2C0:lI99|H10721E810 +10721E810:lI95|H107221CD0 +107221CD0:lI115|H107224E78 +107224E78:lI117|H107227CD0 +107227CD0:lI112|H10722A718 +10722A718:lI46|H10722CE30 +10722CE30:lI98|H10722F2D8 +10722F2D8:lI101|H107231480 +107231480:lI97|H107233318 +107233318:lI109|N +1072117E8:lI111|H107214A38 +107214A38:lI100|H107217DC0 +107217DC0:lI98|H10721B2B0 +10721B2B0:lI99|H10721E800 +10721E800:lI95|H107221CC0 +107221CC0:lI97|H107224E68 +107224E68:lI112|H107227CC0 +107227CC0:lI112|H10722A708 +10722A708:lI46|H10722CE20 +10722CE20:lI98|H10722F2C8 +10722F2C8:lI101|H107231470 +107231470:lI97|H107233308 +107233308:lI109|N +1072117D8:lI111|H107214A28 +107214A28:lI100|H107217DB0 +107217DB0:lI98|H10721B2A0 +10721B2A0:lI99|H10721E7F0 +10721E7F0:lI46|H107221CB0 +107221CB0:lI98|H107224E58 +107224E58:lI101|H107227CB0 +107227CB0:lI97|H10722A6F8 +10722A6F8:lI109|N +1072117C8:lI111|H107214A18 +107214A18:lI100|H107217DA0 +107217DA0:lI98|H10721B290 +10721B290:lI99|H10721E7E0 +10721E7E0:lI46|H107221CA0 +107221CA0:lI97|H107224E48 +107224E48:lI112|H107227CA0 +107227CA0:lI112|H10722A6E8 +10722A6E8:lI117|H10722CE10 +10722CE10:lI112|N +1072117B8:lI111|H107214A08 +107214A08:lI100|H107217D90 +107217D90:lI98|H10721B280 +10721B280:lI99|H10721E7D0 +10721E7D0:lI46|H107221C90 +107221C90:lI97|H107224E38 +107224E38:lI112|H107227C90 +107227C90:lI112|N +10720B3E0:lI47|H10720E618 +10720E618:lI111|H1072117A8 +1072117A8:lI112|H1072149F8 +1072149F8:lI116|H107217D80 +107217D80:lI47|H10721B270 +10721B270:lI104|H10721E7C0 +10721E7C0:lI111|H107221C80 +107221C80:lI109|H107224E28 +107224E28:lI101|H107227C80 +107227C80:lI98|H10722A6D8 +10722A6D8:lI114|H10722CE00 +10722CE00:lI101|H10722F2B8 +10722F2B8:lI119|H107231460 +107231460:lI47|H1072332F8 +1072332F8:lI67|H107234ED0 +107234ED0:lI101|H107236828 +107236828:lI108|H107237F60 +107237F60:lI108|H107239498 +107239498:lI97|H10723A8C0 +10723A8C0:lI114|H10723BAD0 +10723BAD0:lI47|H10723CAE0 +10723CAE0:lI101|H10723D940 +10723D940:lI114|H10723E630 +10723E630:lI108|H10723F210 +10723F210:lI97|H10723FCA0 +10723FCA0:lI110|H1072405E0 +1072405E0:lI103|H107240E50 +107240E50:lI47|H1072415E0 +1072415E0:lI50|H107241D00 +107241D00:lI54|H1072423C0 +1072423C0:lI46|H107242A20 +107242A20:lI48|H107243000 +107243000:lI46|H107243570 +107243570:lI50|H107243AB0 +107243AB0:lI47|H107243FA0 +107243FA0:lI108|H107244490 +107244490:lI105|H107244940 +107244940:lI98|H107244DB0 +107244DB0:lI47|H107245210 +107245210:lI101|H107245660 +107245660:lI114|H107245A60 +107245A60:lI108|H107245E10 +107245E10:lI97|H1072461A0 +1072461A0:lI110|H107246530 +107246530:lI103|H1072468C0 +1072468C0:lI47|H107246C50 +107246C50:lI108|H107246F80 +107246F80:lI105|H1072472A0 +1072472A0:lI98|H1072475B0 +1072475B0:lI47|H1072478B0 +1072478B0:lI111|H107247BB0 +107247BB0:lI100|H107247E90 +107247E90:lI98|H107248150 +107248150:lI99|H107248410 +107248410:lI45|H1072486C0 +1072486C0:lI50|H107248970 +107248970:lI46|H107248BF0 +107248BF0:lI49|H107248E60 +107248E60:lI52|H1072490D0 +1072490D0:lI46|H107249330 +107249330:lI49|H107249590 +107249590:lI47|H280052C20 +107208168:lH10720B430|H10720B448 +10720B430:t2:H10720E658,H10720E668 +10720E668:Mh2E:F:H107211818,H107211830,H107211848,H107211878,H107211890,H1072118B0,H1072118C0,H107211900,H107211918,H107211930,H107211940,H107211958,H107211988,H1072119A8,H1072119C0 +107211818:Mn2:H107214A68,H107214A78 +107214A68:lH107217DF0|N +107217DF0:lI99|H10721B2E0 +10721B2E0:lI100|H10721E830 +10721E830:lI118|H107221CF0 +107221CF0:lI95|H107224E98 +107224E98:lI112|H107227CF0 +107227CF0:lI111|H10722A738 +10722A738:lI114|H10722CE50 +10722CE50:lI116|H10722F2F8 +10722F2F8:lI95|H1072314A0 +1072314A0:lI99|H107233338 +107233338:lI98|H107234EF0 +107234EF0:lI46|H107236848 +107236848:lI98|H107237F80 +107237F80:lI101|H1072394B8 +1072394B8:lI97|H10723A8E0 +10723A8E0:lI109|N +107214A78:lH107217E00|N +107217E00:lI99|H10721B2F0 +10721B2F0:lI100|H10721E840 +10721E840:lI118|H107221D00 +107221D00:lI95|H107224EA8 +107224EA8:lI109|H107227D00 +107227D00:lI111|H10722A748 +10722A748:lI100|H10722CE60 +10722CE60:lI95|H10722F308 +10722F308:lI99|H1072314B0 +1072314B0:lI98|H107233348 +107233348:lI46|H107234F00 +107234F00:lI98|H107236858 +107236858:lI101|H107237F90 +107237F90:lI97|H1072394C8 +1072394C8:lI109|N +1072119C0:Mn2:H107214CF0,H107214D10 +107214CF0:Mn3:H107218090,H1072180A0,H1072180B0 +107218090:lH10721B580|N +10721B580:lI99|H10721EAD0 +10721EAD0:lI100|H107221F90 +107221F90:lI118|H107225138 +107225138:lI95|H107227F90 +107227F90:lI112|H10722A9D8 +10722A9D8:lI101|H10722D0F0 +10722D0F0:lI114|H10722F588 +10722F588:lI115|H107231720 +107231720:lI105|H1072335B8 +1072335B8:lI115|H107235150 +107235150:lI116|H107236A98 +107236A98:lI101|H1072381A0 +1072381A0:lI110|H1072396B8 +1072396B8:lI116|H10723AA90 +10723AA90:lI95|H10723BC30 +10723BC30:lI99|H10723CC00 +10723CC00:lI98|H10723DA40 +10723DA40:lI46|H10723E720 +10723E720:lI98|H10723F2D0 +10723F2D0:lI101|H10723FD30 +10723FD30:lI97|H107240630 +107240630:lI109|N +1072180B0:lH10721B5A0|N +10721B5A0:lI111|H10721EAF0 +10721EAF0:lI98|H107221FB0 +107221FB0:lI115|H107225158 +107225158:lI101|H107227FB0 +107227FB0:lI114|H10722A9F8 +10722A9F8:lI118|H10722D110 +10722D110:lI101|H10722F5A8 +10722F5A8:lI114|H107231740 +107231740:lI95|H1072335D8 +1072335D8:lI97|H107235170 +107235170:lI108|H107236AB8 +107236AB8:lI108|H1072381C0 +1072381C0:lI111|H1072396D8 +1072396D8:lI99|H10723AAB0 +10723AAB0:lI95|H10723BC50 +10723BC50:lI119|H10723CC20 +10723CC20:lI120|H10723DA50 +10723DA50:lI46|H10723E730 +10723E730:lI98|H10723F2E0 +10723F2E0:lI101|H10723FD40 +10723FD40:lI97|H107240640 +107240640:lI109|N +1072180A0:lH10721B590|N +10721B590:lI99|H10721EAE0 +10721EAE0:lI100|H107221FA0 +107221FA0:lI118|H107225148 +107225148:lI95|H107227FA0 +107227FA0:lI109|H10722A9E8 +10722A9E8:lI117|H10722D100 +10722D100:lI108|H10722F598 +10722F598:lI116|H107231730 +107231730:lI105|H1072335C8 +1072335C8:lI95|H107235160 +107235160:lI119|H107236AA8 +107236AA8:lI120|H1072381B0 +1072381B0:lI46|H1072396C8 +1072396C8:lI98|H10723AAA0 +10723AAA0:lI101|H10723BC40 +10723BC40:lI97|H10723CC10 +10723CC10:lI109|N +107214D10:lH1072180C0|N +1072180C0:lI111|H10721B5B0 +10721B5B0:lI98|H10721EB00 +10721EB00:lI115|H107221FC0 +107221FC0:lI101|H107225168 +107225168:lI114|H107227FC0 +107227FC0:lI118|H10722AA08 +10722AA08:lI101|H10722D120 +10722D120:lI114|H10722F5B8 +10722F5B8:lI95|H107231750 +107231750:lI116|H1072335E8 +1072335E8:lI118|H107235180 +107235180:lI95|H107236AC8 +107236AC8:lI119|H1072381D0 +1072381D0:lI120|H1072396E8 +1072396E8:lI46|H10723AAC0 +10723AAC0:lI98|H10723BC60 +10723BC60:lI101|H10723CC30 +10723CC30:lI97|H10723DA60 +10723DA60:lI109|N +1072119A8:Mn2:H107214CD0,H107214CE0 +107214CD0:lH107218070|N +107218070:lI111|H10721B560 +10721B560:lI98|H10721EAB0 +10721EAB0:lI115|H107221F70 +107221F70:lI101|H107225118 +107225118:lI114|H107227F70 +107227F70:lI118|H10722A9B8 +10722A9B8:lI101|H10722D0D0 +10722D0D0:lI114|H10722F568 +10722F568:lI95|H107231700 +107231700:lI104|H107233598 +107233598:lI116|H107235130 +107235130:lI109|H107236A78 +107236A78:lI108|H107238180 +107238180:lI95|H107239698 +107239698:lI108|H10723AA80 +10723AA80:lI105|H10723BC20 +10723BC20:lI98|H10723CBF0 +10723CBF0:lI46|H10723DA30 +10723DA30:lI98|H10723E710 +10723E710:lI101|H10723F2C0 +10723F2C0:lI97|H10723FD20 +10723FD20:lI109|N +107214CE0:lH107218080|N +107218080:lI99|H10721B570 +10721B570:lI100|H10721EAC0 +10721EAC0:lI118|H107221F80 +107221F80:lI95|H107225128 +107225128:lI103|H107227F80 +107227F80:lI101|H10722A9C8 +10722A9C8:lI110|H10722D0E0 +10722D0E0:lI95|H10722F578 +10722F578:lI99|H107231710 +107231710:lI98|H1072335A8 +1072335A8:lI46|H107235140 +107235140:lI98|H107236A88 +107236A88:lI101|H107238190 +107238190:lI97|H1072396A8 +1072396A8:lI109|N +107211988:Mn3:H107214C98,H107214CA8,H107214CB8 +107214C98:lH107218030|N +107218030:lI111|H10721B520 +10721B520:lI98|H10721EA70 +10721EA70:lI115|H107221F30 +107221F30:lI101|H1072250D8 +1072250D8:lI114|H107227F30 +107227F30:lI118|H10722A978 +10722A978:lI101|H10722D090 +10722D090:lI114|H10722F528 +10722F528:lI46|H1072316C0 +1072316C0:lI98|H107233558 +107233558:lI101|H1072350F0 +1072350F0:lI97|H107236A38 +107236A38:lI109|N +107214CB8:Mn2:H107218050,H107218060 +107218050:lH10721B540|N +10721B540:lI111|H10721EA90 +10721EA90:lI98|H107221F50 +107221F50:lI115|H1072250F8 +1072250F8:lI101|H107227F50 +107227F50:lI114|H10722A998 +10722A998:lI118|H10722D0B0 +10722D0B0:lI101|H10722F548 +10722F548:lI114|H1072316E0 +1072316E0:lI95|H107233578 +107233578:lI116|H107235110 +107235110:lI114|H107236A58 +107236A58:lI97|H107238170 +107238170:lI99|H107239688 +107239688:lI101|H10723AA70 +10723AA70:lI111|H10723BC10 +10723BC10:lI112|H10723CBE0 +10723CBE0:lI116|H10723DA20 +10723DA20:lI105|H10723E700 +10723E700:lI111|H10723F2B0 +10723F2B0:lI110|H10723FD10 +10723FD10:lI115|H107240620 +107240620:lI95|H107240E80 +107240E80:lI119|H107241600 +107241600:lI120|H107241D20 +107241D20:lI46|H1072423E0 +1072423E0:lI98|H107242A40 +107242A40:lI101|H107243020 +107243020:lI97|H107243590 +107243590:lI109|N +107218060:lH10721B550|N +10721B550:lI111|H10721EAA0 +10721EAA0:lI98|H107221F60 +107221F60:lI115|H107225108 +107225108:lI101|H107227F60 +107227F60:lI114|H10722A9A8 +10722A9A8:lI118|H10722D0C0 +10722D0C0:lI101|H10722F558 +10722F558:lI114|H1072316F0 +1072316F0:lI46|H107233588 +107233588:lI97|H107235120 +107235120:lI112|H107236A68 +107236A68:lI112|N +107214CA8:lH107218040|N +107218040:lI101|H10721B530 +10721B530:lI116|H10721EA80 +10721EA80:lI111|H107221F40 +107221F40:lI112|H1072250E8 +1072250E8:lI95|H107227F40 +107227F40:lI116|H10722A988 +10722A988:lI120|H10722D0A0 +10722D0A0:lI116|H10722F538 +10722F538:lI46|H1072316D0 +1072316D0:lI98|H107233568 +107233568:lI101|H107235100 +107235100:lI97|H107236A48 +107236A48:lI109|N +107211958:Mn5:H107214C48,H107214C58,H107214C68,H107214C78,H107214C88 +107214C48:lH107217FE0|N +107217FE0:lI99|H10721B4D0 +10721B4D0:lI100|H10721EA20 +10721EA20:lI118|H107221EE0 +107221EE0:lI95|H107225088 +107225088:lI112|H107227EE0 +107227EE0:lI114|H10722A928 +10722A928:lI111|H10722D040 +10722D040:lI99|H10722F4D8 +10722F4D8:lI95|H107231680 +107231680:lI99|H107233518 +107233518:lI98|H1072350B0 +1072350B0:lI46|H1072369F8 +1072369F8:lI98|H107238130 +107238130:lI101|H107239648 +107239648:lI97|H10723AA30 +10723AA30:lI109|N +107214C88:lH107218020|N +107218020:lI111|H10721B510 +10721B510:lI98|H10721EA60 +10721EA60:lI115|H107221F20 +107221F20:lI101|H1072250C8 +1072250C8:lI114|H107227F20 +107227F20:lI118|H10722A968 +10722A968:lI101|H10722D080 +10722D080:lI114|H10722F518 +10722F518:lI95|H1072316B0 +1072316B0:lI116|H107233548 +107233548:lI118|H1072350E0 +1072350E0:lI95|H107236A28 +107236A28:lI116|H107238160 +107238160:lI97|H107239678 +107239678:lI98|H10723AA60 +10723AA60:lI108|H10723BC00 +10723BC00:lI101|H10723CBD0 +10723CBD0:lI46|H10723DA10 +10723DA10:lI98|H10723E6F0 +10723E6F0:lI101|H10723F2A0 +10723F2A0:lI97|H10723FD00 +10723FD00:lI109|N +107214C78:lH107218010|N +107218010:lI111|H10721B500 +10721B500:lI98|H10721EA50 +10721EA50:lI115|H107221F10 +107221F10:lI101|H1072250B8 +1072250B8:lI114|H107227F10 +107227F10:lI118|H10722A958 +10722A958:lI101|H10722D070 +10722D070:lI114|H10722F508 +10722F508:lI95|H1072316A0 +1072316A0:lI115|H107233538 +107233538:lI121|H1072350D0 +1072350D0:lI115|H107236A18 +107236A18:lI95|H107238150 +107238150:lI119|H107239668 +107239668:lI120|H10723AA50 +10723AA50:lI46|H10723BBF0 +10723BBF0:lI98|H10723CBC0 +10723CBC0:lI101|H10723DA00 +10723DA00:lI97|H10723E6E0 +10723E6E0:lI109|N +107214C68:lH107218000|N +107218000:lI99|H10721B4F0 +10721B4F0:lI100|H10721EA40 +10721EA40:lI118|H107221F00 +107221F00:lI95|H1072250A8 +1072250A8:lI118|H107227F00 +107227F00:lI105|H10722A948 +10722A948:lI114|H10722D060 +10722D060:lI116|H10722F4F8 +10722F4F8:lI117|H107231690 +107231690:lI97|H107233528 +107233528:lI108|H1072350C0 +1072350C0:lI95|H107236A08 +107236A08:lI108|H107238140 +107238140:lI105|H107239658 +107239658:lI115|H10723AA40 +10723AA40:lI116|H10723BBE0 +10723BBE0:lI95|H10723CBB0 +10723CBB0:lI119|H10723D9F0 +10723D9F0:lI120|H10723E6D0 +10723E6D0:lI46|H10723F290 +10723F290:lI98|H10723FCF0 +10723FCF0:lI101|H107240610 +107240610:lI97|H107240E70 +107240E70:lI109|N +107214C58:lH107217FF0|N +107217FF0:lI101|H10721B4E0 +10721B4E0:lI116|H10721EA30 +10721EA30:lI111|H107221EF0 +107221EF0:lI112|H107225098 +107225098:lI46|H107227EF0 +107227EF0:lI98|H10722A938 +10722A938:lI101|H10722D050 +10722D050:lI97|H10722F4E8 +10722F4E8:lI109|N +107211940:Mn2:H107214C20,H107214C38 +107214C20:Mn2:H107217FB0,H107217FC0 +107217FB0:lH10721B4A0|N +10721B4A0:lI111|H10721E9F0 +10721E9F0:lI98|H107221EB0 +107221EB0:lI115|H107225058 +107225058:lI101|H107227EB0 +107227EB0:lI114|H10722A8F8 +10722A8F8:lI118|H10722D010 +10722D010:lI101|H10722F4A8 +10722F4A8:lI114|H107231650 +107231650:lI95|H1072334E8 +1072334E8:lI119|H107235080 +107235080:lI120|H1072369C8 +1072369C8:lI46|H107238100 +107238100:lI98|H107239618 +107239618:lI101|H10723AA00 +10723AA00:lI97|H10723BBB0 +10723BBB0:lI109|N +107217FC0:lH10721B4B0|N +10721B4B0:lI99|H10721EA00 +10721EA00:lI100|H107221EC0 +107221EC0:lI118|H107225068 +107225068:lI95|H107227EC0 +107227EC0:lI116|H10722A908 +10722A908:lI97|H10722D020 +10722D020:lI98|H10722F4B8 +10722F4B8:lI108|H107231660 +107231660:lI101|H1072334F8 +1072334F8:lI95|H107235090 +107235090:lI119|H1072369D8 +1072369D8:lI120|H107238110 +107238110:lI46|H107239628 +107239628:lI98|H10723AA10 +10723AA10:lI101|H10723BBC0 +10723BBC0:lI97|H10723CB90 +10723CB90:lI109|N +107214C38:lH107217FD0|N +107217FD0:lI111|H10721B4C0 +10721B4C0:lI98|H10721EA10 +10721EA10:lI115|H107221ED0 +107221ED0:lI101|H107225078 +107225078:lI114|H107227ED0 +107227ED0:lI118|H10722A918 +10722A918:lI101|H10722D030 +10722D030:lI114|H10722F4C8 +10722F4C8:lI95|H107231670 +107231670:lI116|H107233508 +107233508:lI114|H1072350A0 +1072350A0:lI97|H1072369E8 +1072369E8:lI99|H107238120 +107238120:lI101|H107239638 +107239638:lI95|H10723AA20 +10723AA20:lI119|H10723BBD0 +10723BBD0:lI120|H10723CBA0 +10723CBA0:lI46|H10723D9E0 +10723D9E0:lI98|H10723E6C0 +10723E6C0:lI101|H10723F280 +10723F280:lI97|H10723FCE0 +10723FCE0:lI109|N +107211930:Mn1:H107214C08 +107214C08:Mn2:H107217F90,H107217FA0 +107217F90:lH10721B480|N +10721B480:lI111|H10721E9D0 +10721E9D0:lI98|H107221E90 +107221E90:lI115|H107225038 +107225038:lI101|H107227E90 +107227E90:lI114|H10722A8D8 +10722A8D8:lI118|H10722CFF0 +10722CFF0:lI101|H10722F488 +10722F488:lI114|H107231630 +107231630:lI95|H1072334C8 +1072334C8:lI112|H107235060 +107235060:lI114|H1072369A8 +1072369A8:lI111|H1072380E0 +1072380E0:lI99|H1072395F8 +1072395F8:lI105|H10723A9E0 +10723A9E0:lI110|H10723BB90 +10723BB90:lI102|H10723CB70 +10723CB70:lI111|H10723D9C0 +10723D9C0:lI46|H10723E6A0 +10723E6A0:lI98|H10723F260 +10723F260:lI101|H10723FCC0 +10723FCC0:lI97|H107240600 +107240600:lI109|N +107217FA0:lH10721B490|N +10721B490:lI111|H10721E9E0 +10721E9E0:lI98|H107221EA0 +107221EA0:lI115|H107225048 +107225048:lI101|H107227EA0 +107227EA0:lI114|H10722A8E8 +10722A8E8:lI118|H10722D000 +10722D000:lI101|H10722F498 +10722F498:lI114|H107231640 +107231640:lI95|H1072334D8 +1072334D8:lI112|H107235070 +107235070:lI101|H1072369B8 +1072369B8:lI114|H1072380F0 +1072380F0:lI102|H107239608 +107239608:lI95|H10723A9F0 +10723A9F0:lI119|H10723BBA0 +10723BBA0:lI120|H10723CB80 +10723CB80:lI46|H10723D9D0 +10723D9D0:lI98|H10723E6B0 +10723E6B0:lI101|H10723F270 +10723F270:lI97|H10723FCD0 +10723FCD0:lI109|N +107211918:Mn2:H107214BE8,H107214BF8 +107214BE8:lH107217F70|N +107217F70:lI111|H10721B460 +10721B460:lI98|H10721E9B0 +10721E9B0:lI115|H107221E70 +107221E70:lI101|H107225018 +107225018:lI114|H107227E70 +107227E70:lI118|H10722A8B8 +10722A8B8:lI101|H10722CFD0 +10722CFD0:lI114|H10722F468 +10722F468:lI95|H107231610 +107231610:lI112|H1072334A8 +1072334A8:lI114|H107235040 +107235040:lI111|H107236988 +107236988:lI95|H1072380C0 +1072380C0:lI119|H1072395D8 +1072395D8:lI120|H10723A9C0 +10723A9C0:lI46|H10723BB80 +10723BB80:lI98|H10723CB60 +10723CB60:lI101|H10723D9B0 +10723D9B0:lI97|H10723E690 +10723E690:lI109|N +107214BF8:lH107217F80|N +107217F80:lI99|H10721B470 +10721B470:lI100|H10721E9C0 +10721E9C0:lI118|H107221E80 +107221E80:lI95|H107225028 +107225028:lI100|H107227E80 +107227E80:lI105|H10722A8C8 +10722A8C8:lI115|H10722CFE0 +10722CFE0:lI116|H10722F478 +10722F478:lI95|H107231620 +107231620:lI99|H1072334B8 +1072334B8:lI98|H107235050 +107235050:lI46|H107236998 +107236998:lI98|H1072380D0 +1072380D0:lI101|H1072395E8 +1072395E8:lI97|H10723A9D0 +10723A9D0:lI109|N +107211900:Mn2:H107214BC8,H107214BD8 +107214BC8:lH107217F50|N +107217F50:lI116|H10721B440 +10721B440:lI116|H10721E990 +10721E990:lI98|H107221E50 +107221E50:lI46|H107224FF8 +107224FF8:lI98|H107227E50 +107227E50:lI101|H10722A898 +10722A898:lI97|H10722CFB0 +10722CFB0:lI109|N +107214BD8:lH107217F60|N +107217F60:lI111|H10721B450 +10721B450:lI98|H10721E9A0 +10721E9A0:lI115|H107221E60 +107221E60:lI101|H107225008 +107225008:lI114|H107227E60 +107227E60:lI118|H10722A8A8 +10722A8A8:lI101|H10722CFC0 +10722CFC0:lI114|H10722F458 +10722F458:lI95|H107231600 +107231600:lI115|H107233498 +107233498:lI111|H107235030 +107235030:lI99|H107236978 +107236978:lI107|H1072380B0 +1072380B0:lI95|H1072395C8 +1072395C8:lI119|H10723A9B0 +10723A9B0:lI120|H10723BB70 +10723BB70:lI46|H10723CB50 +10723CB50:lI98|H10723D9A0 +10723D9A0:lI101|H10723E680 +10723E680:lI97|H10723F250 +10723F250:lI109|N +1072118C0:Mn7:H107214B58,H107214B68,H107214B78,H107214B88,H107214B98,H107214BA8,H107214BB8 +107214B58:lH107217EE0|N +107217EE0:lI99|H10721B3D0 +10721B3D0:lI100|H10721E920 +10721E920:lI118|H107221DE0 +107221DE0:lI95|H107224F88 +107224F88:lI119|H107227DE0 +107227DE0:lI120|H10722A828 +10722A828:lI46|H10722CF40 +10722CF40:lI98|H10722F3E8 +10722F3E8:lI101|H107231590 +107231590:lI97|H107233428 +107233428:lI109|N +107214BB8:lH107217F40|N +107217F40:lI99|H10721B430 +10721B430:lI100|H10721E980 +10721E980:lI118|H107221E40 +107221E40:lI95|H107224FE8 +107224FE8:lI105|H107227E40 +107227E40:lI110|H10722A888 +10722A888:lI102|H10722CFA0 +10722CFA0:lI111|H10722F448 +10722F448:lI95|H1072315F0 +1072315F0:lI119|H107233488 +107233488:lI120|H107235020 +107235020:lI46|H107236968 +107236968:lI98|H1072380A0 +1072380A0:lI101|H1072395B8 +1072395B8:lI97|H10723A9A0 +10723A9A0:lI109|N +107214BA8:lH107217F30|N +107217F30:lI111|H10721B420 +10721B420:lI98|H10721E970 +10721E970:lI115|H107221E30 +107221E30:lI101|H107224FD8 +107224FD8:lI114|H107227E30 +107227E30:lI118|H10722A878 +10722A878:lI101|H10722CF90 +10722CF90:lI114|H10722F438 +10722F438:lI46|H1072315E0 +1072315E0:lI97|H107233478 +107233478:lI112|H107235010 +107235010:lI112|H107236958 +107236958:lI117|H107238090 +107238090:lI112|N +107214B98:lH107217F20|N +107217F20:lI99|H10721B410 +10721B410:lI100|H10721E960 +10721E960:lI118|H107221E20 +107221E20:lI95|H107224FC8 +107224FC8:lI105|H107227E20 +107227E20:lI110|H10722A868 +10722A868:lI116|H10722CF80 +10722CF80:lI95|H10722F428 +10722F428:lI116|H1072315D0 +1072315D0:lI97|H107233468 +107233468:lI98|H107235000 +107235000:lI95|H107236948 +107236948:lI99|H107238080 +107238080:lI98|H1072395A8 +1072395A8:lI46|H10723A990 +10723A990:lI98|H10723BB60 +10723BB60:lI101|H10723CB40 +10723CB40:lI97|H10723D990 +10723D990:lI109|N +107214B88:lH107217F10|N +107217F10:lI99|H10721B400 +10721B400:lI100|H10721E950 +10721E950:lI118|H107221E10 +107221E10:lI95|H107224FB8 +107224FB8:lI116|H107227E10 +107227E10:lI105|H10722A858 +10722A858:lI109|H10722CF70 +10722CF70:lI101|H10722F418 +10722F418:lI114|H1072315C0 +1072315C0:lI95|H107233458 +107233458:lI99|H107234FF0 +107234FF0:lI98|H107236938 +107236938:lI46|H107238070 +107238070:lI98|H107239598 +107239598:lI101|H10723A980 +10723A980:lI97|H10723BB50 +10723BB50:lI109|N +107214B78:lH107217F00|N +107217F00:lI99|H10721B3F0 +10721B3F0:lI114|H10721E940 +10721E940:lI97|H107221E00 +107221E00:lI115|H107224FA8 +107224FA8:lI104|H107227E00 +107227E00:lI100|H10722A848 +10722A848:lI117|H10722CF60 +10722CF60:lI109|H10722F408 +10722F408:lI112|H1072315B0 +1072315B0:lI95|H107233448 +107233448:lI118|H107234FE0 +107234FE0:lI105|H107236928 +107236928:lI101|H107238060 +107238060:lI119|H107239588 +107239588:lI101|H10723A970 +10723A970:lI114|H10723BB40 +10723BB40:lI46|H10723CB30 +10723CB30:lI98|H10723D980 +10723D980:lI101|H10723E670 +10723E670:lI97|H10723F240 +10723F240:lI109|N +107214B68:lH107217EF0|N +107217EF0:lI99|H10721B3E0 +10721B3E0:lI100|H10721E930 +10721E930:lI118|H107221DF0 +107221DF0:lI95|H107224F98 +107224F98:lI115|H107227DF0 +107227DF0:lI99|H10722A838 +10722A838:lI104|H10722CF50 +10722CF50:lI101|H10722F3F8 +10722F3F8:lI100|H1072315A0 +1072315A0:lI95|H107233438 +107233438:lI99|H107234FD0 +107234FD0:lI98|H107236918 +107236918:lI46|H107238050 +107238050:lI98|H107239578 +107239578:lI101|H10723A960 +10723A960:lI97|H10723BB30 +10723BB30:lI109|N +1072118B0:lH107214B48|N +107214B48:lI99|H107217ED0 +107217ED0:lI100|H10721B3C0 +10721B3C0:lI118|H10721E910 +10721E910:lI95|H107221DD0 +107221DD0:lI109|H107224F78 +107224F78:lI101|H107227DD0 +107227DD0:lI109|H10722A818 +10722A818:lI95|H10722CF30 +10722CF30:lI99|H10722F3D8 +10722F3D8:lI98|H107231580 +107231580:lI46|H107233418 +107233418:lI98|H107234FC0 +107234FC0:lI101|H107236908 +107236908:lI97|H107238040 +107238040:lI109|N +107211890:Mn3:H107214B18,H107214B28,H107214B38 +107214B18:lH107217EA0|N +107217EA0:lI111|H10721B390 +10721B390:lI98|H10721E8E0 +10721E8E0:lI115|H107221DA0 +107221DA0:lI101|H107224F48 +107224F48:lI114|H107227DA0 +107227DA0:lI118|H10722A7E8 +10722A7E8:lI101|H10722CF00 +10722CF00:lI114|H10722F3A8 +10722F3A8:lI95|H107231550 +107231550:lI112|H1072333E8 +1072333E8:lI111|H107234FA0 +107234FA0:lI114|H1072368E8 +1072368E8:lI116|H107238020 +107238020:lI95|H107239558 +107239558:lI119|H10723A940 +10723A940:lI120|H10723BB20 +10723BB20:lI46|H10723CB20 +10723CB20:lI98|H10723D970 +10723D970:lI101|H10723E660 +10723E660:lI97|H10723F230 +10723F230:lI109|N +107214B38:lH107217EC0|N +107217EC0:lI116|H10721B3B0 +10721B3B0:lI116|H10721E900 +10721E900:lI98|H107221DC0 +107221DC0:lI95|H107224F68 +107224F68:lI101|H107227DC0 +107227DC0:lI116|H10722A808 +10722A808:lI46|H10722CF20 +10722CF20:lI98|H10722F3C8 +10722F3C8:lI101|H107231570 +107231570:lI97|H107233408 +107233408:lI109|N +107214B28:lH107217EB0|N +107217EB0:lI99|H10721B3A0 +10721B3A0:lI100|H10721E8F0 +10721E8F0:lI118|H107221DB0 +107221DB0:lI95|H107224F58 +107224F58:lI97|H107227DB0 +107227DB0:lI116|H10722A7F8 +10722A7F8:lI111|H10722CF10 +10722CF10:lI109|H10722F3B8 +10722F3B8:lI95|H107231560 +107231560:lI99|H1072333F8 +1072333F8:lI98|H107234FB0 +107234FB0:lI46|H1072368F8 +1072368F8:lI98|H107238030 +107238030:lI101|H107239568 +107239568:lI97|H10723A950 +10723A950:lI109|N +107211878:Mn2:H107214AF8,H107214B08 +107214AF8:lH107217E80|N +107217E80:lI99|H10721B370 +10721B370:lI100|H10721E8C0 +10721E8C0:lI118|H107221D80 +107221D80:lI95|H107224F28 +107224F28:lI100|H107227D80 +107227D80:lI101|H10722A7C8 +10722A7C8:lI116|H10722CEE0 +10722CEE0:lI97|H10722F388 +10722F388:lI105|H107231530 +107231530:lI108|H1072333C8 +1072333C8:lI95|H107234F80 +107234F80:lI119|H1072368C8 +1072368C8:lI120|H107238000 +107238000:lI46|H107239538 +107239538:lI98|H10723A930 +10723A930:lI101|H10723BB10 +10723BB10:lI97|H10723CB10 +10723CB10:lI109|N +107214B08:lH107217E90|N +107217E90:lI99|H10721B380 +10721B380:lI100|H10721E8D0 +10721E8D0:lI118|H107221D90 +107221D90:lI95|H107224F38 +107224F38:lI102|H107227D90 +107227D90:lI117|H10722A7D8 +10722A7D8:lI110|H10722CEF0 +10722CEF0:lI95|H10722F398 +10722F398:lI99|H107231540 +107231540:lI98|H1072333D8 +1072333D8:lI46|H107234F90 +107234F90:lI98|H1072368D8 +1072368D8:lI101|H107238010 +107238010:lI97|H107239548 +107239548:lI109|N +107211848:Mn5:H107214AA8,H107214AB8,H107214AC8,H107214AD8,H107214AE8 +107214AA8:lH107217E30|N +107217E30:lI99|H10721B320 +10721B320:lI100|H10721E870 +10721E870:lI118|H107221D30 +107221D30:lI95|H107224ED8 +107224ED8:lI104|H107227D30 +107227D30:lI116|H10722A778 +10722A778:lI109|H10722CE90 +10722CE90:lI108|H10722F338 +10722F338:lI95|H1072314E0 +1072314E0:lI119|H107233378 +107233378:lI120|H107234F30 +107234F30:lI46|H107236888 +107236888:lI98|H107237FC0 +107237FC0:lI101|H1072394F8 +1072394F8:lI97|H10723A910 +10723A910:lI109|N +107214AE8:lH107217E70|N +107217E70:lI101|H10721B360 +10721B360:lI116|H10721E8B0 +10721E8B0:lI111|H107221D70 +107221D70:lI112|H107224F18 +107224F18:lI95|H107227D70 +107227D70:lI116|H10722A7B8 +10722A7B8:lI114|H10722CED0 +10722CED0:lI46|H10722F378 +10722F378:lI98|H107231520 +107231520:lI101|H1072333B8 +1072333B8:lI97|H107234F70 +107234F70:lI109|N +107214AD8:lH107217E60|N +107217E60:lI99|H10721B350 +10721B350:lI100|H10721E8A0 +10721E8A0:lI118|H107221D60 +107221D60:lI95|H107224F08 +107224F08:lI98|H107227D60 +107227D60:lI105|H10722A7A8 +10722A7A8:lI110|H10722CEC0 +10722CEC0:lI95|H10722F368 +10722F368:lI99|H107231510 +107231510:lI98|H1072333A8 +1072333A8:lI46|H107234F60 +107234F60:lI98|H1072368B8 +1072368B8:lI101|H107237FF0 +107237FF0:lI97|H107239528 +107239528:lI109|N +107214AC8:lH107217E50|N +107217E50:lI99|H10721B340 +10721B340:lI100|H10721E890 +10721E890:lI118|H107221D50 +107221D50:lI95|H107224EF8 +107224EF8:lI101|H107227D50 +107227D50:lI116|H10722A798 +10722A798:lI115|H10722CEB0 +10722CEB0:lI95|H10722F358 +10722F358:lI99|H107231500 +107231500:lI98|H107233398 +107233398:lI46|H107234F50 +107234F50:lI98|H1072368A8 +1072368A8:lI101|H107237FE0 +107237FE0:lI97|H107239518 +107239518:lI109|N +107214AB8:lH107217E40|N +107217E40:lI99|H10721B330 +10721B330:lI100|H10721E880 +10721E880:lI118|H107221D40 +107221D40:lI95|H107224EE8 +107224EE8:lI116|H107227D40 +107227D40:lI101|H10722A788 +10722A788:lI114|H10722CEA0 +10722CEA0:lI109|H10722F348 +10722F348:lI95|H1072314F0 +1072314F0:lI99|H107233388 +107233388:lI98|H107234F40 +107234F40:lI46|H107236898 +107236898:lI98|H107237FD0 +107237FD0:lI101|H107239508 +107239508:lI97|H10723A920 +10723A920:lI109|N +107211830:Mn2:H107214A88,H107214A98 +107214A88:lH107217E10|N +107217E10:lI111|H10721B300 +10721B300:lI98|H10721E850 +10721E850:lI115|H107221D10 +107221D10:lI101|H107224EB8 +107224EB8:lI114|H107227D10 +107227D10:lI118|H10722A758 +10722A758:lI101|H10722CE70 +10722CE70:lI114|H10722F318 +10722F318:lI95|H1072314C0 +1072314C0:lI108|H107233358 +107233358:lI105|H107234F10 +107234F10:lI98|H107236868 +107236868:lI46|H107237FA0 +107237FA0:lI98|H1072394D8 +1072394D8:lI101|H10723A8F0 +10723A8F0:lI97|H10723BAF0 +10723BAF0:lI109|N +107214A98:lH107217E20|N +107217E20:lI111|H10721B310 +10721B310:lI98|H10721E860 +10721E860:lI115|H107221D20 +107221D20:lI101|H107224EC8 +107224EC8:lI114|H107227D20 +107227D20:lI118|H10722A768 +10722A768:lI101|H10722CE80 +10722CE80:lI114|H10722F328 +10722F328:lI95|H1072314D0 +1072314D0:lI97|H107233368 +107233368:lI112|H107234F20 +107234F20:lI112|H107236878 +107236878:lI95|H107237FB0 +107237FB0:lI119|H1072394E8 +1072394E8:lI120|H10723A900 +10723A900:lI46|H10723BB00 +10723BB00:lI98|H10723CB00 +10723CB00:lI101|H10723D960 +10723D960:lI97|H10723E650 +10723E650:lI109|N +10720E658:lI47|H107211808 +107211808:lI111|H107214A58 +107214A58:lI112|H107217DE0 +107217DE0:lI116|H10721B2D0 +10721B2D0:lI47|H10721E820 +10721E820:lI104|H107221CE0 +107221CE0:lI111|H107224E88 +107224E88:lI109|H107227CE0 +107227CE0:lI101|H10722A728 +10722A728:lI98|H10722CE40 +10722CE40:lI114|H10722F2E8 +10722F2E8:lI101|H107231490 +107231490:lI119|H107233328 +107233328:lI47|H107234EE0 +107234EE0:lI67|H107236838 +107236838:lI101|H107237F70 +107237F70:lI108|H1072394A8 +1072394A8:lI108|H10723A8D0 +10723A8D0:lI97|H10723BAE0 +10723BAE0:lI114|H10723CAF0 +10723CAF0:lI47|H10723D950 +10723D950:lI101|H10723E640 +10723E640:lI114|H10723F220 +10723F220:lI108|H10723FCB0 +10723FCB0:lI97|H1072405F0 +1072405F0:lI110|H107240E60 +107240E60:lI103|H1072415F0 +1072415F0:lI47|H107241D10 +107241D10:lI50|H1072423D0 +1072423D0:lI54|H107242A30 +107242A30:lI46|H107243010 +107243010:lI48|H107243580 +107243580:lI46|H107243AC0 +107243AC0:lI50|H107243FB0 +107243FB0:lI47|H1072444A0 +1072444A0:lI108|H107244950 +107244950:lI105|H107244DC0 +107244DC0:lI98|H107245220 +107245220:lI47|H107245670 +107245670:lI101|H107245A70 +107245A70:lI114|H107245E20 +107245E20:lI108|H1072461B0 +1072461B0:lI97|H107246540 +107246540:lI110|H1072468D0 +1072468D0:lI103|H107246C60 +107246C60:lI47|H107246F90 +107246F90:lI108|H1072472B0 +1072472B0:lI105|H1072475C0 +1072475C0:lI98|H1072478C0 +1072478C0:lI47|H107247BC0 +107247BC0:lI111|H107247EA0 +107247EA0:lI98|H107248160 +107248160:lI115|H107248420 +107248420:lI101|H1072486D0 +1072486D0:lI114|H107248980 +107248980:lI118|H107248C00 +107248C00:lI101|H107248E70 +107248E70:lI114|H1072490E0 +1072490E0:lI45|H107249340 +107249340:lI50|H1072495A0 +1072495A0:lI46|H1072497F0 +1072497F0:lI49|H107249A10 +107249A10:lI53|H107249C20 +107249C20:lI47|H280052C20 +10720B448:lH10720E6F0|H10720E708 +10720E6F0:t2:H1072119D8,H1072119E8 +1072119E8:Mh21:F:H107214D30,H107214D50,H107214D88,H107214DA0,H107214DB8,H107214DD8,H107214DE8,H107214DF8,H107214E20,H107214E30,H107214E48,H107214E58,H107214E68,H107214E78,H107214E98 +107214D30:Mn3:H1072180E0,H1072180F0,H107218100 +1072180E0:lH10721B5D0|N +10721B5D0:lI109|H10721EB20 +10721EB20:lI110|H107221FE0 +107221FE0:lI101|H107225188 +107225188:lI115|H107227FE0 +107227FE0:lI105|H10722AA28 +10722AA28:lI97|H10722D140 +10722D140:lI95|H10722F5D8 +10722F5D8:lI114|H107231770 +107231770:lI101|H107233608 +107233608:lI103|H1072351A0 +1072351A0:lI105|H107236AE8 +107236AE8:lI115|H1072381F0 +1072381F0:lI116|H107239708 +107239708:lI114|H10723AAE0 +10723AAE0:lI121|H10723BC80 +10723BC80:lI46|H10723CC50 +10723CC50:lI98|H10723DA80 +10723DA80:lI101|H10723E750 +10723E750:lI97|H10723F300 +10723F300:lI109|N +107218100:lH10721B5F0|N +10721B5F0:lI109|H10721EB40 +10721EB40:lI110|H107222000 +107222000:lI101|H1072251A8 +1072251A8:lI115|H107228000 +107228000:lI105|H10722AA48 +10722AA48:lI97|H10722D160 +10722D160:lI95|H10722F5F8 +10722F5F8:lI98|H107231790 +107231790:lI117|H107233628 +107233628:lI112|H1072351C0 +1072351C0:lI46|H107236B08 +107236B08:lI98|H107238210 +107238210:lI101|H107239728 +107239728:lI97|H10723AB00 +10723AB00:lI109|N +1072180F0:lH10721B5E0|N +10721B5E0:lI109|H10721EB30 +10721EB30:lI110|H107221FF0 +107221FF0:lI101|H107225198 +107225198:lI115|H107227FF0 +107227FF0:lI105|H10722AA38 +10722AA38:lI97|H10722D150 +10722D150:lI95|H10722F5E8 +10722F5E8:lI99|H107231780 +107231780:lI104|H107233618 +107233618:lI101|H1072351B0 +1072351B0:lI99|H107236AF8 +107236AF8:lI107|H107238200 +107238200:lI112|H107239718 +107239718:lI111|H10723AAF0 +10723AAF0:lI105|H10723BC90 +10723BC90:lI110|H10723CC60 +10723CC60:lI116|H10723DA90 +10723DA90:lI46|H10723E760 +10723E760:lI98|H10723F310 +10723F310:lI101|H10723FD60 +10723FD60:lI97|H107240660 +107240660:lI109|N +107214E98:Mn2:H1072182D0,H1072182E0 +1072182D0:lH10721B7C0|N +10721B7C0:lI109|H10721ED10 +10721ED10:lI110|H1072221D0 +1072221D0:lI101|H107225378 +107225378:lI115|H1072281D0 +1072281D0:lI105|H10722AC18 +10722AC18:lI97|H10722D330 +10722D330:lI95|H10722F7C8 +10722F7C8:lI108|H107231960 +107231960:lI97|H1072337E8 +1072337E8:lI116|H107235380 +107235380:lI101|H107236CB8 +107236CB8:lI95|H1072383B0 +1072383B0:lI108|H1072398C8 +1072398C8:lI111|H10723AC80 +10723AC80:lI97|H10723BDB0 +10723BDB0:lI100|H10723CD70 +10723CD70:lI101|H10723DB70 +10723DB70:lI114|H10723E7F0 +10723E7F0:lI46|H10723F370 +10723F370:lI98|H10723FDA0 +10723FDA0:lI101|H107240690 +107240690:lI97|H107240EB0 +107240EB0:lI109|N +1072182E0:lH10721B7D0|N +10721B7D0:lI109|H10721ED20 +10721ED20:lI110|H1072221E0 +1072221E0:lI101|H107225388 +107225388:lI115|H1072281E0 +1072281E0:lI105|H10722AC28 +10722AC28:lI97|H10722D340 +10722D340:lI95|H10722F7D8 +10722F7D8:lI98|H107231970 +107231970:lI97|H1072337F8 +1072337F8:lI99|H107235390 +107235390:lI107|H107236CC8 +107236CC8:lI101|H1072383C0 +1072383C0:lI110|H1072398D8 +1072398D8:lI100|H10723AC90 +10723AC90:lI95|H10723BDC0 +10723BDC0:lI116|H10723CD80 +10723CD80:lI121|H10723DB80 +10723DB80:lI112|H10723E800 +10723E800:lI101|H10723F380 +10723F380:lI46|H10723FDB0 +10723FDB0:lI98|H1072406A0 +1072406A0:lI101|H107240EC0 +107240EC0:lI97|H107241630 +107241630:lI109|N +107214E78:Mn3:H1072182A0,H1072182B0,H1072182C0 +1072182A0:lH10721B790|N +10721B790:lI109|H10721ECE0 +10721ECE0:lI110|H1072221A0 +1072221A0:lI101|H107225348 +107225348:lI115|H1072281A0 +1072281A0:lI105|H10722ABE8 +10722ABE8:lI97|H10722D300 +10722D300:lI95|H10722F798 +10722F798:lI99|H107231930 +107231930:lI104|H1072337B8 +1072337B8:lI101|H107235350 +107235350:lI99|H107236C88 +107236C88:lI107|H107238380 +107238380:lI112|H107239898 +107239898:lI111|H10723AC60 +10723AC60:lI105|H10723BD90 +10723BD90:lI110|H10723CD50 +10723CD50:lI116|H10723DB50 +10723DB50:lI95|H10723E7E0 +10723E7E0:lI115|H10723F360 +10723F360:lI117|H10723FD90 +10723FD90:lI112|H107240680 +107240680:lI46|H107240EA0 +107240EA0:lI98|H107241620 +107241620:lI101|H107241D40 +107241D40:lI97|H107242400 +107242400:lI109|N +1072182C0:lH10721B7B0|N +10721B7B0:lI109|H10721ED00 +10721ED00:lI110|H1072221C0 +1072221C0:lI101|H107225368 +107225368:lI115|H1072281C0 +1072281C0:lI105|H10722AC08 +10722AC08:lI97|H10722D320 +10722D320:lI95|H10722F7B8 +10722F7B8:lI115|H107231950 +107231950:lI112|H1072337D8 +1072337D8:lI46|H107235370 +107235370:lI98|H107236CA8 +107236CA8:lI101|H1072383A0 +1072383A0:lI97|H1072398B8 +1072398B8:lI109|N +1072182B0:lH10721B7A0|N +10721B7A0:lI109|H10721ECF0 +10721ECF0:lI110|H1072221B0 +1072221B0:lI101|H107225358 +107225358:lI115|H1072281B0 +1072281B0:lI105|H10722ABF8 +10722ABF8:lI97|H10722D310 +10722D310:lI95|H10722F7A8 +10722F7A8:lI115|H107231940 +107231940:lI99|H1072337C8 +1072337C8:lI104|H107235360 +107235360:lI101|H107236C98 +107236C98:lI109|H107238390 +107238390:lI97|H1072398A8 +1072398A8:lI46|H10723AC70 +10723AC70:lI98|H10723BDA0 +10723BDA0:lI101|H10723CD60 +10723CD60:lI97|H10723DB60 +10723DB60:lI109|N +107214E68:lH107218290|N +107218290:lI109|H10721B780 +10721B780:lI110|H10721ECD0 +10721ECD0:lI101|H107222190 +107222190:lI115|H107225338 +107225338:lI105|H107228190 +107228190:lI97|H10722ABD8 +10722ABD8:lI95|H10722D2F0 +10722D2F0:lI116|H10722F788 +10722F788:lI101|H107231920 +107231920:lI120|H1072337A8 +1072337A8:lI116|H107235340 +107235340:lI46|H107236C78 +107236C78:lI98|H107238370 +107238370:lI101|H107239888 +107239888:lI97|H10723AC50 +10723AC50:lI109|N +107214E58:lH107218280|N +107218280:lI109|H10721B770 +10721B770:lI110|H10721ECC0 +10721ECC0:lI101|H107222180 +107222180:lI115|H107225328 +107225328:lI105|H107228180 +107228180:lI97|H10722ABC8 +10722ABC8:lI95|H10722D2E0 +10722D2E0:lI99|H10722F778 +10722F778:lI111|H107231910 +107231910:lI110|H107233798 +107233798:lI116|H107235330 +107235330:lI114|H107236C68 +107236C68:lI111|H107238360 +107238360:lI108|H107239878 +107239878:lI108|H10723AC40 +10723AC40:lI101|H10723BD80 +10723BD80:lI114|H10723CD40 +10723CD40:lI46|H10723DB40 +10723DB40:lI98|H10723E7D0 +10723E7D0:lI101|H10723F350 +10723F350:lI97|H10723FD80 +10723FD80:lI109|N +107214E48:lH107218270|N +107218270:lI109|H10721B760 +10721B760:lI110|H10721ECB0 +10721ECB0:lI101|H107222170 +107222170:lI115|H107225318 +107225318:lI105|H107228170 +107228170:lI97|H10722ABB8 +10722ABB8:lI95|H10722D2D0 +10722D2D0:lI108|H10722F768 +10722F768:lI111|H107231900 +107231900:lI99|H107233788 +107233788:lI107|H107235320 +107235320:lI101|H107236C58 +107236C58:lI114|H107238350 +107238350:lI46|H107239868 +107239868:lI98|H10723AC30 +10723AC30:lI101|H10723BD70 +10723BD70:lI97|H10723CD30 +10723CD30:lI109|N +107214E30:Mn2:H107218250,H107218260 +107218250:lH10721B740|N +10721B740:lI109|H10721EC90 +10721EC90:lI110|H107222150 +107222150:lI101|H1072252F8 +1072252F8:lI115|H107228150 +107228150:lI105|H10722AB98 +10722AB98:lI97|H10722D2B0 +10722D2B0:lI95|H10722F748 +10722F748:lI107|H1072318E0 +1072318E0:lI101|H107233768 +107233768:lI114|H107235300 +107235300:lI110|H107236C38 +107236C38:lI101|H107238330 +107238330:lI108|H107239848 +107239848:lI95|H10723AC10 +10723AC10:lI115|H10723BD50 +10723BD50:lI117|H10723CD20 +10723CD20:lI112|H10723DB30 +10723DB30:lI46|H10723E7C0 +10723E7C0:lI98|H10723F340 +10723F340:lI101|H10723FD70 +10723FD70:lI97|H107240670 +107240670:lI109|N +107218260:lH10721B750|N +10721B750:lI109|H10721ECA0 +10721ECA0:lI110|H107222160 +107222160:lI101|H107225308 +107225308:lI115|H107228160 +107228160:lI105|H10722ABA8 +10722ABA8:lI97|H10722D2C0 +10722D2C0:lI95|H10722F758 +10722F758:lI102|H1072318F0 +1072318F0:lI114|H107233778 +107233778:lI97|H107235310 +107235310:lI103|H107236C48 +107236C48:lI46|H107238340 +107238340:lI98|H107239858 +107239858:lI101|H10723AC20 +10723AC20:lI97|H10723BD60 +10723BD60:lI109|N +107214E20:lH107218240|N +107218240:lI109|H10721B730 +10721B730:lI110|H10721EC80 +10721EC80:lI101|H107222140 +107222140:lI115|H1072252E8 +1072252E8:lI105|H107228140 +107228140:lI97|H10722AB88 +10722AB88:lI95|H10722D2A0 +10722D2A0:lI102|H10722F738 +10722F738:lI114|H1072318D0 +1072318D0:lI97|H107233758 +107233758:lI103|H1072352F0 +1072352F0:lI95|H107236C28 +107236C28:lI104|H107238320 +107238320:lI97|H107239838 +107239838:lI115|H10723AC00 +10723AC00:lI104|H10723BD40 +10723BD40:lI46|H10723CD10 +10723CD10:lI98|H10723DB20 +10723DB20:lI101|H10723E7B0 +10723E7B0:lI97|H10723F330 +10723F330:lI109|N +107214DF8:Mn4:H107218200,H107218210,H107218220,H107218230 +107218200:lH10721B6F0|N +10721B6F0:lI109|H10721EC40 +10721EC40:lI110|H107222100 +107222100:lI101|H1072252A8 +1072252A8:lI115|H107228100 +107228100:lI105|H10722AB48 +10722AB48:lI97|H10722D260 +10722D260:lI95|H10722F6F8 +10722F6F8:lI116|H107231890 +107231890:lI109|H107233718 +107233718:lI46|H1072352B0 +1072352B0:lI98|H107236BE8 +107236BE8:lI101|H1072382E0 +1072382E0:lI97|H1072397F8 +1072397F8:lI109|N +107218230:lH10721B720|N +10721B720:lI109|H10721EC70 +10721EC70:lI110|H107222130 +107222130:lI101|H1072252D8 +1072252D8:lI115|H107228130 +107228130:lI105|H10722AB78 +10722AB78:lI97|H10722D290 +10722D290:lI95|H10722F728 +10722F728:lI100|H1072318C0 +1072318C0:lI117|H107233748 +107233748:lI109|H1072352E0 +1072352E0:lI112|H107236C18 +107236C18:lI101|H107238310 +107238310:lI114|H107239828 +107239828:lI46|H10723ABF0 +10723ABF0:lI98|H10723BD30 +10723BD30:lI101|H10723CD00 +10723CD00:lI97|H10723DB10 +10723DB10:lI109|N +107218220:lH10721B710|N +10721B710:lI109|H10721EC60 +10721EC60:lI110|H107222120 +107222120:lI101|H1072252C8 +1072252C8:lI115|H107228120 +107228120:lI105|H10722AB68 +10722AB68:lI97|H10722D280 +10722D280:lI95|H10722F718 +10722F718:lI101|H1072318B0 +1072318B0:lI118|H107233738 +107233738:lI101|H1072352D0 +1072352D0:lI110|H107236C08 +107236C08:lI116|H107238300 +107238300:lI46|H107239818 +107239818:lI98|H10723ABE0 +10723ABE0:lI101|H10723BD20 +10723BD20:lI97|H10723CCF0 +10723CCF0:lI109|N +107218210:lH10721B700|N +10721B700:lI109|H10721EC50 +10721EC50:lI110|H107222110 +107222110:lI101|H1072252B8 +1072252B8:lI115|H107228110 +107228110:lI105|H10722AB58 +10722AB58:lI97|H10722D270 +10722D270:lI95|H10722F708 +10722F708:lI98|H1072318A0 +1072318A0:lI97|H107233728 +107233728:lI99|H1072352C0 +1072352C0:lI107|H107236BF8 +107236BF8:lI117|H1072382F0 +1072382F0:lI112|H107239808 +107239808:lI46|H10723ABD0 +10723ABD0:lI98|H10723BD10 +10723BD10:lI101|H10723CCE0 +10723CCE0:lI97|H10723DB00 +10723DB00:lI109|N +107214DE8:lH1072181F0|N +1072181F0:lI109|H10721B6E0 +10721B6E0:lI110|H10721EC30 +10721EC30:lI101|H1072220F0 +1072220F0:lI115|H107225298 +107225298:lI105|H1072280F0 +1072280F0:lI97|H10722AB38 +10722AB38:lI46|H10722D250 +10722D250:lI97|H10722F6E8 +10722F6E8:lI112|H107231880 +107231880:lI112|N +107214DD8:lH1072181E0|N +1072181E0:lI109|H10721B6D0 +10721B6D0:lI110|H10721EC20 +10721EC20:lI101|H1072220E0 +1072220E0:lI115|H107225288 +107225288:lI105|H1072280E0 +1072280E0:lI97|H10722AB28 +10722AB28:lI95|H10722D240 +10722D240:lI115|H10722F6D8 +10722F6D8:lI110|H107231870 +107231870:lI109|H107233708 +107233708:lI112|H1072352A0 +1072352A0:lI95|H107236BD8 +107236BD8:lI104|H1072382D0 +1072382D0:lI111|H1072397E8 +1072397E8:lI111|H10723ABC0 +10723ABC0:lI107|H10723BD00 +10723BD00:lI46|H10723CCD0 +10723CCD0:lI98|H10723DAF0 +10723DAF0:lI101|H10723E7A0 +10723E7A0:lI97|H10723F320 +10723F320:lI109|N +107214DB8:Mn3:H1072181B0,H1072181C0,H1072181D0 +1072181B0:lH10721B6A0|N +10721B6A0:lI109|H10721EBF0 +10721EBF0:lI110|H1072220B0 +1072220B0:lI101|H107225258 +107225258:lI115|H1072280B0 +1072280B0:lI105|H10722AAF8 +10722AAF8:lI97|H10722D210 +10722D210:lI95|H10722F6A8 +10722F6A8:lI115|H107231840 +107231840:lI117|H1072336D8 +1072336D8:lI112|H107235270 +107235270:lI46|H107236BA8 +107236BA8:lI98|H1072382B0 +1072382B0:lI101|H1072397C8 +1072397C8:lI97|H10723ABA0 +10723ABA0:lI109|N +1072181D0:lH10721B6C0|N +10721B6C0:lI109|H10721EC10 +10721EC10:lI110|H1072220D0 +1072220D0:lI101|H107225278 +107225278:lI115|H1072280D0 +1072280D0:lI105|H10722AB18 +10722AB18:lI97|H10722D230 +10722D230:lI95|H10722F6C8 +10722F6C8:lI108|H107231860 +107231860:lI105|H1072336F8 +1072336F8:lI98|H107235290 +107235290:lI46|H107236BC8 +107236BC8:lI98|H1072382C0 +1072382C0:lI101|H1072397D8 +1072397D8:lI97|H10723ABB0 +10723ABB0:lI109|N +1072181C0:lH10721B6B0|N +10721B6B0:lI109|H10721EC00 +10721EC00:lI110|H1072220C0 +1072220C0:lI101|H107225268 +107225268:lI115|H1072280C0 +1072280C0:lI105|H10722AB08 +10722AB08:lI97|H10722D220 +10722D220:lI46|H10722F6B8 +10722F6B8:lI97|H107231850 +107231850:lI112|H1072336E8 +1072336E8:lI112|H107235280 +107235280:lI117|H107236BB8 +107236BB8:lI112|N +107214DA0:Mn2:H107218190,H1072181A0 +107218190:lH10721B680|N +10721B680:lI109|H10721EBD0 +10721EBD0:lI110|H107222090 +107222090:lI101|H107225238 +107225238:lI115|H107228090 +107228090:lI105|H10722AAD8 +10722AAD8:lI97|H10722D1F0 +10722D1F0:lI95|H10722F688 +10722F688:lI97|H107231820 +107231820:lI112|H1072336B8 +1072336B8:lI112|H107235250 +107235250:lI46|H107236B88 +107236B88:lI98|H107238290 +107238290:lI101|H1072397A8 +1072397A8:lI97|H10723AB80 +10723AB80:lI109|N +1072181A0:lH10721B690|N +10721B690:lI109|H10721EBE0 +10721EBE0:lI110|H1072220A0 +1072220A0:lI101|H107225248 +107225248:lI115|H1072280A0 +1072280A0:lI105|H10722AAE8 +10722AAE8:lI97|H10722D200 +10722D200:lI95|H10722F698 +10722F698:lI108|H107231830 +107231830:lI111|H1072336C8 +1072336C8:lI103|H107235260 +107235260:lI46|H107236B98 +107236B98:lI98|H1072382A0 +1072382A0:lI101|H1072397B8 +1072397B8:lI97|H10723AB90 +10723AB90:lI109|N +107214D88:Mn2:H107218170,H107218180 +107218170:lH10721B660|N +10721B660:lI109|H10721EBB0 +10721EBB0:lI110|H107222070 +107222070:lI101|H107225218 +107225218:lI115|H107228070 +107228070:lI105|H10722AAB8 +10722AAB8:lI97|H10722D1D0 +10722D1D0:lI95|H10722F668 +10722F668:lI115|H107231800 +107231800:lI117|H107233698 +107233698:lI98|H107235230 +107235230:lI115|H107236B68 +107236B68:lI99|H107238270 +107238270:lI114|H107239788 +107239788:lI46|H10723AB60 +10723AB60:lI98|H10723BCF0 +10723BCF0:lI101|H10723CCC0 +10723CCC0:lI97|H10723DAE0 +10723DAE0:lI109|N +107218180:lH10721B670|N +10721B670:lI109|H10721EBC0 +10721EBC0:lI110|H107222080 +107222080:lI101|H107225228 +107225228:lI115|H107228080 +107228080:lI105|H10722AAC8 +10722AAC8:lI97|H10722D1E0 +10722D1E0:lI95|H10722F678 +10722F678:lI114|H107231810 +107231810:lI112|H1072336A8 +1072336A8:lI99|H107235240 +107235240:lI46|H107236B78 +107236B78:lI98|H107238280 +107238280:lI101|H107239798 +107239798:lI97|H10723AB70 +10723AB70:lI109|N +107214D50:Mn6:H107218110,H107218120,H107218130,H107218140,H107218150,H107218160 +107218110:lH10721B600|N +10721B600:lI109|H10721EB50 +10721EB50:lI110|H107222010 +107222010:lI101|H1072251B8 +1072251B8:lI115|H107228010 +107228010:lI105|H10722AA58 +10722AA58:lI97|H10722D170 +10722D170:lI46|H10722F608 +10722F608:lI98|H1072317A0 +1072317A0:lI101|H107233638 +107233638:lI97|H1072351D0 +1072351D0:lI109|N +107218160:lH10721B650|N +10721B650:lI109|H10721EBA0 +10721EBA0:lI110|H107222060 +107222060:lI101|H107225208 +107225208:lI115|H107228060 +107228060:lI105|H10722AAA8 +10722AAA8:lI97|H10722D1C0 +10722D1C0:lI95|H10722F658 +10722F658:lI109|H1072317F0 +1072317F0:lI111|H107233688 +107233688:lI110|H107235220 +107235220:lI105|H107236B58 +107236B58:lI116|H107238260 +107238260:lI111|H107239778 +107239778:lI114|H10723AB50 +10723AB50:lI46|H10723BCE0 +10723BCE0:lI98|H10723CCB0 +10723CCB0:lI101|H10723DAD0 +10723DAD0:lI97|H10723E790 +10723E790:lI109|N +107218150:lH10721B640|N +10721B640:lI109|H10721EB90 +10721EB90:lI110|H107222050 +107222050:lI101|H1072251F8 +1072251F8:lI115|H107228050 +107228050:lI105|H10722AA98 +10722AA98:lI97|H10722D1B0 +10722D1B0:lI95|H10722F648 +10722F648:lI105|H1072317E0 +1072317E0:lI110|H107233678 +107233678:lI100|H107235210 +107235210:lI101|H107236B48 +107236B48:lI120|H107238250 +107238250:lI46|H107239768 +107239768:lI98|H10723AB40 +10723AB40:lI101|H10723BCD0 +10723BCD0:lI97|H10723CCA0 +10723CCA0:lI109|N +107218140:lH10721B630|N +10721B630:lI109|H10721EB80 +10721EB80:lI110|H107222040 +107222040:lI101|H1072251E8 +1072251E8:lI115|H107228040 +107228040:lI105|H10722AA88 +10722AA88:lI97|H10722D1A0 +10722D1A0:lI95|H10722F638 +10722F638:lI114|H1072317D0 +1072317D0:lI101|H107233668 +107233668:lI99|H107235200 +107235200:lI111|H107236B38 +107236B38:lI118|H107238240 +107238240:lI101|H107239758 +107239758:lI114|H10723AB30 +10723AB30:lI46|H10723BCC0 +10723BCC0:lI98|H10723CC90 +10723CC90:lI101|H10723DAC0 +10723DAC0:lI97|H10723E780 +10723E780:lI109|N +107218130:lH10721B620|N +10721B620:lI109|H10721EB70 +10721EB70:lI110|H107222030 +107222030:lI101|H1072251D8 +1072251D8:lI115|H107228030 +107228030:lI105|H10722AA78 +10722AA78:lI97|H10722D190 +10722D190:lI95|H10722F628 +10722F628:lI108|H1072317C0 +1072317C0:lI111|H107233658 +107233658:lI97|H1072351F0 +1072351F0:lI100|H107236B28 +107236B28:lI101|H107238230 +107238230:lI114|H107239748 +107239748:lI46|H10723AB20 +10723AB20:lI98|H10723BCB0 +10723BCB0:lI101|H10723CC80 +10723CC80:lI97|H10723DAB0 +10723DAB0:lI109|N +107218120:lH10721B610|N +10721B610:lI109|H10721EB60 +10721EB60:lI110|H107222020 +107222020:lI101|H1072251C8 +1072251C8:lI115|H107228020 +107228020:lI105|H10722AA68 +10722AA68:lI97|H10722D180 +10722D180:lI95|H10722F618 +10722F618:lI101|H1072317B0 +1072317B0:lI120|H107233648 +107233648:lI116|H1072351E0 +1072351E0:lI95|H107236B18 +107236B18:lI115|H107238220 +107238220:lI117|H107239738 +107239738:lI112|H10723AB10 +10723AB10:lI46|H10723BCA0 +10723BCA0:lI98|H10723CC70 +10723CC70:lI101|H10723DAA0 +10723DAA0:lI97|H10723E770 +10723E770:lI109|N +1072119D8:lI47|H107214D20 +107214D20:lI111|H1072180D0 +1072180D0:lI112|H10721B5C0 +10721B5C0:lI116|H10721EB10 +10721EB10:lI47|H107221FD0 +107221FD0:lI104|H107225178 +107225178:lI111|H107227FD0 +107227FD0:lI109|H10722AA18 +10722AA18:lI101|H10722D130 +10722D130:lI98|H10722F5C8 +10722F5C8:lI114|H107231760 +107231760:lI101|H1072335F8 +1072335F8:lI119|H107235190 +107235190:lI47|H107236AD8 +107236AD8:lI67|H1072381E0 +1072381E0:lI101|H1072396F8 +1072396F8:lI108|H10723AAD0 +10723AAD0:lI108|H10723BC70 +10723BC70:lI97|H10723CC40 +10723CC40:lI114|H10723DA70 +10723DA70:lI47|H10723E740 +10723E740:lI101|H10723F2F0 +10723F2F0:lI114|H10723FD50 +10723FD50:lI108|H107240650 +107240650:lI97|H107240E90 +107240E90:lI110|H107241610 +107241610:lI103|H107241D30 +107241D30:lI47|H1072423F0 +1072423F0:lI50|H107242A50 +107242A50:lI54|H107243030 +107243030:lI46|H1072435A0 +1072435A0:lI48|H107243AD0 +107243AD0:lI46|H107243FC0 +107243FC0:lI50|H1072444B0 +1072444B0:lI47|H107244960 +107244960:lI108|H107244DD0 +107244DD0:lI105|H107245230 +107245230:lI98|H107245680 +107245680:lI47|H107245A80 +107245A80:lI101|H107245E30 +107245E30:lI114|H1072461C0 +1072461C0:lI108|H107246550 +107246550:lI97|H1072468E0 +1072468E0:lI110|H107246C70 +107246C70:lI103|H107246FA0 +107246FA0:lI47|H1072472C0 +1072472C0:lI108|H1072475D0 +1072475D0:lI105|H1072478D0 +1072478D0:lI98|H107247BD0 +107247BD0:lI47|H107247EB0 +107247EB0:lI109|H107248170 +107248170:lI110|H107248430 +107248430:lI101|H1072486E0 +1072486E0:lI115|H107248990 +107248990:lI105|H107248C10 +107248C10:lI97|H107248E80 +107248E80:lI45|H1072490F0 +1072490F0:lI52|H107249350 +107249350:lI46|H1072495B0 +1072495B0:lI50|H107249800 +107249800:lI50|H107249A20 +107249A20:lI47|H280052C20 +10720E708:lH107211A70|H107211A88 +107211A70:t2:H107214EB0,H107214EC0 +107214EC0:Mh43:F:H107218300,H107218320,H107218350,H107218378,H107218398,H1072183D0,H1072183E8,H107218420,H107218450,H107218470,H107218490,H1072184B8,H1072184C8,H1072184E8,H107218518 +107218300:Mn3:H10721B7F0,H10721B800,H10721B810 +10721B7F0:lH10721ED40|N +10721ED40:lI109|H107222200 +107222200:lI101|H1072253A8 +1072253A8:lI103|H107228200 +107228200:lI97|H10722AC48 +10722AC48:lI99|H10722D360 +10722D360:lI111|H10722F7F8 +10722F7F8:lI95|H107231990 +107231990:lI116|H107233818 +107233818:lI101|H1072353B0 +1072353B0:lI120|H107236CE8 +107236CE8:lI116|H1072383E0 +1072383E0:lI95|H1072398F8 +1072398F8:lI112|H10723ACB0 +10723ACB0:lI97|H10723BDE0 +10723BDE0:lI114|H10723CDA0 +10723CDA0:lI115|H10723DBA0 +10723DBA0:lI101|H10723E820 +10723E820:lI114|H10723F3A0 +10723F3A0:lI95|H10723FDD0 +10723FDD0:lI118|H1072406C0 +1072406C0:lI51|H107240EE0 +107240EE0:lI46|H107241650 +107241650:lI98|H107241D60 +107241D60:lI101|H107242420 +107242420:lI97|H107242A70 +107242A70:lI109|N +10721B810:lH10721ED60|N +10721ED60:lI109|H107222220 +107222220:lI101|H1072253C8 +1072253C8:lI103|H107228220 +107228220:lI97|H10722AC68 +10722AC68:lI99|H10722D380 +10722D380:lI111|H10722F818 +10722F818:lI95|H1072319B0 +1072319B0:lI112|H107233838 +107233838:lI101|H1072353D0 +1072353D0:lI114|H107236D08 +107236D08:lI95|H107238400 +107238400:lI109|H107239918 +107239918:lI101|H10723ACD0 +10723ACD0:lI100|H10723BE00 +10723BE00:lI105|H10723CDC0 +10723CDC0:lI97|H10723DBC0 +10723DBC0:lI95|H10723E830 +10723E830:lI103|H10723F3B0 +10723F3B0:lI97|H10723FDE0 +10723FDE0:lI116|H1072406D0 +1072406D0:lI101|H107240EF0 +107240EF0:lI119|H107241660 +107241660:lI97|H107241D70 +107241D70:lI121|H107242430 +107242430:lI95|H107242A80 +107242A80:lI99|H107243050 +107243050:lI111|H1072435C0 +1072435C0:lI110|H107243AF0 +107243AF0:lI116|H107243FE0 +107243FE0:lI114|H1072444D0 +1072444D0:lI111|H107244980 +107244980:lI108|H107244DF0 +107244DF0:lI95|H107245250 +107245250:lI118|H1072456A0 +1072456A0:lI49|H107245AA0 +107245AA0:lI46|H107245E50 +107245E50:lI98|H1072461E0 +1072461E0:lI101|H107246570 +107246570:lI97|H107246900 +107246900:lI109|N +10721B800:lH10721ED50|N +10721ED50:lI109|H107222210 +107222210:lI101|H1072253B8 +1072253B8:lI103|H107228210 +107228210:lI97|H10722AC58 +10722AC58:lI99|H10722D370 +10722D370:lI111|H10722F808 +10722F808:lI95|H1072319A0 +1072319A0:lI116|H107233828 +107233828:lI105|H1072353C0 +1072353C0:lI109|H107236CF8 +107236CF8:lI101|H1072383F0 +1072383F0:lI114|H107239908 +107239908:lI46|H10723ACC0 +10723ACC0:lI98|H10723BDF0 +10723BDF0:lI101|H10723CDB0 +10723CDB0:lI97|H10723DBB0 +10723DBB0:lI109|N +107218518:Mn5:H10721BB78,H10721BB88,H10721BB98,H10721BBA8,H10721BBB8 +10721BB78:lH10721F110|N +10721F110:lI109|H1072225E0 +1072225E0:lI101|H107225788 +107225788:lI103|H1072285E0 +1072285E0:lI97|H10722B028 +10722B028:lI99|H10722D740 +10722D740:lI111|H10722FBD8 +10722FBD8:lI95|H107231D70 +107231D70:lI98|H107233BF8 +107233BF8:lI105|H107235790 +107235790:lI110|H1072370B8 +1072370B8:lI97|H1072387B0 +1072387B0:lI114|H107239CA8 +107239CA8:lI121|H10723B060 +10723B060:lI95|H10723C190 +10723C190:lI110|H10723D110 +10723D110:lI97|H10723DF10 +10723DF10:lI109|H10723EB70 +10723EB70:lI101|H10723F6D0 +10723F6D0:lI95|H1072400D0 +1072400D0:lI114|H1072409B0 +1072409B0:lI101|H107241190 +107241190:lI115|H1072418E0 +1072418E0:lI111|H107241FD0 +107241FD0:lI108|H107242640 +107242640:lI118|H107242C80 +107242C80:lI101|H107243210 +107243210:lI114|H107243760 +107243760:lI95|H107243C80 +107243C80:lI118|H107244170 +107244170:lI50|H107244620 +107244620:lI46|H107244A90 +107244A90:lI98|H107244F00 +107244F00:lI101|H107245350 +107245350:lI97|H107245750 +107245750:lI109|N +10721BBB8:lH10721F150|N +10721F150:lI109|H107222620 +107222620:lI101|H1072257C8 +1072257C8:lI103|H107228620 +107228620:lI97|H10722B068 +10722B068:lI99|H10722D780 +10722D780:lI111|H10722FC18 +10722FC18:lI95|H107231DB0 +107231DB0:lI101|H107233C38 +107233C38:lI114|H1072357D0 +1072357D0:lI108|H1072370F8 +1072370F8:lI95|H1072387F0 +1072387F0:lI100|H107239CE8 +107239CE8:lI105|H10723B0A0 +10723B0A0:lI115|H10723C1D0 +10723C1D0:lI116|H10723D150 +10723D150:lI95|H10723DF40 +10723DF40:lI101|H10723EBA0 +10723EBA0:lI110|H10723F700 +10723F700:lI99|H107240100 +107240100:lI111|H1072409E0 +1072409E0:lI100|H1072411C0 +1072411C0:lI101|H107241910 +107241910:lI114|H107242000 +107242000:lI46|H107242670 +107242670:lI98|H107242CB0 +107242CB0:lI101|H107243230 +107243230:lI97|H107243780 +107243780:lI109|N +10721BBA8:lH10721F140|N +10721F140:lI109|H107222610 +107222610:lI101|H1072257B8 +1072257B8:lI103|H107228610 +107228610:lI97|H10722B058 +10722B058:lI99|H10722D770 +10722D770:lI111|H10722FC08 +10722FC08:lI95|H107231DA0 +107231DA0:lI99|H107233C28 +107233C28:lI111|H1072357C0 +1072357C0:lI109|H1072370E8 +1072370E8:lI112|H1072387E0 +1072387E0:lI97|H107239CD8 +107239CD8:lI99|H10723B090 +10723B090:lI116|H10723C1C0 +10723C1C0:lI95|H10723D140 +10723D140:lI116|H10723DF30 +10723DF30:lI101|H10723EB90 +10723EB90:lI120|H10723F6F0 +10723F6F0:lI116|H1072400F0 +1072400F0:lI95|H1072409D0 +1072409D0:lI101|H1072411B0 +1072411B0:lI110|H107241900 +107241900:lI99|H107241FF0 +107241FF0:lI111|H107242660 +107242660:lI100|H107242CA0 +107242CA0:lI101|H107243220 +107243220:lI114|H107243770 +107243770:lI46|H107243C90 +107243C90:lI98|H107244180 +107244180:lI101|H107244630 +107244630:lI97|H107244AA0 +107244AA0:lI109|N +10721BB98:lH10721F130|N +10721F130:lI109|H107222600 +107222600:lI101|H1072257A8 +1072257A8:lI103|H107228600 +107228600:lI97|H10722B048 +10722B048:lI99|H10722D760 +10722D760:lI111|H10722FBF8 +10722FBF8:lI95|H107231D90 +107231D90:lI117|H107233C18 +107233C18:lI115|H1072357B0 +1072357B0:lI101|H1072370D8 +1072370D8:lI114|H1072387D0 +1072387D0:lI46|H107239CC8 +107239CC8:lI98|H10723B080 +10723B080:lI101|H10723C1B0 +10723C1B0:lI97|H10723D130 +10723D130:lI109|N +10721BB88:lH10721F120|N +10721F120:lI109|H1072225F0 +1072225F0:lI101|H107225798 +107225798:lI103|H1072285F0 +1072285F0:lI97|H10722B038 +10722B038:lI99|H10722D750 +10722D750:lI111|H10722FBE8 +10722FBE8:lI95|H107231D80 +107231D80:lI101|H107233C08 +107233C08:lI100|H1072357A0 +1072357A0:lI105|H1072370C8 +1072370C8:lI115|H1072387C0 +1072387C0:lI116|H107239CB8 +107239CB8:lI95|H10723B070 +10723B070:lI99|H10723C1A0 +10723C1A0:lI111|H10723D120 +10723D120:lI109|H10723DF20 +10723DF20:lI112|H10723EB80 +10723EB80:lI114|H10723F6E0 +10723F6E0:lI101|H1072400E0 +1072400E0:lI115|H1072409C0 +1072409C0:lI115|H1072411A0 +1072411A0:lI46|H1072418F0 +1072418F0:lI98|H107241FE0 +107241FE0:lI101|H107242650 +107242650:lI97|H107242C90 +107242C90:lI109|N +1072184E8:Mn5:H10721BB20,H10721BB30,H10721BB40,H10721BB58,H10721BB68 +10721BB20:lH10721F0B0|N +10721F0B0:lI109|H107222580 +107222580:lI101|H107225728 +107225728:lI103|H107228580 +107228580:lI97|H10722AFC8 +10722AFC8:lI99|H10722D6E0 +10722D6E0:lI111|H10722FB78 +10722FB78:lI95|H107231D10 +107231D10:lI116|H107233B98 +107233B98:lI99|H107235730 +107235730:lI112|H107237068 +107237068:lI46|H107238760 +107238760:lI98|H107239C58 +107239C58:lI101|H10723B010 +10723B010:lI97|H10723C140 +10723C140:lI109|N +10721BB68:lH10721F100|N +10721F100:lI109|H1072225D0 +1072225D0:lI101|H107225778 +107225778:lI103|H1072285D0 +1072285D0:lI97|H10722B018 +10722B018:lI99|H10722D730 +10722D730:lI111|H10722FBC8 +10722FBC8:lI95|H107231D60 +107231D60:lI102|H107233BE8 +107233BE8:lI105|H107235780 +107235780:lI108|H1072370A8 +1072370A8:lI116|H1072387A0 +1072387A0:lI101|H107239C98 +107239C98:lI114|H10723B050 +10723B050:lI46|H10723C180 +10723C180:lI98|H10723D100 +10723D100:lI101|H10723DF00 +10723DF00:lI97|H10723EB60 +10723EB60:lI109|N +10721BB58:lH10721F0F0|N +10721F0F0:lI109|H1072225C0 +1072225C0:lI101|H107225768 +107225768:lI103|H1072285C0 +1072285C0:lI97|H10722B008 +10722B008:lI99|H10722D720 +10722D720:lI111|H10722FBB8 +10722FBB8:lI95|H107231D50 +107231D50:lI116|H107233BD8 +107233BD8:lI114|H107235770 +107235770:lI97|H107237098 +107237098:lI110|H107238790 +107238790:lI115|H107239C88 +107239C88:lI95|H10723B040 +10723B040:lI115|H10723C170 +10723C170:lI101|H10723D0F0 +10723D0F0:lI110|H10723DEF0 +10723DEF0:lI100|H10723EB50 +10723EB50:lI101|H10723F6C0 +10723F6C0:lI114|H1072400C0 +1072400C0:lI46|H1072409A0 +1072409A0:lI98|H107241180 +107241180:lI101|H1072418D0 +1072418D0:lI97|H107241FC0 +107241FC0:lI109|N +10721BB40:Mn2:H10721F0D0,H10721F0E0 +10721F0D0:lH1072225A0|N +1072225A0:lI109|H107225748 +107225748:lI101|H1072285A0 +1072285A0:lI103|H10722AFE8 +10722AFE8:lI97|H10722D700 +10722D700:lI99|H10722FB98 +10722FB98:lI111|H107231D30 +107231D30:lI95|H107233BB8 +107233BB8:lI98|H107235750 +107235750:lI105|H107237078 +107237078:lI110|H107238770 +107238770:lI97|H107239C68 +107239C68:lI114|H10723B020 +10723B020:lI121|H10723C150 +10723C150:lI95|H10723D0D0 +10723D0D0:lI116|H10723DED0 +10723DED0:lI114|H10723EB30 +10723EB30:lI97|H10723F6A0 +10723F6A0:lI110|H1072400A0 +1072400A0:lI115|H107240980 +107240980:lI102|H107241160 +107241160:lI111|H1072418B0 +1072418B0:lI114|H107241FA0 +107241FA0:lI109|H107242620 +107242620:lI101|H107242C60 +107242C60:lI114|H1072431F0 +1072431F0:lI95|H107243740 +107243740:lI118|H107243C60 +107243C60:lI51|H107244150 +107244150:lI46|H107244600 +107244600:lI98|H107244A70 +107244A70:lI101|H107244EE0 +107244EE0:lI97|H107245330 +107245330:lI109|N +10721F0E0:lH1072225B0|N +1072225B0:lI109|H107225758 +107225758:lI101|H1072285B0 +1072285B0:lI103|H10722AFF8 +10722AFF8:lI97|H10722D710 +10722D710:lI99|H10722FBA8 +10722FBA8:lI111|H107231D40 +107231D40:lI95|H107233BC8 +107233BC8:lI99|H107235760 +107235760:lI111|H107237088 +107237088:lI109|H107238780 +107238780:lI112|H107239C78 +107239C78:lI97|H10723B030 +10723B030:lI99|H10723C160 +10723C160:lI116|H10723D0E0 +10723D0E0:lI95|H10723DEE0 +10723DEE0:lI116|H10723EB40 +10723EB40:lI101|H10723F6B0 +10723F6B0:lI120|H1072400B0 +1072400B0:lI116|H107240990 +107240990:lI95|H107241170 +107241170:lI101|H1072418C0 +1072418C0:lI110|H107241FB0 +107241FB0:lI99|H107242630 +107242630:lI111|H107242C70 +107242C70:lI100|H107243200 +107243200:lI101|H107243750 +107243750:lI114|H107243C70 +107243C70:lI95|H107244160 +107244160:lI118|H107244610 +107244610:lI49|H107244A80 +107244A80:lI46|H107244EF0 +107244EF0:lI98|H107245340 +107245340:lI101|H107245740 +107245740:lI97|H107245B10 +107245B10:lI109|N +10721BB30:lH10721F0C0|N +10721F0C0:lI109|H107222590 +107222590:lI101|H107225738 +107225738:lI103|H107228590 +107228590:lI97|H10722AFD8 +10722AFD8:lI99|H10722D6F0 +10722D6F0:lI111|H10722FB88 +10722FB88:lI46|H107231D20 +107231D20:lI97|H107233BA8 +107233BA8:lI112|H107235740 +107235740:lI112|N +1072184C8:Mn3:H10721BAF0,H10721BB00,H10721BB10 +10721BAF0:lH10721F080|N +10721F080:lI109|H107222550 +107222550:lI101|H1072256F8 +1072256F8:lI103|H107228550 +107228550:lI97|H10722AF98 +10722AF98:lI99|H10722D6B0 +10722D6B0:lI111|H10722FB48 +10722FB48:lI95|H107231CE0 +107231CE0:lI109|H107233B68 +107233B68:lI105|H107235700 +107235700:lI115|H107237038 +107237038:lI99|H107238730 +107238730:lI95|H107239C28 +107239C28:lI115|H10723AFE0 +10723AFE0:lI117|H10723C110 +10723C110:lI112|H10723D0A0 +10723D0A0:lI46|H10723DEA0 +10723DEA0:lI98|H10723EB00 +10723EB00:lI101|H10723F670 +10723F670:lI97|H107240070 +107240070:lI109|N +10721BB10:lH10721F0A0|N +10721F0A0:lI109|H107222570 +107222570:lI101|H107225718 +107225718:lI103|H107228570 +107228570:lI97|H10722AFB8 +10722AFB8:lI99|H10722D6D0 +10722D6D0:lI111|H10722FB68 +10722FB68:lI95|H107231D00 +107231D00:lI109|H107233B88 +107233B88:lI101|H107235720 +107235720:lI115|H107237058 +107237058:lI115|H107238750 +107238750:lI101|H107239C48 +107239C48:lI110|H10723B000 +10723B000:lI103|H10723C130 +10723C130:lI101|H10723D0C0 +10723D0C0:lI114|H10723DEC0 +10723DEC0:lI95|H10723EB20 +10723EB20:lI109|H10723F690 +10723F690:lI105|H107240090 +107240090:lI115|H107240970 +107240970:lI99|H107241150 +107241150:lI46|H1072418A0 +1072418A0:lI98|H107241F90 +107241F90:lI101|H107242610 +107242610:lI97|H107242C50 +107242C50:lI109|N +10721BB00:lH10721F090|N +10721F090:lI109|H107222560 +107222560:lI101|H107225708 +107225708:lI103|H107228560 +107228560:lI97|H10722AFA8 +10722AFA8:lI99|H10722D6C0 +10722D6C0:lI111|H10722FB58 +10722FB58:lI95|H107231CF0 +107231CF0:lI112|H107233B78 +107233B78:lI114|H107235710 +107235710:lI101|H107237048 +107237048:lI116|H107238740 +107238740:lI116|H107239C38 +107239C38:lI121|H10723AFF0 +10723AFF0:lI95|H10723C120 +10723C120:lI116|H10723D0B0 +10723D0B0:lI101|H10723DEB0 +10723DEB0:lI120|H10723EB10 +10723EB10:lI116|H10723F680 +10723F680:lI95|H107240080 +107240080:lI101|H107240960 +107240960:lI110|H107241140 +107241140:lI99|H107241890 +107241890:lI111|H107241F80 +107241F80:lI100|H107242600 +107242600:lI101|H107242C40 +107242C40:lI114|H1072431E0 +1072431E0:lI95|H107243730 +107243730:lI118|H107243C50 +107243C50:lI50|H107244140 +107244140:lI46|H1072445F0 +1072445F0:lI98|H107244A60 +107244A60:lI101|H107244ED0 +107244ED0:lI97|H107245320 +107245320:lI109|N +1072184B8:lH10721BAE0|N +10721BAE0:lI109|H10721F070 +10721F070:lI101|H107222540 +107222540:lI103|H1072256E8 +1072256E8:lI97|H107228540 +107228540:lI99|H10722AF88 +10722AF88:lI111|H10722D6A0 +10722D6A0:lI95|H10722FB38 +10722FB38:lI102|H107231CD0 +107231CD0:lI108|H107233B58 +107233B58:lI101|H1072356F0 +1072356F0:lI120|H107237028 +107237028:lI95|H107238720 +107238720:lI115|H107239C18 +107239C18:lI99|H10723AFD0 +10723AFD0:lI97|H10723C100 +10723C100:lI110|H10723D090 +10723D090:lI110|H10723DE90 +10723DE90:lI101|H10723EAF0 +10723EAF0:lI114|H10723F660 +10723F660:lI95|H107240060 +107240060:lI104|H107240950 +107240950:lI97|H107241130 +107241130:lI110|H107241880 +107241880:lI100|H107241F70 +107241F70:lI108|H1072425F0 +1072425F0:lI101|H107242C30 +107242C30:lI114|H1072431D0 +1072431D0:lI46|H107243720 +107243720:lI98|H107243C40 +107243C40:lI101|H107244130 +107244130:lI97|H1072445E0 +1072445E0:lI109|N +107218490:Mn4:H10721BAA0,H10721BAB0,H10721BAC0,H10721BAD0 +10721BAA0:lH10721F030|N +10721F030:lI109|H107222500 +107222500:lI101|H1072256A8 +1072256A8:lI103|H107228500 +107228500:lI97|H10722AF48 +10722AF48:lI99|H10722D660 +10722D660:lI111|H10722FAF8 +10722FAF8:lI95|H107231C90 +107231C90:lI116|H107233B18 +107233B18:lI99|H1072356B0 +1072356B0:lI112|H107236FE8 +107236FE8:lI95|H1072386E0 +1072386E0:lI99|H107239BD8 +107239BD8:lI111|H10723AF90 +10723AF90:lI110|H10723C0C0 +10723C0C0:lI110|H10723D050 +10723D050:lI101|H10723DE50 +10723DE50:lI99|H10723EAB0 +10723EAB0:lI116|H10723F620 +10723F620:lI105|H107240040 +107240040:lI111|H107240930 +107240930:lI110|H107241110 +107241110:lI95|H107241860 +107241860:lI115|H107241F50 +107241F50:lI117|H1072425D0 +1072425D0:lI112|H107242C10 +107242C10:lI46|H1072431B0 +1072431B0:lI98|H107243700 +107243700:lI101|H107243C20 +107243C20:lI97|H107244110 +107244110:lI109|N +10721BAD0:lH10721F060|N +10721F060:lI109|H107222530 +107222530:lI101|H1072256D8 +1072256D8:lI103|H107228530 +107228530:lI97|H10722AF78 +10722AF78:lI99|H10722D690 +10722D690:lI111|H10722FB28 +10722FB28:lI95|H107231CC0 +107231CC0:lI98|H107233B48 +107233B48:lI105|H1072356E0 +1072356E0:lI110|H107237018 +107237018:lI97|H107238710 +107238710:lI114|H107239C08 +107239C08:lI121|H10723AFC0 +10723AFC0:lI95|H10723C0F0 +10723C0F0:lI101|H10723D080 +10723D080:lI110|H10723DE80 +10723DE80:lI99|H10723EAE0 +10723EAE0:lI111|H10723F650 +10723F650:lI100|H107240050 +107240050:lI101|H107240940 +107240940:lI114|H107241120 +107241120:lI95|H107241870 +107241870:lI108|H107241F60 +107241F60:lI105|H1072425E0 +1072425E0:lI98|H107242C20 +107242C20:lI46|H1072431C0 +1072431C0:lI98|H107243710 +107243710:lI101|H107243C30 +107243C30:lI97|H107244120 +107244120:lI109|N +10721BAC0:lH10721F050|N +10721F050:lI109|H107222520 +107222520:lI101|H1072256C8 +1072256C8:lI103|H107228520 +107228520:lI97|H10722AF68 +10722AF68:lI99|H10722D680 +10722D680:lI111|H10722FB18 +10722FB18:lI95|H107231CB0 +107231CB0:lI117|H107233B38 +107233B38:lI100|H1072356D0 +1072356D0:lI112|H107237008 +107237008:lI95|H107238700 +107238700:lI115|H107239BF8 +107239BF8:lI117|H10723AFB0 +10723AFB0:lI112|H10723C0E0 +10723C0E0:lI46|H10723D070 +10723D070:lI98|H10723DE70 +10723DE70:lI101|H10723EAD0 +10723EAD0:lI97|H10723F640 +10723F640:lI109|N +10721BAB0:lH10721F040|N +10721F040:lI109|H107222510 +107222510:lI101|H1072256B8 +1072256B8:lI103|H107228510 +107228510:lI97|H10722AF58 +10722AF58:lI99|H10722D670 +10722D670:lI111|H10722FB08 +10722FB08:lI95|H107231CA0 +107231CA0:lI109|H107233B28 +107233B28:lI111|H1072356C0 +1072356C0:lI110|H107236FF8 +107236FF8:lI105|H1072386F0 +1072386F0:lI116|H107239BE8 +107239BE8:lI111|H10723AFA0 +10723AFA0:lI114|H10723C0D0 +10723C0D0:lI46|H10723D060 +10723D060:lI98|H10723DE60 +10723DE60:lI101|H10723EAC0 +10723EAC0:lI97|H10723F630 +10723F630:lI109|N +107218470:Mn3:H10721BA70,H10721BA80,H10721BA90 +10721BA70:lH10721F000|N +10721F000:lI109|H1072224D0 +1072224D0:lI101|H107225678 +107225678:lI103|H1072284D0 +1072284D0:lI97|H10722AF18 +10722AF18:lI99|H10722D630 +10722D630:lI111|H10722FAC8 +10722FAC8:lI95|H107231C60 +107231C60:lI116|H107233AE8 +107233AE8:lI114|H107235680 +107235680:lI97|H107236FB8 +107236FB8:lI110|H1072386B0 +1072386B0:lI115|H107239BA8 +107239BA8:lI112|H10723AF60 +10723AF60:lI111|H10723C090 +10723C090:lI114|H10723D020 +10723D020:lI116|H10723DE20 +10723DE20:lI46|H10723EA80 +10723EA80:lI98|H10723F5F0 +10723F5F0:lI101|H107240010 +107240010:lI97|H107240900 +107240900:lI109|N +10721BA90:lH10721F020|N +10721F020:lI109|H1072224F0 +1072224F0:lI101|H107225698 +107225698:lI103|H1072284F0 +1072284F0:lI97|H10722AF38 +10722AF38:lI99|H10722D650 +10722D650:lI111|H10722FAE8 +10722FAE8:lI95|H107231C80 +107231C80:lI98|H107233B08 +107233B08:lI101|H1072356A0 +1072356A0:lI114|H107236FD8 +107236FD8:lI95|H1072386D0 +1072386D0:lI109|H107239BC8 +107239BC8:lI101|H10723AF80 +10723AF80:lI100|H10723C0B0 +10723C0B0:lI105|H10723D040 +10723D040:lI97|H10723DE40 +10723DE40:lI95|H10723EAA0 +10723EAA0:lI103|H10723F610 +10723F610:lI97|H107240030 +107240030:lI116|H107240920 +107240920:lI101|H107241100 +107241100:lI119|H107241850 +107241850:lI97|H107241F40 +107241F40:lI121|H1072425C0 +1072425C0:lI95|H107242C00 +107242C00:lI99|H1072431A0 +1072431A0:lI111|H1072436F0 +1072436F0:lI110|H107243C10 +107243C10:lI116|H107244100 +107244100:lI114|H1072445D0 +1072445D0:lI111|H107244A50 +107244A50:lI108|H107244EC0 +107244EC0:lI95|H107245310 +107245310:lI118|H107245730 +107245730:lI50|H107245B00 +107245B00:lI46|H107245EA0 +107245EA0:lI98|H107246230 +107246230:lI101|H1072465C0 +1072465C0:lI97|H107246950 +107246950:lI109|N +10721BA80:lH10721F010|N +10721F010:lI109|H1072224E0 +1072224E0:lI101|H107225688 +107225688:lI103|H1072284E0 +1072284E0:lI97|H10722AF28 +10722AF28:lI99|H10722D640 +10722D640:lI111|H10722FAD8 +10722FAD8:lI95|H107231C70 +107231C70:lI116|H107233AF8 +107233AF8:lI101|H107235690 +107235690:lI120|H107236FC8 +107236FC8:lI116|H1072386C0 +1072386C0:lI95|H107239BB8 +107239BB8:lI112|H10723AF70 +10723AF70:lI97|H10723C0A0 +10723C0A0:lI114|H10723D030 +10723D030:lI115|H10723DE30 +10723DE30:lI101|H10723EA90 +10723EA90:lI114|H10723F600 +10723F600:lI95|H107240020 +107240020:lI118|H107240910 +107240910:lI49|H1072410F0 +1072410F0:lI46|H107241840 +107241840:lI98|H107241F30 +107241F30:lI101|H1072425B0 +1072425B0:lI97|H107242BF0 +107242BF0:lI109|N +107218450:Mn3:H10721BA40,H10721BA50,H10721BA60 +10721BA40:lH10721EFD0|N +10721EFD0:lI109|H1072224A0 +1072224A0:lI101|H107225648 +107225648:lI103|H1072284A0 +1072284A0:lI97|H10722AEE8 +10722AEE8:lI99|H10722D600 +10722D600:lI111|H10722FA98 +10722FA98:lI95|H107231C30 +107231C30:lI115|H107233AB8 +107233AB8:lI117|H107235650 +107235650:lI112|H107236F88 +107236F88:lI46|H107238680 +107238680:lI98|H107239B78 +107239B78:lI101|H10723AF30 +10723AF30:lI97|H10723C060 +10723C060:lI109|N +10721BA60:lH10721EFF0|N +10721EFF0:lI109|H1072224C0 +1072224C0:lI101|H107225668 +107225668:lI103|H1072284C0 +1072284C0:lI97|H10722AF08 +10722AF08:lI99|H10722D620 +10722D620:lI111|H10722FAB8 +10722FAB8:lI95|H107231C50 +107231C50:lI98|H107233AD8 +107233AD8:lI101|H107235670 +107235670:lI114|H107236FA8 +107236FA8:lI95|H1072386A0 +1072386A0:lI101|H107239B98 +107239B98:lI110|H10723AF50 +10723AF50:lI99|H10723C080 +10723C080:lI111|H10723D010 +10723D010:lI100|H10723DE10 +10723DE10:lI101|H10723EA70 +10723EA70:lI114|H10723F5E0 +10723F5E0:lI46|H107240000 +107240000:lI98|H1072408F0 +1072408F0:lI101|H1072410E0 +1072410E0:lI97|H107241830 +107241830:lI109|N +10721BA50:lH10721EFE0|N +10721EFE0:lI109|H1072224B0 +1072224B0:lI101|H107225658 +107225658:lI103|H1072284B0 +1072284B0:lI97|H10722AEF8 +10722AEF8:lI99|H10722D610 +10722D610:lI111|H10722FAA8 +10722FAA8:lI95|H107231C40 +107231C40:lI100|H107233AC8 +107233AC8:lI105|H107235660 +107235660:lI103|H107236F98 +107236F98:lI105|H107238690 +107238690:lI116|H107239B88 +107239B88:lI95|H10723AF40 +10723AF40:lI109|H10723C070 +10723C070:lI97|H10723D000 +10723D000:lI112|H10723DE00 +10723DE00:lI46|H10723EA60 +10723EA60:lI98|H10723F5D0 +10723F5D0:lI101|H10723FFF0 +10723FFF0:lI97|H1072408E0 +1072408E0:lI109|N +107218420:Mn5:H10721B9F0,H10721BA00,H10721BA10,H10721BA20,H10721BA30 +10721B9F0:lH10721EF80|N +10721EF80:lI109|H107222450 +107222450:lI101|H1072255F8 +1072255F8:lI103|H107228450 +107228450:lI97|H10722AE98 +10722AE98:lI99|H10722D5B0 +10722D5B0:lI111|H10722FA48 +10722FA48:lI95|H107231BE0 +107231BE0:lI112|H107233A68 +107233A68:lI101|H107235600 +107235600:lI114|H107236F38 +107236F38:lI95|H107238630 +107238630:lI109|H107239B38 +107239B38:lI101|H10723AEF0 +10723AEF0:lI100|H10723C020 +10723C020:lI105|H10723CFC0 +10723CFC0:lI97|H10723DDC0 +10723DDC0:lI95|H10723EA20 +10723EA20:lI103|H10723F590 +10723F590:lI97|H10723FFB0 +10723FFB0:lI116|H1072408A0 +1072408A0:lI101|H1072410A0 +1072410A0:lI119|H1072417F0 +1072417F0:lI97|H107241EF0 +107241EF0:lI121|H107242570 +107242570:lI95|H107242BB0 +107242BB0:lI99|H107243160 +107243160:lI111|H1072436B0 +1072436B0:lI110|H107243BD0 +107243BD0:lI116|H1072440C0 +1072440C0:lI114|H107244590 +107244590:lI111|H107244A10 +107244A10:lI108|H107244E80 +107244E80:lI95|H1072452D0 +1072452D0:lI118|H107245700 +107245700:lI50|H107245AE0 +107245AE0:lI46|H107245E80 +107245E80:lI98|H107246210 +107246210:lI101|H1072465A0 +1072465A0:lI97|H107246930 +107246930:lI109|N +10721BA30:lH10721EFC0|N +10721EFC0:lI109|H107222490 +107222490:lI101|H107225638 +107225638:lI103|H107228490 +107228490:lI97|H10722AED8 +10722AED8:lI99|H10722D5F0 +10722D5F0:lI111|H10722FA88 +10722FA88:lI46|H107231C20 +107231C20:lI97|H107233AA8 +107233AA8:lI112|H107235640 +107235640:lI112|H107236F78 +107236F78:lI117|H107238670 +107238670:lI112|N +10721BA20:lH10721EFB0|N +10721EFB0:lI109|H107222480 +107222480:lI101|H107225628 +107225628:lI103|H107228480 +107228480:lI97|H10722AEC8 +10722AEC8:lI99|H10722D5E0 +10722D5E0:lI111|H10722FA78 +10722FA78:lI95|H107231C10 +107231C10:lI112|H107233A98 +107233A98:lI101|H107235630 +107235630:lI114|H107236F68 +107236F68:lI95|H107238660 +107238660:lI109|H107239B68 +107239B68:lI101|H10723AF20 +10723AF20:lI100|H10723C050 +10723C050:lI105|H10723CFF0 +10723CFF0:lI97|H10723DDF0 +10723DDF0:lI95|H10723EA50 +10723EA50:lI103|H10723F5C0 +10723F5C0:lI97|H10723FFE0 +10723FFE0:lI116|H1072408D0 +1072408D0:lI101|H1072410D0 +1072410D0:lI119|H107241820 +107241820:lI97|H107241F20 +107241F20:lI121|H1072425A0 +1072425A0:lI95|H107242BE0 +107242BE0:lI99|H107243190 +107243190:lI111|H1072436E0 +1072436E0:lI110|H107243C00 +107243C00:lI116|H1072440F0 +1072440F0:lI114|H1072445C0 +1072445C0:lI111|H107244A40 +107244A40:lI108|H107244EB0 +107244EB0:lI95|H107245300 +107245300:lI118|H107245720 +107245720:lI51|H107245AF0 +107245AF0:lI46|H107245E90 +107245E90:lI98|H107246220 +107246220:lI101|H1072465B0 +1072465B0:lI97|H107246940 +107246940:lI109|N +10721BA10:lH10721EFA0|N +10721EFA0:lI109|H107222470 +107222470:lI101|H107225618 +107225618:lI103|H107228470 +107228470:lI97|H10722AEB8 +10722AEB8:lI99|H10722D5D0 +10722D5D0:lI111|H10722FA68 +10722FA68:lI95|H107231C00 +107231C00:lI112|H107233A88 +107233A88:lI114|H107235620 +107235620:lI101|H107236F58 +107236F58:lI116|H107238650 +107238650:lI116|H107239B58 +107239B58:lI121|H10723AF10 +10723AF10:lI95|H10723C040 +10723C040:lI116|H10723CFE0 +10723CFE0:lI101|H10723DDE0 +10723DDE0:lI120|H10723EA40 +10723EA40:lI116|H10723F5B0 +10723F5B0:lI95|H10723FFD0 +10723FFD0:lI101|H1072408C0 +1072408C0:lI110|H1072410C0 +1072410C0:lI99|H107241810 +107241810:lI111|H107241F10 +107241F10:lI100|H107242590 +107242590:lI101|H107242BD0 +107242BD0:lI114|H107243180 +107243180:lI95|H1072436D0 +1072436D0:lI118|H107243BF0 +107243BF0:lI51|H1072440E0 +1072440E0:lI46|H1072445B0 +1072445B0:lI98|H107244A30 +107244A30:lI101|H107244EA0 +107244EA0:lI97|H1072452F0 +1072452F0:lI109|N +10721BA00:lH10721EF90|N +10721EF90:lI109|H107222460 +107222460:lI101|H107225608 +107225608:lI103|H107228460 +107228460:lI97|H10722AEA8 +10722AEA8:lI99|H10722D5C0 +10722D5C0:lI111|H10722FA58 +10722FA58:lI95|H107231BF0 +107231BF0:lI98|H107233A78 +107233A78:lI105|H107235610 +107235610:lI110|H107236F48 +107236F48:lI97|H107238640 +107238640:lI114|H107239B48 +107239B48:lI121|H10723AF00 +10723AF00:lI95|H10723C030 +10723C030:lI110|H10723CFD0 +10723CFD0:lI97|H10723DDD0 +10723DDD0:lI109|H10723EA30 +10723EA30:lI101|H10723F5A0 +10723F5A0:lI95|H10723FFC0 +10723FFC0:lI114|H1072408B0 +1072408B0:lI101|H1072410B0 +1072410B0:lI115|H107241800 +107241800:lI111|H107241F00 +107241F00:lI108|H107242580 +107242580:lI118|H107242BC0 +107242BC0:lI101|H107243170 +107243170:lI114|H1072436C0 +1072436C0:lI95|H107243BE0 +107243BE0:lI118|H1072440D0 +1072440D0:lI49|H1072445A0 +1072445A0:lI46|H107244A20 +107244A20:lI98|H107244E90 +107244E90:lI101|H1072452E0 +1072452E0:lI97|H107245710 +107245710:lI109|N +1072183E8:Mn6:H10721B980,H10721B990,H10721B9A0,H10721B9B0,H10721B9D0,H10721B9E0 +10721B980:lH10721EF00|N +10721EF00:lI109|H1072223D0 +1072223D0:lI101|H107225578 +107225578:lI103|H1072283D0 +1072283D0:lI97|H10722AE18 +10722AE18:lI99|H10722D530 +10722D530:lI111|H10722F9C8 +10722F9C8:lI95|H107231B60 +107231B60:lI98|H1072339E8 +1072339E8:lI105|H107235580 +107235580:lI110|H107236EB8 +107236EB8:lI97|H1072385B0 +1072385B0:lI114|H107239AC8 +107239AC8:lI121|H10723AE80 +10723AE80:lI95|H10723BFB0 +10723BFB0:lI116|H10723CF60 +10723CF60:lI114|H10723DD60 +10723DD60:lI97|H10723E9C0 +10723E9C0:lI110|H10723F530 +10723F530:lI115|H10723FF50 +10723FF50:lI102|H107240840 +107240840:lI111|H107241040 +107241040:lI114|H107241790 +107241790:lI109|H107241E90 +107241E90:lI101|H107242520 +107242520:lI114|H107242B60 +107242B60:lI95|H107243110 +107243110:lI118|H107243670 +107243670:lI49|H107243B90 +107243B90:lI46|H107244080 +107244080:lI98|H107244560 +107244560:lI101|H1072449F0 +1072449F0:lI97|H107244E60 +107244E60:lI109|N +10721B9E0:lH10721EF70|N +10721EF70:lI109|H107222440 +107222440:lI101|H1072255E8 +1072255E8:lI103|H107228440 +107228440:lI97|H10722AE88 +10722AE88:lI99|H10722D5A0 +10722D5A0:lI111|H10722FA38 +10722FA38:lI95|H107231BD0 +107231BD0:lI102|H107233A58 +107233A58:lI108|H1072355F0 +1072355F0:lI101|H107236F28 +107236F28:lI120|H107238620 +107238620:lI95|H107239B28 +107239B28:lI115|H10723AEE0 +10723AEE0:lI99|H10723C010 +10723C010:lI97|H10723CFB0 +10723CFB0:lI110|H10723DDB0 +10723DDB0:lI110|H10723EA10 +10723EA10:lI101|H10723F580 +10723F580:lI114|H10723FFA0 +10723FFA0:lI46|H107240890 +107240890:lI98|H107241090 +107241090:lI101|H1072417E0 +1072417E0:lI97|H107241EE0 +107241EE0:lI109|N +10721B9D0:lH10721EF60|N +10721EF60:lI109|H107222430 +107222430:lI101|H1072255D8 +1072255D8:lI103|H107228430 +107228430:lI97|H10722AE78 +10722AE78:lI99|H10722D590 +10722D590:lI111|H10722FA28 +10722FA28:lI95|H107231BC0 +107231BC0:lI115|H107233A48 +107233A48:lI100|H1072355E0 +1072355E0:lI112|H107236F18 +107236F18:lI46|H107238610 +107238610:lI98|H107239B18 +107239B18:lI101|H10723AED0 +10723AED0:lI97|H10723C000 +10723C000:lI109|N +10721B9B0:Mn3:H10721EF30,H10721EF40,H10721EF50 +10721EF30:lH107222400|N +107222400:lI109|H1072255A8 +1072255A8:lI101|H107228400 +107228400:lI103|H10722AE48 +10722AE48:lI97|H10722D560 +10722D560:lI99|H10722F9F8 +10722F9F8:lI111|H107231B90 +107231B90:lI46|H107233A18 +107233A18:lI98|H1072355B0 +1072355B0:lI101|H107236EE8 +107236EE8:lI97|H1072385E0 +1072385E0:lI109|N +10721EF50:lH107222420|N +107222420:lI109|H1072255C8 +1072255C8:lI101|H107228420 +107228420:lI103|H10722AE68 +10722AE68:lI97|H10722D580 +10722D580:lI99|H10722FA18 +10722FA18:lI111|H107231BB0 +107231BB0:lI95|H107233A38 +107233A38:lI116|H1072355D0 +1072355D0:lI101|H107236F08 +107236F08:lI120|H107238600 +107238600:lI116|H107239B08 +107239B08:lI95|H10723AEC0 +10723AEC0:lI109|H10723BFF0 +10723BFF0:lI105|H10723CFA0 +10723CFA0:lI110|H10723DDA0 +10723DDA0:lI105|H10723EA00 +10723EA00:lI95|H10723F570 +10723F570:lI100|H10723FF90 +10723FF90:lI101|H107240880 +107240880:lI99|H107241080 +107241080:lI111|H1072417D0 +1072417D0:lI100|H107241ED0 +107241ED0:lI101|H107242560 +107242560:lI114|H107242BA0 +107242BA0:lI46|H107243150 +107243150:lI98|H1072436A0 +1072436A0:lI101|H107243BC0 +107243BC0:lI97|H1072440B0 +1072440B0:lI109|N +10721EF40:lH107222410|N +107222410:lI109|H1072255B8 +1072255B8:lI101|H107228410 +107228410:lI103|H10722AE58 +10722AE58:lI97|H10722D570 +10722D570:lI99|H10722FA08 +10722FA08:lI111|H107231BA0 +107231BA0:lI95|H107233A28 +107233A28:lI116|H1072355C0 +1072355C0:lI99|H107236EF8 +107236EF8:lI112|H1072385F0 +1072385F0:lI95|H107239AF8 +107239AF8:lI97|H10723AEB0 +10723AEB0:lI99|H10723BFE0 +10723BFE0:lI99|H10723CF90 +10723CF90:lI101|H10723DD90 +10723DD90:lI112|H10723E9F0 +10723E9F0:lI116|H10723F560 +10723F560:lI95|H10723FF80 +10723FF80:lI115|H107240870 +107240870:lI117|H107241070 +107241070:lI112|H1072417C0 +1072417C0:lI46|H107241EC0 +107241EC0:lI98|H107242550 +107242550:lI101|H107242B90 +107242B90:lI97|H107243140 +107243140:lI109|N +10721B9A0:lH10721EF20|N +10721EF20:lI109|H1072223F0 +1072223F0:lI101|H107225598 +107225598:lI103|H1072283F0 +1072283F0:lI97|H10722AE38 +10722AE38:lI99|H10722D550 +10722D550:lI111|H10722F9E8 +10722F9E8:lI95|H107231B80 +107231B80:lI98|H107233A08 +107233A08:lI105|H1072355A0 +1072355A0:lI110|H107236ED8 +107236ED8:lI97|H1072385D0 +1072385D0:lI114|H107239AE8 +107239AE8:lI121|H10723AEA0 +10723AEA0:lI95|H10723BFD0 +10723BFD0:lI110|H10723CF80 +10723CF80:lI97|H10723DD80 +10723DD80:lI109|H10723E9E0 +10723E9E0:lI101|H10723F550 +10723F550:lI95|H10723FF70 +10723FF70:lI114|H107240860 +107240860:lI101|H107241060 +107241060:lI115|H1072417B0 +1072417B0:lI111|H107241EB0 +107241EB0:lI108|H107242540 +107242540:lI118|H107242B80 +107242B80:lI101|H107243130 +107243130:lI114|H107243690 +107243690:lI95|H107243BB0 +107243BB0:lI118|H1072440A0 +1072440A0:lI51|H107244580 +107244580:lI46|H107244A00 +107244A00:lI98|H107244E70 +107244E70:lI101|H1072452C0 +1072452C0:lI97|H1072456F0 +1072456F0:lI109|N +10721B990:lH10721EF10|N +10721EF10:lI109|H1072223E0 +1072223E0:lI101|H107225588 +107225588:lI103|H1072283E0 +1072283E0:lI97|H10722AE28 +10722AE28:lI99|H10722D540 +10722D540:lI111|H10722F9D8 +10722F9D8:lI95|H107231B70 +107231B70:lI101|H1072339F8 +1072339F8:lI114|H107235590 +107235590:lI108|H107236EC8 +107236EC8:lI95|H1072385C0 +1072385C0:lI100|H107239AD8 +107239AD8:lI105|H10723AE90 +10723AE90:lI115|H10723BFC0 +10723BFC0:lI116|H10723CF70 +10723CF70:lI95|H10723DD70 +10723DD70:lI101|H10723E9D0 +10723E9D0:lI110|H10723F540 +10723F540:lI99|H10723FF60 +10723FF60:lI111|H107240850 +107240850:lI100|H107241050 +107241050:lI101|H1072417A0 +1072417A0:lI114|H107241EA0 +107241EA0:lI95|H107242530 +107242530:lI109|H107242B70 +107242B70:lI99|H107243120 +107243120:lI46|H107243680 +107243680:lI98|H107243BA0 +107243BA0:lI101|H107244090 +107244090:lI97|H107244570 +107244570:lI109|N +1072183D0:Mn2:H10721B958,H10721B970 +10721B958:Mn2:H10721EED0,H10721EEE0 +10721EED0:lH1072223A0|N +1072223A0:lI109|H107225548 +107225548:lI101|H1072283A0 +1072283A0:lI103|H10722ADE8 +10722ADE8:lI97|H10722D500 +10722D500:lI99|H10722F998 +10722F998:lI111|H107231B30 +107231B30:lI95|H1072339B8 +1072339B8:lI99|H107235550 +107235550:lI111|H107236E88 +107236E88:lI109|H107238580 +107238580:lI112|H107239A98 +107239A98:lI97|H10723AE50 +10723AE50:lI99|H10723BF80 +10723BF80:lI116|H10723CF30 +10723CF30:lI95|H10723DD30 +10723DD30:lI116|H10723E990 +10723E990:lI101|H10723F500 +10723F500:lI120|H10723FF20 +10723FF20:lI116|H107240810 +107240810:lI95|H107241010 +107241010:lI101|H107241760 +107241760:lI110|H107241E60 +107241E60:lI99|H107242510 +107242510:lI111|H107242B50 +107242B50:lI100|H107243100 +107243100:lI101|H107243660 +107243660:lI114|H107243B80 +107243B80:lI95|H107244070 +107244070:lI118|H107244550 +107244550:lI50|H1072449E0 +1072449E0:lI46|H107244E50 +107244E50:lI98|H1072452B0 +1072452B0:lI101|H1072456E0 +1072456E0:lI97|H107245AD0 +107245AD0:lI109|N +10721EEE0:lH1072223B0|N +1072223B0:lI109|H107225558 +107225558:lI101|H1072283B0 +1072283B0:lI103|H10722ADF8 +10722ADF8:lI97|H10722D510 +10722D510:lI99|H10722F9A8 +10722F9A8:lI111|H107231B40 +107231B40:lI95|H1072339C8 +1072339C8:lI112|H107235560 +107235560:lI101|H107236E98 +107236E98:lI114|H107238590 +107238590:lI95|H107239AA8 +107239AA8:lI101|H10723AE60 +10723AE60:lI110|H10723BF90 +10723BF90:lI99|H10723CF40 +10723CF40:lI111|H10723DD40 +10723DD40:lI100|H10723E9A0 +10723E9A0:lI101|H10723F510 +10723F510:lI114|H10723FF30 +10723FF30:lI46|H107240820 +107240820:lI98|H107241020 +107241020:lI101|H107241770 +107241770:lI97|H107241E70 +107241E70:lI109|N +10721B970:lH10721EEF0|N +10721EEF0:lI109|H1072223C0 +1072223C0:lI101|H107225568 +107225568:lI103|H1072283C0 +1072283C0:lI97|H10722AE08 +10722AE08:lI99|H10722D520 +10722D520:lI111|H10722F9B8 +10722F9B8:lI95|H107231B50 +107231B50:lI117|H1072339D8 +1072339D8:lI115|H107235570 +107235570:lI101|H107236EA8 +107236EA8:lI114|H1072385A0 +1072385A0:lI95|H107239AB8 +107239AB8:lI100|H10723AE70 +10723AE70:lI101|H10723BFA0 +10723BFA0:lI102|H10723CF50 +10723CF50:lI97|H10723DD50 +10723DD50:lI117|H10723E9B0 +10723E9B0:lI108|H10723F520 +10723F520:lI116|H10723FF40 +10723FF40:lI46|H107240830 +107240830:lI98|H107241030 +107241030:lI101|H107241780 +107241780:lI97|H107241E80 +107241E80:lI109|N +107218398:Mn6:H10721B8E8,H10721B8F8,H10721B910,H10721B928,H10721B938,H10721B948 +10721B8E8:lH10721EE50|N +10721EE50:lI109|H107222320 +107222320:lI101|H1072254C8 +1072254C8:lI103|H107228320 +107228320:lI97|H10722AD68 +10722AD68:lI99|H10722D480 +10722D480:lI111|H10722F918 +10722F918:lI95|H107231AB0 +107231AB0:lI112|H107233938 +107233938:lI114|H1072354D0 +1072354D0:lI101|H107236E08 +107236E08:lI116|H107238500 +107238500:lI116|H107239A18 +107239A18:lI121|H10723ADD0 +10723ADD0:lI95|H10723BF00 +10723BF00:lI116|H10723CEB0 +10723CEB0:lI101|H10723DCB0 +10723DCB0:lI120|H10723E920 +10723E920:lI116|H10723F490 +10723F490:lI95|H10723FEB0 +10723FEB0:lI101|H1072407A0 +1072407A0:lI110|H107240FA0 +107240FA0:lI99|H1072416F0 +1072416F0:lI111|H107241E00 +107241E00:lI100|H1072424B0 +1072424B0:lI101|H107242AF0 +107242AF0:lI114|H1072430B0 +1072430B0:lI95|H107243620 +107243620:lI118|H107243B40 +107243B40:lI49|H107244030 +107244030:lI46|H107244510 +107244510:lI98|H1072449B0 +1072449B0:lI101|H107244E20 +107244E20:lI97|H107245280 +107245280:lI109|N +10721B948:lH10721EEC0|N +10721EEC0:lI109|H107222390 +107222390:lI101|H107225538 +107225538:lI103|H107228390 +107228390:lI97|H10722ADD8 +10722ADD8:lI99|H10722D4F0 +10722D4F0:lI111|H10722F988 +10722F988:lI95|H107231B20 +107231B20:lI98|H1072339A8 +1072339A8:lI105|H107235540 +107235540:lI110|H107236E78 +107236E78:lI97|H107238570 +107238570:lI114|H107239A88 +107239A88:lI121|H10723AE40 +10723AE40:lI95|H10723BF70 +10723BF70:lI116|H10723CF20 +10723CF20:lI101|H10723DD20 +10723DD20:lI114|H10723E980 +10723E980:lI109|H10723F4F0 +10723F4F0:lI95|H10723FF10 +10723FF10:lI105|H107240800 +107240800:lI100|H107241000 +107241000:lI46|H107241750 +107241750:lI98|H107241E50 +107241E50:lI101|H107242500 +107242500:lI97|H107242B40 +107242B40:lI109|N +10721B938:lH10721EEB0|N +10721EEB0:lI109|H107222380 +107222380:lI101|H107225528 +107225528:lI103|H107228380 +107228380:lI97|H10722ADC8 +10722ADC8:lI99|H10722D4E0 +10722D4E0:lI111|H10722F978 +10722F978:lI95|H107231B10 +107231B10:lI115|H107233998 +107233998:lI116|H107235530 +107235530:lI97|H107236E68 +107236E68:lI116|H107238560 +107238560:lI115|H107239A78 +107239A78:lI46|H10723AE30 +10723AE30:lI98|H10723BF60 +10723BF60:lI101|H10723CF10 +10723CF10:lI97|H10723DD10 +10723DD10:lI109|N +10721B928:lH10721EEA0|N +10721EEA0:lI109|H107222370 +107222370:lI101|H107225518 +107225518:lI103|H107228370 +107228370:lI97|H10722ADB8 +10722ADB8:lI99|H10722D4D0 +10722D4D0:lI111|H10722F968 +10722F968:lI95|H107231B00 +107231B00:lI99|H107233988 +107233988:lI111|H107235520 +107235520:lI109|H107236E58 +107236E58:lI112|H107238550 +107238550:lI97|H107239A68 +107239A68:lI99|H10723AE20 +10723AE20:lI116|H10723BF50 +10723BF50:lI95|H10723CF00 +10723CF00:lI116|H10723DD00 +10723DD00:lI101|H10723E970 +10723E970:lI120|H10723F4E0 +10723F4E0:lI116|H10723FF00 +10723FF00:lI95|H1072407F0 +1072407F0:lI101|H107240FF0 +107240FF0:lI110|H107241740 +107241740:lI99|H107241E40 +107241E40:lI111|H1072424F0 +1072424F0:lI100|H107242B30 +107242B30:lI101|H1072430F0 +1072430F0:lI114|H107243650 +107243650:lI95|H107243B70 +107243B70:lI118|H107244060 +107244060:lI51|H107244540 +107244540:lI46|H1072449D0 +1072449D0:lI98|H107244E40 +107244E40:lI101|H1072452A0 +1072452A0:lI97|H1072456D0 +1072456D0:lI109|N +10721B910:Mn2:H10721EE80,H10721EE90 +10721EE80:lH107222350|N +107222350:lI109|H1072254F8 +1072254F8:lI101|H107228350 +107228350:lI103|H10722AD98 +10722AD98:lI97|H10722D4B0 +10722D4B0:lI99|H10722F948 +10722F948:lI111|H107231AE0 +107231AE0:lI95|H107233968 +107233968:lI98|H107235500 +107235500:lI101|H107236E38 +107236E38:lI114|H107238530 +107238530:lI95|H107239A48 +107239A48:lI109|H10723AE00 +10723AE00:lI101|H10723BF30 +10723BF30:lI100|H10723CEE0 +10723CEE0:lI105|H10723DCE0 +10723DCE0:lI97|H10723E950 +10723E950:lI95|H10723F4C0 +10723F4C0:lI103|H10723FEE0 +10723FEE0:lI97|H1072407D0 +1072407D0:lI116|H107240FD0 +107240FD0:lI101|H107241720 +107241720:lI119|H107241E30 +107241E30:lI97|H1072424E0 +1072424E0:lI121|H107242B20 +107242B20:lI95|H1072430E0 +1072430E0:lI99|H107243640 +107243640:lI111|H107243B60 +107243B60:lI110|H107244050 +107244050:lI116|H107244530 +107244530:lI114|H1072449C0 +1072449C0:lI111|H107244E30 +107244E30:lI108|H107245290 +107245290:lI95|H1072456C0 +1072456C0:lI118|H107245AC0 +107245AC0:lI51|H107245E70 +107245E70:lI46|H107246200 +107246200:lI98|H107246590 +107246590:lI101|H107246920 +107246920:lI97|H107246C90 +107246C90:lI109|N +10721EE90:lH107222360|N +107222360:lI109|H107225508 +107225508:lI101|H107228360 +107228360:lI103|H10722ADA8 +10722ADA8:lI97|H10722D4C0 +10722D4C0:lI99|H10722F958 +10722F958:lI111|H107231AF0 +107231AF0:lI95|H107233978 +107233978:lI116|H107235510 +107235510:lI99|H107236E48 +107236E48:lI112|H107238540 +107238540:lI95|H107239A58 +107239A58:lI97|H10723AE10 +10723AE10:lI99|H10723BF40 +10723BF40:lI99|H10723CEF0 +10723CEF0:lI101|H10723DCF0 +10723DCF0:lI112|H10723E960 +10723E960:lI116|H10723F4D0 +10723F4D0:lI46|H10723FEF0 +10723FEF0:lI98|H1072407E0 +1072407E0:lI101|H107240FE0 +107240FE0:lI97|H107241730 +107241730:lI109|N +10721B8F8:Mn2:H10721EE60,H10721EE70 +10721EE60:lH107222330|N +107222330:lI109|H1072254D8 +1072254D8:lI101|H107228330 +107228330:lI103|H10722AD78 +10722AD78:lI97|H10722D490 +10722D490:lI99|H10722F928 +10722F928:lI111|H107231AC0 +107231AC0:lI95|H107233948 +107233948:lI116|H1072354E0 +1072354E0:lI101|H107236E18 +107236E18:lI120|H107238510 +107238510:lI116|H107239A28 +107239A28:lI95|H10723ADE0 +10723ADE0:lI112|H10723BF10 +10723BF10:lI97|H10723CEC0 +10723CEC0:lI114|H10723DCC0 +10723DCC0:lI115|H10723E930 +10723E930:lI101|H10723F4A0 +10723F4A0:lI114|H10723FEC0 +10723FEC0:lI95|H1072407B0 +1072407B0:lI118|H107240FB0 +107240FB0:lI50|H107241700 +107241700:lI46|H107241E10 +107241E10:lI98|H1072424C0 +1072424C0:lI101|H107242B00 +107242B00:lI97|H1072430C0 +1072430C0:lI109|N +10721EE70:lH107222340|N +107222340:lI109|H1072254E8 +1072254E8:lI101|H107228340 +107228340:lI103|H10722AD88 +10722AD88:lI97|H10722D4A0 +10722D4A0:lI99|H10722F938 +10722F938:lI111|H107231AD0 +107231AD0:lI95|H107233958 +107233958:lI98|H1072354F0 +1072354F0:lI105|H107236E28 +107236E28:lI110|H107238520 +107238520:lI97|H107239A38 +107239A38:lI114|H10723ADF0 +10723ADF0:lI121|H10723BF20 +10723BF20:lI95|H10723CED0 +10723CED0:lI116|H10723DCD0 +10723DCD0:lI101|H10723E940 +10723E940:lI114|H10723F4B0 +10723F4B0:lI109|H10723FED0 +10723FED0:lI95|H1072407C0 +1072407C0:lI105|H107240FC0 +107240FC0:lI100|H107241710 +107241710:lI95|H107241E20 +107241E20:lI103|H1072424D0 +1072424D0:lI101|H107242B10 +107242B10:lI110|H1072430D0 +1072430D0:lI46|H107243630 +107243630:lI98|H107243B50 +107243B50:lI101|H107244040 +107244040:lI97|H107244520 +107244520:lI109|N +107218378:Mn3:H10721B8B8,H10721B8C8,H10721B8D8 +10721B8B8:lH10721EE18|N +10721EE18:lI109|H1072222E0 +1072222E0:lI101|H107225488 +107225488:lI103|H1072282E0 +1072282E0:lI97|H10722AD28 +10722AD28:lI99|H10722D440 +10722D440:lI111|H10722F8D8 +10722F8D8:lI95|H107231A70 +107231A70:lI101|H1072338F8 +1072338F8:lI110|H107235490 +107235490:lI99|H107236DC8 +107236DC8:lI111|H1072384C0 +1072384C0:lI100|H1072399D8 +1072399D8:lI101|H10723AD90 +10723AD90:lI114|H10723BEC0 +10723BEC0:lI46|H10723CE70 +10723CE70:lI98|H10723DC70 +10723DC70:lI101|H10723E8E0 +10723E8E0:lI97|H10723F460 +10723F460:lI109|N +10721B8D8:Mn1:H10721EE38 +10721EE38:Mn2:H107222300,H107222310 +107222300:lH1072254A8|N +1072254A8:lI109|H107228300 +107228300:lI101|H10722AD48 +10722AD48:lI103|H10722D460 +10722D460:lI97|H10722F8F8 +10722F8F8:lI99|H107231A90 +107231A90:lI111|H107233918 +107233918:lI95|H1072354B0 +1072354B0:lI116|H107236DE8 +107236DE8:lI99|H1072384E0 +1072384E0:lI112|H1072399F8 +1072399F8:lI95|H10723ADB0 +10723ADB0:lI115|H10723BEE0 +10723BEE0:lI117|H10723CE90 +10723CE90:lI112|H10723DC90 +10723DC90:lI46|H10723E900 +10723E900:lI98|H10723F470 +10723F470:lI101|H10723FE90 +10723FE90:lI97|H107240780 +107240780:lI109|N +107222310:lH1072254B8|N +1072254B8:lI109|H107228310 +107228310:lI101|H10722AD58 +10722AD58:lI103|H10722D470 +10722D470:lI97|H10722F908 +10722F908:lI99|H107231AA0 +107231AA0:lI111|H107233928 +107233928:lI95|H1072354C0 +1072354C0:lI116|H107236DF8 +107236DF8:lI101|H1072384F0 +1072384F0:lI120|H107239A08 +107239A08:lI116|H10723ADC0 +10723ADC0:lI95|H10723BEF0 +10723BEF0:lI109|H10723CEA0 +10723CEA0:lI105|H10723DCA0 +10723DCA0:lI110|H10723E910 +10723E910:lI105|H10723F480 +10723F480:lI95|H10723FEA0 +10723FEA0:lI112|H107240790 +107240790:lI97|H107240F90 +107240F90:lI114|H1072416E0 +1072416E0:lI115|H107241DF0 +107241DF0:lI101|H1072424A0 +1072424A0:lI114|H107242AE0 +107242AE0:lI46|H1072430A0 +1072430A0:lI98|H107243610 +107243610:lI101|H107243B30 +107243B30:lI97|H107244020 +107244020:lI109|N +10721B8C8:lH10721EE28|N +10721EE28:lI109|H1072222F0 +1072222F0:lI101|H107225498 +107225498:lI103|H1072282F0 +1072282F0:lI97|H10722AD38 +10722AD38:lI99|H10722D450 +10722D450:lI111|H10722F8E8 +10722F8E8:lI95|H107231A80 +107231A80:lI99|H107233908 +107233908:lI111|H1072354A0 +1072354A0:lI110|H107236DD8 +107236DD8:lI102|H1072384D0 +1072384D0:lI105|H1072399E8 +1072399E8:lI103|H10723ADA0 +10723ADA0:lI46|H10723BED0 +10723BED0:lI98|H10723CE80 +10723CE80:lI101|H10723DC80 +10723DC80:lI97|H10723E8F0 +10723E8F0:lI109|N +107218350:Mn4:H10721B870,H10721B888,H10721B898,H10721B8A8 +10721B870:Mn2:H10721EDC0,H10721EDD0 +10721EDC0:lH107222280|N +107222280:lI109|H107225428 +107225428:lI101|H107228280 +107228280:lI103|H10722ACC8 +10722ACC8:lI97|H10722D3E0 +10722D3E0:lI99|H10722F878 +10722F878:lI111|H107231A10 +107231A10:lI95|H107233898 +107233898:lI109|H107235430 +107235430:lI101|H107236D68 +107236D68:lI115|H107238460 +107238460:lI115|H107239978 +107239978:lI101|H10723AD30 +10723AD30:lI110|H10723BE60 +10723BE60:lI103|H10723CE10 +10723CE10:lI101|H10723DC10 +10723DC10:lI114|H10723E880 +10723E880:lI46|H10723F400 +10723F400:lI98|H10723FE30 +10723FE30:lI101|H107240720 +107240720:lI97|H107240F40 +107240F40:lI109|N +10721EDD0:lH107222290|N +107222290:lI109|H107225438 +107225438:lI101|H107228290 +107228290:lI103|H10722ACD8 +10722ACD8:lI97|H10722D3F0 +10722D3F0:lI99|H10722F888 +10722F888:lI111|H107231A20 +107231A20:lI95|H1072338A8 +1072338A8:lI98|H107235440 +107235440:lI105|H107236D78 +107236D78:lI110|H107238470 +107238470:lI97|H107239988 +107239988:lI114|H10723AD40 +10723AD40:lI121|H10723BE70 +10723BE70:lI95|H10723CE20 +10723CE20:lI116|H10723DC20 +10723DC20:lI114|H10723E890 +10723E890:lI97|H10723F410 +10723F410:lI110|H10723FE40 +10723FE40:lI115|H107240730 +107240730:lI102|H107240F50 +107240F50:lI111|H1072416A0 +1072416A0:lI114|H107241DB0 +107241DB0:lI109|H107242460 +107242460:lI101|H107242AB0 +107242AB0:lI114|H107243070 +107243070:lI95|H1072435E0 +1072435E0:lI118|H107243B10 +107243B10:lI50|H107244000 +107244000:lI46|H1072444F0 +1072444F0:lI98|H1072449A0 +1072449A0:lI101|H107244E10 +107244E10:lI97|H107245270 +107245270:lI109|N +10721B8A8:Mn1:H10721EE00 +10721EE00:Mn2:H1072222C0,H1072222D0 +1072222C0:lH107225468|N +107225468:lI109|H1072282C0 +1072282C0:lI101|H10722AD08 +10722AD08:lI103|H10722D420 +10722D420:lI97|H10722F8B8 +10722F8B8:lI99|H107231A50 +107231A50:lI111|H1072338D8 +1072338D8:lI95|H107235470 +107235470:lI98|H107236DA8 +107236DA8:lI105|H1072384A0 +1072384A0:lI110|H1072399B8 +1072399B8:lI97|H10723AD70 +10723AD70:lI114|H10723BEA0 +10723BEA0:lI121|H10723CE50 +10723CE50:lI95|H10723DC50 +10723DC50:lI101|H10723E8C0 +10723E8C0:lI110|H10723F440 +10723F440:lI99|H10723FE70 +10723FE70:lI111|H107240760 +107240760:lI100|H107240F70 +107240F70:lI101|H1072416C0 +1072416C0:lI114|H107241DD0 +107241DD0:lI46|H107242480 +107242480:lI98|H107242AD0 +107242AD0:lI101|H107243090 +107243090:lI97|H107243600 +107243600:lI109|N +1072222D0:lH107225478|N +107225478:lI109|H1072282D0 +1072282D0:lI101|H10722AD18 +10722AD18:lI103|H10722D430 +10722D430:lI97|H10722F8C8 +10722F8C8:lI99|H107231A60 +107231A60:lI111|H1072338E8 +1072338E8:lI95|H107235480 +107235480:lI99|H107236DB8 +107236DB8:lI111|H1072384B0 +1072384B0:lI110|H1072399C8 +1072399C8:lI102|H10723AD80 +10723AD80:lI105|H10723BEB0 +10723BEB0:lI103|H10723CE60 +10723CE60:lI95|H10723DC60 +10723DC60:lI109|H10723E8D0 +10723E8D0:lI105|H10723F450 +10723F450:lI115|H10723FE80 +10723FE80:lI99|H107240770 +107240770:lI46|H107240F80 +107240F80:lI98|H1072416D0 +1072416D0:lI101|H107241DE0 +107241DE0:lI97|H107242490 +107242490:lI109|N +10721B898:lH10721EDF0|N +10721EDF0:lI109|H1072222B0 +1072222B0:lI101|H107225458 +107225458:lI103|H1072282B0 +1072282B0:lI97|H10722ACF8 +10722ACF8:lI99|H10722D410 +10722D410:lI111|H10722F8A8 +10722F8A8:lI95|H107231A40 +107231A40:lI112|H1072338C8 +1072338C8:lI114|H107235460 +107235460:lI101|H107236D98 +107236D98:lI116|H107238490 +107238490:lI116|H1072399A8 +1072399A8:lI121|H10723AD60 +10723AD60:lI95|H10723BE90 +10723BE90:lI116|H10723CE40 +10723CE40:lI101|H10723DC40 +10723DC40:lI120|H10723E8B0 +10723E8B0:lI116|H10723F430 +10723F430:lI95|H10723FE60 +10723FE60:lI101|H107240750 +107240750:lI110|H107240F60 +107240F60:lI99|H1072416B0 +1072416B0:lI111|H107241DC0 +107241DC0:lI100|H107242470 +107242470:lI101|H107242AC0 +107242AC0:lI114|H107243080 +107243080:lI46|H1072435F0 +1072435F0:lI98|H107243B20 +107243B20:lI101|H107244010 +107244010:lI97|H107244500 +107244500:lI109|N +10721B888:lH10721EDE0|N +10721EDE0:lI109|H1072222A0 +1072222A0:lI101|H107225448 +107225448:lI103|H1072282A0 +1072282A0:lI97|H10722ACE8 +10722ACE8:lI99|H10722D400 +10722D400:lI111|H10722F898 +10722F898:lI95|H107231A30 +107231A30:lI116|H1072338B8 +1072338B8:lI114|H107235450 +107235450:lI97|H107236D88 +107236D88:lI110|H107238480 +107238480:lI115|H107239998 +107239998:lI95|H10723AD50 +10723AD50:lI115|H10723BE80 +10723BE80:lI117|H10723CE30 +10723CE30:lI112|H10723DC30 +10723DC30:lI46|H10723E8A0 +10723E8A0:lI98|H10723F420 +10723F420:lI101|H10723FE50 +10723FE50:lI97|H107240740 +107240740:lI109|N +107218320:Mn5:H10721B820,H10721B830,H10721B840,H10721B850,H10721B860 +10721B820:lH10721ED70|N +10721ED70:lI109|H107222230 +107222230:lI101|H1072253D8 +1072253D8:lI103|H107228230 +107228230:lI97|H10722AC78 +10722AC78:lI99|H10722D390 +10722D390:lI111|H10722F828 +10722F828:lI95|H1072319C0 +1072319C0:lI117|H107233848 +107233848:lI100|H1072353E0 +1072353E0:lI112|H107236D18 +107236D18:lI46|H107238410 +107238410:lI98|H107239928 +107239928:lI101|H10723ACE0 +10723ACE0:lI97|H10723BE10 +10723BE10:lI109|N +10721B860:lH10721EDB0|N +10721EDB0:lI109|H107222270 +107222270:lI101|H107225418 +107225418:lI103|H107228270 +107228270:lI97|H10722ACB8 +10722ACB8:lI99|H10722D3D0 +10722D3D0:lI111|H10722F868 +10722F868:lI95|H107231A00 +107231A00:lI98|H107233888 +107233888:lI101|H107235420 +107235420:lI114|H107236D58 +107236D58:lI95|H107238450 +107238450:lI109|H107239968 +107239968:lI101|H10723AD20 +10723AD20:lI100|H10723BE50 +10723BE50:lI105|H10723CE00 +10723CE00:lI97|H10723DC00 +10723DC00:lI95|H10723E870 +10723E870:lI103|H10723F3F0 +10723F3F0:lI97|H10723FE20 +10723FE20:lI116|H107240710 +107240710:lI101|H107240F30 +107240F30:lI119|H107241690 +107241690:lI97|H107241DA0 +107241DA0:lI121|H107242450 +107242450:lI95|H107242AA0 +107242AA0:lI99|H107243060 +107243060:lI111|H1072435D0 +1072435D0:lI110|H107243B00 +107243B00:lI116|H107243FF0 +107243FF0:lI114|H1072444E0 +1072444E0:lI111|H107244990 +107244990:lI108|H107244E00 +107244E00:lI95|H107245260 +107245260:lI118|H1072456B0 +1072456B0:lI49|H107245AB0 +107245AB0:lI46|H107245E60 +107245E60:lI98|H1072461F0 +1072461F0:lI101|H107246580 +107246580:lI97|H107246910 +107246910:lI109|N +10721B850:lH10721EDA0|N +10721EDA0:lI109|H107222260 +107222260:lI101|H107225408 +107225408:lI103|H107228260 +107228260:lI97|H10722ACA8 +10722ACA8:lI99|H10722D3C0 +10722D3C0:lI111|H10722F858 +10722F858:lI95|H1072319F0 +1072319F0:lI116|H107233878 +107233878:lI99|H107235410 +107235410:lI112|H107236D48 +107236D48:lI95|H107238440 +107238440:lI99|H107239958 +107239958:lI111|H10723AD10 +10723AD10:lI110|H10723BE40 +10723BE40:lI110|H10723CDF0 +10723CDF0:lI101|H10723DBF0 +10723DBF0:lI99|H10723E860 +10723E860:lI116|H10723F3E0 +10723F3E0:lI105|H10723FE10 +10723FE10:lI111|H107240700 +107240700:lI110|H107240F20 +107240F20:lI46|H107241680 +107241680:lI98|H107241D90 +107241D90:lI101|H107242440 +107242440:lI97|H107242A90 +107242A90:lI109|N +10721B840:lH10721ED90|N +10721ED90:lI109|H107222250 +107222250:lI101|H1072253F8 +1072253F8:lI103|H107228250 +107228250:lI97|H10722AC98 +10722AC98:lI99|H10722D3B0 +10722D3B0:lI111|H10722F848 +10722F848:lI95|H1072319E0 +1072319E0:lI116|H107233868 +107233868:lI101|H107235400 +107235400:lI120|H107236D38 +107236D38:lI116|H107238430 +107238430:lI95|H107239948 +107239948:lI115|H10723AD00 +10723AD00:lI99|H10723BE30 +10723BE30:lI97|H10723CDE0 +10723CDE0:lI110|H10723DBE0 +10723DBE0:lI110|H10723E850 +10723E850:lI101|H10723F3D0 +10723F3D0:lI114|H10723FE00 +10723FE00:lI46|H1072406F0 +1072406F0:lI98|H107240F10 +107240F10:lI101|H107241670 +107241670:lI97|H107241D80 +107241D80:lI109|N +10721B830:lH10721ED80|N +10721ED80:lI109|H107222240 +107222240:lI101|H1072253E8 +1072253E8:lI103|H107228240 +107228240:lI97|H10722AC88 +10722AC88:lI99|H10722D3A0 +10722D3A0:lI111|H10722F838 +10722F838:lI95|H1072319D0 +1072319D0:lI117|H107233858 +107233858:lI100|H1072353F0 +1072353F0:lI112|H107236D28 +107236D28:lI95|H107238420 +107238420:lI115|H107239938 +107239938:lI101|H10723ACF0 +10723ACF0:lI114|H10723BE20 +10723BE20:lI118|H10723CDD0 +10723CDD0:lI101|H10723DBD0 +10723DBD0:lI114|H10723E840 +10723E840:lI46|H10723F3C0 +10723F3C0:lI98|H10723FDF0 +10723FDF0:lI101|H1072406E0 +1072406E0:lI97|H107240F00 +107240F00:lI109|N +107214EB0:lI47|H1072182F0 +1072182F0:lI111|H10721B7E0 +10721B7E0:lI112|H10721ED30 +10721ED30:lI116|H1072221F0 +1072221F0:lI47|H107225398 +107225398:lI104|H1072281F0 +1072281F0:lI111|H10722AC38 +10722AC38:lI109|H10722D350 +10722D350:lI101|H10722F7E8 +10722F7E8:lI98|H107231980 +107231980:lI114|H107233808 +107233808:lI101|H1072353A0 +1072353A0:lI119|H107236CD8 +107236CD8:lI47|H1072383D0 +1072383D0:lI67|H1072398E8 +1072398E8:lI101|H10723ACA0 +10723ACA0:lI108|H10723BDD0 +10723BDD0:lI108|H10723CD90 +10723CD90:lI97|H10723DB90 +10723DB90:lI114|H10723E810 +10723E810:lI47|H10723F390 +10723F390:lI101|H10723FDC0 +10723FDC0:lI114|H1072406B0 +1072406B0:lI108|H107240ED0 +107240ED0:lI97|H107241640 +107241640:lI110|H107241D50 +107241D50:lI103|H107242410 +107242410:lI47|H107242A60 +107242A60:lI50|H107243040 +107243040:lI54|H1072435B0 +1072435B0:lI46|H107243AE0 +107243AE0:lI48|H107243FD0 +107243FD0:lI46|H1072444C0 +1072444C0:lI50|H107244970 +107244970:lI47|H107244DE0 +107244DE0:lI108|H107245240 +107245240:lI105|H107245690 +107245690:lI98|H107245A90 +107245A90:lI47|H107245E40 +107245E40:lI101|H1072461D0 +1072461D0:lI114|H107246560 +107246560:lI108|H1072468F0 +1072468F0:lI97|H107246C80 +107246C80:lI110|H107246FB0 +107246FB0:lI103|H1072472D0 +1072472D0:lI47|H1072475E0 +1072475E0:lI108|H1072478E0 +1072478E0:lI105|H107247BE0 +107247BE0:lI98|H107247EC0 +107247EC0:lI47|H107248180 +107248180:lI109|H107248440 +107248440:lI101|H1072486F0 +1072486F0:lI103|H1072489A0 +1072489A0:lI97|H107248C20 +107248C20:lI99|H107248E90 +107248E90:lI111|H107249100 +107249100:lI45|H107249360 +107249360:lI52|H1072495C0 +1072495C0:lI46|H107249810 +107249810:lI52|H107249A30 +107249A30:lI46|H107249C30 +107249C30:lI52|H107249E10 +107249E10:lI47|H280052C20 +107211A88:lH107214F48|H107214F60 +107214F48:t2:H107218548,H107218558 +107218558:Mh41:10:H10721BBD8,H10721BBF8,H10721BC20,H10721BC50,H10721BC68,H10721BC78,H10721BCA8,H10721BCD8,H10721BCF8,H10721BD18,H10721BD48,H10721BD88,H10721BDA0,H10721BDC8,H10721BDF8,H10721BE10 +10721BBD8:Mn3:H10721F170,H10721F188,H10721F198 +10721F170:Mn2:H107222640,H107222650 +107222640:lH1072257E8|N +1072257E8:lI105|H107228640 +107228640:lI110|H10722B088 +10722B088:lI101|H10722D7A0 +10722D7A0:lI116|H10722FC38 +10722FC38:lI115|H107231DD0 +107231DD0:lI95|H107233C58 +107233C58:lI115|H1072357F0 +1072357F0:lI101|H107237118 +107237118:lI114|H107238810 +107238810:lI118|H107239D08 +107239D08:lI105|H10723B0C0 +10723B0C0:lI99|H10723C1F0 +10723C1F0:lI101|H10723D170 +10723D170:lI46|H10723DF60 +10723DF60:lI98|H10723EBC0 +10723EBC0:lI101|H10723F720 +10723F720:lI97|H107240120 +107240120:lI109|N +107222650:lH1072257F8|N +1072257F8:lI104|H107228650 +107228650:lI116|H10722B098 +10722B098:lI116|H10722D7B0 +10722D7B0:lI112|H10722FC48 +10722FC48:lI99|H107231DE0 +107231DE0:lI95|H107233C68 +107233C68:lI114|H107235800 +107235800:lI101|H107237128 +107237128:lI115|H107238820 +107238820:lI112|H107239D18 +107239D18:lI111|H10723B0D0 +10723B0D0:lI110|H10723C200 +10723C200:lI115|H10723D180 +10723D180:lI101|H10723DF70 +10723DF70:lI46|H10723EBD0 +10723EBD0:lI98|H10723F730 +10723F730:lI101|H107240130 +107240130:lI97|H107240A00 +107240A00:lI109|N +10721F198:lH107222670|N +107222670:lI104|H107225818 +107225818:lI116|H107228670 +107228670:lI116|H10722B0B8 +10722B0B8:lI112|H10722D7D0 +10722D7D0:lI100|H10722FC68 +10722FC68:lI95|H107231E00 +107231E00:lI114|H107233C88 +107233C88:lI101|H107235820 +107235820:lI115|H107237148 +107237148:lI112|H107238840 +107238840:lI111|H107239D38 +107239D38:lI110|H10723B0F0 +10723B0F0:lI115|H10723C220 +10723C220:lI101|H10723D1A0 +10723D1A0:lI46|H10723DF90 +10723DF90:lI98|H10723EBF0 +10723EBF0:lI101|H10723F750 +10723F750:lI97|H107240150 +107240150:lI109|N +10721F188:lH107222660|N +107222660:lI109|H107225808 +107225808:lI111|H107228660 +107228660:lI100|H10722B0A8 +10722B0A8:lI95|H10722D7C0 +10722D7C0:lI97|H10722FC58 +10722FC58:lI117|H107231DF0 +107231DF0:lI116|H107233C78 +107233C78:lI104|H107235810 +107235810:lI95|H107237138 +107237138:lI115|H107238830 +107238830:lI101|H107239D28 +107239D28:lI114|H10723B0E0 +10723B0E0:lI118|H10723C210 +10723C210:lI101|H10723D190 +10723D190:lI114|H10723DF80 +10723DF80:lI46|H10723EBE0 +10723EBE0:lI98|H10723F740 +10723F740:lI101|H107240140 +107240140:lI97|H107240A10 +107240A10:lI109|N +10721BE10:Mn4:H10721F518,H10721F528,H10721F538,H10721F548 +10721F518:lH107222A10|N +107222A10:lI109|H107225BB8 +107225BB8:lI111|H107228A10 +107228A10:lI100|H10722B458 +10722B458:lI95|H10722DB70 +10722DB70:lI115|H107230008 +107230008:lI101|H1072321A0 +1072321A0:lI99|H107234028 +107234028:lI117|H107235BC0 +107235BC0:lI114|H1072374E8 +1072374E8:lI105|H107238BA0 +107238BA0:lI116|H10723A088 +10723A088:lI121|H10723B400 +10723B400:lI95|H10723C520 +10723C520:lI115|H10723D3F0 +10723D3F0:lI101|H10723E190 +10723E190:lI114|H10723EDD0 +10723EDD0:lI118|H10723F8B0 +10723F8B0:lI101|H107240220 +107240220:lI114|H107240AB0 +107240AB0:lI46|H107241270 +107241270:lI98|H1072419A0 +1072419A0:lI101|H107242070 +107242070:lI97|H1072426E0 +1072426E0:lI109|N +10721F548:lH107222A40|N +107222A40:lI109|H107225BE8 +107225BE8:lI111|H107228A40 +107228A40:lI100|H10722B488 +10722B488:lI95|H10722DBA0 +10722DBA0:lI104|H107230038 +107230038:lI101|H1072321D0 +1072321D0:lI97|H107234058 +107234058:lI100|H107235BF0 +107235BF0:lI46|H107237518 +107237518:lI98|H107238BD0 +107238BD0:lI101|H10723A0B8 +10723A0B8:lI97|H10723B420 +10723B420:lI109|N +10721F538:lH107222A30|N +107222A30:lI109|H107225BD8 +107225BD8:lI111|H107228A30 +107228A30:lI100|H10722B478 +10722B478:lI95|H10722DB90 +10722DB90:lI108|H107230028 +107230028:lI111|H1072321C0 +1072321C0:lI103|H107234048 +107234048:lI46|H107235BE0 +107235BE0:lI98|H107237508 +107237508:lI101|H107238BC0 +107238BC0:lI97|H10723A0A8 +10723A0A8:lI109|N +10721F528:lH107222A20|N +107222A20:lI109|H107225BC8 +107225BC8:lI111|H107228A20 +107228A20:lI100|H10722B468 +10722B468:lI95|H10722DB80 +10722DB80:lI97|H107230018 +107230018:lI117|H1072321B0 +1072321B0:lI116|H107234038 +107234038:lI104|H107235BD0 +107235BD0:lI95|H1072374F8 +1072374F8:lI109|H107238BB0 +107238BB0:lI110|H10723A098 +10723A098:lI101|H10723B410 +10723B410:lI115|H10723C530 +10723C530:lI105|H10723D400 +10723D400:lI97|H10723E1A0 +10723E1A0:lI46|H10723EDE0 +10723EDE0:lI98|H10723F8C0 +10723F8C0:lI101|H107240230 +107240230:lI97|H107240AC0 +107240AC0:lI109|N +10721BDF8:Mn2:H10721F4F0,H10721F508 +10721F4F0:Mn2:H1072229E0,H1072229F0 +1072229E0:lH107225B88|N +107225B88:lI109|H1072289E0 +1072289E0:lI111|H10722B428 +10722B428:lI100|H10722DB40 +10722DB40:lI95|H10722FFD8 +10722FFD8:lI97|H107232170 +107232170:lI99|H107233FF8 +107233FF8:lI116|H107235B90 +107235B90:lI105|H1072374B8 +1072374B8:lI111|H107238B80 +107238B80:lI110|H10723A068 +10723A068:lI115|H10723B3E0 +10723B3E0:lI46|H10723C500 +10723C500:lI98|H10723D3E0 +10723D3E0:lI101|H10723E180 +10723E180:lI97|H10723EDC0 +10723EDC0:lI109|N +1072229F0:lH107225B98|N +107225B98:lI109|H1072289F0 +1072289F0:lI111|H10722B438 +10722B438:lI100|H10722DB50 +10722DB50:lI95|H10722FFE8 +10722FFE8:lI97|H107232180 +107232180:lI117|H107234008 +107234008:lI116|H107235BA0 +107235BA0:lI104|H1072374C8 +1072374C8:lI46|H107238B90 +107238B90:lI98|H10723A078 +10723A078:lI101|H10723B3F0 +10723B3F0:lI97|H10723C510 +10723C510:lI109|N +10721F508:lH107222A00|N +107222A00:lI104|H107225BA8 +107225BA8:lI116|H107228A00 +107228A00:lI116|H10722B448 +10722B448:lI112|H10722DB60 +10722DB60:lI99|H10722FFF8 +10722FFF8:lI46|H107232190 +107232190:lI98|H107234018 +107234018:lI101|H107235BB0 +107235BB0:lI97|H1072374D8 +1072374D8:lI109|N +10721BDC8:Mn5:H10721F4A0,H10721F4B0,H10721F4C0,H10721F4D0,H10721F4E0 +10721F4A0:lH107222990|N +107222990:lI104|H107225B38 +107225B38:lI116|H107228990 +107228990:lI116|H10722B3D8 +10722B3D8:lI112|H10722DAF0 +10722DAF0:lI99|H10722FF88 +10722FF88:lI95|H107232120 +107232120:lI104|H107233FA8 +107233FA8:lI97|H107235B40 +107235B40:lI110|H107237468 +107237468:lI100|H107238B50 +107238B50:lI108|H10723A038 +10723A038:lI101|H10723B3B0 +10723B3B0:lI114|H10723C4D0 +10723C4D0:lI95|H10723D3B0 +10723D3B0:lI115|H10723E150 +10723E150:lI117|H10723ED90 +10723ED90:lI112|H10723F880 +10723F880:lI46|H107240200 +107240200:lI98|H107240AA0 +107240AA0:lI101|H107241260 +107241260:lI97|H107241990 +107241990:lI109|N +10721F4E0:lH1072229D0|N +1072229D0:lI105|H107225B78 +107225B78:lI110|H1072289D0 +1072289D0:lI101|H10722B418 +10722B418:lI116|H10722DB30 +10722DB30:lI115|H10722FFC8 +10722FFC8:lI46|H107232160 +107232160:lI98|H107233FE8 +107233FE8:lI101|H107235B80 +107235B80:lI97|H1072374A8 +1072374A8:lI109|N +10721F4D0:lH1072229C0|N +1072229C0:lI104|H107225B68 +107225B68:lI116|H1072289C0 +1072289C0:lI116|H10722B408 +10722B408:lI112|H10722DB20 +10722DB20:lI100|H10722FFB8 +10722FFB8:lI95|H107232150 +107232150:lI109|H107233FD8 +107233FD8:lI105|H107235B70 +107235B70:lI115|H107237498 +107237498:lI99|H107238B70 +107238B70:lI95|H10723A058 +10723A058:lI115|H10723B3D0 +10723B3D0:lI117|H10723C4F0 +10723C4F0:lI112|H10723D3D0 +10723D3D0:lI46|H10723E170 +10723E170:lI98|H10723EDB0 +10723EDB0:lI101|H10723F8A0 +10723F8A0:lI97|H107240210 +107240210:lI109|N +10721F4C0:lH1072229B0|N +1072229B0:lI104|H107225B58 +107225B58:lI116|H1072289B0 +1072289B0:lI116|H10722B3F8 +10722B3F8:lI112|H10722DB10 +10722DB10:lI100|H10722FFA8 +10722FFA8:lI46|H107232140 +107232140:lI98|H107233FC8 +107233FC8:lI101|H107235B60 +107235B60:lI97|H107237488 +107237488:lI109|N +10721F4B0:lH1072229A0|N +1072229A0:lI104|H107225B48 +107225B48:lI116|H1072289A0 +1072289A0:lI116|H10722B3E8 +10722B3E8:lI112|H10722DB00 +10722DB00:lI100|H10722FF98 +10722FF98:lI95|H107232130 +107232130:lI109|H107233FB8 +107233FB8:lI97|H107235B50 +107235B50:lI110|H107237478 +107237478:lI97|H107238B60 +107238B60:lI103|H10723A048 +10723A048:lI101|H10723B3C0 +10723B3C0:lI114|H10723C4E0 +10723C4E0:lI46|H10723D3C0 +10723D3C0:lI98|H10723E160 +10723E160:lI101|H10723EDA0 +10723EDA0:lI97|H10723F890 +10723F890:lI109|N +10721BDA0:Mn4:H10721F460,H10721F470,H10721F480,H10721F490 +10721F460:lH107222950|N +107222950:lI104|H107225AF8 +107225AF8:lI116|H107228950 +107228950:lI116|H10722B398 +10722B398:lI112|H10722DAB0 +10722DAB0:lI100|H10722FF48 +10722FF48:lI95|H1072320E0 +1072320E0:lI115|H107233F68 +107233F68:lI117|H107235B00 +107235B00:lI112|H107237428 +107237428:lI46|H107238B10 +107238B10:lI98|H107239FF8 +107239FF8:lI101|H10723B380 +10723B380:lI97|H10723C4A0 +10723C4A0:lI109|N +10721F490:lH107222980|N +107222980:lI109|H107225B28 +107225B28:lI111|H107228980 +107228980:lI100|H10722B3C8 +10722B3C8:lI95|H10722DAE0 +10722DAE0:lI103|H10722FF78 +10722FF78:lI101|H107232110 +107232110:lI116|H107233F98 +107233F98:lI46|H107235B30 +107235B30:lI98|H107237458 +107237458:lI101|H107238B40 +107238B40:lI97|H10723A028 +10723A028:lI109|N +10721F480:lH107222970|N +107222970:lI104|H107225B18 +107225B18:lI116|H107228970 +107228970:lI116|H10722B3B8 +10722B3B8:lI112|H10722DAD0 +10722DAD0:lI95|H10722FF68 +10722FF68:lI114|H107232100 +107232100:lI101|H107233F88 +107233F88:lI115|H107235B20 +107235B20:lI112|H107237448 +107237448:lI111|H107238B30 +107238B30:lI110|H10723A018 +10723A018:lI115|H10723B3A0 +10723B3A0:lI101|H10723C4C0 +10723C4C0:lI46|H10723D3A0 +10723D3A0:lI98|H10723E140 +10723E140:lI101|H10723ED80 +10723ED80:lI97|H10723F870 +10723F870:lI109|N +10721F470:lH107222960|N +107222960:lI104|H107225B08 +107225B08:lI116|H107228960 +107228960:lI116|H10722B3A8 +10722B3A8:lI112|H10722DAC0 +10722DAC0:lI100|H10722FF58 +10722FF58:lI95|H1072320F0 +1072320F0:lI108|H107233F78 +107233F78:lI111|H107235B10 +107235B10:lI103|H107237438 +107237438:lI103|H107238B20 +107238B20:lI101|H10723A008 +10723A008:lI114|H10723B390 +10723B390:lI46|H10723C4B0 +10723C4B0:lI98|H10723D390 +10723D390:lI101|H10723E130 +10723E130:lI97|H10723ED70 +10723ED70:lI109|N +10721BD88:Mn2:H10721F440,H10721F450 +10721F440:lH107222930|N +107222930:lI109|H107225AD8 +107225AD8:lI111|H107228930 +107228930:lI100|H10722B378 +10722B378:lI95|H10722DA90 +10722DA90:lI100|H10722FF28 +10722FF28:lI105|H1072320C0 +1072320C0:lI114|H107233F48 +107233F48:lI46|H107235AE0 +107235AE0:lI98|H107237408 +107237408:lI101|H107238AF0 +107238AF0:lI97|H107239FD8 +107239FD8:lI109|N +10721F450:lH107222940|N +107222940:lI104|H107225AE8 +107225AE8:lI116|H107228940 +107228940:lI116|H10722B388 +10722B388:lI112|H10722DAA0 +10722DAA0:lI95|H10722FF38 +10722FF38:lI117|H1072320D0 +1072320D0:lI116|H107233F58 +107233F58:lI105|H107235AF0 +107235AF0:lI108|H107237418 +107237418:lI46|H107238B00 +107238B00:lI98|H107239FE8 +107239FE8:lI101|H10723B370 +10723B370:lI97|H10723C490 +10723C490:lI109|N +10721BD48:Mn7:H10721F3C8,H10721F3D8,H10721F3E8,H10721F3F8,H10721F410,H10721F420,H10721F430 +10721F3C8:lH1072228B0|N +1072228B0:lI104|H107225A58 +107225A58:lI116|H1072288B0 +1072288B0:lI116|H10722B2F8 +10722B2F8:lI112|H10722DA10 +10722DA10:lI100|H10722FEA8 +10722FEA8:lI95|H107232040 +107232040:lI101|H107233EC8 +107233EC8:lI120|H107235A60 +107235A60:lI97|H107237388 +107237388:lI109|H107238A70 +107238A70:lI112|H107239F58 +107239F58:lI108|H10723B2F0 +10723B2F0:lI101|H10723C410 +10723C410:lI46|H10723D330 +10723D330:lI98|H10723E100 +10723E100:lI101|H10723ED40 +10723ED40:lI97|H10723F850 +10723F850:lI109|N +10721F430:lH107222920|N +107222920:lI104|H107225AC8 +107225AC8:lI116|H107228920 +107228920:lI116|H10722B368 +10722B368:lI112|H10722DA80 +10722DA80:lI100|H10722FF18 +10722FF18:lI95|H1072320B0 +1072320B0:lI102|H107233F38 +107233F38:lI105|H107235AD0 +107235AD0:lI108|H1072373F8 +1072373F8:lI101|H107238AE0 +107238AE0:lI46|H107239FC8 +107239FC8:lI98|H10723B360 +10723B360:lI101|H10723C480 +10723C480:lI97|H10723D380 +10723D380:lI109|N +10721F420:lH107222910|N +107222910:lI104|H107225AB8 +107225AB8:lI116|H107228910 +107228910:lI116|H10722B358 +10722B358:lI112|H10722DA70 +10722DA70:lI99|H10722FF08 +10722FF08:lI95|H1072320A0 +1072320A0:lI99|H107233F28 +107233F28:lI111|H107235AC0 +107235AC0:lI111|H1072373E8 +1072373E8:lI107|H107238AD0 +107238AD0:lI105|H107239FB8 +107239FB8:lI101|H10723B350 +10723B350:lI46|H10723C470 +10723C470:lI98|H10723D370 +10723D370:lI101|H10723E120 +10723E120:lI97|H10723ED60 +10723ED60:lI109|N +10721F410:lH107222900|N +107222900:lI104|H107225AA8 +107225AA8:lI116|H107228900 +107228900:lI116|H10722B348 +10722B348:lI112|H10722DA60 +10722DA60:lI99|H10722FEF8 +10722FEF8:lI95|H107232090 +107232090:lI114|H107233F18 +107233F18:lI101|H107235AB0 +107235AB0:lI113|H1072373D8 +1072373D8:lI117|H107238AC0 +107238AC0:lI101|H107239FA8 +107239FA8:lI115|H10723B340 +10723B340:lI116|H10723C460 +10723C460:lI46|H10723D360 +10723D360:lI98|H10723E110 +10723E110:lI101|H10723ED50 +10723ED50:lI97|H10723F860 +10723F860:lI109|N +10721F3F8:Mn2:H1072228E0,H1072228F0 +1072228E0:lH107225A88|N +107225A88:lI104|H1072288E0 +1072288E0:lI116|H10722B328 +10722B328:lI116|H10722DA40 +10722DA40:lI112|H10722FED8 +10722FED8:lI100|H107232070 +107232070:lI95|H107233EF8 +107233EF8:lI99|H107235A90 +107235A90:lI103|H1072373B8 +1072373B8:lI105|H107238AA0 +107238AA0:lI46|H107239F88 +107239F88:lI98|H10723B320 +10723B320:lI101|H10723C440 +10723C440:lI97|H10723D340 +10723D340:lI109|N +1072228F0:lH107225A98|N +107225A98:lI109|H1072288F0 +1072288F0:lI111|H10722B338 +10722B338:lI100|H10722DA50 +10722DA50:lI95|H10722FEE8 +10722FEE8:lI97|H107232080 +107232080:lI108|H107233F08 +107233F08:lI105|H107235AA0 +107235AA0:lI97|H1072373C8 +1072373C8:lI115|H107238AB0 +107238AB0:lI46|H107239F98 +107239F98:lI98|H10723B330 +10723B330:lI101|H10723C450 +10723C450:lI97|H10723D350 +10723D350:lI109|N +10721F3E8:lH1072228D0|N +1072228D0:lI105|H107225A78 +107225A78:lI110|H1072288D0 +1072288D0:lI101|H10722B318 +10722B318:lI116|H10722DA30 +10722DA30:lI115|H10722FEC8 +10722FEC8:lI95|H107232060 +107232060:lI97|H107233EE8 +107233EE8:lI112|H107235A80 +107235A80:lI112|H1072373A8 +1072373A8:lI46|H107238A90 +107238A90:lI98|H107239F78 +107239F78:lI101|H10723B310 +10723B310:lI97|H10723C430 +10723C430:lI109|N +10721F3D8:lH1072228C0|N +1072228C0:lI109|H107225A68 +107225A68:lI111|H1072288C0 +1072288C0:lI100|H10722B308 +10722B308:lI95|H10722DA20 +10722DA20:lI114|H10722FEB8 +10722FEB8:lI97|H107232050 +107232050:lI110|H107233ED8 +107233ED8:lI103|H107235A70 +107235A70:lI101|H107237398 +107237398:lI46|H107238A80 +107238A80:lI98|H107239F68 +107239F68:lI101|H10723B300 +10723B300:lI97|H10723C420 +10723C420:lI109|N +10721BD18:Mn5:H10721F378,H10721F388,H10721F398,H10721F3A8,H10721F3B8 +10721F378:lH107222860|N +107222860:lI104|H107225A08 +107225A08:lI116|H107228860 +107228860:lI116|H10722B2A8 +10722B2A8:lI112|H10722D9C0 +10722D9C0:lI99|H10722FE58 +10722FE58:lI95|H107231FF0 +107231FF0:lI109|H107233E78 +107233E78:lI97|H107235A10 +107235A10:lI110|H107237338 +107237338:lI97|H107238A20 +107238A20:lI103|H107239F08 +107239F08:lI101|H10723B2A0 +10723B2A0:lI114|H10723C3C0 +10723C3C0:lI46|H10723D2E0 +10723D2E0:lI98|H10723E0C0 +10723E0C0:lI101|H10723ED00 +10723ED00:lI97|H10723F820 +10723F820:lI109|N +10721F3B8:lH1072228A0|N +1072228A0:lI109|H107225A48 +107225A48:lI111|H1072288A0 +1072288A0:lI100|H10722B2E8 +10722B2E8:lI95|H10722DA00 +10722DA00:lI115|H10722FE98 +10722FE98:lI101|H107232030 +107232030:lI99|H107233EB8 +107233EB8:lI117|H107235A50 +107235A50:lI114|H107237378 +107237378:lI105|H107238A60 +107238A60:lI116|H107239F48 +107239F48:lI121|H10723B2E0 +10723B2E0:lI46|H10723C400 +10723C400:lI98|H10723D320 +10723D320:lI101|H10723E0F0 +10723E0F0:lI97|H10723ED30 +10723ED30:lI109|N +10721F3A8:lH107222890|N +107222890:lI104|H107225A38 +107225A38:lI116|H107228890 +107228890:lI116|H10722B2D8 +10722B2D8:lI112|H10722D9F0 +10722D9F0:lI100|H10722FE88 +10722FE88:lI95|H107232020 +107232020:lI99|H107233EA8 +107233EA8:lI111|H107235A40 +107235A40:lI110|H107237368 +107237368:lI102|H107238A50 +107238A50:lI46|H107239F38 +107239F38:lI98|H10723B2D0 +10723B2D0:lI101|H10723C3F0 +10723C3F0:lI97|H10723D310 +10723D310:lI109|N +10721F398:lH107222880|N +107222880:lI104|H107225A28 +107225A28:lI116|H107228880 +107228880:lI116|H10722B2C8 +10722B2C8:lI112|H10722D9E0 +10722D9E0:lI95|H10722FE78 +10722FE78:lI116|H107232010 +107232010:lI114|H107233E98 +107233E98:lI97|H107235A30 +107235A30:lI110|H107237358 +107237358:lI115|H107238A40 +107238A40:lI112|H107239F28 +107239F28:lI111|H10723B2C0 +10723B2C0:lI114|H10723C3E0 +10723C3E0:lI116|H10723D300 +10723D300:lI46|H10723E0E0 +10723E0E0:lI98|H10723ED20 +10723ED20:lI101|H10723F840 +10723F840:lI97|H1072401F0 +1072401F0:lI109|N +10721F388:lH107222870|N +107222870:lI104|H107225A18 +107225A18:lI116|H107228870 +107228870:lI116|H10722B2B8 +10722B2B8:lI112|H10722D9D0 +10722D9D0:lI100|H10722FE68 +10722FE68:lI95|H107232000 +107232000:lI114|H107233E88 +107233E88:lI101|H107235A20 +107235A20:lI113|H107237348 +107237348:lI117|H107238A30 +107238A30:lI101|H107239F18 +107239F18:lI115|H10723B2B0 +10723B2B0:lI116|H10723C3D0 +10723C3D0:lI95|H10723D2F0 +10723D2F0:lI104|H10723E0D0 +10723E0D0:lI97|H10723ED10 +10723ED10:lI110|H10723F830 +10723F830:lI100|H1072401E0 +1072401E0:lI108|H107240A90 +107240A90:lI101|H107241250 +107241250:lI114|H107241980 +107241980:lI46|H107242060 +107242060:lI98|H1072426D0 +1072426D0:lI101|H107242CE0 +107242CE0:lI97|H107243250 +107243250:lI109|N +10721BCF8:Mn3:H10721F348,H10721F358,H10721F368 +10721F348:lH107222830|N +107222830:lI104|H1072259D8 +1072259D8:lI116|H107228830 +107228830:lI116|H10722B278 +10722B278:lI112|H10722D990 +10722D990:lI95|H10722FE28 +10722FE28:lI117|H107231FC0 +107231FC0:lI114|H107233E48 +107233E48:lI105|H1072359E0 +1072359E0:lI46|H107237308 +107237308:lI98|H1072389F0 +1072389F0:lI101|H107239ED8 +107239ED8:lI97|H10723B270 +10723B270:lI109|N +10721F368:lH107222850|N +107222850:lI104|H1072259F8 +1072259F8:lI116|H107228850 +107228850:lI116|H10722B298 +10722B298:lI112|H10722D9B0 +10722D9B0:lI99|H10722FE48 +10722FE48:lI95|H107231FE0 +107231FE0:lI112|H107233E68 +107233E68:lI114|H107235A00 +107235A00:lI111|H107237328 +107237328:lI102|H107238A10 +107238A10:lI105|H107239EF8 +107239EF8:lI108|H10723B290 +10723B290:lI101|H10723C3B0 +10723C3B0:lI95|H10723D2D0 +10723D2D0:lI115|H10723E0B0 +10723E0B0:lI117|H10723ECF0 +10723ECF0:lI112|H10723F810 +10723F810:lI46|H1072401D0 +1072401D0:lI98|H107240A80 +107240A80:lI101|H107241240 +107241240:lI97|H107241970 +107241970:lI109|N +10721F358:lH107222840|N +107222840:lI104|H1072259E8 +1072259E8:lI116|H107228840 +107228840:lI116|H10722B288 +10722B288:lI112|H10722D9A0 +10722D9A0:lI100|H10722FE38 +10722FE38:lI95|H107231FD0 +107231FD0:lI115|H107233E58 +107233E58:lI99|H1072359F0 +1072359F0:lI114|H107237318 +107237318:lI105|H107238A00 +107238A00:lI112|H107239EE8 +107239EE8:lI116|H10723B280 +10723B280:lI95|H10723C3A0 +10723C3A0:lI101|H10723D2C0 +10723D2C0:lI110|H10723E0A0 +10723E0A0:lI118|H10723ECE0 +10723ECE0:lI46|H10723F800 +10723F800:lI98|H1072401C0 +1072401C0:lI101|H107240A70 +107240A70:lI97|H107241230 +107241230:lI109|N +10721BCD8:Mn3:H10721F318,H10721F328,H10721F338 +10721F318:lH107222800|N +107222800:lI105|H1072259A8 +1072259A8:lI110|H107228800 +107228800:lI101|H10722B248 +10722B248:lI116|H10722D960 +10722D960:lI115|H10722FDF8 +10722FDF8:lI46|H107231F90 +107231F90:lI97|H107233E18 +107233E18:lI112|H1072359B0 +1072359B0:lI112|H1072372D8 +1072372D8:lI117|H1072389C0 +1072389C0:lI112|N +10721F338:lH107222820|N +107222820:lI104|H1072259C8 +1072259C8:lI116|H107228820 +107228820:lI116|H10722B268 +10722B268:lI112|H10722D980 +10722D980:lI100|H10722FE18 +10722FE18:lI95|H107231FB0 +107231FB0:lI117|H107233E38 +107233E38:lI116|H1072359D0 +1072359D0:lI105|H1072372F8 +1072372F8:lI108|H1072389E0 +1072389E0:lI46|H107239EC8 +107239EC8:lI98|H10723B260 +10723B260:lI101|H10723C390 +10723C390:lI97|H10723D2B0 +10723D2B0:lI109|N +10721F328:lH107222810|N +107222810:lI104|H1072259B8 +1072259B8:lI116|H107228810 +107228810:lI116|H10722B258 +10722B258:lI112|H10722D970 +10722D970:lI99|H10722FE08 +10722FE08:lI95|H107231FA0 +107231FA0:lI104|H107233E28 +107233E28:lI97|H1072359C0 +1072359C0:lI110|H1072372E8 +1072372E8:lI100|H1072389D0 +1072389D0:lI108|H107239EB8 +107239EB8:lI101|H10723B250 +10723B250:lI114|H10723C380 +10723C380:lI46|H10723D2A0 +10723D2A0:lI98|H10723E090 +10723E090:lI101|H10723ECD0 +10723ECD0:lI97|H10723F7F0 +10723F7F0:lI109|N +10721BCA8:Mn5:H10721F2C0,H10721F2D0,H10721F2E8,H10721F2F8,H10721F308 +10721F2C0:lH1072227A0|N +1072227A0:lI104|H107225948 +107225948:lI116|H1072287A0 +1072287A0:lI116|H10722B1E8 +10722B1E8:lI112|H10722D900 +10722D900:lI100|H10722FD98 +10722FD98:lI95|H107231F30 +107231F30:lI108|H107233DB8 +107233DB8:lI111|H107235950 +107235950:lI103|H107237278 +107237278:lI46|H107238970 +107238970:lI98|H107239E68 +107239E68:lI101|H10723B220 +10723B220:lI97|H10723C350 +10723C350:lI109|N +10721F308:lH1072227F0|N +1072227F0:lI109|H107225998 +107225998:lI111|H1072287F0 +1072287F0:lI100|H10722B238 +10722B238:lI95|H10722D950 +10722D950:lI99|H10722FDE8 +10722FDE8:lI103|H107231F80 +107231F80:lI105|H107233E08 +107233E08:lI46|H1072359A0 +1072359A0:lI98|H1072372C8 +1072372C8:lI101|H1072389B0 +1072389B0:lI97|H107239EA8 +107239EA8:lI109|N +10721F2F8:lH1072227E0|N +1072227E0:lI109|H107225988 +107225988:lI111|H1072287E0 +1072287E0:lI100|H10722B228 +10722B228:lI95|H10722D940 +10722D940:lI101|H10722FDD8 +10722FDD8:lI115|H107231F70 +107231F70:lI105|H107233DF8 +107233DF8:lI46|H107235990 +107235990:lI98|H1072372B8 +1072372B8:lI101|H1072389A0 +1072389A0:lI97|H107239E98 +107239E98:lI109|N +10721F2E8:lH1072227D0|N +1072227D0:lI105|H107225978 +107225978:lI110|H1072287D0 +1072287D0:lI101|H10722B218 +10722B218:lI116|H10722D930 +10722D930:lI115|H10722FDC8 +10722FDC8:lI95|H107231F60 +107231F60:lI116|H107233DE8 +107233DE8:lI114|H107235980 +107235980:lI97|H1072372A8 +1072372A8:lI99|H107238990 +107238990:lI101|H107239E88 +107239E88:lI46|H10723B240 +10723B240:lI98|H10723C370 +10723C370:lI101|H10723D290 +10723D290:lI97|H10723E080 +10723E080:lI109|N +10721F2D0:Mn2:H1072227B0,H1072227C0 +1072227B0:lH107225958|N +107225958:lI105|H1072287B0 +1072287B0:lI110|H10722B1F8 +10722B1F8:lI101|H10722D910 +10722D910:lI116|H10722FDA8 +10722FDA8:lI115|H107231F40 +107231F40:lI46|H107233DC8 +107233DC8:lI97|H107235960 +107235960:lI112|H107237288 +107237288:lI112|N +1072227C0:lH107225968|N +107225968:lI104|H1072287C0 +1072287C0:lI116|H10722B208 +10722B208:lI116|H10722D920 +10722D920:lI112|H10722FDB8 +10722FDB8:lI100|H107231F50 +107231F50:lI95|H107233DD8 +107233DD8:lI97|H107235970 +107235970:lI99|H107237298 +107237298:lI99|H107238980 +107238980:lI101|H107239E78 +107239E78:lI112|H10723B230 +10723B230:lI116|H10723C360 +10723C360:lI111|H10723D280 +10723D280:lI114|H10723E070 +10723E070:lI95|H10723ECC0 +10723ECC0:lI115|H10723F7E0 +10723F7E0:lI117|H1072401B0 +1072401B0:lI112|H107240A60 +107240A60:lI46|H107241220 +107241220:lI98|H107241960 +107241960:lI101|H107242050 +107242050:lI97|H1072426C0 +1072426C0:lI109|N +10721BC78:Mn5:H10721F270,H10721F280,H10721F290,H10721F2A0,H10721F2B0 +10721F270:lH107222750|N +107222750:lI109|H1072258F8 +1072258F8:lI111|H107228750 +107228750:lI100|H10722B198 +10722B198:lI95|H10722D8B0 +10722D8B0:lI114|H10722FD48 +10722FD48:lI101|H107231EE0 +107231EE0:lI115|H107233D68 +107233D68:lI112|H107235900 +107235900:lI111|H107237228 +107237228:lI110|H107238920 +107238920:lI115|H107239E18 +107239E18:lI101|H10723B1D0 +10723B1D0:lI99|H10723C300 +10723C300:lI111|H10723D240 +10723D240:lI110|H10723E030 +10723E030:lI116|H10723EC80 +10723EC80:lI114|H10723F7C0 +10723F7C0:lI111|H1072401A0 +1072401A0:lI108|H107240A50 +107240A50:lI46|H107241210 +107241210:lI98|H107241950 +107241950:lI101|H107242040 +107242040:lI97|H1072426B0 +1072426B0:lI109|N +10721F2B0:lH107222790|N +107222790:lI104|H107225938 +107225938:lI116|H107228790 +107228790:lI116|H10722B1D8 +10722B1D8:lI112|H10722D8F0 +10722D8F0:lI100|H10722FD88 +10722FD88:lI95|H107231F20 +107231F20:lI99|H107233DA8 +107233DA8:lI117|H107235940 +107235940:lI115|H107237268 +107237268:lI116|H107238960 +107238960:lI111|H107239E58 +107239E58:lI109|H10723B210 +10723B210:lI46|H10723C340 +10723C340:lI98|H10723D270 +10723D270:lI101|H10723E060 +10723E060:lI97|H10723ECB0 +10723ECB0:lI109|N +10721F2A0:lH107222780|N +107222780:lI104|H107225928 +107225928:lI116|H107228780 +107228780:lI116|H10722B1C8 +10722B1C8:lI112|H10722D8E0 +10722D8E0:lI100|H10722FD78 +10722FD78:lI95|H107231F10 +107231F10:lI114|H107233D98 +107233D98:lI101|H107235930 +107235930:lI113|H107237258 +107237258:lI117|H107238950 +107238950:lI101|H107239E48 +107239E48:lI115|H10723B200 +10723B200:lI116|H10723C330 +10723C330:lI46|H10723D260 +10723D260:lI98|H10723E050 +10723E050:lI101|H10723ECA0 +10723ECA0:lI97|H10723F7D0 +10723F7D0:lI109|N +10721F290:lH107222770|N +107222770:lI104|H107225918 +107225918:lI116|H107228770 +107228770:lI116|H10722B1B8 +10722B1B8:lI112|H10722D8D0 +10722D8D0:lI100|H10722FD68 +10722FD68:lI95|H107231F00 +107231F00:lI101|H107233D88 +107233D88:lI115|H107235920 +107235920:lI105|H107237248 +107237248:lI46|H107238940 +107238940:lI98|H107239E38 +107239E38:lI101|H10723B1F0 +10723B1F0:lI97|H10723C320 +10723C320:lI109|N +10721F280:lH107222760|N +107222760:lI109|H107225908 +107225908:lI111|H107228760 +107228760:lI100|H10722B1A8 +10722B1A8:lI95|H10722D8C0 +10722D8C0:lI100|H10722FD58 +10722FD58:lI105|H107231EF0 +107231EF0:lI115|H107233D78 +107233D78:lI107|H107235910 +107235910:lI95|H107237238 +107237238:lI108|H107238930 +107238930:lI111|H107239E28 +107239E28:lI103|H10723B1E0 +10723B1E0:lI46|H10723C310 +10723C310:lI98|H10723D250 +10723D250:lI101|H10723E040 +10723E040:lI97|H10723EC90 +10723EC90:lI109|N +10721BC68:lH10721F260|N +10721F260:lI109|H107222740 +107222740:lI111|H1072258E8 +1072258E8:lI100|H107228740 +107228740:lI95|H10722B188 +10722B188:lI97|H10722D8A0 +10722D8A0:lI117|H10722FD38 +10722FD38:lI116|H107231ED0 +107231ED0:lI104|H107233D58 +107233D58:lI95|H1072358F0 +1072358F0:lI112|H107237218 +107237218:lI108|H107238910 +107238910:lI97|H107239E08 +107239E08:lI105|H10723B1C0 +10723B1C0:lI110|H10723C2F0 +10723C2F0:lI46|H10723D230 +10723D230:lI98|H10723E020 +10723E020:lI101|H10723EC70 +10723EC70:lI97|H10723F7B0 +10723F7B0:lI109|N +10721BC50:Mn2:H10721F240,H10721F250 +10721F240:lH107222720|N +107222720:lI109|H1072258C8 +1072258C8:lI111|H107228720 +107228720:lI100|H10722B168 +10722B168:lI95|H10722D880 +10722D880:lI97|H10722FD18 +10722FD18:lI117|H107231EB0 +107231EB0:lI116|H107233D38 +107233D38:lI104|H1072358D0 +1072358D0:lI95|H1072371F8 +1072371F8:lI100|H1072388F0 +1072388F0:lI101|H107239DE8 +107239DE8:lI116|H10723B1A0 +10723B1A0:lI115|H10723C2D0 +10723C2D0:lI46|H10723D220 +10723D220:lI98|H10723E010 +10723E010:lI101|H10723EC60 +10723EC60:lI97|H10723F7A0 +10723F7A0:lI109|N +10721F250:lH107222730|N +107222730:lI109|H1072258D8 +1072258D8:lI111|H107228730 +107228730:lI100|H10722B178 +10722B178:lI95|H10722D890 +10722D890:lI116|H10722FD28 +10722FD28:lI114|H107231EC0 +107231EC0:lI97|H107233D48 +107233D48:lI99|H1072358E0 +1072358E0:lI101|H107237208 +107237208:lI46|H107238900 +107238900:lI98|H107239DF8 +107239DF8:lI101|H10723B1B0 +10723B1B0:lI97|H10723C2E0 +10723C2E0:lI109|N +10721BC20:Mn5:H10721F1E8,H10721F1F8,H10721F208,H10721F218,H10721F230 +10721F1E8:lH1072226C0|N +1072226C0:lI104|H107225868 +107225868:lI116|H1072286C0 +1072286C0:lI116|H10722B108 +10722B108:lI112|H10722D820 +10722D820:lI100|H10722FCB8 +10722FCB8:lI95|H107231E50 +107231E50:lI99|H107233CD8 +107233CD8:lI117|H107235870 +107235870:lI115|H107237198 +107237198:lI116|H107238890 +107238890:lI111|H107239D88 +107239D88:lI109|H10723B140 +10723B140:lI95|H10723C270 +10723C270:lI97|H10723D1D0 +10723D1D0:lI112|H10723DFC0 +10723DFC0:lI105|H10723EC20 +10723EC20:lI46|H10723F770 +10723F770:lI98|H107240170 +107240170:lI101|H107240A20 +107240A20:lI97|H1072411E0 +1072411E0:lI109|N +10721F230:lH107222710|N +107222710:lI104|H1072258B8 +1072258B8:lI116|H107228710 +107228710:lI116|H10722B158 +10722B158:lI112|H10722D870 +10722D870:lI95|H10722FD08 +10722FD08:lI114|H107231EA0 +107231EA0:lI101|H107233D28 +107233D28:lI113|H1072358C0 +1072358C0:lI117|H1072371E8 +1072371E8:lI101|H1072388E0 +1072388E0:lI115|H107239DD8 +107239DD8:lI116|H10723B190 +10723B190:lI46|H10723C2C0 +10723C2C0:lI98|H10723D210 +10723D210:lI101|H10723E000 +10723E000:lI97|H10723EC50 +10723EC50:lI109|N +10721F218:Mn2:H1072226F0,H107222700 +1072226F0:lH107225898|N +107225898:lI104|H1072286F0 +1072286F0:lI116|H10722B138 +10722B138:lI116|H10722D850 +10722D850:lI112|H10722FCE8 +10722FCE8:lI100|H107231E80 +107231E80:lI95|H107233D08 +107233D08:lI105|H1072358A0 +1072358A0:lI110|H1072371C8 +1072371C8:lI115|H1072388C0 +1072388C0:lI116|H107239DB8 +107239DB8:lI97|H10723B170 +10723B170:lI110|H10723C2A0 +10723C2A0:lI99|H10723D1F0 +10723D1F0:lI101|H10723DFE0 +10723DFE0:lI95|H10723EC40 +10723EC40:lI115|H10723F790 +10723F790:lI117|H107240190 +107240190:lI112|H107240A40 +107240A40:lI46|H107241200 +107241200:lI98|H107241940 +107241940:lI101|H107242030 +107242030:lI97|H1072426A0 +1072426A0:lI109|N +107222700:lH1072258A8|N +1072258A8:lI104|H107228700 +107228700:lI116|H10722B148 +10722B148:lI116|H10722D860 +10722D860:lI112|H10722FCF8 +10722FCF8:lI95|H107231E90 +107231E90:lI99|H107233D18 +107233D18:lI104|H1072358B0 +1072358B0:lI117|H1072371D8 +1072371D8:lI110|H1072388D0 +1072388D0:lI107|H107239DC8 +107239DC8:lI46|H10723B180 +10723B180:lI98|H10723C2B0 +10723C2B0:lI101|H10723D200 +10723D200:lI97|H10723DFF0 +10723DFF0:lI109|N +10721F208:lH1072226E0|N +1072226E0:lI105|H107225888 +107225888:lI110|H1072286E0 +1072286E0:lI101|H10722B128 +10722B128:lI116|H10722D840 +10722D840:lI115|H10722FCD8 +10722FCD8:lI95|H107231E70 +107231E70:lI115|H107233CF8 +107233CF8:lI117|H107235890 +107235890:lI112|H1072371B8 +1072371B8:lI46|H1072388B0 +1072388B0:lI98|H107239DA8 +107239DA8:lI101|H10723B160 +10723B160:lI97|H10723C290 +10723C290:lI109|N +10721F1F8:lH1072226D0|N +1072226D0:lI104|H107225878 +107225878:lI116|H1072286D0 +1072286D0:lI116|H10722B118 +10722B118:lI112|H10722D830 +10722D830:lI100|H10722FCC8 +10722FCC8:lI95|H107231E60 +107231E60:lI99|H107233CE8 +107233CE8:lI111|H107235880 +107235880:lI110|H1072371A8 +1072371A8:lI110|H1072388A0 +1072388A0:lI101|H107239D98 +107239D98:lI99|H10723B150 +10723B150:lI116|H10723C280 +10723C280:lI105|H10723D1E0 +10723D1E0:lI111|H10723DFD0 +10723DFD0:lI110|H10723EC30 +10723EC30:lI95|H10723F780 +10723F780:lI115|H107240180 +107240180:lI117|H107240A30 +107240A30:lI112|H1072411F0 +1072411F0:lI46|H107241930 +107241930:lI98|H107242020 +107242020:lI101|H107242690 +107242690:lI97|H107242CD0 +107242CD0:lI109|N +10721BBF8:Mn4:H10721F1A8,H10721F1B8,H10721F1C8,H10721F1D8 +10721F1A8:lH107222680|N +107222680:lI104|H107225828 +107225828:lI116|H107228680 +107228680:lI116|H10722B0C8 +10722B0C8:lI112|H10722D7E0 +10722D7E0:lI100|H10722FC78 +10722FC78:lI95|H107231E10 +107231E10:lI97|H107233C98 +107233C98:lI99|H107235830 +107235830:lI99|H107237158 +107237158:lI101|H107238850 +107238850:lI112|H107239D48 +107239D48:lI116|H10723B100 +10723B100:lI111|H10723C230 +10723C230:lI114|H10723D1B0 +10723D1B0:lI46|H10723DFA0 +10723DFA0:lI98|H10723EC00 +10723EC00:lI101|H10723F760 +10723F760:lI97|H107240160 +107240160:lI109|N +10721F1D8:lH1072226B0|N +1072226B0:lI105|H107225858 +107225858:lI110|H1072286B0 +1072286B0:lI101|H10722B0F8 +10722B0F8:lI116|H10722D810 +10722D810:lI115|H10722FCA8 +10722FCA8:lI95|H107231E40 +107231E40:lI108|H107233CC8 +107233CC8:lI105|H107235860 +107235860:lI98|H107237188 +107237188:lI46|H107238880 +107238880:lI98|H107239D78 +107239D78:lI101|H10723B130 +10723B130:lI97|H10723C260 +10723C260:lI109|N +10721F1C8:lH1072226A0|N +1072226A0:lI104|H107225848 +107225848:lI116|H1072286A0 +1072286A0:lI116|H10722B0E8 +10722B0E8:lI112|H10722D800 +10722D800:lI100|H10722FC98 +10722FC98:lI95|H107231E30 +107231E30:lI115|H107233CB8 +107233CB8:lI111|H107235850 +107235850:lI99|H107237178 +107237178:lI107|H107238870 +107238870:lI101|H107239D68 +107239D68:lI116|H10723B120 +10723B120:lI46|H10723C250 +10723C250:lI98|H10723D1C0 +10723D1C0:lI101|H10723DFB0 +10723DFB0:lI97|H10723EC10 +10723EC10:lI109|N +10721F1B8:lH107222690|N +107222690:lI104|H107225838 +107225838:lI116|H107228690 +107228690:lI116|H10722B0D8 +10722B0D8:lI112|H10722D7F0 +10722D7F0:lI99|H10722FC88 +10722FC88:lI95|H107231E20 +107231E20:lI115|H107233CA8 +107233CA8:lI117|H107235840 +107235840:lI112|H107237168 +107237168:lI46|H107238860 +107238860:lI98|H107239D58 +107239D58:lI101|H10723B110 +10723B110:lI97|H10723C240 +10723C240:lI109|N +107218548:lI47|H10721BBC8 +10721BBC8:lI111|H10721F160 +10721F160:lI112|H107222630 +107222630:lI116|H1072257D8 +1072257D8:lI47|H107228630 +107228630:lI104|H10722B078 +10722B078:lI111|H10722D790 +10722D790:lI109|H10722FC28 +10722FC28:lI101|H107231DC0 +107231DC0:lI98|H107233C48 +107233C48:lI114|H1072357E0 +1072357E0:lI101|H107237108 +107237108:lI119|H107238800 +107238800:lI47|H107239CF8 +107239CF8:lI67|H10723B0B0 +10723B0B0:lI101|H10723C1E0 +10723C1E0:lI108|H10723D160 +10723D160:lI108|H10723DF50 +10723DF50:lI97|H10723EBB0 +10723EBB0:lI114|H10723F710 +10723F710:lI47|H107240110 +107240110:lI101|H1072409F0 +1072409F0:lI114|H1072411D0 +1072411D0:lI108|H107241920 +107241920:lI97|H107242010 +107242010:lI110|H107242680 +107242680:lI103|H107242CC0 +107242CC0:lI47|H107243240 +107243240:lI50|H107243790 +107243790:lI54|H107243CA0 +107243CA0:lI46|H107244190 +107244190:lI48|H107244640 +107244640:lI46|H107244AB0 +107244AB0:lI50|H107244F10 +107244F10:lI47|H107245360 +107245360:lI108|H107245760 +107245760:lI105|H107245B20 +107245B20:lI98|H107245EB0 +107245EB0:lI47|H107246240 +107246240:lI101|H1072465D0 +1072465D0:lI114|H107246960 +107246960:lI108|H107246CA0 +107246CA0:lI97|H107246FC0 +107246FC0:lI110|H1072472E0 +1072472E0:lI103|H1072475F0 +1072475F0:lI47|H1072478F0 +1072478F0:lI108|H107247BF0 +107247BF0:lI105|H107247ED0 +107247ED0:lI98|H107248190 +107248190:lI47|H107248450 +107248450:lI105|H107248700 +107248700:lI110|H1072489B0 +1072489B0:lI101|H107248C30 +107248C30:lI116|H107248EA0 +107248EA0:lI115|H107249110 +107249110:lI45|H107249370 +107249370:lI57|H1072495D0 +1072495D0:lI46|H107249820 +107249820:lI48|H107249A40 +107249A40:lI46|H107249C40 +107249C40:lI49|H107249E20 +107249E20:lI47|H280052C20 +107214F60:lH1072185E8|H107218600 +1072185E8:t2:H10721BE38,A5:cache +10721BE38:lI47|H10721F558 +10721F558:lI111|H107222A50 +107222A50:lI112|H107225BF8 +107225BF8:lI116|H107228A50 +107228A50:lI47|H10722B498 +10722B498:lI104|H10722DBB0 +10722DBB0:lI111|H107230048 +107230048:lI109|H1072321E0 +1072321E0:lI101|H107234068 +107234068:lI98|H107235C00 +107235C00:lI114|H107237528 +107237528:lI101|H107238BE0 +107238BE0:lI119|H10723A0C8 +10723A0C8:lI47|H10723B430 +10723B430:lI67|H10723C540 +10723C540:lI101|H10723D410 +10723D410:lI108|H10723E1B0 +10723E1B0:lI108|H10723EDF0 +10723EDF0:lI97|H10723F8D0 +10723F8D0:lI114|H107240240 +107240240:lI47|H107240AD0 +107240AD0:lI101|H107241280 +107241280:lI114|H1072419B0 +1072419B0:lI108|H107242080 +107242080:lI97|H1072426F0 +1072426F0:lI110|H107242CF0 +107242CF0:lI103|H107243260 +107243260:lI47|H1072437A0 +1072437A0:lI50|H107243CB0 +107243CB0:lI54|H1072441A0 +1072441A0:lI46|H107244650 +107244650:lI48|H107244AC0 +107244AC0:lI46|H107244F20 +107244F20:lI50|H107245370 +107245370:lI47|H107245770 +107245770:lI108|H107245B30 +107245B30:lI105|H107245EC0 +107245EC0:lI98|H107246250 +107246250:lI47|H1072465E0 +1072465E0:lI101|H107246970 +107246970:lI114|H107246CB0 +107246CB0:lI108|H107246FD0 +107246FD0:lI97|H1072472F0 +1072472F0:lI110|H107247600 +107247600:lI103|H107247900 +107247900:lI47|H107247C00 +107247C00:lI108|H107247EE0 +107247EE0:lI105|H1072481A0 +1072481A0:lI98|H107248460 +107248460:lI47|H107248710 +107248710:lI102|H1072489C0 +1072489C0:lI116|H107248C40 +107248C40:lI112|H107248EB0 +107248EB0:lI45|H107249120 +107249120:lI49|H107249380 +107249380:lI46|H1072495E0 +1072495E0:lI50|H107249830 +107249830:lI47|H280052C20 +107218600:lH10721BE48|H10721BE60 +10721BE48:t2:H10721F568,A5:cache +10721F568:lI47|H107222A60 +107222A60:lI111|H107225C08 +107225C08:lI112|H107228A60 +107228A60:lI116|H10722B4A8 +10722B4A8:lI47|H10722DBC0 +10722DBC0:lI104|H107230058 +107230058:lI111|H1072321F0 +1072321F0:lI109|H107234078 +107234078:lI101|H107235C10 +107235C10:lI98|H107237538 +107237538:lI114|H107238BF0 +107238BF0:lI101|H10723A0D8 +10723A0D8:lI119|H10723B440 +10723B440:lI47|H10723C550 +10723C550:lI67|H10723D420 +10723D420:lI101|H10723E1C0 +10723E1C0:lI108|H10723EE00 +10723EE00:lI108|H10723F8E0 +10723F8E0:lI97|H107240250 +107240250:lI114|H107240AE0 +107240AE0:lI47|H107241290 +107241290:lI101|H1072419C0 +1072419C0:lI114|H107242090 +107242090:lI108|H107242700 +107242700:lI97|H107242D00 +107242D00:lI110|H107243270 +107243270:lI103|H1072437B0 +1072437B0:lI47|H107243CC0 +107243CC0:lI50|H1072441B0 +1072441B0:lI54|H107244660 +107244660:lI46|H107244AD0 +107244AD0:lI48|H107244F30 +107244F30:lI46|H107245380 +107245380:lI50|H107245780 +107245780:lI47|H107245B40 +107245B40:lI108|H107245ED0 +107245ED0:lI105|H107246260 +107246260:lI98|H1072465F0 +1072465F0:lI47|H107246980 +107246980:lI101|H107246CC0 +107246CC0:lI114|H107246FE0 +107246FE0:lI108|H107247300 +107247300:lI97|H107247610 +107247610:lI110|H107247910 +107247910:lI103|H107247C10 +107247C10:lI47|H107247EF0 +107247EF0:lI108|H1072481B0 +1072481B0:lI105|H107248470 +107248470:lI98|H107248720 +107248720:lI47|H1072489D0 +1072489D0:lI101|H107248C50 +107248C50:lI117|H107248EC0 +107248EC0:lI110|H107249130 +107249130:lI105|H107249390 +107249390:lI116|H1072495F0 +1072495F0:lI45|H107249840 +107249840:lI50|H107249A50 +107249A50:lI46|H107249C50 +107249C50:lI56|H107249E30 +107249E30:lI46|H107249FF0 +107249FF0:lI50|H10724A190 +10724A190:lI47|H280052C20 +10721BE60:lH10721F578|H10721F590 +10721F578:t2:H107222A70,A5:cache +107222A70:lI47|H107225C18 +107225C18:lI111|H107228A70 +107228A70:lI112|H10722B4B8 +10722B4B8:lI116|H10722DBD0 +10722DBD0:lI47|H107230068 +107230068:lI104|H107232200 +107232200:lI111|H107234088 +107234088:lI109|H107235C20 +107235C20:lI101|H107237548 +107237548:lI98|H107238C00 +107238C00:lI114|H10723A0E8 +10723A0E8:lI101|H10723B450 +10723B450:lI119|H10723C560 +10723C560:lI47|H10723D430 +10723D430:lI67|H10723E1D0 +10723E1D0:lI101|H10723EE10 +10723EE10:lI108|H10723F8F0 +10723F8F0:lI108|H107240260 +107240260:lI97|H107240AF0 +107240AF0:lI114|H1072412A0 +1072412A0:lI47|H1072419D0 +1072419D0:lI101|H1072420A0 +1072420A0:lI114|H107242710 +107242710:lI108|H107242D10 +107242D10:lI97|H107243280 +107243280:lI110|H1072437C0 +1072437C0:lI103|H107243CD0 +107243CD0:lI47|H1072441C0 +1072441C0:lI50|H107244670 +107244670:lI54|H107244AE0 +107244AE0:lI46|H107244F40 +107244F40:lI48|H107245390 +107245390:lI46|H107245790 +107245790:lI50|H107245B50 +107245B50:lI47|H107245EE0 +107245EE0:lI108|H107246270 +107246270:lI105|H107246600 +107246600:lI98|H107246990 +107246990:lI47|H107246CD0 +107246CD0:lI101|H107246FF0 +107246FF0:lI114|H107247310 +107247310:lI108|H107247620 +107247620:lI97|H107247920 +107247920:lI110|H107247C20 +107247C20:lI103|H107247F00 +107247F00:lI47|H1072481C0 +1072481C0:lI108|H107248480 +107248480:lI105|H107248730 +107248730:lI98|H1072489E0 +1072489E0:lI47|H107248C60 +107248C60:lI101|H107248ED0 +107248ED0:lI116|H107249140 +107249140:lI45|H1072493A0 +1072493A0:lI49|H107249600 +107249600:lI46|H107249850 +107249850:lI55|H107249A60 +107249A60:lI47|H280052C20 +10721F590:lH107222A80|H107222A98 +107222A80:t2:H107225C28,A5:cache +107225C28:lI47|H107228A80 +107228A80:lI111|H10722B4C8 +10722B4C8:lI112|H10722DBE0 +10722DBE0:lI116|H107230078 +107230078:lI47|H107232210 +107232210:lI104|H107234098 +107234098:lI111|H107235C30 +107235C30:lI109|H107237558 +107237558:lI101|H107238C10 +107238C10:lI98|H10723A0F8 +10723A0F8:lI114|H10723B460 +10723B460:lI101|H10723C570 +10723C570:lI119|H10723D440 +10723D440:lI47|H10723E1E0 +10723E1E0:lI67|H10723EE20 +10723EE20:lI101|H10723F900 +10723F900:lI108|H107240270 +107240270:lI108|H107240B00 +107240B00:lI97|H1072412B0 +1072412B0:lI114|H1072419E0 +1072419E0:lI47|H1072420B0 +1072420B0:lI101|H107242720 +107242720:lI114|H107242D20 +107242D20:lI108|H107243290 +107243290:lI97|H1072437D0 +1072437D0:lI110|H107243CE0 +107243CE0:lI103|H1072441D0 +1072441D0:lI47|H107244680 +107244680:lI50|H107244AF0 +107244AF0:lI54|H107244F50 +107244F50:lI46|H1072453A0 +1072453A0:lI48|H1072457A0 +1072457A0:lI46|H107245B60 +107245B60:lI50|H107245EF0 +107245EF0:lI47|H107246280 +107246280:lI108|H107246610 +107246610:lI105|H1072469A0 +1072469A0:lI98|H107246CE0 +107246CE0:lI47|H107247000 +107247000:lI101|H107247320 +107247320:lI114|H107247630 +107247630:lI108|H107247930 +107247930:lI97|H107247C30 +107247C30:lI110|H107247F10 +107247F10:lI103|H1072481D0 +1072481D0:lI47|H107248490 +107248490:lI108|H107248740 +107248740:lI105|H1072489F0 +1072489F0:lI98|H107248C70 +107248C70:lI47|H107248EE0 +107248EE0:lI101|H107249150 +107249150:lI114|H1072493B0 +1072493B0:lI116|H107249610 +107249610:lI115|H107249860 +107249860:lI45|H107249A70 +107249A70:lI49|H107249C60 +107249C60:lI52|H107249E40 +107249E40:lI46|H10724A000 +10724A000:lI48|H10724A1A0 +10724A1A0:lI46|H10724A320 +10724A320:lI50|H10724A490 +10724A490:lI47|H280052C20 +107222A98:lH107225C38|H107225C50 +107225C38:t2:H107228A90,A5:cache +107228A90:lI47|H10722B4D8 +10722B4D8:lI111|H10722DBF0 +10722DBF0:lI112|H107230088 +107230088:lI116|H107232220 +107232220:lI47|H1072340A8 +1072340A8:lI104|H107235C40 +107235C40:lI111|H107237568 +107237568:lI109|H107238C20 +107238C20:lI101|H10723A108 +10723A108:lI98|H10723B470 +10723B470:lI114|H10723C580 +10723C580:lI101|H10723D450 +10723D450:lI119|H10723E1F0 +10723E1F0:lI47|H10723EE30 +10723EE30:lI67|H10723F910 +10723F910:lI101|H107240280 +107240280:lI108|H107240B10 +107240B10:lI108|H1072412C0 +1072412C0:lI97|H1072419F0 +1072419F0:lI114|H1072420C0 +1072420C0:lI47|H107242730 +107242730:lI101|H107242D30 +107242D30:lI114|H1072432A0 +1072432A0:lI108|H1072437E0 +1072437E0:lI97|H107243CF0 +107243CF0:lI110|H1072441E0 +1072441E0:lI103|H107244690 +107244690:lI47|H107244B00 +107244B00:lI50|H107244F60 +107244F60:lI54|H1072453B0 +1072453B0:lI46|H1072457B0 +1072457B0:lI48|H107245B70 +107245B70:lI46|H107245F00 +107245F00:lI50|H107246290 +107246290:lI47|H107246620 +107246620:lI108|H1072469B0 +1072469B0:lI105|H107246CF0 +107246CF0:lI98|H107247010 +107247010:lI47|H107247330 +107247330:lI101|H107247640 +107247640:lI114|H107247940 +107247940:lI108|H107247C40 +107247C40:lI97|H107247F20 +107247F20:lI110|H1072481E0 +1072481E0:lI103|H1072484A0 +1072484A0:lI47|H107248750 +107248750:lI108|H107248A00 +107248A00:lI105|H107248C80 +107248C80:lI98|H107248EF0 +107248EF0:lI47|H107249160 +107249160:lI101|H1072493C0 +1072493C0:lI114|H107249620 +107249620:lI108|H107249870 +107249870:lI95|H107249A80 +107249A80:lI105|H107249C70 +107249C70:lI110|H107249E50 +107249E50:lI116|H10724A010 +10724A010:lI101|H10724A1B0 +10724A1B0:lI114|H10724A330 +10724A330:lI102|H10724A4A0 +10724A4A0:lI97|H10724A600 +10724A600:lI99|H10724A740 +10724A740:lI101|H10724A860 +10724A860:lI45|H10724A970 +10724A970:lI53|H10724AA60 +10724AA60:lI46|H10724AB30 +10724AB30:lI52|H10724ABD0 +10724ABD0:lI47|H280052C20 +107225C50:lH107228AA0|H107228AB8 +107228AA0:t2:H10722B4E8,A5:cache +10722B4E8:lI47|H10722DC00 +10722DC00:lI111|H107230098 +107230098:lI112|H107232230 +107232230:lI116|H1072340B8 +1072340B8:lI47|H107235C50 +107235C50:lI104|H107237578 +107237578:lI111|H107238C30 +107238C30:lI109|H10723A118 +10723A118:lI101|H10723B480 +10723B480:lI98|H10723C590 +10723C590:lI114|H10723D460 +10723D460:lI101|H10723E200 +10723E200:lI119|H10723EE40 +10723EE40:lI47|H10723F920 +10723F920:lI67|H107240290 +107240290:lI101|H107240B20 +107240B20:lI108|H1072412D0 +1072412D0:lI108|H107241A00 +107241A00:lI97|H1072420D0 +1072420D0:lI114|H107242740 +107242740:lI47|H107242D40 +107242D40:lI101|H1072432B0 +1072432B0:lI114|H1072437F0 +1072437F0:lI108|H107243D00 +107243D00:lI97|H1072441F0 +1072441F0:lI110|H1072446A0 +1072446A0:lI103|H107244B10 +107244B10:lI47|H107244F70 +107244F70:lI50|H1072453C0 +1072453C0:lI54|H1072457C0 +1072457C0:lI46|H107245B80 +107245B80:lI48|H107245F10 +107245F10:lI46|H1072462A0 +1072462A0:lI50|H107246630 +107246630:lI47|H1072469C0 +1072469C0:lI108|H107246D00 +107246D00:lI105|H107247020 +107247020:lI98|H107247340 +107247340:lI47|H107247650 +107247650:lI101|H107247950 +107247950:lI114|H107247C50 +107247C50:lI108|H107247F30 +107247F30:lI97|H1072481F0 +1072481F0:lI110|H1072484B0 +1072484B0:lI103|H107248760 +107248760:lI47|H107248A10 +107248A10:lI108|H107248C90 +107248C90:lI105|H107248F00 +107248F00:lI98|H107249170 +107249170:lI47|H1072493D0 +1072493D0:lI101|H107249630 +107249630:lI114|H107249880 +107249880:lI108|H107249A90 +107249A90:lI95|H107249C80 +107249C80:lI100|H107249E60 +107249E60:lI111|H10724A020 +10724A020:lI99|H10724A1C0 +10724A1C0:lI103|H10724A340 +10724A340:lI101|H10724A4B0 +10724A4B0:lI110|H10724A610 +10724A610:lI45|H10724A750 +10724A750:lI49|H10724A870 +10724A870:lI46|H10724A980 +10724A980:lI53|H10724AA70 +10724AA70:lI47|H280052C20 +107228AB8:lH10722B4F8|H10722B510 +10722B4F8:t2:H10722DC10,A5:cache +10722DC10:lI47|H1072300A8 +1072300A8:lI111|H107232240 +107232240:lI112|H1072340C8 +1072340C8:lI116|H107235C60 +107235C60:lI47|H107237588 +107237588:lI104|H107238C40 +107238C40:lI111|H10723A128 +10723A128:lI109|H10723B490 +10723B490:lI101|H10723C5A0 +10723C5A0:lI98|H10723D470 +10723D470:lI114|H10723E210 +10723E210:lI101|H10723EE50 +10723EE50:lI119|H10723F930 +10723F930:lI47|H1072402A0 +1072402A0:lI67|H107240B30 +107240B30:lI101|H1072412E0 +1072412E0:lI108|H107241A10 +107241A10:lI108|H1072420E0 +1072420E0:lI97|H107242750 +107242750:lI114|H107242D50 +107242D50:lI47|H1072432C0 +1072432C0:lI101|H107243800 +107243800:lI114|H107243D10 +107243D10:lI108|H107244200 +107244200:lI97|H1072446B0 +1072446B0:lI110|H107244B20 +107244B20:lI103|H107244F80 +107244F80:lI47|H1072453D0 +1072453D0:lI50|H1072457D0 +1072457D0:lI54|H107245B90 +107245B90:lI46|H107245F20 +107245F20:lI48|H1072462B0 +1072462B0:lI46|H107246640 +107246640:lI50|H1072469D0 +1072469D0:lI47|H107246D10 +107246D10:lI108|H107247030 +107247030:lI105|H107247350 +107247350:lI98|H107247660 +107247660:lI47|H107247960 +107247960:lI101|H107247C60 +107247C60:lI114|H107247F40 +107247F40:lI108|H107248200 +107248200:lI97|H1072484C0 +1072484C0:lI110|H107248770 +107248770:lI103|H107248A20 +107248A20:lI47|H107248CA0 +107248CA0:lI108|H107248F10 +107248F10:lI105|H107249180 +107249180:lI98|H1072493E0 +1072493E0:lI47|H107249640 +107249640:lI101|H107249890 +107249890:lI108|H107249AA0 +107249AA0:lI100|H107249C90 +107249C90:lI97|H107249E70 +107249E70:lI112|H10724A030 +10724A030:lI45|H10724A1D0 +10724A1D0:lI49|H10724A350 +10724A350:lI46|H10724A4C0 +10724A4C0:lI50|H10724A620 +10724A620:lI46|H10724A760 +10724A760:lI49|H10724A880 +10724A880:lI49|H10724A990 +10724A990:lI47|H280052C20 +10722B510:lH10722DC20|H10722DC38 +10722DC20:t2:H1072300B8,A5:cache +1072300B8:lI47|H107232250 +107232250:lI111|H1072340D8 +1072340D8:lI112|H107235C70 +107235C70:lI116|H107237598 +107237598:lI47|H107238C50 +107238C50:lI104|H10723A138 +10723A138:lI111|H10723B4A0 +10723B4A0:lI109|H10723C5B0 +10723C5B0:lI101|H10723D480 +10723D480:lI98|H10723E220 +10723E220:lI114|H10723EE60 +10723EE60:lI101|H10723F940 +10723F940:lI119|H1072402B0 +1072402B0:lI47|H107240B40 +107240B40:lI67|H1072412F0 +1072412F0:lI101|H107241A20 +107241A20:lI108|H1072420F0 +1072420F0:lI108|H107242760 +107242760:lI97|H107242D60 +107242D60:lI114|H1072432D0 +1072432D0:lI47|H107243810 +107243810:lI101|H107243D20 +107243D20:lI114|H107244210 +107244210:lI108|H1072446C0 +1072446C0:lI97|H107244B30 +107244B30:lI110|H107244F90 +107244F90:lI103|H1072453E0 +1072453E0:lI47|H1072457E0 +1072457E0:lI50|H107245BA0 +107245BA0:lI54|H107245F30 +107245F30:lI46|H1072462C0 +1072462C0:lI48|H107246650 +107246650:lI46|H1072469E0 +1072469E0:lI50|H107246D20 +107246D20:lI47|H107247040 +107247040:lI108|H107247360 +107247360:lI105|H107247670 +107247670:lI98|H107247970 +107247970:lI47|H107247C70 +107247C70:lI101|H107247F50 +107247F50:lI114|H107248210 +107248210:lI108|H1072484D0 +1072484D0:lI97|H107248780 +107248780:lI110|H107248A30 +107248A30:lI103|H107248CB0 +107248CB0:lI47|H107248F20 +107248F20:lI108|H107249190 +107249190:lI105|H1072493F0 +1072493F0:lI98|H107249650 +107249650:lI47|H1072498A0 +1072498A0:lI101|H107249AB0 +107249AB0:lI100|H107249CA0 +107249CA0:lI111|H107249E80 +107249E80:lI99|H10724A040 +10724A040:lI45|H10724A1E0 +10724A1E0:lI49|H10724A360 +10724A360:lI46|H10724A4D0 +10724A4D0:lI50|H10724A630 +10724A630:lI47|H280052C20 +10722DC38:lH1072300C8|H1072300E0 +1072300C8:t2:H107232260,A5:cache +107232260:lI47|H1072340E8 +1072340E8:lI111|H107235C80 +107235C80:lI112|H1072375A8 +1072375A8:lI116|H107238C60 +107238C60:lI47|H10723A148 +10723A148:lI104|H10723B4B0 +10723B4B0:lI111|H10723C5C0 +10723C5C0:lI109|H10723D490 +10723D490:lI101|H10723E230 +10723E230:lI98|H10723EE70 +10723EE70:lI114|H10723F950 +10723F950:lI101|H1072402C0 +1072402C0:lI119|H107240B50 +107240B50:lI47|H107241300 +107241300:lI67|H107241A30 +107241A30:lI101|H107242100 +107242100:lI108|H107242770 +107242770:lI108|H107242D70 +107242D70:lI97|H1072432E0 +1072432E0:lI114|H107243820 +107243820:lI47|H107243D30 +107243D30:lI101|H107244220 +107244220:lI114|H1072446D0 +1072446D0:lI108|H107244B40 +107244B40:lI97|H107244FA0 +107244FA0:lI110|H1072453F0 +1072453F0:lI103|H1072457F0 +1072457F0:lI47|H107245BB0 +107245BB0:lI50|H107245F40 +107245F40:lI54|H1072462D0 +1072462D0:lI46|H107246660 +107246660:lI48|H1072469F0 +1072469F0:lI46|H107246D30 +107246D30:lI50|H107247050 +107247050:lI47|H107247370 +107247370:lI108|H107247680 +107247680:lI105|H107247980 +107247980:lI98|H107247C80 +107247C80:lI47|H107247F60 +107247F60:lI101|H107248220 +107248220:lI114|H1072484E0 +1072484E0:lI108|H107248790 +107248790:lI97|H107248A40 +107248A40:lI110|H107248CC0 +107248CC0:lI103|H107248F30 +107248F30:lI47|H1072491A0 +1072491A0:lI108|H107249400 +107249400:lI105|H107249660 +107249660:lI98|H1072498B0 +1072498B0:lI47|H107249AC0 +107249AC0:lI100|H107249CB0 +107249CB0:lI105|H107249E90 +107249E90:lI97|H10724A050 +10724A050:lI109|H10724A1F0 +10724A1F0:lI101|H10724A370 +10724A370:lI116|H10724A4E0 +10724A4E0:lI101|H10724A640 +10724A640:lI114|H10724A770 +10724A770:lI45|H10724A890 +10724A890:lI50|H10724A9A0 +10724A9A0:lI46|H10724AA80 +10724AA80:lI51|H10724AB40 +10724AB40:lI47|H280052C20 +1072300E0:lH107232270|H107232288 +107232270:t2:H1072340F8,A5:cache +1072340F8:lI47|H107235C90 +107235C90:lI111|H1072375B8 +1072375B8:lI112|H107238C70 +107238C70:lI116|H10723A158 +10723A158:lI47|H10723B4C0 +10723B4C0:lI104|H10723C5D0 +10723C5D0:lI111|H10723D4A0 +10723D4A0:lI109|H10723E240 +10723E240:lI101|H10723EE80 +10723EE80:lI98|H10723F960 +10723F960:lI114|H1072402D0 +1072402D0:lI101|H107240B60 +107240B60:lI119|H107241310 +107241310:lI47|H107241A40 +107241A40:lI67|H107242110 +107242110:lI101|H107242780 +107242780:lI108|H107242D80 +107242D80:lI108|H1072432F0 +1072432F0:lI97|H107243830 +107243830:lI114|H107243D40 +107243D40:lI47|H107244230 +107244230:lI101|H1072446E0 +1072446E0:lI114|H107244B50 +107244B50:lI108|H107244FB0 +107244FB0:lI97|H107245400 +107245400:lI110|H107245800 +107245800:lI103|H107245BC0 +107245BC0:lI47|H107245F50 +107245F50:lI50|H1072462E0 +1072462E0:lI54|H107246670 +107246670:lI46|H107246A00 +107246A00:lI48|H107246D40 +107246D40:lI46|H107247060 +107247060:lI50|H107247380 +107247380:lI47|H107247690 +107247690:lI108|H107247990 +107247990:lI105|H107247C90 +107247C90:lI98|H107247F70 +107247F70:lI47|H107248230 +107248230:lI101|H1072484F0 +1072484F0:lI114|H1072487A0 +1072487A0:lI108|H107248A50 +107248A50:lI97|H107248CD0 +107248CD0:lI110|H107248F40 +107248F40:lI103|H1072491B0 +1072491B0:lI47|H107249410 +107249410:lI108|H107249670 +107249670:lI105|H1072498C0 +1072498C0:lI98|H107249AD0 +107249AD0:lI47|H107249CC0 +107249CC0:lI100|H107249EA0 +107249EA0:lI105|H10724A060 +10724A060:lI97|H10724A200 +10724A200:lI108|H10724A380 +10724A380:lI121|H10724A4F0 +10724A4F0:lI122|H10724A650 +10724A650:lI101|H10724A780 +10724A780:lI114|H10724A8A0 +10724A8A0:lI45|H10724A9B0 +10724A9B0:lI53|H10724AA90 +10724AA90:lI46|H10724AB50 +10724AB50:lI49|H10724ABE0 +10724ABE0:lI47|H280052C20 +107232288:lH107234108|H107234120 +107234108:t2:H107235CA0,A5:cache +107235CA0:lI47|H1072375C8 +1072375C8:lI111|H107238C80 +107238C80:lI112|H10723A168 +10723A168:lI116|H10723B4D0 +10723B4D0:lI47|H10723C5E0 +10723C5E0:lI104|H10723D4B0 +10723D4B0:lI111|H10723E250 +10723E250:lI109|H10723EE90 +10723EE90:lI101|H10723F970 +10723F970:lI98|H1072402E0 +1072402E0:lI114|H107240B70 +107240B70:lI101|H107241320 +107241320:lI119|H107241A50 +107241A50:lI47|H107242120 +107242120:lI67|H107242790 +107242790:lI101|H107242D90 +107242D90:lI108|H107243300 +107243300:lI108|H107243840 +107243840:lI97|H107243D50 +107243D50:lI114|H107244240 +107244240:lI47|H1072446F0 +1072446F0:lI101|H107244B60 +107244B60:lI114|H107244FC0 +107244FC0:lI108|H107245410 +107245410:lI97|H107245810 +107245810:lI110|H107245BD0 +107245BD0:lI103|H107245F60 +107245F60:lI47|H1072462F0 +1072462F0:lI50|H107246680 +107246680:lI54|H107246A10 +107246A10:lI46|H107246D50 +107246D50:lI48|H107247070 +107247070:lI46|H107247390 +107247390:lI50|H1072476A0 +1072476A0:lI47|H1072479A0 +1072479A0:lI108|H107247CA0 +107247CA0:lI105|H107247F80 +107247F80:lI98|H107248240 +107248240:lI47|H107248500 +107248500:lI101|H1072487B0 +1072487B0:lI114|H107248A60 +107248A60:lI108|H107248CE0 +107248CE0:lI97|H107248F50 +107248F50:lI110|H1072491C0 +1072491C0:lI103|H107249420 +107249420:lI47|H107249680 +107249680:lI108|H1072498D0 +1072498D0:lI105|H107249AE0 +107249AE0:lI98|H107249CD0 +107249CD0:lI47|H107249EB0 +107249EB0:lI100|H10724A070 +10724A070:lI101|H10724A210 +10724A210:lI98|H10724A390 +10724A390:lI117|H10724A500 +10724A500:lI103|H10724A660 +10724A660:lI103|H10724A790 +10724A790:lI101|H10724A8B0 +10724A8B0:lI114|H10724A9C0 +10724A9C0:lI45|H10724AAA0 +10724AAA0:lI53|H10724AB60 +10724AB60:lI46|H10724ABF0 +10724ABF0:lI51|H10724AC60 +10724AC60:lI46|H10724ACC0 +10724ACC0:lI49|H10724AD10 +10724AD10:lI47|H280052C20 +107234120:lH107235CB0|H107235CC8 +107235CB0:t2:H1072375D8,A5:cache +1072375D8:lI47|H107238C90 +107238C90:lI111|H10723A178 +10723A178:lI112|H10723B4E0 +10723B4E0:lI116|H10723C5F0 +10723C5F0:lI47|H10723D4C0 +10723D4C0:lI104|H10723E260 +10723E260:lI111|H10723EEA0 +10723EEA0:lI109|H10723F980 +10723F980:lI101|H1072402F0 +1072402F0:lI98|H107240B80 +107240B80:lI114|H107241330 +107241330:lI101|H107241A60 +107241A60:lI119|H107242130 +107242130:lI47|H1072427A0 +1072427A0:lI67|H107242DA0 +107242DA0:lI101|H107243310 +107243310:lI108|H107243850 +107243850:lI108|H107243D60 +107243D60:lI97|H107244250 +107244250:lI114|H107244700 +107244700:lI47|H107244B70 +107244B70:lI101|H107244FD0 +107244FD0:lI114|H107245420 +107245420:lI108|H107245820 +107245820:lI97|H107245BE0 +107245BE0:lI110|H107245F70 +107245F70:lI103|H107246300 +107246300:lI47|H107246690 +107246690:lI50|H107246A20 +107246A20:lI54|H107246D60 +107246D60:lI46|H107247080 +107247080:lI48|H1072473A0 +1072473A0:lI46|H1072476B0 +1072476B0:lI50|H1072479B0 +1072479B0:lI47|H107247CB0 +107247CB0:lI108|H107247F90 +107247F90:lI105|H107248250 +107248250:lI98|H107248510 +107248510:lI47|H1072487C0 +1072487C0:lI101|H107248A70 +107248A70:lI114|H107248CF0 +107248CF0:lI108|H107248F60 +107248F60:lI97|H1072491D0 +1072491D0:lI110|H107249430 +107249430:lI103|H107249690 +107249690:lI47|H1072498E0 +1072498E0:lI108|H107249AF0 +107249AF0:lI105|H107249CE0 +107249CE0:lI98|H107249EC0 +107249EC0:lI47|H10724A080 +10724A080:lI99|H10724A220 +10724A220:lI114|H10724A3A0 +10724A3A0:lI121|H10724A510 +10724A510:lI112|H10724A670 +10724A670:lI116|H10724A7A0 +10724A7A0:lI111|H10724A8C0 +10724A8C0:lI45|H10724A9D0 +10724A9D0:lI53|H10724AAB0 +10724AAB0:lI46|H10724AB70 +10724AB70:lI50|H10724AC00 +10724AC00:lI47|H280052C20 +107235CC8:lH1072375E8|H107237600 +1072375E8:t2:H107238CA0,A5:cache +107238CA0:lI47|H10723A188 +10723A188:lI111|H10723B4F0 +10723B4F0:lI112|H10723C600 +10723C600:lI116|H10723D4D0 +10723D4D0:lI47|H10723E270 +10723E270:lI104|H10723EEB0 +10723EEB0:lI111|H10723F990 +10723F990:lI109|H107240300 +107240300:lI101|H107240B90 +107240B90:lI98|H107241340 +107241340:lI114|H107241A70 +107241A70:lI101|H107242140 +107242140:lI119|H1072427B0 +1072427B0:lI47|H107242DB0 +107242DB0:lI67|H107243320 +107243320:lI101|H107243860 +107243860:lI108|H107243D70 +107243D70:lI108|H107244260 +107244260:lI97|H107244710 +107244710:lI114|H107244B80 +107244B80:lI47|H107244FE0 +107244FE0:lI101|H107245430 +107245430:lI114|H107245830 +107245830:lI108|H107245BF0 +107245BF0:lI97|H107245F80 +107245F80:lI110|H107246310 +107246310:lI103|H1072466A0 +1072466A0:lI47|H107246A30 +107246A30:lI50|H107246D70 +107246D70:lI54|H107247090 +107247090:lI46|H1072473B0 +1072473B0:lI48|H1072476C0 +1072476C0:lI46|H1072479C0 +1072479C0:lI50|H107247CC0 +107247CC0:lI47|H107247FA0 +107247FA0:lI108|H107248260 +107248260:lI105|H107248520 +107248520:lI98|H1072487D0 +1072487D0:lI47|H107248A80 +107248A80:lI101|H107248D00 +107248D00:lI114|H107248F70 +107248F70:lI108|H1072491E0 +1072491E0:lI97|H107249440 +107249440:lI110|H1072496A0 +1072496A0:lI103|H1072498F0 +1072498F0:lI47|H107249B00 +107249B00:lI108|H107249CF0 +107249CF0:lI105|H107249ED0 +107249ED0:lI98|H10724A090 +10724A090:lI47|H10724A230 +10724A230:lI99|H10724A3B0 +10724A3B0:lI111|H10724A520 +10724A520:lI109|H10724A680 +10724A680:lI112|H10724A7B0 +10724A7B0:lI105|H10724A8D0 +10724A8D0:lI108|H10724A9E0 +10724A9E0:lI101|H10724AAC0 +10724AAC0:lI114|H10724AB80 +10724AB80:lI45|H10724AC10 +10724AC10:lI56|H10724AC70 +10724AC70:lI46|H10724ACD0 +10724ACD0:lI51|H10724AD20 +10724AD20:lI46|H10724AD60 +10724AD60:lI50|H10724ADA0 +10724ADA0:lI47|H280052C20 +107237600:lH107238CB0|H107238CC8 +107238CB0:t2:H10723A198,A5:cache +10723A198:lI47|H10723B500 +10723B500:lI111|H10723C610 +10723C610:lI112|H10723D4E0 +10723D4E0:lI116|H10723E280 +10723E280:lI47|H10723EEC0 +10723EEC0:lI104|H10723F9A0 +10723F9A0:lI111|H107240310 +107240310:lI109|H107240BA0 +107240BA0:lI101|H107241350 +107241350:lI98|H107241A80 +107241A80:lI114|H107242150 +107242150:lI101|H1072427C0 +1072427C0:lI119|H107242DC0 +107242DC0:lI47|H107243330 +107243330:lI67|H107243870 +107243870:lI101|H107243D80 +107243D80:lI108|H107244270 +107244270:lI108|H107244720 +107244720:lI97|H107244B90 +107244B90:lI114|H107244FF0 +107244FF0:lI47|H107245440 +107245440:lI101|H107245840 +107245840:lI114|H107245C00 +107245C00:lI108|H107245F90 +107245F90:lI97|H107246320 +107246320:lI110|H1072466B0 +1072466B0:lI103|H107246A40 +107246A40:lI47|H107246D80 +107246D80:lI50|H1072470A0 +1072470A0:lI54|H1072473C0 +1072473C0:lI46|H1072476D0 +1072476D0:lI48|H1072479D0 +1072479D0:lI46|H107247CD0 +107247CD0:lI50|H107247FB0 +107247FB0:lI47|H107248270 +107248270:lI108|H107248530 +107248530:lI105|H1072487E0 +1072487E0:lI98|H107248A90 +107248A90:lI47|H107248D10 +107248D10:lI101|H107248F80 +107248F80:lI114|H1072491F0 +1072491F0:lI108|H107249450 +107249450:lI97|H1072496B0 +1072496B0:lI110|H107249900 +107249900:lI103|H107249B10 +107249B10:lI47|H107249D00 +107249D00:lI108|H107249EE0 +107249EE0:lI105|H10724A0A0 +10724A0A0:lI98|H10724A240 +10724A240:lI47|H10724A3C0 +10724A3C0:lI99|H10724A530 +10724A530:lI111|H10724A690 +10724A690:lI109|H10724A7C0 +10724A7C0:lI109|H10724A8E0 +10724A8E0:lI111|H10724A9F0 +10724A9F0:lI110|H10724AAD0 +10724AAD0:lI95|H10724AB90 +10724AB90:lI116|H10724AC20 +10724AC20:lI101|H10724AC80 +10724AC80:lI115|H10724ACE0 +10724ACE0:lI116|H10724AD30 +10724AD30:lI45|H10724AD70 +10724AD70:lI49|H10724ADB0 +10724ADB0:lI46|H10724ADE0 +10724ADE0:lI50|H10724AE10 +10724AE10:lI53|H10724AE30 +10724AE30:lI47|H280052C20 +107238CC8:lH10723A1A8|N +10723A1A8:t2:H10723B510,A5:cache +10723B510:lI47|H10723C620 +10723C620:lI111|H10723D4F0 +10723D4F0:lI112|H10723E290 +10723E290:lI116|H10723EED0 +10723EED0:lI47|H10723F9B0 +10723F9B0:lI104|H107240320 +107240320:lI111|H107240BB0 +107240BB0:lI109|H107241360 +107241360:lI101|H107241A90 +107241A90:lI98|H107242160 +107242160:lI114|H1072427D0 +1072427D0:lI101|H107242DD0 +107242DD0:lI119|H107243340 +107243340:lI47|H107243880 +107243880:lI67|H107243D90 +107243D90:lI101|H107244280 +107244280:lI108|H107244730 +107244730:lI108|H107244BA0 +107244BA0:lI97|H107245000 +107245000:lI114|H107245450 +107245450:lI47|H107245850 +107245850:lI101|H107245C10 +107245C10:lI114|H107245FA0 +107245FA0:lI108|H107246330 +107246330:lI97|H1072466C0 +1072466C0:lI110|H107246A50 +107246A50:lI103|H107246D90 +107246D90:lI47|H1072470B0 +1072470B0:lI50|H1072473D0 +1072473D0:lI54|H1072476E0 +1072476E0:lI46|H1072479E0 +1072479E0:lI48|H107247CE0 +107247CE0:lI46|H107247FC0 +107247FC0:lI50|H107248280 +107248280:lI47|H107248540 +107248540:lI108|H1072487F0 +1072487F0:lI105|H107248AA0 +107248AA0:lI98|H107248D20 +107248D20:lI47|H107248F90 +107248F90:lI101|H107249200 +107249200:lI114|H107249460 +107249460:lI108|H1072496C0 +1072496C0:lI97|H107249910 +107249910:lI110|H107249B20 +107249B20:lI103|H107249D10 +107249D10:lI47|H107249EF0 +107249EF0:lI108|H10724A0B0 +10724A0B0:lI105|H10724A250 +10724A250:lI98|H10724A3D0 +10724A3D0:lI47|H10724A540 +10724A540:lI97|H10724A6A0 +10724A6A0:lI115|H10724A7D0 +10724A7D0:lI110|H10724A8F0 +10724A8F0:lI49|H10724AA00 +10724AA00:lI45|H10724AAE0 +10724AAE0:lI53|H10724ABA0 +10724ABA0:lI46|H10724AC30 +10724AC30:lI49|H10724AC90 +10724AC90:lI47|H280052C20 +1071F0038:lI47|H1071F05F8 +1071F05F8:lI111|H1071F1880 +1071F1880:lI112|H1071F3AF8 +1071F3AF8:lI116|H1071F6310 +1071F6310:lI47|H1071F8F60 +1071F8F60:lI104|H1071FBEA0 +1071FBEA0:lI111|H1071FEF58 +1071FEF58:lI109|H107202100 +107202100:lI101|H107205340 +107205340:lI98|H107208638 +107208638:lI114|H10720B908 +10720B908:lI101|H10720EBC8 +10720EBC8:lI119|H107211F28 +107211F28:lI47|H107215400 +107215400:lI67|H107218A90 +107218A90:lI101|H10721C2C0 +10721C2C0:lI108|H10721F9C0 +10721F9C0:lI108|H107222EB8 +107222EB8:lI97|H107226020 +107226020:lI114|H107228E08 +107228E08:lI47|H10722B840 +10722B840:lI101|H10722DF18 +10722DF18:lI114|H107230340 +107230340:lI108|H1072324B8 +1072324B8:lI97|H107234320 +107234320:lI110|H107235E88 +107235E88:lI103|H107237780 +107237780:lI47|H107238E08 +107238E08:lI50|H10723A2E0 +10723A2E0:lI54|H10723B640 +10723B640:lI46|H10723C720 +10723C720:lI48|H10723D5E0 +10723D5E0:lI46|H10723E360 +10723E360:lI50|H10723EF70 +10723EF70:lI47|H10723FA40 +10723FA40:lI108|H107240390 +107240390:lI105|H107240C10 +107240C10:lI98|H1072413A0 +1072413A0:lI47|H107241AD0 +107241AD0:lI101|H1072421A0 +1072421A0:lI114|H107242810 +107242810:lI108|H107242E10 +107242E10:lI97|H107243380 +107243380:lI110|H1072438C0 +1072438C0:lI103|N +=proc_dictionary:<0.51.0> +H105D8DDC8 +H105D8DE00 +=proc_stack:<0.51.0> +y0:N +y1:A8:infinity +y2:H105D8DE90 +y3:H105D8DF68 +y4:A12:standard_error_sup +y5:P<0.49.0> +0x0000000105d8e3d8:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105d8e3f8:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.51.0> +105D8DE90:t5:AE:callback_cache,A11:supervisor_bridge,H105D8DE18,H105D8DE40,H105D8DE68 +105D8DE68:E24:g3F3EXN1cGVydmlzb3JfYnJpZGdldwtoYW5kbGVfaW5mb2EC +105D8DE40:E24:g3F3EXN1cGVydmlzb3JfYnJpZGdldwtoYW5kbGVfY2FzdGEC +105D8DE18:E24:g3F3EXN1cGVydmlzb3JfYnJpZGdldwtoYW5kbGVfY2FsbGED +105D8DF68:t5:A5:state,AE:standard_error,P<0.52.0>,P<0.52.0>,H280068C20 +105D8DDC8:t2:AA:$ancestors,H105D8DDB8 +105D8DDB8:lAA:kernel_sup|H105D8DD78 +105D8DD78:lP<0.47.0>|N +105D8DE00:t2:AD:$initial_call,H105D8DDE0 +105D8DDE0:t3:A11:supervisor_bridge,AE:standard_error,I1 +=proc_dictionary:<0.52.0> +H105D972F8 +H105D972E0 +=proc_stack:<0.52.0> +y0:p<0.1> +0x0000000105d979e0:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.52.0> +105D972F8:t2:A5:onlcr,A5:false +105D972E0:t2:A8:encoding,A7:unicode +=proc_dictionary:<0.53.0> +H105D801F0 +H105D80208 +=proc_stack:<0.53.0> +y0:N +y1:A8:infinity +y2:H105D801C0 +y3:A9:undefined +y4:AD:file_server_2 +y5:P<0.49.0> +0x0000000105ddf9b8:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105ddf9d8:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.53.0> +105D801C0:t5:AE:callback_cache,AB:file_server,H105D80220,H105D80248,H105D80270 +105D80270:E1E:g3F3C2ZpbGVfc2VydmVydwtoYW5kbGVfaW5mb2EC +105D80248:E1E:g3F3C2ZpbGVfc2VydmVydwtoYW5kbGVfY2FzdGEC +105D80220:E1E:g3F3C2ZpbGVfc2VydmVydwtoYW5kbGVfY2FsbGED +105D801F0:t2:AA:$ancestors,H105D80298 +105D80298:lAA:kernel_sup|H105D802C8 +105D802C8:lP<0.47.0>|N +105D80208:t2:AD:$initial_call,H105D802A8 +105D802A8:t3:AB:file_server,A4:init,I1 +=proc_dictionary:<0.55.0> +H105D90368 +H105D90380 +=proc_stack:<0.55.0> +y0:N +y1:A8:infinity +y2:H105D902E8 +y3:H105D90318 +y4:A7:inet_db +y5:P<0.49.0> +0x0000000105d92198:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105d921b8:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.55.0> +105D902E8:t5:AE:callback_cache,A7:inet_db,H105D90398,H105D903C0,H105D903E8 +105D903E8:E1A:g3F3B2luZXRfZGJ3C2hhbmRsZV9pbmZvYQI= +105D903C0:E1A:g3F3B2luZXRfZGJ3C2hhbmRsZV9jYXN0YQI= +105D90398:E1A:g3F3B2luZXRfZGJ3C2hhbmRsZV9jYWxsYQM= +105D90318:t9:A5:state,A7:inet_db,AA:inet_cache,A11:inet_hosts_byname,A11:inet_hosts_byaddr,A16:inet_hosts_file_byname,A16:inet_hosts_file_byaddr,AC:inet_sockets,H105D90410 +105D90410:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAAK/o+vQAAd/g02c= +105D90368:t2:AA:$ancestors,H105D90428 +105D90428:lAA:kernel_sup|H105D90458 +105D90458:lP<0.47.0>|N +105D90380:t2:AD:$initial_call,H105D90438 +105D90438:t3:A7:inet_db,A4:init,I1 +=proc_dictionary:<0.56.0> +H105D98DE8 +H105D98E20 +=proc_stack:<0.56.0> +y0:N +y1:A8:infinity +y2:H105D98EB0 +y3:H105D98F20 +y4:A3:rex +y5:P<0.49.0> +0x0000000105d99428:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105d99448:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.56.0> +105D98EB0:t5:AE:callback_cache,A3:rpc,H105D98E38,H105D98E60,H105D98E88 +105D98E88:E16:g3F3A3JwY3cLaGFuZGxlX2luZm9hAg== +105D98E60:E16:g3F3A3JwY3cLaGFuZGxlX2Nhc3RhAg== +105D98E38:E16:g3F3A3JwY3cLaGFuZGxlX2NhbGxhAw== +105D98F20:Mf1:H280071110:H105D98F08 +105D98F08:t2:P<0.57.0>,H105D98EF0 +105D98EF0:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALAD+vQAAd/g02c= +105D98DE8:t2:AA:$ancestors,H105D98DD8 +105D98DD8:lAA:kernel_sup|H105D98D98 +105D98D98:lP<0.47.0>|N +105D98E20:t2:AD:$initial_call,H105D98E00 +105D98E00:t3:A3:rpc,A4:init,I1 +=proc_stack:<0.57.0> +y0:N +y1:H105D99468 +y2:N +0x0000000105d99b98:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.57.0> +105D99468:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALAE+vYAAd/g02c= +=proc_dictionary:<0.58.0> +H105D84510 +H105DA9070 +H105DA9088 +H105D84428 +=proc_stack:<0.58.0> +y0:N +y1:A8:infinity +y2:H105DA9040 +y3:H105DA9158 +y4:A12:global_name_server +y5:P<0.49.0> +0x0000000105d856e8:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105d85708:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.58.0> +105DA9040:t5:AE:callback_cache,A6:global,H105DA90A0,H105DA90C8,H105DA90F0 +105DA90F0:E19:g3F3Bmdsb2JhbHcLaGFuZGxlX2luZm9hAg== +105DA90C8:E19:g3F3Bmdsb2JhbHcLaGFuZGxlX2Nhc3RhAg== +105DA90A0:E19:g3F3Bmdsb2JhbHcLaGFuZGxlX2NhbGxhAw== +105DA9158:tB:A5:state,H105DA91B8,H2800715B0,N,N,N,AD:nonode@nohost,P<0.59.0>,P<0.60.0>,A8:no_trace,A5:false +105DA91B8:t3:A4:conf,A4:true,A4:true +105D84510:t2:A12:creation_extension,H105D833F0 +105D833F0:B889410000978444288 +105DA9070:t2:AA:$ancestors,H105DA9118 +105DA9118:lAA:kernel_sup|H105DA9148 +105DA9148:lP<0.47.0>|N +105DA9088:t2:AD:$initial_call,H105DA9128 +105DA9128:t3:A6:global,A4:init,I1 +105D84428:t2:A9:rand_seed,H105D84400 +105D84400:t2:H105D84478,H105D844C0 +105D844C0:lI236283493786687394|I177509139475053309 +105D84478:Mf6:H28007DE10:A5:exsss,H28007DD70,I58,H28007DD98,H28007DDC0,H28007DDE8 +=proc_stack:<0.59.0> +y0:A8:infinity +y1:H105DAE560 +0x0000000105daeb20:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.59.0> +105DAE560:t7:A5:multi,N,N,N,AD:nonode@nohost,A5:false,A5:false +=proc_stack:<0.60.0> +y0:N +0x0000000105dafe38:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.60.0> +=proc_dictionary:<0.61.0> +H105DAA4F0 +H105DAA580 +H105DAA418 +H105DAA430 +H105DAA518 +H105DAA598 +=proc_stack:<0.61.0> +y0:N +y1:A8:infinity +y2:H105DAA3D8 +y3:H105DAAB68 +y4:AC:global_group +y5:P<0.49.0> +0x0000000105daaef0:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105daaf10:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.61.0> +105DAA3D8:t5:AE:callback_cache,AC:global_group,H105DAA478,H105DAA4A0,H105DAA4C8 +105DAA4C8:E1F:g3F3DGdsb2JhbF9ncm91cHcLaGFuZGxlX2luZm9hAg== +105DAA4A0:E1F:g3F3DGdsb2JhbF9ncm91cHcLaGFuZGxlX2Nhc3RhAg== +105DAA478:E1F:g3F3DGdsb2JhbF9ncm91cHcLaGFuZGxlX2NhbGxhAw== +105DAAB68:tA:A5:state,A7:no_conf,N,H28007F1E8,N,N,A6:normal,H28007F1E8,H28007FCE8,A9:undefined +105DAA4F0:t2:A4:send,H28007F1D8 +105DAA580:t2:AA:$ancestors,H105DAA5C0 +105DAA5C0:lAA:kernel_sup|H105DAA600 +105DAA600:lP<0.47.0>|N +105DAA418:t2:A12:global_group_check,P<0.62.0> +105DAA430:t2:A10:registered_names,H28007F1D8 +105DAA518:t2:AC:whereis_name,H28007F1D8 +105DAA598:t2:AD:$initial_call,H105DAA5D0 +105DAA5D0:t3:AC:global_group,A4:init,I1 +=proc_stack:<0.62.0> +0x0000000105daf270:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.62.0> +=proc_dictionary:<0.63.0> +H105DAFF28 +H105DAFF40 +=proc_stack:<0.63.0> +y0:A5:false +y1:N +y2:A8:infinity +y3:H105DB0060 +y4:A11:erl_signal_server +y5:P<0.49.0> +0x0000000105db0568:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105db0588:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.63.0> +105DB0060:lH105DB0030|N +105DB0030:t5:A7:handler,A12:erl_signal_handler,A5:false,H28008FBD0,A5:false +105DAFF28:t2:AA:$ancestors,H105DAFF18 +105DAFF18:lAA:kernel_sup|H105DAFED8 +105DAFED8:lP<0.47.0>|N +105DAFF40:t2:AD:$initial_call,H280042BE0 +=proc_dictionary:<0.64.0> +H105DF31D8 +H105DF31F0 +=proc_stack:<0.64.0> +y0:N +y1:A8:infinity +y2:H105DF31A8 +y3:H105DFA798 +y4:P<0.64.0> +y5:P<0.49.0> +0x0000000105dfb420:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105dfb440:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.64.0> +105DF31A8:t5:AE:callback_cache,A11:supervisor_bridge,H105DF3230,H105DF3258,H105DF3280 +105DF3280:E24:g3F3EXN1cGVydmlzb3JfYnJpZGdldwtoYW5kbGVfaW5mb2EC +105DF3258:E24:g3F3EXN1cGVydmlzb3JfYnJpZGdldwtoYW5kbGVfY2FzdGEC +105DF3230:E24:g3F3EXN1cGVydmlzb3JfYnJpZGdldwtoYW5kbGVfY2FsbGED +105DFA798:t5:A5:state,A8:user_sup,P<0.69.0>,P<0.69.0>,H105DF3190 +105DF3190:t2:P<0.64.0>,A8:user_sup +105DF31D8:t2:AA:$ancestors,H105DF32A8 +105DF32A8:lAA:kernel_sup|H105DF3310 +105DF3310:lP<0.47.0>|N +105DF31F0:t2:AD:$initial_call,H105DF32B8 +105DF32B8:t3:A11:supervisor_bridge,A8:user_sup,I1 +=proc_dictionary:<0.65.0> +H105DAC538 +H105D87E18 +H105DAC250 +=proc_stack:<0.65.0> +y0:N +y1:A8:infinity +y2:H105D889A8 +y3:N +y4:H105DAC4F8 +0x0000000105d89030:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105d89050:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.65.0> +105D889A8:t5:A5:state,H105D88990,N,H280082770,A5:false +105D88990:t2:A6:server,H105D88920 +105D88920:tA:A5:state,H105DAC3B0,H105DAC350,H105DAC398,A5:false,A9:undefined,P<0.69.0>,P<0.69.0>,H105D87DE8,H105D888F0 +105D888F0:t2:A5:false,H28005B2F8 +105D87DE8:t5:A2:gr,I1,I0,P<0.69.0>,H105D87E40 +105D87E40:lH105D87E50|N +105D87E50:t4:A5:group,I0,P<0.69.0>,H280010188 +105DAC398:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALBC+vQAAd/g02c= +105DAC350:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALBA+vQAAd/g02c= +105DAC3B0:t1A:A5:state,H105DAC2B8,H105DAC488,H105DAC2D0,H105DAC2E8,A4:true,N,N,N,N,A9:undefined,I125,I12,A5:false,H280086838,H280086850,H280086868,H280086880,H280086898,H2800868B0,H2800868C8,A5:false,A5:false,H2800868E0,H2800868F8,H105DAC320 +105DAC320:t5:AA:re_pattern,I0,I1,I0,H105DAC368 +105DAC368:Yc130931BD0:0:15E +105DAC2E8:Mf4:H280086920:A4:true,A5:false,A5:false,A5:false +105DAC2D0:t2:P<0.67.0>,H105DAC350 +105DAC488:t2:P<0.68.0>,H105DAC398 +105DAC2B8:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALA++vYAAd/g02c= +105DAC4F8:t7:A6:params,AF:state_functions,A5:false,P<0.65.0>,H105DAC598,A8:user_drv,A8:infinity +105DAC598:lA8:user_drv|N +105DAC538:t2:AA:$ancestors,H105DAC5A8 +105DAC5A8:lP<0.69.0>|H105DAC268 +105DAC268:lP<0.64.0>|H105DAC298 +105DAC298:lAA:kernel_sup|H105DAC2A8 +105DAC2A8:lP<0.47.0>|N +105D87E18:t2:AD:current_group,P<0.69.0> +105DAC250:t2:AD:$initial_call,H105DAC278 +105DAC278:t3:A8:user_drv,A4:init,I1 +=proc_dictionary:<0.67.0> +H105DAAFD8 +H105DAB010 +=proc_stack:<0.67.0> +y0:N +y1:H105DAB028 +y2:H105DAAF50 +0x0000000105dab640:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105dab660:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.67.0> +105DAB028:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALBA+vQAAd/g02c= +105DAAF50:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALA++vYAAd/g02c= +105DAAFD8:t2:AA:$ancestors,H105DAAFC8 +105DAAFC8:lA8:user_drv|H105DAAF88 +105DAAF88:lP<0.64.0>|H105DAAF78 +105DAAF78:lAA:kernel_sup|H105DAAF68 +105DAAF68:lP<0.47.0>|N +105DAB010:t2:AD:$initial_call,H105DAAFF0 +105DAAFF0:t3:A8:prim_tty,A6:writer,I1 +=proc_dictionary:<0.68.0> +H105DAB758 +H105DAB790 +=proc_stack:<0.68.0> +y0:N +y1:N +y2:H280086C10 +y3:A4:utf8 +y4:H105DAB7A8 +y5:H105DAB7C0 +y6:P<0.65.0> +y7:H105DAB6B0 +0x0000000105dabd90:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105dabdb0:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.68.0> +105DAB7A8:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALBC+vQAAd/g02c= +105DAB7C0:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALBD+vQAAd/g02c= +105DAB6B0:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALA++vYAAd/g02c= +105DAB758:t2:AA:$ancestors,H105DAB748 +105DAB748:lA8:user_drv|H105DAB708 +105DAB708:lP<0.64.0>|H105DAB6F8 +105DAB6F8:lAA:kernel_sup|H105DAB6E8 +105DAB6E8:lP<0.47.0>|N +105DAB790:t2:AD:$initial_call,H105DAB770 +105DAB770:t3:A8:prim_tty,A6:reader,I1 +=proc_dictionary:<0.69.0> +H105D89778 +H105D898F8 +H105D897E8 +H105D85E78 +H105D89810 +H105D89730 +H105D89748 +H105D89760 +=proc_stack:<0.69.0> +y0:N +y1:A2:ok +y2:P<0.65.0> +0x0000000105d89c18:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.69.0> +105D89778:t2:AD:unicode_state,A4:true +105D898F8:t2:AA:expand_fun,H2800870F0 +105D897E8:t2:A4:echo,A5:false +105D85E78:t2:AB:kill_buffer,N +105D89810:t2:AC:expand_below,A4:true +105D89730:t2:AB:line_buffer,N +105D89748:t2:A9:read_mode,A6:binary +105D89760:t2:A8:user_drv,P<0.65.0> +=proc_dictionary:<0.70.0> +H105D86A30 +H105D86A48 +=proc_stack:<0.70.0> +y0:N +y1:A8:infinity +y2:H105D86C90 +y3:H105D81B48 +y4:AA:logger_sup +y5:P<0.49.0> +0x0000000105d82070:SReturn addr 0x3E951BC (proc_lib:wake_up/3 + 220) +y0:N +y1:N +y2:SCatch 0x3E951E4 (proc_lib:wake_up/3 + 260) +0x0000000105d82090:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.70.0> +105D86C90:t5:AE:callback_cache,AA:supervisor,H105D86CC0,H105D86CE8,H105D86D10 +105D86D10:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI= +105D86CE8:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI= +105D86CC0:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM= +105D81B48:tC:A5:state,H280088258,AB:one_for_one,H105D81B30,A9:undefined,I1,I5,N,I0,A5:never,AA:logger_sup,N +105D81B30:t2:H105D81B20,H105D81AC0 +105D81AC0:Mf4:H105D81AF8:H105D81718,H105D86BE0,H105D86C30,H105D81A70 +105D81AF8:t4:A7:default,A16:logger_handler_watcher,AC:logger_proxy,AB:ssl_handler +105D81A70:t9:A5:child,P<0.105.0>,AB:ssl_handler,H105D81A50,A9:temporary,A5:false,I2000,A6:worker,H280091F30 +105D81A50:t3:AA:logger_olp,AA:start_link,A9:undefined +105D86C30:t9:A5:child,P<0.72.0>,AC:logger_proxy,H28005A150,A9:temporary,A5:false,I2000,A6:worker,H28005A140 +105D86BE0:t9:A5:child,P<0.71.0>,A16:logger_handler_watcher,H2800882C0,A9:permanent,A5:false,AB:brutal_kill,A6:worker,H105D86C80 +105D86C80:lA16:logger_handler_watcher|N +105D81718:t9:A5:child,P<0.77.0>,A7:default,H105D817D8,A9:temporary,A5:false,I2000,A6:worker,H280091F30 +105D817D8:t3:AA:logger_olp,AA:start_link,A9:undefined +105D81B20:lAB:ssl_handler|H105D81698 +105D81698:lA7:default|H105D86B70 +105D86B70:lAC:logger_proxy|H105D86BB8 +105D86BB8:lA16:logger_handler_watcher|N +105D86A30:t2:AA:$ancestors,H105D86A70 +105D86A70:lAA:kernel_sup|H105D86AB0 +105D86AB0:lP<0.47.0>|N +105D86A48:t2:AD:$initial_call,H105D86A80 +105D86A80:t3:AA:supervisor,AA:logger_sup,I1 +=proc_dictionary:<0.71.0> +H105D85808 +H105D85840 +=proc_stack:<0.71.0> +y0:N +y1:A8:infinity +y2:H105D858D0 +y3:H105D85B58 +y4:A16:logger_handler_watcher +y5:P<0.70.0> +0x0000000105d85e38:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105d85e58:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.71.0> +105D858D0:t5:AE:callback_cache,A16:logger_handler_watcher,H105D85858,H105D85880,H105D858A8 +105D858A8:E29:g3F3FmxvZ2dlcl9oYW5kbGVyX3dhdGNoZXJ3C2hhbmRsZV9pbmZvYQI= +105D85880:E29:g3F3FmxvZ2dlcl9oYW5kbGVyX3dhdGNoZXJ3C2hhbmRsZV9jYXN0YQI= +105D85858:E29:g3F3FmxvZ2dlcl9oYW5kbGVyX3dhdGNoZXJ3C2hhbmRsZV9jYWxsYQM= +105D85B58:t2:A5:state,H105D85B48 +105D85B48:lH105D859F0|H105D85B38 +105D859F0:t2:A7:default,H105D859D8 +105D859D8:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALCJ+vQAAd/g02c= +105D85B38:lH105D85B20|N +105D85B20:t2:AB:ssl_handler,H105D85B08 +105D85B08:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALFo+vQAAd/g02c= +105D85808:t2:AA:$ancestors,H105D857F8 +105D857F8:lAA:logger_sup|H105D857B8 +105D857B8:lAA:kernel_sup|H105D857A8 +105D857A8:lP<0.47.0>|N +105D85840:t2:AD:$initial_call,H105D85820 +105D85820:t3:A16:logger_handler_watcher,A4:init,I1 +=proc_dictionary:<0.72.0> +H105D89DB0 +H105D89DC8 +H105D89DE0 +=proc_stack:<0.72.0> +0x0000000105d8a748:SReturn addr 0x3F1CC18 (gen_server:try_handle_info/3 + 240) +y0:N +y1:N +y2:N +y3:AA:logger_olp +y4:H105D89CF8 +y5:H105DE8808 +y6:SCatch 0x3F1CC6C (gen_server:try_handle_info/3 + 324) +0x0000000105d8a788:SReturn addr 0x3F1D994 (gen_server:handle_msg/6 + 1028) +y0:A8:infinity +y1:H105D8A120 +y2:H105D89CF8 +y3:P<0.72.0> +y4:P<0.70.0> +y5:H105DE8808 +0x0000000105d8a7c0:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105d8a7e0:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.72.0> +105D89CF8:Mf14:H105D89E18:AC:logger_proxy,AC:logger_proxy,A5:async,A4:true,A5:false,I1000,I5000,I500,I0,I-576460751881273,A8:no_state,I-576460751881273,I0,H105D89EC0,I5000,I500,I1000,A5:false,I3000000,I20000 +105D89E18:t14:A2:id,A6:module,A4:mode,A4:idle,A12:burst_limit_enable,AE:drop_mode_qlen,AA:flush_qlen,AE:sync_mode_qlen,AF:burst_msg_count,AC:burst_win_ts,A8:cb_state,AC:last_load_ts,A9:last_qlen,A8:mode_ref,A1B:overload_kill_restart_after,A15:burst_limit_max_count,A17:burst_limit_window_time,A14:overload_kill_enable,A16:overload_kill_mem_size,A12:overload_kill_qlen +105D89EC0:t2:AA:logger_olp,AC:logger_proxy +105DE8808:t5:A3:log,A5:error,H105DE5C18,H105DE8758,H105DE87D0 +105DE87D0:Mf4:H105DE87A8:H105DE8768,P<0.134.0>,I1701928823965135,P<0.69.0> +105DE87A8:t4:AC:error_logger,A3:pid,A4:time,A2:gl +105DE8768:Mf2:H105DE8790:A4:true,A5:error +105DE8790:t2:A8:emulator,A3:tag +105DE8758:lP<0.134.0>|H105DE5C28 +105DE5C28:lH105DE5C38|N +105DE5C38:t2:H105DE5C50,H105DE5C90 +105DE5C90:lH105DE5D10|H105DE5CA0 +105DE5D10:t4:A23:showtime@internal@reports@formatter,A1C:-create_test_report/1-fun-4-,I1,H105DE5DD8 +105DE5DD8:lH105DE5E78|H105DE5DE8 +105DE5E78:t2:A4:file,H105DE86B8 +105DE86B8:lI47|H105DE86A8 +105DE86A8:lI85|H105DE8698 +105DE8698:lI115|H105DE8688 +105DE8688:lI101|H105DE8678 +105DE8678:lI114|H105DE8668 +105DE8668:lI115|H105DE8658 +105DE8658:lI47|H105DE8648 +105DE8648:lI110|H105DE8638 +105DE8638:lI105|H105DE8628 +105DE8628:lI99|H105DE8618 +105DE8618:lI104|H105DE8608 +105DE8608:lI111|H105DE85F8 +105DE85F8:lI108|H105DE85E8 +105DE85E8:lI97|H105DE85D8 +105DE85D8:lI115|H105DE85C8 +105DE85C8:lI99|H105DE85B8 +105DE85B8:lI97|H105DE85A8 +105DE85A8:lI114|H105DE8598 +105DE8598:lI108|H105DE8588 +105DE8588:lI115|H105DE8578 +105DE8578:lI111|H105DE8568 +105DE8568:lI110|H105DE8558 +105DE8558:lI47|H105DE8548 +105DE8548:lI86|H105DE8538 +105DE8538:lI83|H105DE8528 +105DE8528:lI32|H105DE8518 +105DE8518:lI67|H105DE8508 +105DE8508:lI111|H105DE84F8 +105DE84F8:lI100|H105DE84E8 +105DE84E8:lI101|H105DE84D8 +105DE84D8:lI47|H105DE84C8 +105DE84C8:lI65|H105DE84B8 +105DE84B8:lI100|H105DE84A8 +105DE84A8:lI118|H105DE8498 +105DE8498:lI101|H105DE8488 +105DE8488:lI110|H105DE8478 +105DE8478:lI116|H105DE8468 +105DE8468:lI79|H105DE8458 +105DE8458:lI102|H105DE8448 +105DE8448:lI67|H105DE8438 +105DE8438:lI111|H105DE8428 +105DE8428:lI100|H105DE8418 +105DE8418:lI101|H105DE8408 +105DE8408:lI47|H105DE83F8 +105DE83F8:lI97|H105DE83E8 +105DE83E8:lI111|H105DE83D8 +105DE83D8:lI99|H105DE83C8 +105DE83C8:lI50|H105DE83B8 +105DE83B8:lI48|H105DE83A8 +105DE83A8:lI50|H105DE8398 +105DE8398:lI51|H105DE8388 +105DE8388:lI47|H105DE8378 +105DE8378:lI98|H105DE8368 +105DE8368:lI117|H105DE8358 +105DE8358:lI105|H105DE8348 +105DE8348:lI108|H105DE8338 +105DE8338:lI100|H105DE8328 +105DE8328:lI47|H105DE8318 +105DE8318:lI100|H105DE8308 +105DE8308:lI101|H105DE82F8 +105DE82F8:lI118|H105DE82E8 +105DE82E8:lI47|H105DE82D8 +105DE82D8:lI101|H105DE82C8 +105DE82C8:lI114|H105DE82B8 +105DE82B8:lI108|H105DE82A8 +105DE82A8:lI97|H105DE8298 +105DE8298:lI110|H105DE8288 +105DE8288:lI103|H105DE8278 +105DE8278:lI47|H105DE8268 +105DE8268:lI97|H105DE8258 +105DE8258:lI100|H105DE8248 +105DE8248:lI103|H105DE8238 +105DE8238:lI108|H105DE8228 +105DE8228:lI101|H105DE8218 +105DE8218:lI110|H105DE8208 +105DE8208:lI116|H105DE81F8 +105DE81F8:lI47|H105DE81E8 +105DE81E8:lI95|H105DE81D8 +105DE81D8:lI103|H105DE81C8 +105DE81C8:lI108|H105DE81B8 +105DE81B8:lI101|H105DE81A8 +105DE81A8:lI97|H105DE8198 +105DE8198:lI109|H105DE8188 +105DE8188:lI95|H105DE8178 +105DE8178:lI97|H105DE8168 +105DE8168:lI114|H105DE8158 +105DE8158:lI116|H105DE8148 +105DE8148:lI101|H105DE8138 +105DE8138:lI102|H105DE8128 +105DE8128:lI97|H105DE8118 +105DE8118:lI99|H105DE8108 +105DE8108:lI116|H105DE80F8 +105DE80F8:lI115|H105DE80E8 +105DE80E8:lI47|H105DE80D8 +105DE80D8:lI115|H105DE80C8 +105DE80C8:lI104|H105DE80B8 +105DE80B8:lI111|H105DE80A8 +105DE80A8:lI119|H105DE8098 +105DE8098:lI116|H105DE8088 +105DE8088:lI105|H105DE8078 +105DE8078:lI109|H105DE8068 +105DE8068:lI101|H105DE8058 +105DE8058:lI64|H105DE8048 +105DE8048:lI105|H105DE8038 +105DE8038:lI110|H105DE8028 +105DE8028:lI116|H105DE8018 +105DE8018:lI101|H105DE8008 +105DE8008:lI114|H105DE7FF8 +105DE7FF8:lI110|H105DE7FE8 +105DE7FE8:lI97|H105DE7FD8 +105DE7FD8:lI108|H105DE7FC8 +105DE7FC8:lI64|H105DE7FB8 +105DE7FB8:lI114|H105DE7FA8 +105DE7FA8:lI101|H105DE7F98 +105DE7F98:lI112|H105DE7F88 +105DE7F88:lI111|H105DE7F78 +105DE7F78:lI114|H105DE7F68 +105DE7F68:lI116|H105DE7F58 +105DE7F58:lI115|H105DE7F48 +105DE7F48:lI64|H105DE7F38 +105DE7F38:lI102|H105DE7F28 +105DE7F28:lI111|H105DE7F18 +105DE7F18:lI114|H105DE7F08 +105DE7F08:lI109|H105DE7EF8 +105DE7EF8:lI97|H105DE7EE8 +105DE7EE8:lI116|H105DE7ED8 +105DE7ED8:lI116|H105DE7EC8 +105DE7EC8:lI101|H105DE7EB8 +105DE7EB8:lI114|H105DE7EA8 +105DE7EA8:lI46|H105DE7E98 +105DE7E98:lI101|H105DE7E88 +105DE7E88:lI114|H105DE7E78 +105DE7E78:lI108|N +105DE5DE8:lH105DE5E90|N +105DE5E90:t2:A4:line,I665 +105DE5CA0:lH105DE5D38|H105DE5CB0 +105DE5D38:t4:AA:gleam@list,AD:do_filter_map,I3,H105DE5DF8 +105DE5DF8:lH105DE5EA8|H105DE5E08 +105DE5EA8:t2:A4:file,H105DE7E68 +105DE7E68:lI47|H105DE7E58 +105DE7E58:lI85|H105DE7E48 +105DE7E48:lI115|H105DE7E38 +105DE7E38:lI101|H105DE7E28 +105DE7E28:lI114|H105DE7E18 +105DE7E18:lI115|H105DE7E08 +105DE7E08:lI47|H105DE7DF8 +105DE7DF8:lI110|H105DE7DE8 +105DE7DE8:lI105|H105DE7DD8 +105DE7DD8:lI99|H105DE7DC8 +105DE7DC8:lI104|H105DE7DB8 +105DE7DB8:lI111|H105DE7DA8 +105DE7DA8:lI108|H105DE7D98 +105DE7D98:lI97|H105DE7D88 +105DE7D88:lI115|H105DE7D78 +105DE7D78:lI99|H105DE7D68 +105DE7D68:lI97|H105DE7D58 +105DE7D58:lI114|H105DE7D48 +105DE7D48:lI108|H105DE7D38 +105DE7D38:lI115|H105DE7D28 +105DE7D28:lI111|H105DE7D18 +105DE7D18:lI110|H105DE7D08 +105DE7D08:lI47|H105DE7CF8 +105DE7CF8:lI86|H105DE7CE8 +105DE7CE8:lI83|H105DE7CD8 +105DE7CD8:lI32|H105DE7CC8 +105DE7CC8:lI67|H105DE7CB8 +105DE7CB8:lI111|H105DE7CA8 +105DE7CA8:lI100|H105DE7C98 +105DE7C98:lI101|H105DE7C88 +105DE7C88:lI47|H105DE7C78 +105DE7C78:lI65|H105DE7C68 +105DE7C68:lI100|H105DE7C58 +105DE7C58:lI118|H105DE7C48 +105DE7C48:lI101|H105DE7C38 +105DE7C38:lI110|H105DE7C28 +105DE7C28:lI116|H105DE7C18 +105DE7C18:lI79|H105DE7C08 +105DE7C08:lI102|H105DE7BF8 +105DE7BF8:lI67|H105DE7BE8 +105DE7BE8:lI111|H105DE7BD8 +105DE7BD8:lI100|H105DE7BC8 +105DE7BC8:lI101|H105DE7BB8 +105DE7BB8:lI47|H105DE7BA8 +105DE7BA8:lI97|H105DE7B98 +105DE7B98:lI111|H105DE7B88 +105DE7B88:lI99|H105DE7B78 +105DE7B78:lI50|H105DE7B68 +105DE7B68:lI48|H105DE7B58 +105DE7B58:lI50|H105DE7B48 +105DE7B48:lI51|H105DE7B38 +105DE7B38:lI47|H105DE7B28 +105DE7B28:lI98|H105DE7B18 +105DE7B18:lI117|H105DE7B08 +105DE7B08:lI105|H105DE7AF8 +105DE7AF8:lI108|H105DE7AE8 +105DE7AE8:lI100|H105DE7AD8 +105DE7AD8:lI47|H105DE7AC8 +105DE7AC8:lI100|H105DE7AB8 +105DE7AB8:lI101|H105DE7AA8 +105DE7AA8:lI118|H105DE7A98 +105DE7A98:lI47|H105DE7A88 +105DE7A88:lI101|H105DE7A78 +105DE7A78:lI114|H105DE7A68 +105DE7A68:lI108|H105DE7A58 +105DE7A58:lI97|H105DE7A48 +105DE7A48:lI110|H105DE7A38 +105DE7A38:lI103|H105DE7A28 +105DE7A28:lI47|H105DE7A18 +105DE7A18:lI103|H105DE7A08 +105DE7A08:lI108|H105DE79F8 +105DE79F8:lI101|H105DE79E8 +105DE79E8:lI97|H105DE79D8 +105DE79D8:lI109|H105DE79C8 +105DE79C8:lI95|H105DE79B8 +105DE79B8:lI115|H105DE79A8 +105DE79A8:lI116|H105DE7998 +105DE7998:lI100|H105DE7988 +105DE7988:lI108|H105DE7978 +105DE7978:lI105|H105DE7968 +105DE7968:lI98|H105DE7958 +105DE7958:lI47|H105DE7948 +105DE7948:lI95|H105DE7938 +105DE7938:lI103|H105DE7928 +105DE7928:lI108|H105DE7918 +105DE7918:lI101|H105DE7908 +105DE7908:lI97|H105DE78F8 +105DE78F8:lI109|H105DE78E8 +105DE78E8:lI95|H105DE78D8 +105DE78D8:lI97|H105DE78C8 +105DE78C8:lI114|H105DE78B8 +105DE78B8:lI116|H105DE78A8 +105DE78A8:lI101|H105DE7898 +105DE7898:lI102|H105DE7888 +105DE7888:lI97|H105DE7878 +105DE7878:lI99|H105DE7868 +105DE7868:lI116|H105DE7858 +105DE7858:lI115|H105DE7848 +105DE7848:lI47|H105DE7838 +105DE7838:lI103|H105DE7828 +105DE7828:lI108|H105DE7818 +105DE7818:lI101|H105DE7808 +105DE7808:lI97|H105DE77F8 +105DE77F8:lI109|H105DE77E8 +105DE77E8:lI64|H105DE77D8 +105DE77D8:lI108|H105DE77C8 +105DE77C8:lI105|H105DE77B8 +105DE77B8:lI115|H105DE77A8 +105DE77A8:lI116|H105DE7798 +105DE7798:lI46|H105DE7788 +105DE7788:lI101|H105DE7778 +105DE7778:lI114|H105DE7768 +105DE7768:lI108|N +105DE5E08:lH105DE5EC0|N +105DE5EC0:t2:A4:line,I94 +105DE5CB0:lH105DE5D60|H105DE5CC0 +105DE5D60:t4:A23:showtime@internal@reports@formatter,A12:create_test_report,I1,H105DE5E18 +105DE5E18:lH105DE5ED8|H105DE5E28 +105DE5ED8:t2:A4:file,H105DE7758 +105DE7758:lI47|H105DE7748 +105DE7748:lI85|H105DE7738 +105DE7738:lI115|H105DE7728 +105DE7728:lI101|H105DE7718 +105DE7718:lI114|H105DE7708 +105DE7708:lI115|H105DE76F8 +105DE76F8:lI47|H105DE76E8 +105DE76E8:lI110|H105DE76D8 +105DE76D8:lI105|H105DE76C8 +105DE76C8:lI99|H105DE76B8 +105DE76B8:lI104|H105DE76A8 +105DE76A8:lI111|H105DE7698 +105DE7698:lI108|H105DE7688 +105DE7688:lI97|H105DE7678 +105DE7678:lI115|H105DE7668 +105DE7668:lI99|H105DE7658 +105DE7658:lI97|H105DE7648 +105DE7648:lI114|H105DE7638 +105DE7638:lI108|H105DE7628 +105DE7628:lI115|H105DE7618 +105DE7618:lI111|H105DE7608 +105DE7608:lI110|H105DE75F8 +105DE75F8:lI47|H105DE75E8 +105DE75E8:lI86|H105DE75D8 +105DE75D8:lI83|H105DE75C8 +105DE75C8:lI32|H105DE75B8 +105DE75B8:lI67|H105DE75A8 +105DE75A8:lI111|H105DE7598 +105DE7598:lI100|H105DE7588 +105DE7588:lI101|H105DE7578 +105DE7578:lI47|H105DE7568 +105DE7568:lI65|H105DE7558 +105DE7558:lI100|H105DE7548 +105DE7548:lI118|H105DE7538 +105DE7538:lI101|H105DE7528 +105DE7528:lI110|H105DE7518 +105DE7518:lI116|H105DE7508 +105DE7508:lI79|H105DE74F8 +105DE74F8:lI102|H105DE74E8 +105DE74E8:lI67|H105DE74D8 +105DE74D8:lI111|H105DE74C8 +105DE74C8:lI100|H105DE74B8 +105DE74B8:lI101|H105DE74A8 +105DE74A8:lI47|H105DE7498 +105DE7498:lI97|H105DE7488 +105DE7488:lI111|H105DE7478 +105DE7478:lI99|H105DE7468 +105DE7468:lI50|H105DE7458 +105DE7458:lI48|H105DE7448 +105DE7448:lI50|H105DE7438 +105DE7438:lI51|H105DE7428 +105DE7428:lI47|H105DE7418 +105DE7418:lI98|H105DE7408 +105DE7408:lI117|H105DE73F8 +105DE73F8:lI105|H105DE73E8 +105DE73E8:lI108|H105DE73D8 +105DE73D8:lI100|H105DE73C8 +105DE73C8:lI47|H105DE73B8 +105DE73B8:lI100|H105DE73A8 +105DE73A8:lI101|H105DE7398 +105DE7398:lI118|H105DE7388 +105DE7388:lI47|H105DE7378 +105DE7378:lI101|H105DE7368 +105DE7368:lI114|H105DE7358 +105DE7358:lI108|H105DE7348 +105DE7348:lI97|H105DE7338 +105DE7338:lI110|H105DE7328 +105DE7328:lI103|H105DE7318 +105DE7318:lI47|H105DE7308 +105DE7308:lI97|H105DE72F8 +105DE72F8:lI100|H105DE72E8 +105DE72E8:lI103|H105DE72D8 +105DE72D8:lI108|H105DE72C8 +105DE72C8:lI101|H105DE72B8 +105DE72B8:lI110|H105DE72A8 +105DE72A8:lI116|H105DE7298 +105DE7298:lI47|H105DE7288 +105DE7288:lI95|H105DE7278 +105DE7278:lI103|H105DE7268 +105DE7268:lI108|H105DE7258 +105DE7258:lI101|H105DE7248 +105DE7248:lI97|H105DE7238 +105DE7238:lI109|H105DE7228 +105DE7228:lI95|H105DE7218 +105DE7218:lI97|H105DE7208 +105DE7208:lI114|H105DE71F8 +105DE71F8:lI116|H105DE71E8 +105DE71E8:lI101|H105DE71D8 +105DE71D8:lI102|H105DE71C8 +105DE71C8:lI97|H105DE71B8 +105DE71B8:lI99|H105DE71A8 +105DE71A8:lI116|H105DE7198 +105DE7198:lI115|H105DE7188 +105DE7188:lI47|H105DE7178 +105DE7178:lI115|H105DE7168 +105DE7168:lI104|H105DE7158 +105DE7158:lI111|H105DE7148 +105DE7148:lI119|H105DE7138 +105DE7138:lI116|H105DE7128 +105DE7128:lI105|H105DE7118 +105DE7118:lI109|H105DE7108 +105DE7108:lI101|H105DE70F8 +105DE70F8:lI64|H105DE70E8 +105DE70E8:lI105|H105DE70D8 +105DE70D8:lI110|H105DE70C8 +105DE70C8:lI116|H105DE70B8 +105DE70B8:lI101|H105DE70A8 +105DE70A8:lI114|H105DE7098 +105DE7098:lI110|H105DE7088 +105DE7088:lI97|H105DE7078 +105DE7078:lI108|H105DE7068 +105DE7068:lI64|H105DE7058 +105DE7058:lI114|H105DE7048 +105DE7048:lI101|H105DE7038 +105DE7038:lI112|H105DE7028 +105DE7028:lI111|H105DE7018 +105DE7018:lI114|H105DE7008 +105DE7008:lI116|H105DE6FF8 +105DE6FF8:lI115|H105DE6FE8 +105DE6FE8:lI64|H105DE6FD8 +105DE6FD8:lI102|H105DE6FC8 +105DE6FC8:lI111|H105DE6FB8 +105DE6FB8:lI114|H105DE6FA8 +105DE6FA8:lI109|H105DE6F98 +105DE6F98:lI97|H105DE6F88 +105DE6F88:lI116|H105DE6F78 +105DE6F78:lI116|H105DE6F68 +105DE6F68:lI101|H105DE6F58 +105DE6F58:lI114|H105DE6F48 +105DE6F48:lI46|H105DE6F38 +105DE6F38:lI101|H105DE6F28 +105DE6F28:lI114|H105DE6F18 +105DE6F18:lI108|N +105DE5E28:lH105DE5EF0|N +105DE5EF0:t2:A4:line,I486 +105DE5CC0:lH105DE5D88|H105DE5CD0 +105DE5D88:t4:A26:showtime@internal@erlang@event_handler,AF:-start/0-fun-1-,I2,H105DE5E38 +105DE5E38:lH105DE5F08|H105DE5E48 +105DE5F08:t2:A4:file,H105DE6F08 +105DE6F08:lI47|H105DE6EF8 +105DE6EF8:lI85|H105DE6EE8 +105DE6EE8:lI115|H105DE6ED8 +105DE6ED8:lI101|H105DE6EC8 +105DE6EC8:lI114|H105DE6EB8 +105DE6EB8:lI115|H105DE6EA8 +105DE6EA8:lI47|H105DE6E98 +105DE6E98:lI110|H105DE6E88 +105DE6E88:lI105|H105DE6E78 +105DE6E78:lI99|H105DE6E68 +105DE6E68:lI104|H105DE6E58 +105DE6E58:lI111|H105DE6E48 +105DE6E48:lI108|H105DE6E38 +105DE6E38:lI97|H105DE6E28 +105DE6E28:lI115|H105DE6E18 +105DE6E18:lI99|H105DE6E08 +105DE6E08:lI97|H105DE6DF8 +105DE6DF8:lI114|H105DE6DE8 +105DE6DE8:lI108|H105DE6DD8 +105DE6DD8:lI115|H105DE6DC8 +105DE6DC8:lI111|H105DE6DB8 +105DE6DB8:lI110|H105DE6DA8 +105DE6DA8:lI47|H105DE6D98 +105DE6D98:lI86|H105DE6D88 +105DE6D88:lI83|H105DE6D78 +105DE6D78:lI32|H105DE6D68 +105DE6D68:lI67|H105DE6D58 +105DE6D58:lI111|H105DE6D48 +105DE6D48:lI100|H105DE6D38 +105DE6D38:lI101|H105DE6D28 +105DE6D28:lI47|H105DE6D18 +105DE6D18:lI65|H105DE6D08 +105DE6D08:lI100|H105DE6CF8 +105DE6CF8:lI118|H105DE6CE8 +105DE6CE8:lI101|H105DE6CD8 +105DE6CD8:lI110|H105DE6CC8 +105DE6CC8:lI116|H105DE6CB8 +105DE6CB8:lI79|H105DE6CA8 +105DE6CA8:lI102|H105DE6C98 +105DE6C98:lI67|H105DE6C88 +105DE6C88:lI111|H105DE6C78 +105DE6C78:lI100|H105DE6C68 +105DE6C68:lI101|H105DE6C58 +105DE6C58:lI47|H105DE6C48 +105DE6C48:lI97|H105DE6C38 +105DE6C38:lI111|H105DE6C28 +105DE6C28:lI99|H105DE6C18 +105DE6C18:lI50|H105DE6C08 +105DE6C08:lI48|H105DE6BF8 +105DE6BF8:lI50|H105DE6BE8 +105DE6BE8:lI51|H105DE6BD8 +105DE6BD8:lI47|H105DE6BC8 +105DE6BC8:lI98|H105DE6BB8 +105DE6BB8:lI117|H105DE6BA8 +105DE6BA8:lI105|H105DE6B98 +105DE6B98:lI108|H105DE6B88 +105DE6B88:lI100|H105DE6B78 +105DE6B78:lI47|H105DE6B68 +105DE6B68:lI100|H105DE6B58 +105DE6B58:lI101|H105DE6B48 +105DE6B48:lI118|H105DE6B38 +105DE6B38:lI47|H105DE6B28 +105DE6B28:lI101|H105DE6B18 +105DE6B18:lI114|H105DE6B08 +105DE6B08:lI108|H105DE6AF8 +105DE6AF8:lI97|H105DE6AE8 +105DE6AE8:lI110|H105DE6AD8 +105DE6AD8:lI103|H105DE6AC8 +105DE6AC8:lI47|H105DE6AB8 +105DE6AB8:lI97|H105DE6AA8 +105DE6AA8:lI100|H105DE6A98 +105DE6A98:lI103|H105DE6A88 +105DE6A88:lI108|H105DE6A78 +105DE6A78:lI101|H105DE6A68 +105DE6A68:lI110|H105DE6A58 +105DE6A58:lI116|H105DE6A48 +105DE6A48:lI47|H105DE6A38 +105DE6A38:lI95|H105DE6A28 +105DE6A28:lI103|H105DE6A18 +105DE6A18:lI108|H105DE6A08 +105DE6A08:lI101|H105DE69F8 +105DE69F8:lI97|H105DE69E8 +105DE69E8:lI109|H105DE69D8 +105DE69D8:lI95|H105DE69C8 +105DE69C8:lI97|H105DE69B8 +105DE69B8:lI114|H105DE69A8 +105DE69A8:lI116|H105DE6998 +105DE6998:lI101|H105DE6988 +105DE6988:lI102|H105DE6978 +105DE6978:lI97|H105DE6968 +105DE6968:lI99|H105DE6958 +105DE6958:lI116|H105DE6948 +105DE6948:lI115|H105DE6938 +105DE6938:lI47|H105DE6928 +105DE6928:lI115|H105DE6918 +105DE6918:lI104|H105DE6908 +105DE6908:lI111|H105DE68F8 +105DE68F8:lI119|H105DE68E8 +105DE68E8:lI116|H105DE68D8 +105DE68D8:lI105|H105DE68C8 +105DE68C8:lI109|H105DE68B8 +105DE68B8:lI101|H105DE68A8 +105DE68A8:lI64|H105DE6898 +105DE6898:lI105|H105DE6888 +105DE6888:lI110|H105DE6878 +105DE6878:lI116|H105DE6868 +105DE6868:lI101|H105DE6858 +105DE6858:lI114|H105DE6848 +105DE6848:lI110|H105DE6838 +105DE6838:lI97|H105DE6828 +105DE6828:lI108|H105DE6818 +105DE6818:lI64|H105DE6808 +105DE6808:lI101|H105DE67F8 +105DE67F8:lI114|H105DE67E8 +105DE67E8:lI108|H105DE67D8 +105DE67D8:lI97|H105DE67C8 +105DE67C8:lI110|H105DE67B8 +105DE67B8:lI103|H105DE67A8 +105DE67A8:lI64|H105DE6798 +105DE6798:lI101|H105DE6788 +105DE6788:lI118|H105DE6778 +105DE6778:lI101|H105DE6768 +105DE6768:lI110|H105DE6758 +105DE6758:lI116|H105DE6748 +105DE6748:lI95|H105DE6738 +105DE6738:lI104|H105DE6728 +105DE6728:lI97|H105DE6718 +105DE6718:lI110|H105DE6708 +105DE6708:lI100|H105DE66F8 +105DE66F8:lI108|H105DE66E8 +105DE66E8:lI101|H105DE66D8 +105DE66D8:lI114|H105DE66C8 +105DE66C8:lI46|H105DE66B8 +105DE66B8:lI101|H105DE66A8 +105DE66A8:lI114|H105DE6698 +105DE6698:lI108|N +105DE5E48:lH105DE5F20|N +105DE5F20:t2:A4:line,I29 +105DE5CD0:lH105DE5DB0|N +105DE5DB0:t4:AF:gleam@otp@actor,A4:loop,I1,H105DE5E58 +105DE5E58:lH105DE5F38|H105DE5E68 +105DE5F38:t2:A4:file,H105DE6688 +105DE6688:lI47|H105DE6678 +105DE6678:lI85|H105DE6668 +105DE6668:lI115|H105DE6658 +105DE6658:lI101|H105DE6648 +105DE6648:lI114|H105DE6638 +105DE6638:lI115|H105DE6628 +105DE6628:lI47|H105DE6618 +105DE6618:lI110|H105DE6608 +105DE6608:lI105|H105DE65F8 +105DE65F8:lI99|H105DE65E8 +105DE65E8:lI104|H105DE65D8 +105DE65D8:lI111|H105DE65C8 +105DE65C8:lI108|H105DE65B8 +105DE65B8:lI97|H105DE65A8 +105DE65A8:lI115|H105DE6598 +105DE6598:lI99|H105DE6588 +105DE6588:lI97|H105DE6578 +105DE6578:lI114|H105DE6568 +105DE6568:lI108|H105DE6558 +105DE6558:lI115|H105DE6548 +105DE6548:lI111|H105DE6538 +105DE6538:lI110|H105DE6528 +105DE6528:lI47|H105DE6518 +105DE6518:lI86|H105DE6508 +105DE6508:lI83|H105DE64F8 +105DE64F8:lI32|H105DE64E8 +105DE64E8:lI67|H105DE64D8 +105DE64D8:lI111|H105DE64C8 +105DE64C8:lI100|H105DE64B8 +105DE64B8:lI101|H105DE64A8 +105DE64A8:lI47|H105DE6498 +105DE6498:lI65|H105DE6488 +105DE6488:lI100|H105DE6478 +105DE6478:lI118|H105DE6468 +105DE6468:lI101|H105DE6458 +105DE6458:lI110|H105DE6448 +105DE6448:lI116|H105DE6438 +105DE6438:lI79|H105DE6428 +105DE6428:lI102|H105DE6418 +105DE6418:lI67|H105DE6408 +105DE6408:lI111|H105DE63F8 +105DE63F8:lI100|H105DE63E8 +105DE63E8:lI101|H105DE63D8 +105DE63D8:lI47|H105DE63C8 +105DE63C8:lI97|H105DE63B8 +105DE63B8:lI111|H105DE63A8 +105DE63A8:lI99|H105DE6398 +105DE6398:lI50|H105DE6388 +105DE6388:lI48|H105DE6378 +105DE6378:lI50|H105DE6368 +105DE6368:lI51|H105DE6358 +105DE6358:lI47|H105DE6348 +105DE6348:lI98|H105DE6338 +105DE6338:lI117|H105DE6328 +105DE6328:lI105|H105DE6318 +105DE6318:lI108|H105DE6308 +105DE6308:lI100|H105DE62F8 +105DE62F8:lI47|H105DE62E8 +105DE62E8:lI100|H105DE62D8 +105DE62D8:lI101|H105DE62C8 +105DE62C8:lI118|H105DE62B8 +105DE62B8:lI47|H105DE62A8 +105DE62A8:lI101|H105DE6298 +105DE6298:lI114|H105DE6288 +105DE6288:lI108|H105DE6278 +105DE6278:lI97|H105DE6268 +105DE6268:lI110|H105DE6258 +105DE6258:lI103|H105DE6248 +105DE6248:lI47|H105DE6238 +105DE6238:lI103|H105DE6228 +105DE6228:lI108|H105DE6218 +105DE6218:lI101|H105DE6208 +105DE6208:lI97|H105DE61F8 +105DE61F8:lI109|H105DE61E8 +105DE61E8:lI95|H105DE61D8 +105DE61D8:lI111|H105DE61C8 +105DE61C8:lI116|H105DE61B8 +105DE61B8:lI112|H105DE61A8 +105DE61A8:lI47|H105DE6198 +105DE6198:lI95|H105DE6188 +105DE6188:lI103|H105DE6178 +105DE6178:lI108|H105DE6168 +105DE6168:lI101|H105DE6158 +105DE6158:lI97|H105DE6148 +105DE6148:lI109|H105DE6138 +105DE6138:lI95|H105DE6128 +105DE6128:lI97|H105DE6118 +105DE6118:lI114|H105DE6108 +105DE6108:lI116|H105DE60F8 +105DE60F8:lI101|H105DE60E8 +105DE60E8:lI102|H105DE60D8 +105DE60D8:lI97|H105DE60C8 +105DE60C8:lI99|H105DE60B8 +105DE60B8:lI116|H105DE60A8 +105DE60A8:lI115|H105DE6098 +105DE6098:lI47|H105DE6088 +105DE6088:lI103|H105DE6078 +105DE6078:lI108|H105DE6068 +105DE6068:lI101|H105DE6058 +105DE6058:lI97|H105DE6048 +105DE6048:lI109|H105DE6038 +105DE6038:lI64|H105DE6028 +105DE6028:lI111|H105DE6018 +105DE6018:lI116|H105DE6008 +105DE6008:lI112|H105DE5FF8 +105DE5FF8:lI64|H105DE5FE8 +105DE5FE8:lI97|H105DE5FD8 +105DE5FD8:lI99|H105DE5FC8 +105DE5FC8:lI116|H105DE5FB8 +105DE5FB8:lI111|H105DE5FA8 +105DE5FA8:lI114|H105DE5F98 +105DE5F98:lI46|H105DE5F88 +105DE5F88:lI101|H105DE5F78 +105DE5F78:lI114|H105DE5F68 +105DE5F68:lI108|N +105DE5E68:lH105DE5F50|N +105DE5F50:t2:A4:line,I150 +105DE5C50:Mf5:H105DE5CE0:H105DE8730,I178,H105DE8700,H105DE86C8,A5:panic +105DE5CE0:t5:A8:function,A4:line,A7:message,A6:module,AB:gleam_error +105DE86C8:Yh23:c2hvd3RpbWUvaW50ZXJuYWwvcmVwb3J0cy9mb3JtYXR0ZXI= +105DE8700:Yh1A:cGFuaWMgZXhwcmVzc2lvbiBldmFsdWF0ZWQ= +105DE8730:Yh12:Y3JlYXRlX3Rlc3RfcmVwb3J0 +105DE5C18:lI69|H105DE5C08 +105DE5C08:lI114|H105DE5BF8 +105DE5BF8:lI114|H105DE5BE8 +105DE5BE8:lI111|H105DE5BD8 +105DE5BD8:lI114|H105DE5BC8 +105DE5BC8:lI32|H105DE5BB8 +105DE5BB8:lI105|H105DE5BA8 +105DE5BA8:lI110|H105DE5B98 +105DE5B98:lI32|H105DE5B88 +105DE5B88:lI112|H105DE5B78 +105DE5B78:lI114|H105DE5B68 +105DE5B68:lI111|H105DE5B58 +105DE5B58:lI99|H105DE5B48 +105DE5B48:lI101|H105DE5B38 +105DE5B38:lI115|H105DE5B28 +105DE5B28:lI115|H105DE5B18 +105DE5B18:lI32|H105DE5B08 +105DE5B08:lI126|H105DE5AF8 +105DE5AF8:lI112|H105DE5AE8 +105DE5AE8:lI32|H105DE5AD8 +105DE5AD8:lI119|H105DE5AC8 +105DE5AC8:lI105|H105DE5AB8 +105DE5AB8:lI116|H105DE5AA8 +105DE5AA8:lI104|H105DE5A98 +105DE5A98:lI32|H105DE5A88 +105DE5A88:lI101|H105DE5A78 +105DE5A78:lI120|H105DE5A68 +105DE5A68:lI105|H105DE5A58 +105DE5A58:lI116|H105DE5A48 +105DE5A48:lI32|H105DE5A38 +105DE5A38:lI118|H105DE5A28 +105DE5A28:lI97|H105DE5A18 +105DE5A18:lI108|H105DE5A08 +105DE5A08:lI117|H105DE59F8 +105DE59F8:lI101|H105DE59E8 +105DE59E8:lI58|H105DE59D8 +105DE59D8:lI126|H105DE59C8 +105DE59C8:lI110|H105DE59B8 +105DE59B8:lI126|H105DE59A8 +105DE59A8:lI112|H105DE5998 +105DE5998:lI126|H105DE5988 +105DE5988:lI110|N +105D8A120:t5:AE:callback_cache,AA:logger_olp,H105D8A0A8,H105D8A0D0,H105D8A0F8 +105D8A0F8:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9pbmZvYQI= +105D8A0D0:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9jYXN0YQI= +105D8A0A8:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9jYWxsYQM= +105D89DB0:t2:A7:olp_ref,H105D89ED8 +105D89ED8:t3:AC:logger_proxy,P<0.72.0>,H105D89EC0 +105D89DC8:t2:AA:$ancestors,H105D89EF8 +105D89EF8:lAA:logger_sup|H105D89F48 +105D89F48:lAA:kernel_sup|H105D89F78 +105D89F78:lP<0.47.0>|N +105D89DE0:t2:AD:$initial_call,H105D89F08 +105D89F08:t3:AA:logger_olp,A4:init,I1 +=proc_dictionary:<0.73.0> +H105DAD620 +H105DAD658 +=proc_stack:<0.73.0> +y0:N +y1:A8:infinity +y2:H105DAD6E8 +y3:N +y4:P<0.73.0> +y5:P<0.49.0> +0x0000000105dadc70:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105dadc90:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.73.0> +105DAD6E8:t5:AE:callback_cache,AD:kernel_config,H105DAD670,H105DAD698,H105DAD6C0 +105DAD6C0:E20:g3F3DWtlcm5lbF9jb25maWd3C2hhbmRsZV9pbmZvYQI= +105DAD698:E20:g3F3DWtlcm5lbF9jb25maWd3C2hhbmRsZV9jYXN0YQI= +105DAD670:E20:g3F3DWtlcm5lbF9jb25maWd3C2hhbmRsZV9jYWxsYQM= +105DAD620:t2:AA:$ancestors,H105DAD610 +105DAD610:lAA:kernel_sup|H105DAD5D0 +105DAD5D0:lP<0.47.0>|N +105DAD658:t2:AD:$initial_call,H105DAD638 +105DAD638:t3:AD:kernel_config,A4:init,I1 +=proc_dictionary:<0.74.0> +H105DA80D0 +H105DA8108 +=proc_stack:<0.74.0> +y0:N +y1:A8:infinity +y2:H105DA8198 +y3:H28008FA68 +y4:AB:kernel_refc +y5:P<0.49.0> +0x0000000105da8710:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105da8730:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.74.0> +105DA8198:t5:AE:callback_cache,AB:kernel_refc,H105DA8120,H105DA8148,H105DA8170 +105DA8170:E1E:g3F3C2tlcm5lbF9yZWZjdwtoYW5kbGVfaW5mb2EC +105DA8148:E1E:g3F3C2tlcm5lbF9yZWZjdwtoYW5kbGVfY2FzdGEC +105DA8120:E1E:g3F3C2tlcm5lbF9yZWZjdwtoYW5kbGVfY2FsbGED +105DA80D0:t2:AA:$ancestors,H105DA80C0 +105DA80C0:lAA:kernel_sup|H105DA8080 +105DA8080:lP<0.47.0>|N +105DA8108:t2:AD:$initial_call,H105DA80E8 +105DA80E8:t3:AB:kernel_refc,A4:init,I1 +=proc_dictionary:<0.75.0> +H105DAC078 +H105DAC090 +=proc_stack:<0.75.0> +0x0000000105dac210:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.75.0> +105DAC078:t2:AA:$ancestors,H105DAC0B8 +105DAC0B8:lAA:kernel_sup|H105DAC0F8 +105DAC0F8:lP<0.47.0>|N +105DAC090:t2:AD:$initial_call,H105DAC0C8 +105DAC0C8:t3:AA:supervisor,A6:kernel,I1 +=proc_dictionary:<0.77.0> +H105DA2880 +H105DA2898 +H105DA28B0 +=proc_stack:<0.77.0> +y0:N +y1:A8:infinity +y2:H105DA3BB8 +y3:H105DA27C8 +y4:P<0.77.0> +y5:P<0.70.0> +0x0000000105da4dc8:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105da4de8:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.77.0> +105DA3BB8:t5:AE:callback_cache,AA:logger_olp,H105DA3BF8,H105DA3C20,H105DA3C48 +105DA3C48:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9pbmZvYQI= +105DA3C20:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9jYXN0YQI= +105DA3BF8:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9jYWxsYQM= +105DA27C8:Mf14:H105DA28C8:A14:logger_std_h_default,AF:logger_h_common,A5:async,A4:true,A4:true,I200,I1000,I10,I0,I-576460751874469,H105DA2970,I-576460751874469,I0,H105DA29B8,I5000,I500,I1000,A5:false,I3000000,I20000 +105DA28C8:t14:A2:id,A6:module,A4:mode,A4:idle,A12:burst_limit_enable,AE:drop_mode_qlen,AA:flush_qlen,AE:sync_mode_qlen,AF:burst_msg_count,AC:burst_win_ts,A8:cb_state,AC:last_load_ts,A9:last_qlen,A8:mode_ref,A1B:overload_kill_restart_after,A15:burst_limit_max_count,A17:burst_limit_window_time,A14:overload_kill_enable,A16:overload_kill_mem_size,A12:overload_kill_qlen +105DA29B8:t2:AA:logger_olp,A14:logger_std_h_default +105DA2970:Mf6:H105DA2A20:A7:default,AC:logger_std_h,A9:no_repeat,I20,H105DA2A58,A4:sync +105DA2A20:t6:A2:id,A6:module,A18:filesync_repeat_interval,AF:ctrl_sync_count,AD:handler_state,A7:last_op +105DA2A58:Mf2:H105DA2A90:AB:standard_io,P<0.78.0> +105DA2A90:t2:A4:type,AD:file_ctrl_pid +105DA2880:t2:A7:olp_ref,H105DA29D0 +105DA29D0:t3:A14:logger_std_h_default,P<0.77.0>,H105DA29B8 +105DA2898:t2:AA:$ancestors,H105DA29F0 +105DA29F0:lAA:logger_sup|H105DA2A80 +105DA2A80:lAA:kernel_sup|H105DA2AA8 +105DA2AA8:lP<0.47.0>|N +105DA28B0:t2:AD:$initial_call,H105DA2A00 +105DA2A00:t3:AA:logger_olp,A4:init,I1 +=proc_stack:<0.78.0> +y0:N +y1:N +y2:H105D98488 +0x0000000105d98b30:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.78.0> +105D98488:Mf2:H280091C80:A7:default,AB:standard_io +=proc_dictionary:<0.90.0> +H105D97F00 +H105D97F38 +=proc_stack:<0.90.0> +y0:H105D98098 +y1:P<0.44.0> +0x0000000105d98110:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105d98130:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.90.0> +105D98098:t7:A5:state,P<0.91.0>,H105D97A10,N,I0,P<0.69.0>,N +105D97A10:t8:A9:appl_data,A5:inets,H105D97E70,A9:undefined,H105D97A58,H105D97E50,A8:infinity,A8:infinity +105D97E50:lA5:inets|H105D97E40 +105D97E40:lA9:inets_sup|H105D97E30 +105D97E30:lA9:inets_app|H105D97E20 +105D97E20:lAD:inets_service|H105D97E10 +105D97E10:lAB:inets_trace|H105D97E00 +105D97E00:lA9:inets_lib|H105D97DF0 +105D97DF0:lA5:httpc|H105D97DE0 +105D97DE0:lAD:httpc_handler|H105D97DD0 +105D97DD0:lA11:httpc_handler_sup|H105D97DC0 +105D97DC0:lAD:httpc_manager|H105D97DB0 +105D97DB0:lA11:httpc_profile_sup|H105D97DA0 +105D97DA0:lAD:httpc_request|H105D97D90 +105D97D90:lAE:httpc_response|H105D97D80 +105D97D80:lA9:httpc_sup|H105D97D70 +105D97D70:lAC:httpc_cookie|H105D97D60 +105D97D60:lAA:http_chunk|H105D97D50 +105D97D50:lAC:http_request|H105D97D40 +105D97D40:lAD:http_response|H105D97D30 +105D97D30:lAE:http_transport|H105D97D20 +105D97D20:lA9:http_util|H105D97D10 +105D97D10:lA8:http_uri|H105D97D00 +105D97D00:lA5:httpd|H105D97CF0 +105D97CF0:lAE:httpd_acceptor|H105D97CE0 +105D97CE0:lA12:httpd_acceptor_sup|H105D97CD0 +105D97CD0:lA9:httpd_cgi|H105D97CC0 +105D97CC0:lA14:httpd_connection_sup|H105D97CB0 +105D97CB0:lAA:httpd_conf|H105D97CA0 +105D97CA0:lAC:httpd_custom|H105D97C90 +105D97C90:lA10:httpd_custom_api|H105D97C80 +105D97C80:lA9:httpd_esi|H105D97C70 +105D97C70:lAD:httpd_example|H105D97C60 +105D97C60:lAA:httpd_file|H105D97C50 +105D97C50:lA12:httpd_instance_sup|H105D97C40 +105D97C40:lA9:httpd_log|H105D97C30 +105D97C30:lAC:httpd_logger|H105D97C20 +105D97C20:lAD:httpd_manager|H105D97C10 +105D97C10:lAE:httpd_misc_sup|H105D97C00 +105D97C00:lAD:httpd_request|H105D97BF0 +105D97BF0:lA15:httpd_request_handler|H105D97BE0 +105D97BE0:lAE:httpd_response|H105D97BD0 +105D97BD0:lA10:httpd_script_env|H105D97BC0 +105D97BC0:lAC:httpd_socket|H105D97BB0 +105D97BB0:lA9:httpd_sup|H105D97BA0 +105D97BA0:lAA:httpd_util|H105D97B90 +105D97B90:lAB:mod_actions|H105D97B80 +105D97B80:lA9:mod_alias|H105D97B70 +105D97B70:lA8:mod_auth|H105D97B60 +105D97B60:lAD:mod_auth_dets|H105D97B50 +105D97B50:lAF:mod_auth_mnesia|H105D97B40 +105D97B40:lAE:mod_auth_plain|H105D97B30 +105D97B30:lAF:mod_auth_server|H105D97B20 +105D97B20:lA7:mod_cgi|H105D97B10 +105D97B10:lA7:mod_dir|H105D97B00 +105D97B00:lAC:mod_disk_log|H105D97AF0 +105D97AF0:lA7:mod_esi|H105D97AE0 +105D97AE0:lA7:mod_get|H105D97AD0 +105D97AD0:lA8:mod_head|H105D97AC0 +105D97AC0:lA7:mod_log|H105D97AB0 +105D97AB0:lA9:mod_range|H105D97AA0 +105D97AA0:lA13:mod_responsecontrol|H105D97A90 +105D97A90:lAC:mod_security|H105D97A80 +105D97A80:lA13:mod_security_server|H105D97A70 +105D97A70:lA9:mod_trace|N +105D97A58:t2:A9:inets_app,N +105D97E70:lA9:inets_sup|H105D97E60 +105D97E60:lAD:httpc_manager|N +105D97F00:t2:AA:$ancestors,H105D97EF0 +105D97EF0:lP<0.89.0>|N +105D97F38:t2:AD:$initial_call,H105D97F18 +105D97F18:t3:A12:application_master,A4:init,I4 +=proc_stack:<0.91.0> +y0:N +y1:N +y2:A9:inets_app +y3:P<0.92.0> +y4:P<0.90.0> +0x0000000105da7fe0:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.91.0> +=proc_dictionary:<0.92.0> +H105DBF960 +H105DBF978 +=proc_stack:<0.92.0> +0x0000000105dbfc58:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.92.0> +105DBF960:t2:AA:$ancestors,H105DBF9A0 +105DBF9A0:lP<0.91.0>|N +105DBF978:t2:AD:$initial_call,H105DBF9B0 +105DBF9B0:t3:AA:supervisor,A9:inets_sup,I1 +=proc_dictionary:<0.93.0> +H105D99BA8 +H105D99BC0 +=proc_stack:<0.93.0> +0x0000000105d99e90:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.93.0> +105D99BA8:t2:AA:$ancestors,H105D99BE8 +105D99BE8:lA9:inets_sup|H105D99C28 +105D99C28:lP<0.91.0>|N +105D99BC0:t2:AD:$initial_call,H105D99BF8 +105D99BF8:t3:AA:supervisor,A9:httpc_sup,I1 +=proc_dictionary:<0.94.0> +H105DAF280 +H105DAF298 +=proc_stack:<0.94.0> +0x0000000105daf518:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.94.0> +105DAF280:t2:AA:$ancestors,H105DAF2C0 +105DAF2C0:lA9:httpc_sup|H105DAF300 +105DAF300:lA9:inets_sup|H105DAF320 +105DAF320:lP<0.91.0>|N +105DAF298:t2:AD:$initial_call,H105DAF2D0 +105DAF2D0:t3:AA:supervisor,A11:httpc_profile_sup,I1 +=proc_dictionary:<0.95.0> +H105E0BA38 +H105E0BA50 +=proc_stack:<0.95.0> +y0:N +y1:A8:infinity +y2:H105E0B9F0 +y3:H105E0D878 +y4:AD:httpc_manager +y5:P<0.94.0> +0x0000000105e0dff0:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105e0e010:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.95.0> +105E0B9F0:t5:AE:callback_cache,AD:httpc_manager,H105E0BA68,H105E0BA90,H105E0BAB8 +105E0BAB8:E20:g3F3DWh0dHBjX21hbmFnZXJ3C2hhbmRsZV9pbmZvYQI= +105E0BA90:E20:g3F3DWh0dHBjX21hbmFnZXJ3C2hhbmRsZV9jYXN0YQI= +105E0BA68:E20:g3F3DWh0dHBjX21hbmFnZXJ3C2hhbmRsZV9jYWxsYQM= +105E0D878:t7:A5:state,N,A19:httpc_manager__handler_db,H105E0D858,A19:httpc_manager__session_db,AD:httpc_manager,H2800B17A0 +105E0D858:t3:A9:cookie_db,A9:undefined,H105E0D840 +105E0D840:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALEs+vYAAd/g02c= +105E0BA38:t2:AA:$ancestors,H105E0BAE0 +105E0BAE0:lA11:httpc_profile_sup|H105E0BB10 +105E0BB10:lA9:httpc_sup|H105E0BB20 +105E0BB20:lA9:inets_sup|H105E0BB30 +105E0BB30:lP<0.91.0>|N +105E0BA50:t2:AD:$initial_call,H105E0BAF0 +105E0BAF0:t3:AD:httpc_manager,A4:init,I1 +=proc_dictionary:<0.96.0> +H105D82D78 +H105D82DB0 +=proc_stack:<0.96.0> +y0:N +y1:A8:infinity +y2:H105D82E40 +y3:H105D831B8 +y4:A11:httpc_handler_sup +y5:P<0.93.0> +0x0000000105d83388:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105d833a8:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.96.0> +105D82E40:t5:AE:callback_cache,AA:supervisor,H105D82DC8,H105D82DF0,H105D82E18 +105D82E18:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI= +105D82DF0:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI= +105D82DC8:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM= +105D831B8:tC:A5:state,H2800B6F58,A12:simple_one_for_one,H105D83120,H280028328,I0,I3600,N,I0,A5:never,A11:httpc_handler_sup,N +105D83120:t2:H105D83110,H105D830F0 +105D830F0:Mf1:H105D830E0:H105D83078 +105D830E0:t1:A9:undefined +105D83078:t9:A5:child,A9:undefined,A9:undefined,H105D82E70,A9:temporary,A5:false,I4000,A6:worker,H2800B6F70 +105D82E70:t3:AD:httpc_handler,AA:start_link,N +105D83110:lA9:undefined|N +105D82D78:t2:AA:$ancestors,H105D82D68 +105D82D68:lA9:httpc_sup|H105D82D28 +105D82D28:lA9:inets_sup|H105D82D18 +105D82D18:lP<0.91.0>|N +105D82DB0:t2:AD:$initial_call,H105D82D90 +105D82D90:t3:AA:supervisor,A11:httpc_handler_sup,I1 +=proc_dictionary:<0.97.0> +H105D98B40 +H105D98B58 +=proc_stack:<0.97.0> +0x0000000105d98ce8:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.97.0> +105D98B40:t2:AA:$ancestors,H105D98B80 +105D98B80:lA9:inets_sup|H105D98BC0 +105D98BC0:lP<0.91.0>|N +105D98B58:t2:AD:$initial_call,H105D98B90 +105D98B90:t3:AA:supervisor,A9:httpd_sup,I1 +=proc_dictionary:<0.102.0> +H105DBE6D0 +H105DBE6E8 +=proc_stack:<0.102.0> +y0:H105DBEC80 +y1:P<0.44.0> +0x0000000105dbed68:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105dbed88:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.102.0> +105DBEC80:t7:A5:state,P<0.103.0>,H105DBE688,N,I0,P<0.69.0>,N +105DBE688:t8:A9:appl_data,A3:ssl,H105DBE718,A9:undefined,H105DBE728,H105DBE740,A8:infinity,A8:infinity +105DBE740:lAE:tls_connection|H105DBE790 +105DBE790:lA19:tls_client_connection_1_3|H105DBE7A0 +105DBE7A0:lA19:tls_server_connection_1_3|H105DBE7B0 +105DBE7B0:lA16:tls_gen_connection_1_3|H105DBE7C0 +105DBE7C0:lAD:tls_handshake|H105DBE7D0 +105DBE7D0:lA11:tls_handshake_1_3|H105DBE7E0 +105DBE7E0:lAA:tls_record|H105DBE7F0 +105DBE7F0:lAE:tls_record_1_3|H105DBE800 +105DBE800:lAA:tls_socket|H105DBE810 +105DBE810:lA6:tls_v1|H105DBE820 +105DBE820:lA12:tls_connection_sup|H105DBE830 +105DBE830:lA12:tls_gen_connection|H105DBE840 +105DBE840:lAA:tls_sender|H105DBE850 +105DBE850:lAE:tls_server_sup|H105DBE860 +105DBE860:lA1D:tls_server_session_ticket_sup|H105DBE870 +105DBE870:lA19:tls_server_session_ticket|H105DBE880 +105DBE880:lA7:tls_sup|H105DBE890 +105DBE890:lA16:tls_dyn_connection_sup|H105DBE8A0 +105DBE8A0:lAD:ssl_dh_groups|H105DBE8B0 +105DBE8B0:lAF:dtls_connection|H105DBE8C0 +105DBE8C0:lAE:dtls_handshake|H105DBE8D0 +105DBE8D0:lAB:dtls_record|H105DBE8E0 +105DBE8E0:lAB:dtls_socket|H105DBE8F0 +105DBE8F0:lA7:dtls_v1|H105DBE900 +105DBE900:lA13:dtls_connection_sup|H105DBE910 +105DBE910:lA13:dtls_gen_connection|H105DBE920 +105DBE920:lA11:dtls_packet_demux|H105DBE930 +105DBE930:lA11:dtls_listener_sup|H105DBE940 +105DBE940:lA8:dtls_sup|H105DBE950 +105DBE950:lAF:dtls_server_sup|H105DBE960 +105DBE960:lA1D:dtls_server_session_cache_sup|H105DBE970 +105DBE970:lA3:ssl|H105DBE980 +105DBE980:lA15:ssl_session_cache_api|H105DBE990 +105DBE990:lA13:tls_dtls_connection|H105DBE9A0 +105DBE9A0:lAA:ssl_config|H105DBE9B0 +105DBE9B0:lAE:ssl_gen_statem|H105DBE9C0 +105DBE9C0:lAD:ssl_handshake|H105DBE9D0 +105DBE9D0:lAA:ssl_record|H105DBE9E0 +105DBE9E0:lAA:ssl_cipher|H105DBE9F0 +105DBE9F0:lA11:ssl_cipher_format|H105DBEA00 +105DBEA00:lAE:ssl_srp_primes|H105DBEA10 +105DBEA10:lA9:ssl_alert|H105DBEA20 +105DBEA20:lA16:ssl_listen_tracker_sup|H105DBEA30 +105DBEA30:lA10:tls_bloom_filter|H105DBEA40 +105DBEA40:lA17:tls_client_ticket_store|H105DBEA50 +105DBEA50:lAD:inet_tls_dist|H105DBEA60 +105DBEA60:lAE:inet6_tls_dist|H105DBEA70 +105DBEA70:lAC:ssl_dist_sup|H105DBEA80 +105DBEA80:lA17:ssl_dist_connection_sup|H105DBEA90 +105DBEA90:lA12:ssl_dist_admin_sup|H105DBEAA0 +105DBEAA0:lAC:tls_dist_sup|H105DBEAB0 +105DBEAB0:lA13:tls_dist_server_sup|H105DBEAC0 +105DBEAC0:lAB:ssl_session|H105DBEAD0 +105DBEAD0:lA1B:ssl_client_session_cache_db|H105DBEAE0 +105DBEAE0:lA18:ssl_server_session_cache|H105DBEAF0 +105DBEAF0:lA1B:ssl_server_session_cache_db|H105DBEB00 +105DBEB00:lA1C:ssl_server_session_cache_sup|H105DBEB10 +105DBEB10:lA24:ssl_upgrade_server_session_cache_sup|H105DBEB20 +105DBEB20:lAB:ssl_manager|H105DBEB30 +105DBEB30:lAD:ssl_pem_cache|H105DBEB40 +105DBEB40:lAB:ssl_pkix_db|H105DBEB50 +105DBEB50:lAF:ssl_certificate|H105DBEB60 +105DBEB60:lA7:ssl_crl|H105DBEB70 +105DBEB70:lAD:ssl_crl_cache|H105DBEB80 +105DBEB80:lA11:ssl_crl_cache_api|H105DBEB90 +105DBEB90:lA10:ssl_crl_hash_dir|H105DBEBA0 +105DBEBA0:lAA:ssl_logger|H105DBEBB0 +105DBEBB0:lA9:ssl_trace|H105DBEBC0 +105DBEBC0:lA7:ssl_app|H105DBEBD0 +105DBEBD0:lA7:ssl_sup|H105DBEBE0 +105DBEBE0:lAD:ssl_admin_sup|H105DBEBF0 +105DBEBF0:lA12:ssl_connection_sup|N +105DBE728:t2:A7:ssl_app,N +105DBE718:lA7:ssl_sup|H105DBE780 +105DBE780:lAB:ssl_manager|N +105DBE6D0:t2:AA:$ancestors,H105DBE750 +105DBE750:lP<0.101.0>|N +105DBE6E8:t2:AD:$initial_call,H105DBE760 +105DBE760:t3:A12:application_master,A4:init,I4 +=proc_stack:<0.103.0> +y0:N +y1:N +y2:A7:ssl_app +y3:P<0.107.0> +y4:P<0.102.0> +0x0000000105da1bf0:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.103.0> +=proc_dictionary:<0.105.0> +H105DB0708 +H105DB0720 +H105DB0738 +=proc_stack:<0.105.0> +y0:N +y1:A8:infinity +y2:H105DB1980 +y3:H105DB0650 +y4:P<0.105.0> +y5:P<0.70.0> +0x0000000105db2c50:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105db2c70:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.105.0> +105DB1980:t5:AE:callback_cache,AA:logger_olp,H105DB19D0,H105DB19F8,H105DB1A20 +105DB1A20:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9pbmZvYQI= +105DB19F8:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9jYXN0YQI= +105DB19D0:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9jYWxsYQM= +105DB0650:Mf14:H105DB0750:A18:logger_std_h_ssl_handler,AF:logger_h_common,A5:async,A4:true,A4:true,I200,I1000,I10,I0,I-576460751796696,H105DB07F8,I-576460751796696,I0,H105DB0840,I5000,I500,I1000,A5:false,I3000000,I20000 +105DB0750:t14:A2:id,A6:module,A4:mode,A4:idle,A12:burst_limit_enable,AE:drop_mode_qlen,AA:flush_qlen,AE:sync_mode_qlen,AF:burst_msg_count,AC:burst_win_ts,A8:cb_state,AC:last_load_ts,A9:last_qlen,A8:mode_ref,A1B:overload_kill_restart_after,A15:burst_limit_max_count,A17:burst_limit_window_time,A14:overload_kill_enable,A16:overload_kill_mem_size,A12:overload_kill_qlen +105DB0840:t2:AA:logger_olp,A18:logger_std_h_ssl_handler +105DB07F8:Mf6:H105DB08A8:AB:ssl_handler,AC:logger_std_h,A9:no_repeat,I20,H105DB08E0,A4:sync +105DB08A8:t6:A2:id,A6:module,A18:filesync_repeat_interval,AF:ctrl_sync_count,AD:handler_state,A7:last_op +105DB08E0:Mf2:H105DB0918:AB:standard_io,P<0.106.0> +105DB0918:t2:A4:type,AD:file_ctrl_pid +105DB0708:t2:A7:olp_ref,H105DB0858 +105DB0858:t3:A18:logger_std_h_ssl_handler,P<0.105.0>,H105DB0840 +105DB0720:t2:AA:$ancestors,H105DB0878 +105DB0878:lAA:logger_sup|H105DB0908 +105DB0908:lAA:kernel_sup|H105DB0930 +105DB0930:lP<0.47.0>|N +105DB0738:t2:AD:$initial_call,H105DB0888 +105DB0888:t3:AA:logger_olp,A4:init,I1 +=proc_stack:<0.106.0> +y0:N +y1:N +y2:H105DA87D8 +0x0000000105da8e80:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.106.0> +105DA87D8:Mf2:H280091C80:AB:ssl_handler,AB:standard_io +=proc_dictionary:<0.107.0> +H105D8C6D0 +H105D8C6E8 +=proc_stack:<0.107.0> +0x0000000105d8c958:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.107.0> +105D8C6D0:t2:AA:$ancestors,H105D8C710 +105D8C710:lP<0.103.0>|N +105D8C6E8:t2:AD:$initial_call,H105D8C720 +105D8C720:t3:AA:supervisor,A7:ssl_sup,I1 +=proc_dictionary:<0.108.0> +H105DBFC68 +H105DBFC80 +=proc_stack:<0.108.0> +0x0000000105dbffe0:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.108.0> +105DBFC68:t2:AA:$ancestors,H105DBFCA8 +105DBFCA8:lA7:ssl_sup|H105DBFCE8 +105DBFCE8:lP<0.103.0>|N +105DBFC80:t2:AD:$initial_call,H105DBFCB8 +105DBFCB8:t3:AA:supervisor,AD:ssl_admin_sup,I1 +=proc_dictionary:<0.109.0> +H105D82110 +H105D82128 +H105D82140 +=proc_stack:<0.109.0> +y0:N +y1:A8:infinity +y2:H105D820E0 +y3:H105D828A8 +y4:AD:ssl_pem_cache +y5:P<0.108.0> +0x0000000105d82c38:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105d82c58:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.109.0> +105D820E0:t5:AE:callback_cache,AD:ssl_pem_cache,H105D82178,H105D821A0,H105D821C8 +105D821C8:E20:g3F3DXNzbF9wZW1fY2FjaGV3C2hhbmRsZV9pbmZvYQI= +105D821A0:E20:g3F3DXNzbF9wZW1fY2FjaGV3C2hhbmRsZV9jYXN0YQI= +105D82178:E20:g3F3DXNzbF9wZW1fY2FjaGV3C2hhbmRsZV9jYWxsYQM= +105D828A8:t4:A5:state,AD:ssl_pem_cache,I1701928823,I120000 +105D82110:t2:AA:$ancestors,H105D821F0 +105D821F0:lAD:ssl_admin_sup|H105D82260 +105D82260:lA7:ssl_sup|H105D82280 +105D82280:lP<0.103.0>|N +105D82128:t2:AD:ssl_pem_cache,AD:ssl_pem_cache +105D82140:t2:AD:$initial_call,H105D82200 +105D82200:t3:AD:ssl_pem_cache,A4:init,I1 +=proc_dictionary:<0.110.0> +H105DB84D8 +H105DB84F0 +H105DB8508 +H105DB8520 +=proc_stack:<0.110.0> +y0:N +y1:A8:infinity +y2:H105DB84A8 +y3:H105DB67C8 +y4:AB:ssl_manager +y5:P<0.108.0> +0x0000000105db7160:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105db7180:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.110.0> +105DB84A8:t5:AE:callback_cache,AB:ssl_manager,H105DB8538,H105DB8560,H105DB8588 +105DB8588:E1E:g3F3C3NzbF9tYW5hZ2VydwtoYW5kbGVfaW5mb2EC +105DB8560:E1E:g3F3C3NzbF9tYW5hZ2VydwtoYW5kbGVfY2FzdGEC +105DB8538:E1E:g3F3C3NzbF9tYW5hZ2VydwtoYW5kbGVfY2FsbGED +105DB67C8:tA:A5:state,H105DB66B0,A1B:ssl_client_session_cache_db,I86400,H105DB67A0,H105DB67B0,I1000,A9:undefined,N,H280061C80 +105DB67B0:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALGc+vQAAd/g02c= +105DB67A0:lH105DB66C8|H105DB6790 +105DB66C8:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALGX+vYAAd/g02c= +105DB6790:lH105DB6778|H105DB6768 +105DB6778:t2:H105DB66E0,H105DB66F8 +105DB66F8:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALGZ+vYAAd/g02c= +105DB66E0:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALGY+vYAAd/g02c= +105DB6768:lAD:ssl_pem_cache|H105DB6758 +105DB6758:lH105DB6740|N +105DB6740:t2:H105DB6710,H105DB6728 +105DB6728:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALGb+vYAAd/g02c= +105DB6710:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALGa+vYAAd/g02c= +105DB66B0:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALGW+vYAAd/g02c= +105DB84D8:t2:AA:$ancestors,H105DB85B0 +105DB85B0:lAD:ssl_admin_sup|H105DB85E0 +105DB85E0:lA7:ssl_sup|H105DB85F0 +105DB85F0:lP<0.103.0>|N +105DB84F0:t2:AB:ssl_manager,AB:ssl_manager +105DB8508:t2:AD:ssl_pem_cache,AD:ssl_pem_cache +105DB8520:t2:AD:$initial_call,H105DB85C0 +105DB85C0:t3:AB:ssl_manager,A4:init,I1 +=proc_dictionary:<0.111.0> +H105D8FCA8 +H105D8FCE0 +=proc_stack:<0.111.0> +y0:N +y1:A8:infinity +y2:H105D8FD70 +y3:H105D8FDB8 +y4:A17:tls_client_ticket_store +y5:P<0.108.0> +0x0000000105d902b8:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105d902d8:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.111.0> +105D8FD70:t5:AE:callback_cache,A17:tls_client_ticket_store,H105D8FCF8,H105D8FD20,H105D8FD48 +105D8FD48:E2A:g3F3F3Rsc19jbGllbnRfdGlja2V0X3N0b3JldwtoYW5kbGVfaW5mb2EC +105D8FD20:E2A:g3F3F3Rsc19jbGllbnRfdGlja2V0X3N0b3JldwtoYW5kbGVfY2FzdGEC +105D8FCF8:E2A:g3F3F3Rsc19jbGllbnRfdGlja2V0X3N0b3JldwtoYW5kbGVfY2FsbGED +105D8FDB8:t4:A5:state,H280061C80,I7200,I1000 +105D8FCA8:t2:AA:$ancestors,H105D8FC98 +105D8FC98:lAD:ssl_admin_sup|H105D8FC58 +105D8FC58:lA7:ssl_sup|H105D8FC48 +105D8FC48:lP<0.103.0>|N +105D8FCE0:t2:AD:$initial_call,H105D8FCC0 +105D8FCC0:t3:A17:tls_client_ticket_store,A4:init,I1 +=proc_dictionary:<0.112.0> +H105DADF58 +H105DADF70 +=proc_stack:<0.112.0> +0x0000000105dae1f0:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.112.0> +105DADF58:t2:AA:$ancestors,H105DADF98 +105DADF98:lA7:ssl_sup|H105DADFD8 +105DADFD8:lP<0.103.0>|N +105DADF70:t2:AD:$initial_call,H105DADFA8 +105DADFA8:t3:AA:supervisor,A12:ssl_connection_sup,I1 +=proc_dictionary:<0.113.0> +H105DADCA0 +H105DADCB8 +=proc_stack:<0.113.0> +0x0000000105dadf48:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.113.0> +105DADCA0:t2:AA:$ancestors,H105DADCE0 +105DADCE0:lA12:ssl_connection_sup|H105DADD20 +105DADD20:lA7:ssl_sup|H105DADD40 +105DADD40:lP<0.103.0>|N +105DADCB8:t2:AD:$initial_call,H105DADCF0 +105DADCF0:t3:AA:supervisor,A7:tls_sup,I1 +=proc_dictionary:<0.114.0> +H105D87718 +H105D87750 +=proc_stack:<0.114.0> +y0:N +y1:A8:infinity +y2:H105D877E0 +y3:H105D87A80 +y4:A12:tls_connection_sup +y5:P<0.113.0> +0x0000000105d87d18:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105d87d38:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.114.0> +105D877E0:t5:AE:callback_cache,AA:supervisor,H105D87768,H105D87790,H105D877B8 +105D877B8:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI= +105D87790:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI= +105D87768:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM= +105D87A80:tC:A5:state,H2800BDB80,A12:simple_one_for_one,H105D879E8,H280028328,I0,I3600,N,I0,A5:never,A12:tls_connection_sup,N +105D879E8:t2:H105D879D8,H105D879B8 +105D879B8:Mf1:H105D879A8:H105D87940 +105D879A8:t1:A9:undefined +105D87940:t9:A5:child,A9:undefined,A9:undefined,H2800BDCA0,A9:temporary,A5:false,A8:infinity,AA:supervisor,H105D87930 +105D87930:lA16:tls_dyn_connection_sup|N +105D879D8:lA9:undefined|N +105D87718:t2:AA:$ancestors,H105D87708 +105D87708:lA7:tls_sup|H105D876C8 +105D876C8:lA12:ssl_connection_sup|H105D876B8 +105D876B8:lA7:ssl_sup|H105D876A8 +105D876A8:lP<0.103.0>|N +105D87750:t2:AD:$initial_call,H105D87730 +105D87730:t3:AA:supervisor,A12:tls_connection_sup,I1 +=proc_dictionary:<0.115.0> +H105DA2350 +H105DA2368 +=proc_stack:<0.115.0> +0x0000000105da26e8:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.115.0> +105DA2350:t2:AA:$ancestors,H105DA2390 +105DA2390:lA7:tls_sup|H105DA23D0 +105DA23D0:lA12:ssl_connection_sup|H105DA23F0 +105DA23F0:lA7:ssl_sup|H105DA2410 +105DA2410:lP<0.103.0>|N +105DA2368:t2:AD:$initial_call,H105DA23A0 +105DA23A0:t3:AA:supervisor,AE:tls_server_sup,I1 +=proc_dictionary:<0.116.0> +H105DBD3E8 +H105DBD420 +=proc_stack:<0.116.0> +y0:N +y1:A8:infinity +y2:H105DBD4B0 +y3:H105DBD740 +y4:A16:ssl_listen_tracker_sup +y5:P<0.115.0> +0x0000000105dbd9d8:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105dbd9f8:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.116.0> +105DBD4B0:t5:AE:callback_cache,AA:supervisor,H105DBD438,H105DBD460,H105DBD488 +105DBD488:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI= +105DBD460:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI= +105DBD438:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM= +105DBD740:tC:A5:state,H2800BE298,A12:simple_one_for_one,H105DBD6A8,H280028328,I0,I3600,N,I0,A5:never,A16:ssl_listen_tracker_sup,N +105DBD6A8:t2:H105DBD698,H105DBD678 +105DBD678:Mf1:H105DBD668:H105DBD600 +105DBD668:t1:A9:undefined +105DBD600:t9:A5:child,A9:undefined,A9:undefined,H2800BE3E8,A9:temporary,A5:false,I4000,A6:worker,H2800BE3D8 +105DBD698:lA9:undefined|N +105DBD3E8:t2:AA:$ancestors,H105DBD3D8 +105DBD3D8:lAE:tls_server_sup|H105DBD398 +105DBD398:lA7:tls_sup|H105DBD388 +105DBD388:lA12:ssl_connection_sup|H105DBD378 +105DBD378:lA7:ssl_sup|H105DBD368 +105DBD368:lP<0.103.0>|N +105DBD420:t2:AD:$initial_call,H105DBD400 +105DBD400:t3:AA:supervisor,A16:ssl_listen_tracker_sup,I1 +=proc_dictionary:<0.117.0> +H105DA1D30 +H105DA1D68 +=proc_stack:<0.117.0> +y0:N +y1:A8:infinity +y2:H105DA1DF8 +y3:H105DA2088 +y4:A1D:tls_server_session_ticket_sup +y5:P<0.115.0> +0x0000000105da2320:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105da2340:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.117.0> +105DA1DF8:t5:AE:callback_cache,AA:supervisor,H105DA1D80,H105DA1DA8,H105DA1DD0 +105DA1DD0:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI= +105DA1DA8:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI= +105DA1D80:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM= +105DA2088:tC:A5:state,H2800BE5C0,A12:simple_one_for_one,H105DA1FF0,H280028358,I0,I3600,N,I0,A5:never,A1D:tls_server_session_ticket_sup,N +105DA1FF0:t2:H105DA1FE0,H105DA1FC0 +105DA1FC0:Mf1:H105DA1FB0:H105DA1F48 +105DA1FB0:t1:A9:undefined +105DA1F48:t9:A5:child,A9:undefined,A9:undefined,H2800BE710,A9:transient,A5:false,I4000,A6:worker,H2800BE700 +105DA1FE0:lA9:undefined|N +105DA1D30:t2:AA:$ancestors,H105DA1D20 +105DA1D20:lAE:tls_server_sup|H105DA1CE0 +105DA1CE0:lA7:tls_sup|H105DA1CD0 +105DA1CD0:lA12:ssl_connection_sup|H105DA1CC0 +105DA1CC0:lA7:ssl_sup|H105DA1CB0 +105DA1CB0:lP<0.103.0>|N +105DA1D68:t2:AD:$initial_call,H105DA1D48 +105DA1D48:t3:AA:supervisor,A1D:tls_server_session_ticket_sup,I1 +=proc_dictionary:<0.118.0> +H105EBF1B0 +H105EBF1E8 +=proc_stack:<0.118.0> +y0:N +y1:A8:infinity +y2:H105EBF278 +y3:H105EBF508 +y4:A1C:ssl_server_session_cache_sup +y5:P<0.115.0> +0x0000000105ebf7a0:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105ebf7c0:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.118.0> +105EBF278:t5:AE:callback_cache,AA:supervisor,H105EBF200,H105EBF228,H105EBF250 +105EBF250:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI= +105EBF228:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI= +105EBF200:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM= +105EBF508:tC:A5:state,H2800BE958,A12:simple_one_for_one,H105EBF470,H280028358,I3,I3600,N,I0,A5:never,A1C:ssl_server_session_cache_sup,N +105EBF470:t2:H105EBF460,H105EBF440 +105EBF440:Mf1:H105EBF430:H105EBF3C8 +105EBF430:t1:A9:undefined +105EBF3C8:t9:A5:child,A9:undefined,A9:undefined,H2800BEA90,A9:transient,A5:false,I4000,A6:worker,H2800BEA80 +105EBF460:lA9:undefined|N +105EBF1B0:t2:AA:$ancestors,H105EBF1A0 +105EBF1A0:lAE:tls_server_sup|H105EBF160 +105EBF160:lA7:tls_sup|H105EBF150 +105EBF150:lA12:ssl_connection_sup|H105EBF140 +105EBF140:lA7:ssl_sup|H105EBF130 +105EBF130:lP<0.103.0>|N +105EBF1E8:t2:AD:$initial_call,H105EBF1C8 +105EBF1C8:t3:AA:supervisor,A1C:ssl_server_session_cache_sup,I1 +=proc_dictionary:<0.119.0> +H105EBF900 +H105EBF938 +=proc_stack:<0.119.0> +y0:N +y1:A8:infinity +y2:H105EBF9C8 +y3:H105EBFC58 +y4:A24:ssl_upgrade_server_session_cache_sup +y5:P<0.115.0> +0x0000000105ebfef0:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105ebff10:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.119.0> +105EBF9C8:t5:AE:callback_cache,AA:supervisor,H105EBF950,H105EBF978,H105EBF9A0 +105EBF9A0:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI= +105EBF978:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI= +105EBF950:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM= +105EBFC58:tC:A5:state,H2800BECC8,A12:simple_one_for_one,H105EBFBC0,H280028358,I3,I3600,N,I0,A5:never,A24:ssl_upgrade_server_session_cache_sup,N +105EBFBC0:t2:H105EBFBB0,H105EBFB90 +105EBFB90:Mf1:H105EBFB80:H105EBFB18 +105EBFB80:t1:A9:undefined +105EBFB18:t9:A5:child,A9:undefined,A9:undefined,H2800BEE18,A9:transient,A5:false,I4000,A6:worker,H2800BEE08 +105EBFBB0:lA9:undefined|N +105EBF900:t2:AA:$ancestors,H105EBF8F0 +105EBF8F0:lAE:tls_server_sup|H105EBF8B0 +105EBF8B0:lA7:tls_sup|H105EBF8A0 +105EBF8A0:lA12:ssl_connection_sup|H105EBF890 +105EBF890:lA7:ssl_sup|H105EBF880 +105EBF880:lP<0.103.0>|N +105EBF938:t2:AD:$initial_call,H105EBF918 +105EBF918:t3:AA:supervisor,A24:ssl_upgrade_server_session_cache_sup,I1 +=proc_dictionary:<0.120.0> +H105DB8030 +H105DB8048 +=proc_stack:<0.120.0> +0x0000000105db82d8:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.120.0> +105DB8030:t2:AA:$ancestors,H105DB8070 +105DB8070:lA12:ssl_connection_sup|H105DB80B0 +105DB80B0:lA7:ssl_sup|H105DB80D0 +105DB80D0:lP<0.103.0>|N +105DB8048:t2:AD:$initial_call,H105DB8080 +105DB8080:t3:AA:supervisor,A8:dtls_sup,I1 +=proc_dictionary:<0.121.0> +H105DB72B0 +H105DB72E8 +=proc_stack:<0.121.0> +y0:N +y1:A8:infinity +y2:H105DB7378 +y3:H105DB7608 +y4:A13:dtls_connection_sup +y5:P<0.120.0> +0x0000000105db78b0:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105db78d0:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.121.0> +105DB7378:t5:AE:callback_cache,AA:supervisor,H105DB7300,H105DB7328,H105DB7350 +105DB7350:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI= +105DB7328:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI= +105DB7300:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM= +105DB7608:tC:A5:state,H2800BF370,A12:simple_one_for_one,H105DB7570,H280028328,I0,I3600,N,I0,A5:never,A13:dtls_connection_sup,N +105DB7570:t2:H105DB7560,H105DB7540 +105DB7540:Mf1:H105DB7530:H105DB74C8 +105DB7530:t1:A9:undefined +105DB74C8:t9:A5:child,A9:undefined,A9:undefined,H2800BF4D0,A9:temporary,A5:false,I4000,A6:worker,H2800BF4B0 +105DB7560:lA9:undefined|N +105DB72B0:t2:AA:$ancestors,H105DB72A0 +105DB72A0:lA8:dtls_sup|H105DB7260 +105DB7260:lA12:ssl_connection_sup|H105DB7250 +105DB7250:lA7:ssl_sup|H105DB7240 +105DB7240:lP<0.103.0>|N +105DB72E8:t2:AD:$initial_call,H105DB72C8 +105DB72C8:t3:AA:supervisor,A13:dtls_connection_sup,I1 +=proc_dictionary:<0.122.0> +H105D8D9E8 +H105D8DA00 +=proc_stack:<0.122.0> +0x0000000105d8dca0:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.122.0> +105D8D9E8:t2:AA:$ancestors,H105D8DA28 +105D8DA28:lA8:dtls_sup|H105D8DA68 +105D8DA68:lA12:ssl_connection_sup|H105D8DA88 +105D8DA88:lA7:ssl_sup|H105D8DAA8 +105D8DAA8:lP<0.103.0>|N +105D8DA00:t2:AD:$initial_call,H105D8DA38 +105D8DA38:t3:AA:supervisor,AF:dtls_server_sup,I1 +=proc_dictionary:<0.123.0> +H105DB7A10 +H105DB7A48 +=proc_stack:<0.123.0> +y0:N +y1:A8:infinity +y2:H105DB7AD8 +y3:H105DB7D68 +y4:A11:dtls_listener_sup +y5:P<0.122.0> +0x0000000105db8000:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105db8020:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.123.0> +105DB7AD8:t5:AE:callback_cache,AA:supervisor,H105DB7A60,H105DB7A88,H105DB7AB0 +105DB7AB0:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI= +105DB7A88:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI= +105DB7A60:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM= +105DB7D68:tC:A5:state,H2800BF988,A12:simple_one_for_one,H105DB7CD0,H280028328,I0,I3600,N,I0,A5:never,A11:dtls_listener_sup,N +105DB7CD0:t2:H105DB7CC0,H105DB7CA0 +105DB7CA0:Mf1:H105DB7C90:H105DB7C28 +105DB7C90:t1:A9:undefined +105DB7C28:t9:A5:child,A9:undefined,A9:undefined,H2800BFB08,A9:temporary,A5:false,I4000,A6:worker,H2800BFAF8 +105DB7CC0:lA9:undefined|N +105DB7A10:t2:AA:$ancestors,H105DB7A00 +105DB7A00:lAF:dtls_server_sup|H105DB79C0 +105DB79C0:lA8:dtls_sup|H105DB79B0 +105DB79B0:lA12:ssl_connection_sup|H105DB79A0 +105DB79A0:lA7:ssl_sup|H105DB7990 +105DB7990:lP<0.103.0>|N +105DB7A48:t2:AD:$initial_call,H105DB7A28 +105DB7A28:t3:AA:supervisor,A11:dtls_listener_sup,I1 +=proc_dictionary:<0.124.0> +H105DE5340 +H105DE5378 +=proc_stack:<0.124.0> +y0:N +y1:A8:infinity +y2:H105DE5408 +y3:H105DE5698 +y4:A1D:dtls_server_session_cache_sup +y5:P<0.122.0> +0x0000000105de5930:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180) +y0:N +y1:N +y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220) +0x0000000105de5950:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.124.0> +105DE5408:t5:AE:callback_cache,AA:supervisor,H105DE5390,H105DE53B8,H105DE53E0 +105DE53E0:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI= +105DE53B8:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI= +105DE5390:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM= +105DE5698:tC:A5:state,H2800BFC90,A12:simple_one_for_one,H105DE5600,H280028328,I0,I3600,N,I0,A5:never,A1D:dtls_server_session_cache_sup,N +105DE5600:t2:H105DE55F0,H105DE55D0 +105DE55D0:Mf1:H105DE55C0:H105DE5558 +105DE55C0:t1:A9:undefined +105DE5558:t9:A5:child,A9:undefined,A9:undefined,H2800BFDC8,A9:temporary,A5:false,I4000,A6:worker,H2800BFDB8 +105DE55F0:lA9:undefined|N +105DE5340:t2:AA:$ancestors,H105DE5330 +105DE5330:lAF:dtls_server_sup|H105DE52F0 +105DE52F0:lA8:dtls_sup|H105DE52E0 +105DE52E0:lA12:ssl_connection_sup|H105DE52D0 +105DE52D0:lA7:ssl_sup|H105DE52C0 +105DE52C0:lP<0.103.0>|N +105DE5378:t2:AD:$initial_call,H105DE5358 +105DE5358:t3:AA:supervisor,A1D:dtls_server_session_cache_sup,I1 +=proc_messages:<0.135.0> +=proc_stack:<0.135.0> +y0:H2800CD8C8 +y1:H105D8D5E0 +y2:A8:infinity +0x0000000105d8d7d0:SReturn addr 0x41FF57C (gleam_erlang_ffi:select/1 + 76) +0x0000000105d8d7d8:SReturn addr 0x41F8888 ('gleam@otp@actor':loop/1 + 88) +y0:N +y1:N +y2:H105D8D4B0 +0x0000000105d8d7f8:SReturn addr 0x3D82348 (<terminate process normally>) +=proc_heap:<0.135.0> +105D8D5E0:Mf3:H105D8D610:H2800CD8C8,H105D8D598,H105D8D340 +105D8D610:t3:A8:anything,H105D8D5C8,H105D8D3B0 +105D8D3B0:t2:H105D8D288,I2 +105D8D288:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALJ5+vQAAd/g02c= +105D8D5C8:t2:A6:system,I3 +105D8D340:E59:g3AAAABXATXkq0co6TIEH9F8d4ohKbUAAAABAAAAAXcUZ2xlYW1AZXJsYW5nQHByb2Nlc3NhAWIBryVaWHcNbm9ub2RlQG5vaG9zdAAAAIcAAAAAAAAAAGo= +105D8D598:E59:g3AAAABXATXkq0co6TIEH9F8d4ohKbUAAAAEAAAAAXcUZ2xlYW1AZXJsYW5nQHByb2Nlc3NhBGIBryVaWHcNbm9ub2RlQG5vaG9zdAAAAIcAAAAAAAAAAGo= +105D8D4B0:t8:A4:self,A7:running,P<0.9.0>,A3:nil,H105D8D160,H105D8D180,N,H105D8D198 +105D8D198:E70:g3AAAABuAm0lB8VhbzpekP2Yj7+xrtsAAAAAAAAABXcnc2hvd3RpbWVAaW50ZXJuYWxAZXJsYW5nQG1vZHVsZV9oYW5kbGVyYQBiA2koPlh3DW5vbm9kZUBub2hvc3QAAAAJAAAAAAAAAABqampqag== +105D8D180:t2:A8:selector,H105D8D2A0 +105D8D2A0:Mf1:H105D8D330:H105D8D340 +105D8D330:t1:H105D8D3B0 +105D8D160:t3:A7:subject,P<0.135.0>,H105D8D288 +=persistent_terms +H280093098|A5:async +AC:logger_proxy|H28008F560 +H2800930E0|I10 +H28001C210|H28001C228 +H280093140|A9:undefined +AC:global_group|H28007FBF0 +H280017DD8|H280017DF0 +H2800BB860|I23 +H28001F250|H28001F268 +H280068270|H280068288 +H280068B60|N +H28001EEC0|H28001EED8 +H2800BB800|I7 +H2800BB7B8|A5:async +A12:rex_nodes_observer|H2800711C8 +H28001EFE8|H28001F000 +H28005B268|I5 +H28006A4B8|I5 +H28008F5C8|A5:async +H280068BF0|I5 +H280068BA8|A4:true +H280068B18|N +H28005B2B0|I5 +=literals +2800101F8:t2:A4:unix,A6:darwin +280010230:t3:I23,I0,I0 +280010268:t6:AB:erts_dflags,I55966662588,I17230663572,I55966662588,I8396866,I8192 +280010188:t0: +280010190:t0: +2800102B8:lI108|N +2800102C8:lI114|H2800102B8 +2800102D8:lI101|H2800102C8 +2800102E8:lI46|H2800102D8 +280013CD0:t4:A5:state,H280013CF8,H280013D10,H280013D28 +280013CF8:Mf0:H280010188: +280013D10:Mf0:H280010188: +280013D28:Mf0:H280010188: +280013D40:Mf0:H280010188: +280013D58:lA5:flush|N +280013D68:lI115|H280013D78 +280013D78:lI111|H280013D88 +280013D88:lI99|H280013D98 +280013D98:lI107|H280013DA8 +280013DA8:lI101|H280013DB8 +280013DB8:lI116|H280013DC8 +280013DC8:lI45|H280013DD8 +280013DD8:lI114|H280013DE8 +280013DE8:lI101|H280013DF8 +280013DF8:lI103|H280013E08 +280013E08:lI105|H280013E18 +280013E18:lI115|H280013E28 +280013E28:lI116|H280013E38 +280013E38:lI114|H280013E48 +280013E48:lI121|H280013E58 +280013E58:lI32|H280013E68 +280013E68:lI114|H280013E78 +280013E78:lI101|H280013E88 +280013E88:lI99|H280013E98 +280013E98:lI101|H280013EA8 +280013EA8:lI105|H280013EB8 +280013EB8:lI118|H280013EC8 +280013EC8:lI101|H280013ED8 +280013ED8:lI100|H280013EE8 +280013EE8:lI32|H280013EF8 +280013EF8:lI117|H280013F08 +280013F08:lI110|H280013F18 +280013F18:lI101|H280013F28 +280013F28:lI120|H280013F38 +280013F38:lI112|H280013F48 +280013F48:lI101|H280013F58 +280013F58:lI99|H280013F68 +280013F68:lI116|H280013F78 +280013F78:lI101|H280013F88 +280013F88:lI100|H280013F98 +280013F98:lI32|H280013FA8 +280013FA8:lI101|H280013FB8 +280013FB8:lI120|H280013FC8 +280013FC8:lI105|H280013FD8 +280013FD8:lI116|H280013FE8 +280013FE8:lI32|H280013FF8 +280013FF8:lI102|H280014008 +280014008:lI114|H280014018 +280014018:lI111|H280014028 +280014028:lI109|H280014038 +280014038:lI32|H280014048 +280014048:lI126|H280014058 +280014058:lI112|H280014068 +280014068:lI58|H280014078 +280014078:lI126|H280014088 +280014088:lI110|H280014098 +280014098:lI32|H2800140A8 +2800140A8:lI32|H2800140B8 +2800140B8:lI32|H2800140C8 +2800140C8:lI126|H2800140D8 +2800140D8:lI112|N +2800140E8:lI115|H2800140F8 +2800140F8:lI111|H280014108 +280014108:lI99|H280014118 +280014118:lI107|H280014128 +280014128:lI101|H280014138 +280014138:lI116|H280014148 +280014148:lI45|H280014158 +280014158:lI114|H280014168 +280014168:lI101|H280014178 +280014178:lI103|H280014188 +280014188:lI105|H280014198 +280014198:lI115|H2800141A8 +2800141A8:lI116|H2800141B8 +2800141B8:lI114|H2800141C8 +2800141C8:lI121|H2800141D8 +2800141D8:lI32|H2800141E8 +2800141E8:lI114|H2800141F8 +2800141F8:lI101|H280014208 +280014208:lI99|H280014218 +280014218:lI101|H280014228 +280014228:lI105|H280014238 +280014238:lI118|H280014248 +280014248:lI101|H280014258 +280014258:lI100|H280014268 +280014268:lI32|H280014278 +280014278:lI117|H280014288 +280014288:lI110|H280014298 +280014298:lI101|H2800142A8 +2800142A8:lI120|H2800142B8 +2800142B8:lI112|H2800142C8 +2800142C8:lI101|H2800142D8 +2800142D8:lI99|H2800142E8 +2800142E8:lI116|H2800142F8 +2800142F8:lI101|H280014308 +280014308:lI100|H280014318 +280014318:lI58|H280014328 +280014328:lI126|H280014338 +280014338:lI110|H280014348 +280014348:lI32|H280014358 +280014358:lI32|H280014368 +280014368:lI32|H280014378 +280014378:lI126|H280014388 +280014388:lI112|N +280014398:lI115|H2800143A8 +2800143A8:lI111|H2800143B8 +2800143B8:lI99|H2800143C8 +2800143C8:lI107|H2800143D8 +2800143D8:lI101|H2800143E8 +2800143E8:lI116|H2800143F8 +2800143F8:lI45|H280014408 +280014408:lI114|H280014418 +280014418:lI101|H280014428 +280014428:lI103|H280014438 +280014438:lI105|H280014448 +280014448:lI115|H280014458 +280014458:lI116|H280014468 +280014468:lI114|H280014478 +280014478:lI121|H280014488 +280014488:lI32|H280014498 +280014498:lI101|H2800144A8 +2800144A8:lI114|H2800144B8 +2800144B8:lI114|H2800144C8 +2800144C8:lI111|H2800144D8 +2800144D8:lI114|H2800144E8 +2800144E8:lI32|H2800144F8 +2800144F8:lI119|H280014508 +280014508:lI104|H280014518 +280014518:lI105|H280014528 +280014528:lI108|H280014538 +280014538:lI101|H280014548 +280014548:lI32|H280014558 +280014558:lI112|H280014568 +280014568:lI114|H280014578 +280014578:lI111|H280014588 +280014588:lI99|H280014598 +280014598:lI101|H2800145A8 +2800145A8:lI115|H2800145B8 +2800145B8:lI115|H2800145C8 +2800145C8:lI105|H2800145D8 +2800145D8:lI110|H2800145E8 +2800145E8:lI103|H2800145F8 +2800145F8:lI32|H280014608 +280014608:lI115|H280014618 +280014618:lI111|H280014628 +280014628:lI99|H280014638 +280014638:lI107|H280014648 +280014648:lI101|H280014658 +280014658:lI116|H280014668 +280014668:lI58|H280014678 +280014678:lI32|H280014688 +280014688:lI126|H280014698 +280014698:lI110|H2800146A8 +2800146A8:lI32|H2800146B8 +2800146B8:lI32|H2800146C8 +2800146C8:lI32|H2800146D8 +2800146D8:lI67|H2800146E8 +2800146E8:lI108|H2800146F8 +2800146F8:lI97|H280014708 +280014708:lI115|H280014718 +280014718:lI115|H280014728 +280014728:lI58|H280014738 +280014738:lI32|H280014748 +280014748:lI126|H280014758 +280014758:lI112|H280014768 +280014768:lI126|H280014778 +280014778:lI110|H280014788 +280014788:lI32|H280014798 +280014798:lI32|H2800147A8 +2800147A8:lI32|H2800147B8 +2800147B8:lI69|H2800147C8 +2800147C8:lI114|H2800147D8 +2800147D8:lI114|H2800147E8 +2800147E8:lI111|H2800147F8 +2800147F8:lI114|H280014808 +280014808:lI58|H280014818 +280014818:lI32|H280014828 +280014828:lI126|H280014838 +280014838:lI112|H280014848 +280014848:lI126|H280014858 +280014858:lI110|H280014868 +280014868:lI32|H280014878 +280014878:lI32|H280014888 +280014888:lI32|H280014898 +280014898:lI83|H2800148A8 +2800148A8:lI116|H2800148B8 +2800148B8:lI97|H2800148C8 +2800148C8:lI99|H2800148D8 +2800148D8:lI107|H2800148E8 +2800148E8:lI58|H2800148F8 +2800148F8:lI32|H280014908 +280014908:lI126|H280014918 +280014918:lI112|N +280014928:t2:A5:error,AE:unknown_socket +280014940:t2:A5:error,A9:not_owner +280014958:t2:A5:error,AF:unknown_monitor +280014970:t2:AF:socket_registry,A9:not_found +280014988:lI115|H280014998 +280014998:lI111|H2800149A8 +2800149A8:lI99|H2800149B8 +2800149B8:lI107|H2800149C8 +2800149C8:lI101|H2800149D8 +2800149D8:lI116|H2800149E8 +2800149E8:lI45|H2800149F8 +2800149F8:lI114|H280014A08 +280014A08:lI101|H280014A18 +280014A18:lI103|H280014A28 +280014A28:lI105|H280014A38 +280014A38:lI115|H280014A48 +280014A48:lI116|H280014A58 +280014A58:lI114|H280014A68 +280014A68:lI121|H280014A78 +280014A78:lI32|H280014A88 +280014A88:lI115|H280014A98 +280014A98:lI101|H280014AA8 +280014AA8:lI110|H280014AB8 +280014AB8:lI100|H280014AC8 +280014AC8:lI102|H280014AD8 +280014AD8:lI105|H280014AE8 +280014AE8:lI108|H280014AF8 +280014AF8:lI101|H280014B08 +280014B08:lI95|H280014B18 +280014B18:lI100|H280014B28 +280014B28:lI101|H280014B38 +280014B38:lI102|H280014B48 +280014B48:lI101|H280014B58 +280014B58:lI114|H280014B68 +280014B68:lI114|H280014B78 +280014B78:lI101|H280014B88 +280014B88:lI100|H280014B98 +280014B98:lI95|H280014BA8 +280014BA8:lI99|H280014BB8 +280014BB8:lI108|H280014BC8 +280014BC8:lI111|H280014BD8 +280014BD8:lI115|H280014BE8 +280014BE8:lI101|H280014BF8 +280014BF8:lI58|H280014C08 +280014C08:lI126|H280014C18 +280014C18:lI110|H280014C28 +280014C28:lI32|H280014C38 +280014C38:lI32|H280014C48 +280014C48:lI32|H280014C58 +280014C58:lI91|H280014C68 +280014C68:lI126|H280014C78 +280014C78:lI112|H280014C88 +280014C88:lI93|H280014C98 +280014C98:lI32|H280014CA8 +280014CA8:lI126|H280014CB8 +280014CB8:lI112|N +280014CC8:lI115|H280014CD8 +280014CD8:lI111|H280014CE8 +280014CE8:lI99|H280014CF8 +280014CF8:lI107|H280014D08 +280014D08:lI101|H280014D18 +280014D18:lI116|H280014D28 +280014D28:lI45|H280014D38 +280014D38:lI114|H280014D48 +280014D48:lI101|H280014D58 +280014D58:lI103|H280014D68 +280014D68:lI105|H280014D78 +280014D78:lI115|H280014D88 +280014D88:lI116|H280014D98 +280014D98:lI114|H280014DA8 +280014DA8:lI121|H280014DB8 +280014DB8:lI32|H280014DC8 +280014DC8:lI115|H280014DD8 +280014DD8:lI101|H280014DE8 +280014DE8:lI110|H280014DF8 +280014DF8:lI100|H280014E08 +280014E08:lI102|H280014E18 +280014E18:lI105|H280014E28 +280014E28:lI108|H280014E38 +280014E38:lI101|H280014E48 +280014E48:lI95|H280014E58 +280014E58:lI100|H280014E68 +280014E68:lI101|H280014E78 +280014E78:lI102|H280014E88 +280014E88:lI101|H280014E98 +280014E98:lI114|H280014EA8 +280014EA8:lI114|H280014EB8 +280014EB8:lI101|H280014EC8 +280014EC8:lI100|H280014ED8 +280014ED8:lI95|H280014EE8 +280014EE8:lI99|H280014EF8 +280014EF8:lI108|H280014F08 +280014F08:lI111|H280014F18 +280014F18:lI115|H280014F28 +280014F28:lI101|H280014F38 +280014F38:lI58|H280014F48 +280014F48:lI126|H280014F58 +280014F58:lI110|H280014F68 +280014F68:lI32|H280014F78 +280014F78:lI32|H280014F88 +280014F88:lI32|H280014F98 +280014F98:lI91|H280014FA8 +280014FA8:lI126|H280014FB8 +280014FB8:lI112|H280014FC8 +280014FC8:lI93|H280014FD8 +280014FD8:lI32|H280014FE8 +280014FE8:lI40|H280014FF8 +280014FF8:lI126|H280015008 +280015008:lI112|H280015018 +280015018:lI58|H280015028 +280015028:lI126|H280015038 +280015038:lI112|H280015048 +280015048:lI41|H280015058 +280015058:lI126|H280015068 +280015068:lI110|H280015078 +280015078:lI32|H280015088 +280015088:lI32|H280015098 +280015098:lI32|H2800150A8 +2800150A8:lI32|H2800150B8 +2800150B8:lI32|H2800150C8 +2800150C8:lI32|H2800150D8 +2800150D8:lI126|H2800150E8 +2800150E8:lI112|N +2800150F8:t1:A3:tag +280015108:t4:AC:error_logger,A3:pid,A4:time,A2:gl +280017B40:t2:I0,N +280025F58:lI67|H280025F68 +280025F68:lI97|H280025F78 +280025F78:lI108|H280025F88 +280025F88:lI108|H280025F98 +280025F98:lI98|H280025FA8 +280025FA8:lI97|H280025FB8 +280025FB8:lI99|H280025FC8 +280025FC8:lI107|N +280025FD8:lI83|H280025FE8 +280025FE8:lI116|H280025FF8 +280025FF8:lI97|H280026008 +280026008:lI116|H280026018 +280026018:lI101|N +280026028:t2:A2:ok,A9:undefined +280026040:t2:A5:error,AA:restarting +280026058:t2:A5:error,A7:running +280026070:t2:A5:error,A9:not_found +280026088:t2:A5:error,A12:simple_one_for_one +2800260A0:t2:AB:supervisors,I0 +2800260B8:t2:A5:specs,I1 +2800260D0:lH2800260E0|N +2800260E0:t2:A7:workers,I0 +2800260F8:t4:I0,I0,I0,I0 +280026120:lI83|H280026130 +280026130:lI117|H280026140 +280026140:lI112|H280026150 +280026150:lI101|H280026160 +280026160:lI114|H280026170 +280026170:lI118|H280026180 +280026180:lI105|H280026190 +280026190:lI115|H2800261A0 +2800261A0:lI111|H2800261B0 +2800261B0:lI114|H2800261C0 +2800261C0:lI32|H2800261D0 +2800261D0:lI114|H2800261E0 +2800261E0:lI101|H2800261F0 +2800261F0:lI99|H280026200 +280026200:lI101|H280026210 +280026210:lI105|H280026220 +280026220:lI118|H280026230 +280026230:lI101|H280026240 +280026240:lI100|H280026250 +280026250:lI32|H280026260 +280026260:lI117|H280026270 +280026270:lI110|H280026280 +280026280:lI101|H280026290 +280026290:lI120|H2800262A0 +2800262A0:lI112|H2800262B0 +2800262B0:lI101|H2800262C0 +2800262C0:lI99|H2800262D0 +2800262D0:lI116|H2800262E0 +2800262E0:lI101|H2800262F0 +2800262F0:lI100|H280026300 +280026300:lI32|H280026310 +280026310:lI109|H280026320 +280026320:lI101|H280026330 +280026330:lI115|H280026340 +280026340:lI115|H280026350 +280026350:lI97|H280026360 +280026360:lI103|H280026370 +280026370:lI101|H280026380 +280026380:lI58|H280026390 +280026390:lI32|H2800263A0 +2800263A0:lI126|H2800263B0 +2800263B0:lI116|H2800263C0 +2800263C0:lI112|H2800263D0 +2800263D0:lI126|H2800263E0 +2800263E0:lI110|N +2800263F0:t2:AC:error_logger,A6:domain +280026408:Mf2:H2800263F0:H280026450,H280026430 +280026430:lA3:otp|N +280026440:t1:A3:tag +280026450:Mf1:H280026440:A5:error +280026470:t3:A4:line,A4:file,A3:mfa +280026490:Mf3:H280026470:I623,H2800264C0,H2800265A0 +2800264C0:lI115|H2800264D0 +2800264D0:lI117|H2800264E0 +2800264E0:lI112|H2800264F0 +2800264F0:lI101|H280026500 +280026500:lI114|H280026510 +280026510:lI118|H280026520 +280026520:lI105|H280026530 +280026530:lI115|H280026540 +280026540:lI111|H280026550 +280026550:lI114|H280026560 +280026560:lI46|H280026570 +280026570:lI101|H280026580 +280026580:lI114|H280026590 +280026590:lI108|N +2800265A0:t3:AA:supervisor,AB:handle_info,I2 +2800265C0:t2:A5:error,AF:already_present +2800265D8:t2:AC:errorContext,A10:child_terminated +2800265F0:Mf0:H280010188: +280026608:t2:AA:supervisor,A10:child_terminated +280026620:t4:AC:error_logger,A6:domain,A10:logger_formatter,A9:report_cb +280026648:Mf4:H280026620:H2800266C0,H280026680,H280026728,H280026858 +280026680:lA3:otp|H280026690 +280026690:lA4:sasl|N +2800266A0:t3:A3:tag,A4:type,A9:report_cb +2800266C0:Mf3:H2800266A0:AC:error_report,A11:supervisor_report,H2800266F0 +2800266F0:E1C:g3F3CnN1cGVydmlzb3J3CmZvcm1hdF9sb2dhAQ== +280026718:t1:A5:title +280026728:Mf1:H280026718:H280026748 +280026748:lI83|H280026758 +280026758:lI85|H280026768 +280026768:lI80|H280026778 +280026778:lI69|H280026788 +280026788:lI82|H280026798 +280026798:lI86|H2800267A8 +2800267A8:lI73|H2800267B8 +2800267B8:lI83|H2800267C8 +2800267C8:lI79|H2800267D8 +2800267D8:lI82|H2800267E8 +2800267E8:lI32|H2800267F8 +2800267F8:lI82|H280026808 +280026808:lI69|H280026818 +280026818:lI80|H280026828 +280026828:lI79|H280026838 +280026838:lI82|H280026848 +280026848:lI84|N +280026858:E1C:g3F3CnN1cGVydmlzb3J3CmZvcm1hdF9sb2dhAg== +280026880:t3:A4:line,A4:file,A3:mfa +2800268A0:Mf3:H280026880:I742,H2800268D0,H2800269B0 +2800268D0:lI115|H2800268E0 +2800268E0:lI117|H2800268F0 +2800268F0:lI112|H280026900 +280026900:lI101|H280026910 +280026910:lI114|H280026920 +280026920:lI118|H280026930 +280026930:lI105|H280026940 +280026940:lI115|H280026950 +280026950:lI111|H280026960 +280026960:lI114|H280026970 +280026970:lI46|H280026980 +280026980:lI101|H280026990 +280026990:lI114|H2800269A0 +2800269A0:lI108|N +2800269B0:t3:AA:supervisor,AA:do_restart,I3 +2800269D0:t3:A4:line,A4:file,A3:mfa +2800269F0:Mf3:H2800269D0:I754,H280026A20,H280026B00 +280026A20:lI115|H280026A30 +280026A30:lI117|H280026A40 +280026A40:lI112|H280026A50 +280026A50:lI101|H280026A60 +280026A60:lI114|H280026A70 +280026A70:lI118|H280026A80 +280026A80:lI105|H280026A90 +280026A90:lI115|H280026AA0 +280026AA0:lI111|H280026AB0 +280026AB0:lI114|H280026AC0 +280026AC0:lI46|H280026AD0 +280026AD0:lI101|H280026AE0 +280026AE0:lI114|H280026AF0 +280026AF0:lI108|N +280026B00:t3:AA:supervisor,AA:do_restart,I3 +280026B20:t3:A4:line,A4:file,A3:mfa +280026B40:Mf3:H280026B20:I757,H280026B70,H280026C50 +280026B70:lI115|H280026B80 +280026B80:lI117|H280026B90 +280026B90:lI112|H280026BA0 +280026BA0:lI101|H280026BB0 +280026BB0:lI114|H280026BC0 +280026BC0:lI118|H280026BD0 +280026BD0:lI105|H280026BE0 +280026BE0:lI115|H280026BF0 +280026BF0:lI111|H280026C00 +280026C00:lI114|H280026C10 +280026C10:lI46|H280026C20 +280026C20:lI101|H280026C30 +280026C30:lI114|H280026C40 +280026C40:lI108|N +280026C50:t3:AA:supervisor,AA:do_restart,I3 +280026C70:t2:A6:reason,A1D:reached_max_restart_intensity +280026C88:t2:AC:errorContext,A8:shutdown +280026CA0:t2:AA:supervisor,A8:shutdown +280026CB8:t3:A4:line,A4:file,A3:mfa +280026CD8:Mf3:H280026CB8:I811,H280026D08,H280026DE8 +280026D08:lI115|H280026D18 +280026D18:lI117|H280026D28 +280026D28:lI112|H280026D38 +280026D38:lI101|H280026D48 +280026D48:lI114|H280026D58 +280026D58:lI118|H280026D68 +280026D68:lI105|H280026D78 +280026D78:lI115|H280026D88 +280026D88:lI111|H280026D98 +280026D98:lI114|H280026DA8 +280026DA8:lI46|H280026DB8 +280026DB8:lI101|H280026DC8 +280026DC8:lI114|H280026DD8 +280026DD8:lI108|N +280026DE8:t3:AA:supervisor,A7:restart,I2 +280026E08:t2:AC:errorContext,AB:start_error +280026E20:t2:AA:supervisor,AB:start_error +280026E38:t3:A4:line,A4:file,A3:mfa +280026E58:Mf3:H280026E38:I838,H280026E88,H280026F68 +280026E88:lI115|H280026E98 +280026E98:lI117|H280026EA8 +280026EA8:lI112|H280026EB8 +280026EB8:lI101|H280026EC8 +280026EC8:lI114|H280026ED8 +280026ED8:lI118|H280026EE8 +280026EE8:lI105|H280026EF8 +280026EF8:lI115|H280026F08 +280026F08:lI111|H280026F18 +280026F18:lI114|H280026F28 +280026F28:lI46|H280026F38 +280026F38:lI101|H280026F48 +280026F48:lI114|H280026F58 +280026F58:lI108|N +280026F68:t3:AA:supervisor,A7:restart,I3 +280026F88:t3:A4:line,A4:file,A3:mfa +280026FA8:Mf3:H280026F88:I852,H280026FD8,H2800270B8 +280026FD8:lI115|H280026FE8 +280026FE8:lI117|H280026FF8 +280026FF8:lI112|H280027008 +280027008:lI101|H280027018 +280027018:lI114|H280027028 +280027028:lI118|H280027038 +280027038:lI105|H280027048 +280027048:lI115|H280027058 +280027058:lI111|H280027068 +280027068:lI114|H280027078 +280027078:lI46|H280027088 +280027088:lI101|H280027098 +280027098:lI114|H2800270A8 +2800270A8:lI108|N +2800270B8:t3:AA:supervisor,A7:restart,I3 +2800270D8:t2:AA:restarting,A9:undefined +2800270F0:t2:AC:errorContext,AE:shutdown_error +280027108:t2:AA:supervisor,AE:shutdown_error +280027120:t3:A4:line,A4:file,A3:mfa +280027140:Mf3:H280027120:I911,H280027170,H280027250 +280027170:lI115|H280027180 +280027180:lI117|H280027190 +280027190:lI112|H2800271A0 +2800271A0:lI101|H2800271B0 +2800271B0:lI114|H2800271C0 +2800271C0:lI118|H2800271D0 +2800271D0:lI105|H2800271E0 +2800271E0:lI115|H2800271F0 +2800271F0:lI111|H280027200 +280027200:lI114|H280027210 +280027210:lI46|H280027220 +280027220:lI101|H280027230 +280027230:lI114|H280027240 +280027240:lI108|N +280027250:t3:AA:supervisor,AC:do_terminate,I2 +280027270:t2:N,H280027288 +280027288:Mf0:H280010188: +2800272A0:t4:A8:strategy,A6:period,A9:intensity,AD:auto_shutdown +2800272C8:Mf4:H2800272A0:AB:one_for_one,I5,I1,A5:never +280027300:t2:A7:restart,A4:type +280027318:Mf2:H280027300:A9:permanent,A6:worker +280027340:t2:AF:bad_combination,H280027358 +280027358:lH280027378|H280027368 +280027368:lH280027390|N +280027378:t2:AD:auto_shutdown,A5:never +280027390:t2:AB:significant,A4:true +2800273A8:t2:AF:bad_combination,H2800273C0 +2800273C0:lH2800273E0|H2800273D0 +2800273D0:lH2800273F8|N +2800273E0:t2:A7:restart,A9:permanent +2800273F8:t2:AB:significant,A4:true +280027410:t2:AA:supervisor,A8:progress +280027428:t4:AC:error_logger,A6:domain,A10:logger_formatter,A9:report_cb +280027450:Mf4:H280027428:H2800274C8,H280027488,H280027530,H280027640 +280027488:lA3:otp|H280027498 +280027498:lA4:sasl|N +2800274A8:t3:A3:tag,A4:type,A9:report_cb +2800274C8:Mf3:H2800274A8:AB:info_report,A8:progress,H2800274F8 +2800274F8:E1C:g3F3CnN1cGVydmlzb3J3CmZvcm1hdF9sb2dhAQ== +280027520:t1:A5:title +280027530:Mf1:H280027520:H280027550 +280027550:lI80|H280027560 +280027560:lI82|H280027570 +280027570:lI79|H280027580 +280027580:lI71|H280027590 +280027590:lI82|H2800275A0 +2800275A0:lI69|H2800275B0 +2800275B0:lI83|H2800275C0 +2800275C0:lI83|H2800275D0 +2800275D0:lI32|H2800275E0 +2800275E0:lI82|H2800275F0 +2800275F0:lI69|H280027600 +280027600:lI80|H280027610 +280027610:lI79|H280027620 +280027620:lI82|H280027630 +280027630:lI84|N +280027640:E1C:g3F3CnN1cGVydmlzb3J3CmZvcm1hdF9sb2dhAg== +280027668:t3:A4:line,A4:file,A3:mfa +280027688:Mf3:H280027668:I1563,H2800276B8,H280027798 +2800276B8:lI115|H2800276C8 +2800276C8:lI117|H2800276D8 +2800276D8:lI112|H2800276E8 +2800276E8:lI101|H2800276F8 +2800276F8:lI114|H280027708 +280027708:lI118|H280027718 +280027718:lI105|H280027728 +280027728:lI115|H280027738 +280027738:lI111|H280027748 +280027748:lI114|H280027758 +280027758:lI46|H280027768 +280027768:lI101|H280027778 +280027778:lI114|H280027788 +280027788:lI108|N +280027798:t3:AA:supervisor,AF:report_progress,I2 +2800277B8:t4:AB:chars_limit,A5:depth,A8:encoding,AB:single_line +2800277E0:Mf4:H2800277B8:A9:unlimited,A9:unlimited,A4:utf8,A5:false +280027818:lI83|H280027828 +280027828:lI116|H280027838 +280027838:lI97|H280027848 +280027848:lI114|H280027858 +280027858:lI116|H280027868 +280027868:lI101|H280027878 +280027878:lI100|H280027888 +280027888:lI58|N +280027898:lI46|N +2800278A8:lI83|H2800278B8 +2800278B8:lI117|H2800278C8 +2800278C8:lI112|H2800278D8 +2800278D8:lI101|H2800278E8 +2800278E8:lI114|H2800278F8 +2800278F8:lI118|H280027908 +280027908:lI105|H280027918 +280027918:lI115|H280027928 +280027928:lI111|H280027938 +280027938:lI114|H280027948 +280027948:lI58|H280027958 +280027958:lI32|N +280027968:lH280027978|N +280027978:lI46|N +280027988:lI46|H280027998 +280027998:lI32|H2800279A8 +2800279A8:lI82|H2800279B8 +2800279B8:lI101|H2800279C8 +2800279C8:lI97|H2800279D8 +2800279D8:lI115|H2800279E8 +2800279E8:lI111|H2800279F8 +2800279F8:lI110|H280027A08 +280027A08:lI58|H280027A18 +280027A18:lI32|N +280027A28:lI46|H280027A38 +280027A38:lI32|H280027A48 +280027A48:lI67|H280027A58 +280027A58:lI111|H280027A68 +280027A68:lI110|H280027A78 +280027A78:lI116|H280027A88 +280027A88:lI101|H280027A98 +280027A98:lI120|H280027AA8 +280027AA8:lI116|H280027AB8 +280027AB8:lI58|H280027AC8 +280027AC8:lI32|N +280027AD8:lI79|H280027AE8 +280027AE8:lI102|H280027AF8 +280027AF8:lI102|H280027B08 +280027B08:lI101|H280027B18 +280027B18:lI110|H280027B28 +280027B28:lI100|H280027B38 +280027B38:lI101|H280027B48 +280027B48:lI114|H280027B58 +280027B58:lI58|N +280027B68:lH280027B78|N +280027B78:lI126|H280027B88 +280027B88:lI110|N +280027B98:lI32|H280027BA8 +280027BA8:lI32|H280027BB8 +280027BB8:lI32|H280027BC8 +280027BC8:lI32|H280027BD8 +280027BD8:lI115|H280027BE8 +280027BE8:lI116|H280027BF8 +280027BF8:lI97|H280027C08 +280027C08:lI114|H280027C18 +280027C18:lI116|H280027C28 +280027C28:lI101|H280027C38 +280027C38:lI100|H280027C48 +280027C48:lI58|H280027C58 +280027C58:lI32|N +280027C68:lI126|H280027C78 +280027C78:lI110|N +280027C88:lI32|H280027C98 +280027C98:lI32|H280027CA8 +280027CA8:lI32|H280027CB8 +280027CB8:lI32|H280027CC8 +280027CC8:lI115|H280027CD8 +280027CD8:lI117|H280027CE8 +280027CE8:lI112|H280027CF8 +280027CF8:lI101|H280027D08 +280027D08:lI114|H280027D18 +280027D18:lI118|H280027D28 +280027D28:lI105|H280027D38 +280027D38:lI115|H280027D48 +280027D48:lI111|H280027D58 +280027D58:lI114|H280027D68 +280027D68:lI58|H280027D78 +280027D78:lI32|N +280027D88:lI32|H280027D98 +280027D98:lI32|H280027DA8 +280027DA8:lI32|H280027DB8 +280027DB8:lI32|H280027DC8 +280027DC8:lI111|H280027DD8 +280027DD8:lI102|H280027DE8 +280027DE8:lI102|H280027DF8 +280027DF8:lI101|H280027E08 +280027E08:lI110|H280027E18 +280027E18:lI100|H280027E28 +280027E28:lI101|H280027E38 +280027E38:lI114|H280027E48 +280027E48:lI58|H280027E58 +280027E58:lI32|N +280027E68:lI32|H280027E78 +280027E78:lI32|H280027E88 +280027E88:lI32|H280027E98 +280027E98:lI32|H280027EA8 +280027EA8:lI114|H280027EB8 +280027EB8:lI101|H280027EC8 +280027EC8:lI97|H280027ED8 +280027ED8:lI115|H280027EE8 +280027EE8:lI111|H280027EF8 +280027EF8:lI110|H280027F08 +280027F08:lI58|H280027F18 +280027F18:lI32|N +280027F28:lI32|H280027F38 +280027F38:lI32|H280027F48 +280027F48:lI32|H280027F58 +280027F58:lI32|H280027F68 +280027F68:lI101|H280027F78 +280027F78:lI114|H280027F88 +280027F88:lI114|H280027F98 +280027F98:lI111|H280027FA8 +280027FA8:lI114|H280027FB8 +280027FB8:lI67|H280027FC8 +280027FC8:lI111|H280027FD8 +280027FD8:lI110|H280027FE8 +280027FE8:lI116|H280027FF8 +280027FF8:lI101|H280028008 +280028008:lI120|H280028018 +280028018:lI116|H280028028 +280028028:lI58|H280028038 +280028038:lI32|N +280028048:lI32|H280028058 +280028058:lI126|H280028068 +280028068:lI115|H280028078 +280028078:lI32|H280028088 +280028088:lI105|H280028098 +280028098:lI100|H2800280A8 +2800280A8:lI61|H2800280B8 +2800280B8:lI126|H2800280C8 +2800280C8:lI119|H2800280D8 +2800280D8:lI44|H2800280E8 +2800280E8:lI110|H2800280F8 +2800280F8:lI98|H280028108 +280028108:lI95|H280028118 +280028118:lI99|H280028128 +280028128:lI104|H280028138 +280028138:lI105|H280028148 +280028148:lI108|H280028158 +280028158:lI100|H280028168 +280028168:lI114|H280028178 +280028178:lI101|H280028188 +280028188:lI110|H280028198 +280028198:lI61|H2800281A8 +2800281A8:lI126|H2800281B8 +2800281B8:lI119|H2800281C8 +2800281C8:lI46|N +2800281D8:lI32|H2800281E8 +2800281E8:lI126|H2800281F8 +2800281F8:lI115|H280028208 +280028208:lI32|H280028218 +280028218:lI105|H280028228 +280028228:lI100|H280028238 +280028238:lI61|H280028248 +280028248:lI126|H280028258 +280028258:lI119|H280028268 +280028268:lI44|H280028278 +280028278:lI112|H280028288 +280028288:lI105|H280028298 +280028298:lI100|H2800282A8 +2800282A8:lI61|H2800282B8 +2800282B8:lI126|H2800282C8 +2800282C8:lI119|H2800282D8 +2800282D8:lI46|N +2800282E8:lI112|N +2800282F8:lI80|N +280028308:lI48|N +280028318:lI116|N +280028328:t2:A7:mapsets,H280028340 +280028340:Mf0:H280010188: +280028358:t2:A4:maps,H280028370 +280028370:Mf0:H280010188: +280028388:lH280028398|N +280028398:t2:A4:init,I1 +2800283B0:t3:A4:line,A4:file,A3:mfa +2800283D0:Mf3:H2800283B0:I1026,H280028400,H2800284E0 +280028400:lI115|H280028410 +280028410:lI117|H280028420 +280028420:lI112|H280028430 +280028430:lI101|H280028440 +280028440:lI114|H280028450 +280028450:lI118|H280028460 +280028460:lI105|H280028470 +280028470:lI115|H280028480 +280028480:lI111|H280028490 +280028490:lI114|H2800284A0 +2800284A0:lI46|H2800284B0 +2800284B0:lI101|H2800284C0 +2800284C0:lI114|H2800284D0 +2800284D0:lI108|N +2800284E0:t3:AA:supervisor,A1A:terminate_dynamic_children,I1 +280028500:t3:A4:line,A4:file,A3:mfa +280028520:Mf3:H280028500:I398,H280028550,H280028630 +280028550:lI115|H280028560 +280028560:lI117|H280028570 +280028570:lI112|H280028580 +280028580:lI101|H280028590 +280028590:lI114|H2800285A0 +2800285A0:lI118|H2800285B0 +2800285B0:lI105|H2800285C0 +2800285C0:lI115|H2800285D0 +2800285D0:lI111|H2800285E0 +2800285E0:lI114|H2800285F0 +2800285F0:lI46|H280028600 +280028600:lI101|H280028610 +280028610:lI114|H280028620 +280028620:lI108|N +280028630:t3:AA:supervisor,AE:start_children,I2 +280028650:lI108|N +280028660:lI114|H280028650 +280028670:lI101|H280028660 +280028680:lI46|H280028670 +280028690:lI114|H280028680 +2800286A0:lI111|H280028690 +2800286B0:lI115|H2800286A0 +2800286C0:lI105|H2800286B0 +2800286D0:lI118|H2800286C0 +2800286E0:lI114|H2800286D0 +2800286F0:lI101|H2800286E0 +280028700:lI112|H2800286F0 +280028710:lI117|H280028700 +280028720:lI115|H280028710 +280028730:E4E:g3AAAABMAnoLCyY6L4XTypzaMLAOL78AAAACAAAAAHcKc3VwZXJ2aXNvcmECYgPQWFlYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +280028758:E4E:g3AAAABMA3oLCyY6L4XTypzaMLAOL78AAAADAAAAAHcKc3VwZXJ2aXNvcmEDYgPQWFlYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +280028780:t2:A5:label,A6:report +280028798:E4E:g3AAAABMAnoLCyY6L4XTypzaMLAOL78AAAAEAAAAAHcKc3VwZXJ2aXNvcmEEYgPQWFlYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +2800287C0:E4E:g3AAAABMAnoLCyY6L4XTypzaMLAOL78AAAAIAAAAAHcKc3VwZXJ2aXNvcmEIYgPQWFlYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +2800287E8:t4:A8:strategy,A6:period,A9:intensity,AD:auto_shutdown +280028810:t7:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules,AB:significant +280028850:E4E:g3AAAABMAXoLCyY6L4XTypzaMLAOL78AAAALAAAAAHcKc3VwZXJ2aXNvcmELYgPQWFlYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +280028878:t4:AB:chars_limit,A5:depth,A8:encoding,AB:single_line +280042AD8:lA5:flush|N +280042AE8:t2:A5:error,A7:timeout +280042B00:lA4:link|H280042B10 +280042B10:lA7:monitor|N +280042B20:lI65|H280042B30 +280042B30:lI114|H280042B40 +280042B40:lI103|H280042B50 +280042B50:lI117|H280042B60 +280042B60:lI109|H280042B70 +280042B70:lI101|H280042B80 +280042B80:lI110|H280042B90 +280042B90:lI116|H280042BA0 +280042BA0:lI95|H280042BB0 +280042BB0:lI95|N +280042BC0:t3:A8:proc_lib,A6:init_p,I5 +280042BE0:t3:A9:gen_event,A7:init_it,I6 +280042C00:Mf0:H280010188: +280042C18:t2:A8:proc_lib,A5:crash +280042C30:t4:AC:error_logger,A6:domain,A10:logger_formatter,A9:report_cb +280042C58:Mf4:H280042C30:H280042CC8,H280042C90,H280042D00,H280042DE0 +280042C90:lA3:otp|H280042CA0 +280042CA0:lA4:sasl|N +280042CB0:t2:A3:tag,A4:type +280042CC8:Mf2:H280042CB0:AC:error_report,AC:crash_report +280042CF0:t1:A5:title +280042D00:Mf1:H280042CF0:H280042D20 +280042D20:lI67|H280042D30 +280042D30:lI82|H280042D40 +280042D40:lI65|H280042D50 +280042D50:lI83|H280042D60 +280042D60:lI72|H280042D70 +280042D70:lI32|H280042D80 +280042D80:lI82|H280042D90 +280042D90:lI69|H280042DA0 +280042DA0:lI80|H280042DB0 +280042DB0:lI79|H280042DC0 +280042DC0:lI82|H280042DD0 +280042DD0:lI84|N +280042DE0:E19:g3F3CHByb2NfbGlidwlyZXBvcnRfY2JhAg== +280042E08:t3:A4:line,A4:file,A3:mfa +280042E28:Mf3:H280042E08:I584,H280042E58,H280042F18 +280042E58:lI112|H280042E68 +280042E68:lI114|H280042E78 +280042E78:lI111|H280042E88 +280042E88:lI99|H280042E98 +280042E98:lI95|H280042EA8 +280042EA8:lI108|H280042EB8 +280042EB8:lI105|H280042EC8 +280042EC8:lI98|H280042ED8 +280042ED8:lI46|H280042EE8 +280042EE8:lI101|H280042EF8 +280042EF8:lI114|H280042F08 +280042F08:lI108|N +280042F18:t3:A8:proc_lib,AC:crash_report,I4 +280042F38:t2:A9:ancestors,N +280042F50:t2:AA:dictionary,N +280042F68:t2:A9:trap_exit,A5:false +280042F80:t2:AF:registered_name,N +280042F98:t4:AB:chars_limit,A5:depth,A8:encoding,AB:single_line +280042FC0:Mf4:H280042F98:A9:unlimited,A9:unlimited,A4:utf8,A5:false +280042FF8:lI32|H280043008 +280043008:lI32|N +280043018:lI32|N +280043028:lI126|H280043038 +280043038:lI116|H280043048 +280043048:lI115|N +280043058:lI126|H280043068 +280043068:lI115|H280043078 +280043078:lI99|H280043088 +280043088:lI114|H280043098 +280043098:lI97|H2800430A8 +2800430A8:lI115|H2800430B8 +2800430B8:lI104|H2800430C8 +2800430C8:lI101|H2800430D8 +2800430D8:lI114|H2800430E8 +2800430E8:lI58|N +2800430F8:lI48|N +280043108:lI110|H280043118 +280043118:lI101|H280043128 +280043128:lI105|H280043138 +280043138:lI103|H280043148 +280043148:lI104|H280043158 +280043158:lI98|H280043168 +280043168:lI111|H280043178 +280043178:lI117|H280043188 +280043188:lI114|H280043198 +280043198:lI115|H2800431A8 +2800431A8:lI58|H2800431B8 +2800431B8:lI32|H2800431C8 +2800431C8:lI126|N +2800431D8:lI110|H2800431E8 +2800431E8:lI101|H2800431F8 +2800431F8:lI105|H280043208 +280043208:lI103|H280043218 +280043218:lI104|H280043228 +280043228:lI98|H280043238 +280043238:lI111|H280043248 +280043248:lI117|H280043258 +280043258:lI114|H280043268 +280043268:lI115|H280043278 +280043278:lI58|N +280043288:lI110|H280043298 +280043298:lI101|H2800432A8 +2800432A8:lI105|H2800432B8 +2800432B8:lI103|H2800432C8 +2800432C8:lI104|H2800432D8 +2800432D8:lI98|H2800432E8 +2800432E8:lI111|H2800432F8 +2800432F8:lI117|H280043308 +280043308:lI114|H280043318 +280043318:lI58|N +280043328:lI58|H280043338 +280043338:lI32|N +280043348:lI32|H280043358 +280043358:lI32|H280043368 +280043368:lI32|H280043378 +280043378:lI32|N +280043388:lI105|H280043398 +280043398:lI110|H2800433A8 +2800433A8:lI105|H2800433B8 +2800433B8:lI116|H2800433C8 +2800433C8:lI105|H2800433D8 +2800433D8:lI97|H2800433E8 +2800433E8:lI108|H2800433F8 +2800433F8:lI32|H280043408 +280043408:lI99|H280043418 +280043418:lI97|H280043428 +280043428:lI108|H280043438 +280043438:lI108|H280043448 +280043448:lI58|H280043458 +280043458:lI32|N +280043468:lI112|N +280043478:lI80|N +280043488:lI59|H280043498 +280043498:lI32|N +2800434A8:lI44|H2800434B8 +2800434B8:lI32|N +2800434C8:lI116|N +2800434D8:lI10|N +2800434E8:lI108|N +2800434F8:lI114|H2800434E8 +280043508:lI101|H2800434F8 +280043518:lI46|H280043508 +280043528:lI98|H280043518 +280043538:lI105|H280043528 +280043548:lI108|H280043538 +280043558:lI95|H280043548 +280043568:lI99|H280043558 +280043578:lI111|H280043568 +280043588:lI114|H280043578 +280043598:lI112|H280043588 +2800435A8:t2:A5:label,A6:report +2800435C0:t4:AB:chars_limit,A5:depth,A8:encoding,AB:single_line +2800435E8:E4C:g3AAAABKAWgua8tdqRXVh3ClT3T2+hwAAAAAAAAAAHcIcHJvY19saWJhAGIDQXNeWHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA== +280043610:E4C:g3AAAABKA2gua8tdqRXVh3ClT3T2+hwAAAABAAAAAHcIcHJvY19saWJhAWIDQXNeWHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA== +280043650:t2:A5:local,AA:kernel_sup +280043668:t3:A8:strategy,A6:period,A9:intensity +280043688:Mf3:H280043668:AB:one_for_one,I3600,I4 +2800436B8:lH280043700|N +2800436C8:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280043700:Mf6:H2800436C8:AD:file_server_2,A9:permanent,I2000,H280043788,A6:worker,H280043748 +280043748:lA4:file|H280043758 +280043758:lAB:file_server|H280043768 +280043768:lAE:file_io_server|H280043778 +280043778:lA9:prim_file|N +280043788:t3:AB:file_server,AA:start_link,N +2800437A8:lH2800437B8|N +2800437B8:lI109|H2800437C8 +2800437C8:lI105|H2800437D8 +2800437D8:lI110|H2800437E8 +2800437E8:lI105|H2800437F8 +2800437F8:lI109|H280043808 +280043808:lI97|H280043818 +280043818:lI108|N +280043828:lH2800438B0|H280043838 +280043838:lH280043960|H280043848 +280043848:lH280043A10|H280043858 +280043858:lH280043AC0|H280043868 +280043868:lH280043B70|N +280043878:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +2800438B0:Mf6:H280043878:A4:user,A9:temporary,I2000,H280043908,AA:supervisor,H2800438F8 +2800438F8:lA8:user_sup|N +280043908:t3:A8:user_sup,A5:start,N +280043928:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280043960:Mf6:H280043928:AA:logger_sup,A9:permanent,A8:infinity,H2800439B8,AA:supervisor,H2800439A8 +2800439A8:lAA:logger_sup|N +2800439B8:t3:AA:logger_sup,AA:start_link,N +2800439D8:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280043A10:Mf6:H2800439D8:AD:kernel_config,A9:permanent,I2000,H280043A68,A6:worker,H280043A58 +280043A58:lAD:kernel_config|N +280043A68:t3:AD:kernel_config,AA:start_link,N +280043A88:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280043AC0:Mf6:H280043A88:AB:kernel_refc,A9:permanent,I2000,H280043B18,A6:worker,H280043B08 +280043B08:lAB:kernel_refc|N +280043B18:t3:AB:kernel_refc,AA:start_link,N +280043B38:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280043B70:Mf6:H280043B38:AF:kernel_safe_sup,A9:permanent,A8:infinity,H280043BC8,AA:supervisor,H280043BB8 +280043BB8:lA6:kernel|N +280043BC8:t3:AA:supervisor,AA:start_link,H280043BE8 +280043BE8:lH280043C18|H280043BF8 +280043BF8:lA6:kernel|H280043C08 +280043C08:lA4:safe|N +280043C18:t2:A5:local,AF:kernel_safe_sup +280043C30:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280043C68:Mf6:H280043C30:A7:on_load,A9:transient,I2000,H280043CC0,A6:worker,H280043CB0 +280043CB0:lA6:kernel|N +280043CC0:t3:A8:proc_lib,AA:start_link,H280043CE0 +280043CE0:lA6:kernel|H280043CF0 +280043CF0:lA4:init|H280043D00 +280043D00:lH280043D10|N +280043D10:lA7:on_load|N +280043D20:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280043D58:Mf6:H280043D20:AE:standard_error,A9:temporary,I2000,H280043DB0,AA:supervisor,H280043DA0 +280043DA0:lAE:standard_error|N +280043DB0:t3:AE:standard_error,AA:start_link,N +280043DD0:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280043E08:Mf6:H280043DD0:AB:code_server,A9:permanent,I2000,H280043E60,A6:worker,H280043E50 +280043E50:lA4:code|N +280043E60:t3:A4:code,AA:start_link,N +280043E80:t3:A8:strategy,A6:period,A9:intensity +280043EA0:Mf3:H280043E80:AB:one_for_all,I1,I0 +280043ED0:t2:A2:ok,A5:false +280043EE8:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280043F20:Mf6:H280043EE8:A11:erl_signal_server,A9:permanent,I2000,H280043F68,A6:worker,A7:dynamic +280043F68:t3:A9:gen_event,AA:start_link,H280043F88 +280043F88:lH280043F98|N +280043F98:t2:A5:local,A11:erl_signal_server +280043FB0:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280043FE8:Mf6:H280043FB0:A7:inet_db,A9:permanent,I2000,H280044040,A6:worker,H280044030 +280044030:lA7:inet_db|N +280044040:t3:A7:inet_db,AA:start_link,N +280044060:lH2800440B8|H280044070 +280044070:lH280044168|N +280044080:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +2800440B8:Mf6:H280044080:A7:net_sup,A9:permanent,A8:infinity,H280044110,AA:supervisor,H280044100 +280044100:lA10:erl_distribution|N +280044110:t3:A10:erl_distribution,AA:start_link,N +280044130:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280044168:Mf6:H280044130:AC:global_group,A9:permanent,I2000,H2800441C0,A6:worker,H2800441B0 +2800441B0:lAC:global_group|N +2800441C0:t3:AC:global_group,AA:start_link,N +2800441E0:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280044218:Mf6:H2800441E0:A12:global_name_server,A9:permanent,I2000,H280044270,A6:worker,H280044260 +280044260:lA6:global|N +280044270:t3:A6:global,AA:start_link,N +280044290:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +2800442C8:Mf6:H280044290:A3:rex,A9:permanent,I2000,H280044320,A6:worker,H280044310 +280044310:lA3:rpc|N +280044320:t3:A3:rpc,AA:start_link,N +280044340:lH280044388|N +280044350:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280044388:Mf6:H280044350:A7:dist_ac,A9:permanent,I2000,H2800443E0,A6:worker,H2800443D0 +2800443D0:lA7:dist_ac|N +2800443E0:t3:A7:dist_ac,AA:start_link,N +280044400:t2:A2:ok,A4:true +280044418:Mf0:H280010188: +280044430:lAF:erl_boot_server|N +280044440:lH280044498|H280044450 +280044450:lH280044548|N +280044460:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280044498:Mf6:H280044460:AF:disk_log_server,A9:permanent,I2000,H2800444F0,A6:worker,H2800444E0 +2800444E0:lAF:disk_log_server|N +2800444F0:t3:AF:disk_log_server,AA:start_link,N +280044510:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280044548:Mf6:H280044510:AC:disk_log_sup,A9:permanent,I1000,H2800445A0,AA:supervisor,H280044590 +280044590:lAC:disk_log_sup|N +2800445A0:t3:AC:disk_log_sup,AA:start_link,N +2800445C0:lH280044608|N +2800445D0:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280044608:Mf6:H2800445D0:A2:pg,A9:permanent,I1000,H280044660,A6:worker,H280044650 +280044650:lA2:pg|N +280044660:t3:A2:pg,AA:start_link,N +280044680:lH2800446C8|N +280044690:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +2800446C8:Mf6:H280044690:AC:timer_server,A9:permanent,I1000,H280044720,A6:worker,H280044710 +280044710:lA5:timer|N +280044720:t3:A5:timer,AA:start_link,N +280044740:lH280044788|N +280044750:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280044788:Mf6:H280044750:A12:erl_compile_server,A9:permanent,I2000,H2800447E0,A6:worker,H2800447D0 +2800447D0:lA12:erl_compile_server|N +2800447E0:t3:A12:erl_compile_server,AA:start_link,N +280044800:lI68|H280044810 +280044810:lI105|H280044820 +280044820:lI115|H280044830 +280044830:lI116|H280044840 +280044840:lI114|H280044850 +280044850:lI105|H280044860 +280044860:lI98|H280044870 +280044870:lI117|H280044880 +280044880:lI116|H280044890 +280044890:lI105|H2800448A0 +2800448A0:lI111|H2800448B0 +2800448B0:lI110|H2800448C0 +2800448C0:lI32|H2800448D0 +2800448D0:lI110|H2800448E0 +2800448E0:lI111|H2800448F0 +2800448F0:lI116|H280044900 +280044900:lI32|H280044910 +280044910:lI99|H280044920 +280044920:lI104|H280044930 +280044930:lI97|H280044940 +280044940:lI110|H280044950 +280044950:lI103|H280044960 +280044960:lI101|H280044970 +280044970:lI100|H280044980 +280044980:lI58|H280044990 +280044990:lI32|H2800449A0 +2800449A0:lI78|H2800449B0 +2800449B0:lI111|H2800449C0 +2800449C0:lI116|H2800449D0 +2800449D0:lI32|H2800449E0 +2800449E0:lI97|H2800449F0 +2800449F0:lI108|H280044A00 +280044A00:lI108|H280044A10 +280044A10:lI111|H280044A20 +280044A20:lI119|H280044A30 +280044A30:lI101|H280044A40 +280044A40:lI100|H280044A50 +280044A50:lI32|H280044A60 +280044A60:lI116|H280044A70 +280044A70:lI111|H280044A80 +280044A80:lI32|H280044A90 +280044A90:lI114|H280044AA0 +280044AA0:lI101|H280044AB0 +280044AB0:lI109|H280044AC0 +280044AC0:lI111|H280044AD0 +280044AD0:lI118|H280044AE0 +280044AE0:lI101|H280044AF0 +280044AF0:lI32|H280044B00 +280044B00:lI116|H280044B10 +280044B10:lI104|H280044B20 +280044B20:lI101|H280044B30 +280044B30:lI32|H280044B40 +280044B40:lI100|H280044B50 +280044B50:lI105|H280044B60 +280044B60:lI115|H280044B70 +280044B70:lI116|H280044B80 +280044B80:lI114|H280044B90 +280044B90:lI105|H280044BA0 +280044BA0:lI98|H280044BB0 +280044BB0:lI117|H280044BC0 +280044BC0:lI116|H280044BD0 +280044BD0:lI105|H280044BE0 +280044BE0:lI111|H280044BF0 +280044BF0:lI110|H280044C00 +280044C00:lI32|H280044C10 +280044C10:lI112|H280044C20 +280044C20:lI97|H280044C30 +280044C30:lI114|H280044C40 +280044C40:lI97|H280044C50 +280044C50:lI109|H280044C60 +280044C60:lI101|H280044C70 +280044C70:lI116|H280044C80 +280044C80:lI101|H280044C90 +280044C90:lI114|H280044CA0 +280044CA0:lI46|N +280044CB0:t2:A5:error,H280044CC8 +280044CC8:t2:A18:distribution_not_changed,H280044CE0 +280044CE0:lI78|H280044CF0 +280044CF0:lI111|H280044D00 +280044D00:lI116|H280044D10 +280044D10:lI32|H280044D20 +280044D20:lI97|H280044D30 +280044D30:lI108|H280044D40 +280044D40:lI108|H280044D50 +280044D50:lI111|H280044D60 +280044D60:lI119|H280044D70 +280044D70:lI101|H280044D80 +280044D80:lI100|H280044D90 +280044D90:lI32|H280044DA0 +280044DA0:lI116|H280044DB0 +280044DB0:lI111|H280044DC0 +280044DC0:lI32|H280044DD0 +280044DD0:lI114|H280044DE0 +280044DE0:lI101|H280044DF0 +280044DF0:lI109|H280044E00 +280044E00:lI111|H280044E10 +280044E10:lI118|H280044E20 +280044E20:lI101|H280044E30 +280044E30:lI32|H280044E40 +280044E40:lI116|H280044E50 +280044E50:lI104|H280044E60 +280044E60:lI101|H280044E70 +280044E70:lI32|H280044E80 +280044E80:lI39|H280044E90 +280044E90:lI100|H280044EA0 +280044EA0:lI105|H280044EB0 +280044EB0:lI115|H280044EC0 +280044EC0:lI116|H280044ED0 +280044ED0:lI114|H280044EE0 +280044EE0:lI105|H280044EF0 +280044EF0:lI98|H280044F00 +280044F00:lI117|H280044F10 +280044F10:lI116|H280044F20 +280044F20:lI101|H280044F30 +280044F30:lI100|H280044F40 +280044F40:lI39|H280044F50 +280044F50:lI32|H280044F60 +280044F60:lI112|H280044F70 +280044F70:lI97|H280044F80 +280044F80:lI114|H280044F90 +280044F90:lI97|H280044FA0 +280044FA0:lI109|H280044FB0 +280044FB0:lI101|H280044FC0 +280044FC0:lI116|H280044FD0 +280044FD0:lI101|H280044FE0 +280044FE0:lI114|N +280044FF0:lI68|H280045000 +280045000:lI105|H280045010 +280045010:lI115|H280045020 +280045020:lI116|H280045030 +280045030:lI114|H280045040 +280045040:lI105|H280045050 +280045050:lI98|H280045060 +280045060:lI117|H280045070 +280045070:lI116|H280045080 +280045080:lI105|H280045090 +280045090:lI111|H2800450A0 +2800450A0:lI110|H2800450B0 +2800450B0:lI32|H2800450C0 +2800450C0:lI110|H2800450D0 +2800450D0:lI111|H2800450E0 +2800450E0:lI116|H2800450F0 +2800450F0:lI32|H280045100 +280045100:lI99|H280045110 +280045110:lI104|H280045120 +280045120:lI97|H280045130 +280045130:lI110|H280045140 +280045140:lI103|H280045150 +280045150:lI101|H280045160 +280045160:lI100|H280045170 +280045170:lI58|H280045180 +280045180:lI32|H280045190 +280045190:lI78|H2800451A0 +2800451A0:lI111|H2800451B0 +2800451B0:lI116|H2800451C0 +2800451C0:lI32|H2800451D0 +2800451D0:lI97|H2800451E0 +2800451E0:lI108|H2800451F0 +2800451F0:lI108|H280045200 +280045200:lI111|H280045210 +280045210:lI119|H280045220 +280045220:lI101|H280045230 +280045230:lI100|H280045240 +280045240:lI32|H280045250 +280045250:lI116|H280045260 +280045260:lI111|H280045270 +280045270:lI32|H280045280 +280045280:lI97|H280045290 +280045290:lI100|H2800452A0 +2800452A0:lI100|H2800452B0 +2800452B0:lI32|H2800452C0 +2800452C0:lI116|H2800452D0 +2800452D0:lI104|H2800452E0 +2800452E0:lI101|H2800452F0 +2800452F0:lI32|H280045300 +280045300:lI39|H280045310 +280045310:lI100|H280045320 +280045320:lI105|H280045330 +280045330:lI115|H280045340 +280045340:lI116|H280045350 +280045350:lI114|H280045360 +280045360:lI105|H280045370 +280045370:lI98|H280045380 +280045380:lI117|H280045390 +280045390:lI116|H2800453A0 +2800453A0:lI101|H2800453B0 +2800453B0:lI100|H2800453C0 +2800453C0:lI39|H2800453D0 +2800453D0:lI32|H2800453E0 +2800453E0:lI112|H2800453F0 +2800453F0:lI97|H280045400 +280045400:lI114|H280045410 +280045410:lI97|H280045420 +280045420:lI109|H280045430 +280045430:lI101|H280045440 +280045440:lI116|H280045450 +280045450:lI101|H280045460 +280045460:lI114|H280045470 +280045470:lI46|N +280045480:t2:A5:error,H280045498 +280045498:t2:A18:distribution_not_changed,H2800454B0 +2800454B0:lI78|H2800454C0 +2800454C0:lI111|H2800454D0 +2800454D0:lI116|H2800454E0 +2800454E0:lI32|H2800454F0 +2800454F0:lI97|H280045500 +280045500:lI108|H280045510 +280045510:lI108|H280045520 +280045520:lI111|H280045530 +280045530:lI119|H280045540 +280045540:lI101|H280045550 +280045550:lI100|H280045560 +280045560:lI32|H280045570 +280045570:lI116|H280045580 +280045580:lI111|H280045590 +280045590:lI32|H2800455A0 +2800455A0:lI97|H2800455B0 +2800455B0:lI100|H2800455C0 +2800455C0:lI100|H2800455D0 +2800455D0:lI32|H2800455E0 +2800455E0:lI116|H2800455F0 +2800455F0:lI104|H280045600 +280045600:lI101|H280045610 +280045610:lI32|H280045620 +280045620:lI39|H280045630 +280045630:lI100|H280045640 +280045640:lI105|H280045650 +280045650:lI115|H280045660 +280045660:lI116|H280045670 +280045670:lI114|H280045680 +280045680:lI105|H280045690 +280045690:lI98|H2800456A0 +2800456A0:lI117|H2800456B0 +2800456B0:lI116|H2800456C0 +2800456C0:lI101|H2800456D0 +2800456D0:lI100|H2800456E0 +2800456E0:lI39|H2800456F0 +2800456F0:lI32|H280045700 +280045700:lI112|H280045710 +280045710:lI97|H280045720 +280045720:lI114|H280045730 +280045730:lI97|H280045740 +280045740:lI109|H280045750 +280045750:lI101|H280045760 +280045760:lI116|H280045770 +280045770:lI101|H280045780 +280045780:lI114|N +280045790:lI108|N +2800457A0:lI114|H280045790 +2800457B0:lI101|H2800457A0 +2800457C0:lI46|H2800457B0 +2800457D0:lI108|H2800457C0 +2800457E0:lI101|H2800457D0 +2800457F0:lI110|H2800457E0 +280045800:lI114|H2800457F0 +280045810:lI101|H280045800 +280045820:lI107|H280045810 +280045830:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280046698:lI66|H2800466A8 +2800466A8:lI97|H2800466B8 +2800466B8:lI100|H2800466C8 +2800466C8:lI32|H2800466D8 +2800466D8:lI101|H2800466E8 +2800466E8:lI110|H2800466F8 +2800466F8:lI118|H280046708 +280046708:lI105|H280046718 +280046718:lI114|H280046728 +280046728:lI111|H280046738 +280046738:lI110|H280046748 +280046748:lI109|H280046758 +280046758:lI101|H280046768 +280046768:lI110|H280046778 +280046778:lI116|H280046788 +280046788:lI32|H280046798 +280046798:lI118|H2800467A8 +2800467A8:lI97|H2800467B8 +2800467B8:lI114|H2800467C8 +2800467C8:lI105|H2800467D8 +2800467D8:lI97|H2800467E8 +2800467E8:lI98|H2800467F8 +2800467F8:lI108|H280046808 +280046808:lI101|H280046818 +280046818:lI58|H280046828 +280046828:lI32|H280046838 +280046838:lI126|H280046848 +280046848:lI116|H280046858 +280046858:lI112|H280046868 +280046868:lI32|H280046878 +280046878:lI32|H280046888 +280046888:lI65|H280046898 +280046898:lI112|H2800468A8 +2800468A8:lI112|H2800468B8 +2800468B8:lI108|H2800468C8 +2800468C8:lI105|H2800468D8 +2800468D8:lI99|H2800468E8 +2800468E8:lI97|H2800468F8 +2800468F8:lI116|H280046908 +280046908:lI105|H280046918 +280046918:lI111|H280046928 +280046928:lI110|H280046938 +280046938:lI58|H280046948 +280046948:lI32|H280046958 +280046958:lI126|H280046968 +280046968:lI112|N +280046978:lH280046988|N +280046988:t3:H2800469A8,N,H280046A30 +2800469A8:t2:H2800469C0,H2800469D8 +2800469C0:t2:A6:loaded,A2:$1 +2800469D8:tA:A4:appl,A1:_,A1:_,A2:$2,A1:_,A2:$3,A1:_,A1:_,A1:_,A1:_ +280046A30:lH280046A40|N +280046A40:t1:H280046A50 +280046A50:t3:A2:$1,A2:$2,A2:$3 +280046A70:t2:A12:application_master,A2:$1 +280046A88:t2:H280046AA0,H280046AB8 +280046AA0:t2:A6:loaded,A2:$1 +280046AB8:tA:A4:appl,A1:_,H280046B10,A1:_,A1:_,A1:_,A1:_,A1:_,A1:_,A1:_ +280046B10:t8:A9:appl_data,A1:_,A1:_,A1:_,A1:_,A2:$2,A1:_,A1:_ +280046B58:t3:A16:application_controller,A5:start,I1 +280046B78:lI105|H280046B88 +280046B88:lI110|H280046B98 +280046B98:lI118|H280046BA8 +280046BA8:lI97|H280046BB8 +280046BB8:lI108|H280046BC8 +280046BC8:lI105|H280046BD8 +280046BD8:lI100|H280046BE8 +280046BE8:lI32|H280046BF8 +280046BF8:lI99|H280046C08 +280046C08:lI111|H280046C18 +280046C18:lI110|H280046C28 +280046C28:lI102|H280046C38 +280046C38:lI105|H280046C48 +280046C48:lI103|H280046C58 +280046C58:lI32|H280046C68 +280046C68:lI100|H280046C78 +280046C78:lI97|H280046C88 +280046C88:lI116|H280046C98 +280046C98:lI97|H280046CA8 +280046CA8:lI58|H280046CB8 +280046CB8:lI32|H280046CC8 +280046CC8:lI126|H280046CD8 +280046CD8:lI116|H280046CE8 +280046CE8:lI115|N +280046CF8:lA3:set|H280046D08 +280046D08:lA6:public|H280046D18 +280046D18:lAB:named_table|H280046D28 +280046D28:lH280046D38|N +280046D38:t2:A10:read_concurrency,A4:true +280046D50:t2:A5:local,A16:application_controller +280046D68:lI101|H280046D78 +280046D78:lI114|H280046D88 +280046D88:lI114|H280046D98 +280046D98:lI111|H280046DA8 +280046DA8:lI114|H280046DB8 +280046DB8:lI32|H280046DC8 +280046DC8:lI105|H280046DD8 +280046DD8:lI110|H280046DE8 +280046DE8:lI32|H280046DF8 +280046DF8:lI99|H280046E08 +280046E08:lI111|H280046E18 +280046E18:lI110|H280046E28 +280046E28:lI102|H280046E38 +280046E38:lI105|H280046E48 +280046E48:lI103|H280046E58 +280046E58:lI32|H280046E68 +280046E68:lI114|H280046E78 +280046E78:lI101|H280046E88 +280046E88:lI97|H280046E98 +280046E98:lI100|H280046EA8 +280046EA8:lI32|H280046EB8 +280046EB8:lI102|H280046EC8 +280046EC8:lI114|H280046ED8 +280046ED8:lI111|H280046EE8 +280046EE8:lI109|H280046EF8 +280046EF8:lI32|H280046F08 +280046F08:lI102|H280046F18 +280046F18:lI105|H280046F28 +280046F28:lI108|H280046F38 +280046F38:lI101|H280046F48 +280046F48:lI32|H280046F58 +280046F58:lI100|H280046F68 +280046F68:lI101|H280046F78 +280046F78:lI115|H280046F88 +280046F88:lI99|H280046F98 +280046F98:lI114|H280046FA8 +280046FA8:lI105|H280046FB8 +280046FB8:lI112|H280046FC8 +280046FC8:lI116|H280046FD8 +280046FD8:lI111|H280046FE8 +280046FE8:lI114|H280046FF8 +280046FF8:lI32|H280047008 +280047008:lI126|H280047018 +280047018:lI116|H280047028 +280047028:lI112|H280047038 +280047038:lI32|H280047048 +280047048:lI40|H280047058 +280047058:lI126|H280047068 +280047068:lI119|H280047078 +280047078:lI41|H280047088 +280047088:lI58|H280047098 +280047098:lI32|H2800470A8 +2800470A8:lI126|H2800470B8 +2800470B8:lI116|H2800470C8 +2800470C8:lI115|N +2800470D8:lI101|H2800470E8 +2800470E8:lI114|H2800470F8 +2800470F8:lI114|H280047108 +280047108:lI111|H280047118 +280047118:lI114|H280047128 +280047128:lI32|H280047138 +280047138:lI105|H280047148 +280047148:lI110|H280047158 +280047158:lI32|H280047168 +280047168:lI99|H280047178 +280047178:lI111|H280047188 +280047188:lI110|H280047198 +280047198:lI102|H2800471A8 +2800471A8:lI105|H2800471B8 +2800471B8:lI103|H2800471C8 +2800471C8:lI32|H2800471D8 +2800471D8:lI102|H2800471E8 +2800471E8:lI105|H2800471F8 +2800471F8:lI108|H280047208 +280047208:lI101|H280047218 +280047218:lI32|H280047228 +280047228:lI126|H280047238 +280047238:lI116|H280047248 +280047248:lI112|H280047258 +280047258:lI32|H280047268 +280047268:lI40|H280047278 +280047278:lI126|H280047288 +280047288:lI119|H280047298 +280047298:lI41|H2800472A8 +2800472A8:lI58|H2800472B8 +2800472B8:lI32|H2800472C8 +2800472C8:lI126|H2800472D8 +2800472D8:lI116|H2800472E8 +2800472E8:lI115|N +2800472F8:lI100|H280047308 +280047308:lI117|H280047318 +280047318:lI112|H280047328 +280047328:lI108|H280047338 +280047338:lI105|H280047348 +280047348:lI99|H280047358 +280047358:lI97|H280047368 +280047368:lI116|H280047378 +280047378:lI101|H280047388 +280047388:lI32|H280047398 +280047398:lI97|H2800473A8 +2800473A8:lI112|H2800473B8 +2800473B8:lI112|H2800473C8 +2800473C8:lI108|H2800473D8 +2800473D8:lI105|H2800473E8 +2800473E8:lI99|H2800473F8 +2800473F8:lI97|H280047408 +280047408:lI116|H280047418 +280047418:lI105|H280047428 +280047428:lI111|H280047438 +280047438:lI110|H280047448 +280047448:lI32|H280047458 +280047458:lI99|H280047468 +280047468:lI111|H280047478 +280047478:lI110|H280047488 +280047488:lI102|H280047498 +280047498:lI105|H2800474A8 +2800474A8:lI103|H2800474B8 +2800474B8:lI58|H2800474C8 +2800474C8:lI32|N +2800474D8:lI126|H2800474E8 +2800474E8:lI116|H2800474F8 +2800474F8:lI112|N +280047508:lI59|H280047518 +280047518:lI32|H280047528 +280047528:lI97|H280047538 +280047538:lI112|H280047548 +280047548:lI112|H280047558 +280047558:lI108|H280047568 +280047568:lI105|H280047578 +280047578:lI99|H280047588 +280047588:lI97|H280047598 +280047598:lI116|H2800475A8 +2800475A8:lI105|H2800475B8 +2800475B8:lI111|H2800475C8 +2800475C8:lI110|H2800475D8 +2800475D8:lI32|H2800475E8 +2800475E8:lI110|H2800475F8 +2800475F8:lI97|H280047608 +280047608:lI109|H280047618 +280047618:lI101|H280047628 +280047628:lI32|H280047638 +280047638:lI109|H280047648 +280047648:lI117|H280047658 +280047658:lI115|H280047668 +280047668:lI116|H280047678 +280047678:lI32|H280047688 +280047688:lI98|H280047698 +280047698:lI101|H2800476A8 +2800476A8:lI32|H2800476B8 +2800476B8:lI97|H2800476C8 +2800476C8:lI110|H2800476D8 +2800476D8:lI32|H2800476E8 +2800476E8:lI97|H2800476F8 +2800476F8:lI116|H280047708 +280047708:lI111|H280047718 +280047718:lI109|N +280047728:lI97|H280047738 +280047738:lI112|H280047748 +280047748:lI112|H280047758 +280047758:lI108|H280047768 +280047768:lI105|H280047778 +280047778:lI99|H280047788 +280047788:lI97|H280047798 +280047798:lI116|H2800477A8 +2800477A8:lI105|H2800477B8 +2800477B8:lI111|H2800477C8 +2800477C8:lI110|H2800477D8 +2800477D8:lI58|H2800477E8 +2800477E8:lI32|N +2800477F8:lI59|H280047808 +280047808:lI32|H280047818 +280047818:lI112|H280047828 +280047828:lI97|H280047838 +280047838:lI114|H280047848 +280047848:lI97|H280047858 +280047858:lI109|H280047868 +280047868:lI101|H280047878 +280047878:lI116|H280047888 +280047888:lI101|H280047898 +280047898:lI114|H2800478A8 +2800478A8:lI115|H2800478B8 +2800478B8:lI32|H2800478C8 +2800478C8:lI109|H2800478D8 +2800478D8:lI117|H2800478E8 +2800478E8:lI115|H2800478F8 +2800478F8:lI116|H280047908 +280047908:lI32|H280047918 +280047918:lI98|H280047928 +280047928:lI101|H280047938 +280047938:lI32|H280047948 +280047948:lI97|H280047958 +280047958:lI32|H280047968 +280047968:lI108|H280047978 +280047978:lI105|H280047988 +280047988:lI115|H280047998 +280047998:lI116|N +2800479A8:lI105|H2800479B8 +2800479B8:lI110|H2800479C8 +2800479C8:lI118|H2800479D8 +2800479D8:lI97|H2800479E8 +2800479E8:lI108|H2800479F8 +2800479F8:lI105|H280047A08 +280047A08:lI100|H280047A18 +280047A18:lI32|H280047A28 +280047A28:lI97|H280047A38 +280047A38:lI112|H280047A48 +280047A48:lI112|H280047A58 +280047A58:lI108|H280047A68 +280047A68:lI105|H280047A78 +280047A78:lI99|H280047A88 +280047A88:lI97|H280047A98 +280047A98:lI116|H280047AA8 +280047AA8:lI105|H280047AB8 +280047AB8:lI111|H280047AC8 +280047AC8:lI110|H280047AD8 +280047AD8:lI32|H280047AE8 +280047AE8:lI99|H280047AF8 +280047AF8:lI111|H280047B08 +280047B08:lI110|H280047B18 +280047B18:lI102|H280047B28 +280047B28:lI105|H280047B38 +280047B38:lI103|H280047B48 +280047B48:lI58|H280047B58 +280047B58:lI32|N +280047B68:t2:A5:error,H280047B80 +280047B80:lI99|H280047B90 +280047B90:lI111|H280047BA0 +280047BA0:lI110|H280047BB0 +280047BB0:lI102|H280047BC0 +280047BC0:lI105|H280047BD0 +280047BD0:lI103|H280047BE0 +280047BE0:lI117|H280047BF0 +280047BF0:lI114|H280047C00 +280047C00:lI97|H280047C10 +280047C10:lI116|H280047C20 +280047C20:lI105|H280047C30 +280047C30:lI111|H280047C40 +280047C40:lI110|H280047C50 +280047C50:lI32|H280047C60 +280047C60:lI109|H280047C70 +280047C70:lI117|H280047C80 +280047C80:lI115|H280047C90 +280047C90:lI116|H280047CA0 +280047CA0:lI32|H280047CB0 +280047CB0:lI98|H280047CC0 +280047CC0:lI101|H280047CD0 +280047CD0:lI32|H280047CE0 +280047CE0:lI97|H280047CF0 +280047CF0:lI32|H280047D00 +280047D00:lI108|H280047D10 +280047D10:lI105|H280047D20 +280047D20:lI115|H280047D30 +280047D30:lI116|H280047D40 +280047D40:lI32|H280047D50 +280047D50:lI101|H280047D60 +280047D60:lI110|H280047D70 +280047D70:lI100|H280047D80 +280047D80:lI101|H280047D90 +280047D90:lI100|H280047DA0 +280047DA0:lI32|H280047DB0 +280047DB0:lI98|H280047DC0 +280047DC0:lI121|H280047DD0 +280047DD0:lI32|H280047DE0 +280047DE0:lI60|H280047DF0 +280047DF0:lI100|H280047E00 +280047E00:lI111|H280047E10 +280047E10:lI116|H280047E20 +280047E20:lI62|H280047E30 +280047E30:lI60|H280047E40 +280047E40:lI119|H280047E50 +280047E50:lI104|H280047E60 +280047E60:lI105|H280047E70 +280047E70:lI116|H280047E80 +280047E80:lI101|H280047E90 +280047E90:lI115|H280047EA0 +280047EA0:lI112|H280047EB0 +280047EB0:lI97|H280047EC0 +280047EC0:lI99|H280047ED0 +280047ED0:lI101|H280047EE0 +280047EE0:lI62|N +280047EF0:lI59|H280047F00 +280047F00:lI32|H280047F10 +280047F10:lI100|H280047F20 +280047F20:lI117|H280047F30 +280047F30:lI112|H280047F40 +280047F40:lI108|H280047F50 +280047F50:lI105|H280047F60 +280047F60:lI99|H280047F70 +280047F70:lI97|H280047F80 +280047F80:lI116|H280047F90 +280047F90:lI101|H280047FA0 +280047FA0:lI32|H280047FB0 +280047FB0:lI112|H280047FC0 +280047FC0:lI97|H280047FD0 +280047FD0:lI114|H280047FE0 +280047FE0:lI97|H280047FF0 +280047FF0:lI109|H280048000 +280048000:lI101|H280048010 +280048010:lI116|H280048020 +280048020:lI101|H280048030 +280048030:lI114|H280048040 +280048040:lI58|H280048050 +280048050:lI32|N +280048060:lI59|H280048070 +280048070:lI32|H280048080 +280048080:lI105|H280048090 +280048090:lI110|H2800480A0 +2800480A0:lI118|H2800480B0 +2800480B0:lI97|H2800480C0 +2800480C0:lI108|H2800480D0 +2800480D0:lI105|H2800480E0 +2800480E0:lI100|H2800480F0 +2800480F0:lI32|H280048100 +280048100:lI112|H280048110 +280048110:lI97|H280048120 +280048120:lI114|H280048130 +280048130:lI97|H280048140 +280048140:lI109|H280048150 +280048150:lI101|H280048160 +280048160:lI116|H280048170 +280048170:lI101|H280048180 +280048180:lI114|H280048190 +280048190:lI32|H2800481A0 +2800481A0:lI110|H2800481B0 +2800481B0:lI97|H2800481C0 +2800481C0:lI109|H2800481D0 +2800481D0:lI101|H2800481E0 +2800481E0:lI58|H2800481F0 +2800481F0:lI32|N +280048200:lI59|H280048210 +280048210:lI32|H280048220 +280048220:lI105|H280048230 +280048230:lI110|H280048240 +280048240:lI118|H280048250 +280048250:lI97|H280048260 +280048260:lI108|H280048270 +280048270:lI105|H280048280 +280048280:lI100|H280048290 +280048290:lI32|H2800482A0 +2800482A0:lI112|H2800482B0 +2800482B0:lI97|H2800482C0 +2800482C0:lI114|H2800482D0 +2800482D0:lI97|H2800482E0 +2800482E0:lI109|H2800482F0 +2800482F0:lI101|H280048300 +280048300:lI116|H280048310 +280048310:lI101|H280048320 +280048320:lI114|H280048330 +280048330:lI58|H280048340 +280048340:lI32|N +280048350:t2:A5:error,H280048368 +280048368:lI97|H280048378 +280048378:lI112|H280048388 +280048388:lI112|H280048398 +280048398:lI108|H2800483A8 +2800483A8:lI105|H2800483B8 +2800483B8:lI99|H2800483C8 +2800483C8:lI97|H2800483D8 +2800483D8:lI116|H2800483E8 +2800483E8:lI105|H2800483F8 +2800483F8:lI111|H280048408 +280048408:lI110|H280048418 +280048418:lI58|H280048428 +280048428:lI32|H280048438 +280048438:lI107|H280048448 +280048448:lI101|H280048458 +280048458:lI114|H280048468 +280048468:lI110|H280048478 +280048478:lI101|H280048488 +280048488:lI108|H280048498 +280048498:lI59|H2800484A8 +2800484A8:lI32|H2800484B8 +2800484B8:lI101|H2800484C8 +2800484C8:lI114|H2800484D8 +2800484D8:lI114|H2800484E8 +2800484E8:lI111|H2800484F8 +2800484F8:lI110|H280048508 +280048508:lI101|H280048518 +280048518:lI111|H280048528 +280048528:lI117|H280048538 +280048538:lI115|H280048548 +280048548:lI32|H280048558 +280048558:lI112|H280048568 +280048568:lI97|H280048578 +280048578:lI114|H280048588 +280048588:lI97|H280048598 +280048598:lI109|H2800485A8 +2800485A8:lI101|H2800485B8 +2800485B8:lI116|H2800485C8 +2800485C8:lI101|H2800485D8 +2800485D8:lI114|H2800485E8 +2800485E8:lI58|H2800485F8 +2800485F8:lI32|H280048608 +280048608:lI100|H280048618 +280048618:lI105|H280048628 +280048628:lI115|H280048638 +280048638:lI116|H280048648 +280048648:lI114|H280048658 +280048658:lI105|H280048668 +280048668:lI98|H280048678 +280048678:lI117|H280048688 +280048688:lI116|H280048698 +280048698:lI101|H2800486A8 +2800486A8:lI100|N +2800486B8:t2:A17:distributed_application,AB:only_loaded +2800486D0:t2:A4:EXIT,A6:normal +2800486E8:t2:AB:distributed,N +280048700:t2:A12:application_master,A1:_ +280048718:t2:A2:ok,A9:undefined +280048730:lI46|H280048740 +280048740:lI97|H280048750 +280048750:lI112|H280048760 +280048760:lI112|N +280048770:t2:A5:error,H280048788 +280048788:lI98|H280048798 +280048798:lI97|H2800487A8 +2800487A8:lI100|H2800487B8 +2800487B8:lI32|H2800487C8 +2800487C8:lI101|H2800487D8 +2800487D8:lI110|H2800487E8 +2800487E8:lI99|H2800487F8 +2800487F8:lI111|H280048808 +280048808:lI100|H280048818 +280048818:lI105|H280048828 +280048828:lI110|H280048838 +280048838:lI103|N +280048848:t2:A5:error,A6:enoent +280048860:lI97|H280048870 +280048870:lI112|H280048880 +280048880:lI112|H280048890 +280048890:lI108|H2800488A0 +2800488A0:lI105|H2800488B0 +2800488B0:lI99|H2800488C0 +2800488C0:lI97|H2800488D0 +2800488D0:lI116|H2800488E0 +2800488E0:lI105|H2800488F0 +2800488F0:lI111|H280048900 +280048900:lI110|H280048910 +280048910:lI95|H280048920 +280048920:lI99|H280048930 +280048930:lI111|H280048940 +280048940:lI110|H280048950 +280048950:lI116|H280048960 +280048960:lI114|H280048970 +280048970:lI111|H280048980 +280048980:lI108|H280048990 +280048990:lI108|H2800489A0 +2800489A0:lI101|H2800489B0 +2800489B0:lI114|H2800489C0 +2800489C0:lI58|H2800489D0 +2800489D0:lI32|H2800489E0 +2800489E0:lI126|H2800489F0 +2800489F0:lI116|H280048A00 +280048A00:lI115|H280048A10 +280048A10:lI58|H280048A20 +280048A20:lI32|H280048A30 +280048A30:lI126|H280048A40 +280048A40:lI116|H280048A50 +280048A50:lI115|H280048A60 +280048A60:lI126|H280048A70 +280048A70:lI110|N +280048A80:t1:AC:error_logger +280048A90:Mf1:H280048A80:H280048AC0 +280048AB0:t1:A3:tag +280048AC0:Mf1:H280048AB0:A5:error +280048AE0:t3:A4:line,A4:file,A3:mfa +280048B00:Mf3:H280048AE0:I1669,H280048B30,H280048CD0 +280048B30:lI97|H280048B40 +280048B40:lI112|H280048B50 +280048B50:lI112|H280048B60 +280048B60:lI108|H280048B70 +280048B70:lI105|H280048B80 +280048B80:lI99|H280048B90 +280048B90:lI97|H280048BA0 +280048BA0:lI116|H280048BB0 +280048BB0:lI105|H280048BC0 +280048BC0:lI111|H280048BD0 +280048BD0:lI110|H280048BE0 +280048BE0:lI95|H280048BF0 +280048BF0:lI99|H280048C00 +280048C00:lI111|H280048C10 +280048C10:lI110|H280048C20 +280048C20:lI116|H280048C30 +280048C30:lI114|H280048C40 +280048C40:lI111|H280048C50 +280048C50:lI108|H280048C60 +280048C60:lI108|H280048C70 +280048C70:lI101|H280048C80 +280048C80:lI114|H280048C90 +280048C90:lI46|H280048CA0 +280048CA0:lI101|H280048CB0 +280048CB0:lI114|H280048CC0 +280048CC0:lI108|N +280048CD0:t3:A16:application_controller,A16:handle_make_term_error,I3 +280048CF0:t2:N,N +280048D08:lH280048D28|H280048D18 +280048D18:lN|N +280048D28:lI46|H280048D38 +280048D38:lI99|H280048D48 +280048D48:lI111|H280048D58 +280048D58:lI110|H280048D68 +280048D68:lI102|H280048D78 +280048D78:lI105|H280048D88 +280048D88:lI103|N +280048D98:lI67|H280048DA8 +280048DA8:lI97|H280048DB8 +280048DB8:lI110|H280048DC8 +280048DC8:lI110|H280048DD8 +280048DD8:lI111|H280048DE8 +280048DE8:lI116|H280048DF8 +280048DF8:lI32|H280048E08 +280048E08:lI112|H280048E18 +280048E18:lI97|H280048E28 +280048E28:lI114|H280048E38 +280048E38:lI115|H280048E48 +280048E48:lI101|H280048E58 +280048E58:lI32|H280048E68 +280048E68:lI102|H280048E78 +280048E78:lI105|H280048E88 +280048E88:lI108|H280048E98 +280048E98:lI101|H280048EA8 +280048EA8:lI32|H280048EB8 +280048EB8:lI100|H280048EC8 +280048EC8:lI101|H280048ED8 +280048ED8:lI115|H280048EE8 +280048EE8:lI99|H280048EF8 +280048EF8:lI114|H280048F08 +280048F08:lI105|H280048F18 +280048F18:lI112|H280048F28 +280048F28:lI116|H280048F38 +280048F38:lI111|H280048F48 +280048F48:lI114|H280048F58 +280048F58:lI32|H280048F68 +280048F68:lI111|H280048F78 +280048F78:lI102|H280048F88 +280048F88:lI32|H280048F98 +280048F98:lI116|H280048FA8 +280048FA8:lI121|H280048FB8 +280048FB8:lI112|H280048FC8 +280048FC8:lI101|H280048FD8 +280048FD8:lI58|H280048FE8 +280048FE8:lI32|H280048FF8 +280048FF8:lI126|H280049008 +280049008:lI116|H280049018 +280049018:lI115|N +280049028:lI84|H280049038 +280049038:lI104|H280049048 +280049048:lI101|H280049058 +280049058:lI32|H280049068 +280049068:lI103|H280049078 +280049078:lI105|H280049088 +280049088:lI118|H280049098 +280049098:lI101|H2800490A8 +2800490A8:lI110|H2800490B8 +2800490B8:lI32|H2800490C8 +2800490C8:lI102|H2800490D8 +2800490D8:lI105|H2800490E8 +2800490E8:lI108|H2800490F8 +2800490F8:lI101|H280049108 +280049108:lI32|H280049118 +280049118:lI100|H280049128 +280049128:lI101|H280049138 +280049138:lI115|H280049148 +280049148:lI99|H280049158 +280049158:lI114|H280049168 +280049168:lI105|H280049178 +280049178:lI112|H280049188 +280049188:lI116|H280049198 +280049198:lI111|H2800491A8 +2800491A8:lI114|H2800491B8 +2800491B8:lI32|H2800491C8 +2800491C8:lI104|H2800491D8 +2800491D8:lI97|H2800491E8 +2800491E8:lI115|H2800491F8 +2800491F8:lI32|H280049208 +280049208:lI105|H280049218 +280049218:lI110|H280049228 +280049228:lI99|H280049238 +280049238:lI111|H280049248 +280049248:lI114|H280049258 +280049258:lI114|H280049268 +280049268:lI101|H280049278 +280049278:lI99|H280049288 +280049288:lI116|H280049298 +280049298:lI32|H2800492A8 +2800492A8:lI102|H2800492B8 +2800492B8:lI111|H2800492C8 +2800492C8:lI114|H2800492D8 +2800492D8:lI109|H2800492E8 +2800492E8:lI97|H2800492F8 +2800492F8:lI116|H280049308 +280049308:lI46|H280049318 +280049318:lI32|H280049328 +280049328:lI84|H280049338 +280049338:lI104|H280049348 +280049348:lI101|H280049358 +280049358:lI32|H280049368 +280049368:lI102|H280049378 +280049378:lI111|H280049388 +280049388:lI114|H280049398 +280049398:lI109|H2800493A8 +2800493A8:lI97|H2800493B8 +2800493B8:lI116|H2800493C8 +2800493C8:lI32|H2800493D8 +2800493D8:lI115|H2800493E8 +2800493E8:lI104|H2800493F8 +2800493F8:lI111|H280049408 +280049408:lI117|H280049418 +280049418:lI108|H280049428 +280049428:lI100|H280049438 +280049438:lI32|H280049448 +280049448:lI98|H280049458 +280049458:lI101|H280049468 +280049468:lI32|H280049478 +280049478:lI34|H280049488 +280049488:lI70|H280049498 +280049498:lI105|H2800494A8 +2800494A8:lI108|H2800494B8 +2800494B8:lI101|H2800494C8 +2800494C8:lI68|H2800494D8 +2800494D8:lI101|H2800494E8 +2800494E8:lI115|H2800494F8 +2800494F8:lI99|H280049508 +280049508:lI73|H280049518 +280049518:lI100|H280049528 +280049528:lI91|H280049538 +280049538:lI46|H280049548 +280049548:lI70|H280049558 +280049558:lI105|H280049568 +280049568:lI108|H280049578 +280049578:lI101|H280049588 +280049588:lI84|H280049598 +280049598:lI121|H2800495A8 +2800495A8:lI112|H2800495B8 +2800495B8:lI101|H2800495C8 +2800495C8:lI93|H2800495D8 +2800495D8:lI34|H2800495E8 +2800495E8:lI46|H2800495F8 +2800495F8:lI32|H280049608 +280049608:lI69|H280049618 +280049618:lI120|H280049628 +280049628:lI97|H280049638 +280049638:lI109|H280049648 +280049648:lI112|H280049658 +280049658:lI108|H280049668 +280049668:lI101|H280049678 +280049678:lI115|H280049688 +280049688:lI58|H280049698 +280049698:lI32|H2800496A8 +2800496A8:lI51|H2800496B8 +2800496B8:lI32|H2800496C8 +2800496C8:lI111|H2800496D8 +2800496D8:lI114|H2800496E8 +2800496E8:lI32|H2800496F8 +2800496F8:lI51|H280049708 +280049708:lI46|H280049718 +280049718:lI99|H280049728 +280049728:lI111|H280049738 +280049738:lI110|H280049748 +280049748:lI102|H280049758 +280049758:lI105|H280049768 +280049768:lI103|N +280049778:lI46|H280049788 +280049788:lI99|H280049798 +280049798:lI111|H2800497A8 +2800497A8:lI110|H2800497B8 +2800497B8:lI102|H2800497C8 +2800497C8:lI105|H2800497D8 +2800497D8:lI103|N +2800497E8:lI115|H2800497F8 +2800497F8:lI121|H280049808 +280049808:lI115|N +280049818:lI32|N +280049828:t2:A5:error,H280049840 +280049840:t3:A4:none,A9:scan_file,H280049860 +280049860:lI98|H280049870 +280049870:lI97|H280049880 +280049880:lI100|H280049890 +280049890:lI32|H2800498A0 +2800498A0:lI101|H2800498B0 +2800498B0:lI110|H2800498C0 +2800498C0:lI99|H2800498D0 +2800498D0:lI111|H2800498E0 +2800498E0:lI100|H2800498F0 +2800498F0:lI105|H280049900 +280049900:lI110|H280049910 +280049910:lI103|N +280049920:t2:A5:error,H280049938 +280049938:t3:A4:none,A9:open_file,H280049958 +280049958:lI99|H280049968 +280049968:lI111|H280049978 +280049978:lI110|H280049988 +280049988:lI102|H280049998 +280049998:lI105|H2800499A8 +2800499A8:lI103|H2800499B8 +2800499B8:lI117|H2800499C8 +2800499C8:lI114|H2800499D8 +2800499D8:lI97|H2800499E8 +2800499E8:lI116|H2800499F8 +2800499F8:lI105|H280049A08 +280049A08:lI111|H280049A18 +280049A18:lI110|H280049A28 +280049A28:lI32|H280049A38 +280049A38:lI102|H280049A48 +280049A48:lI105|H280049A58 +280049A58:lI108|H280049A68 +280049A68:lI101|H280049A78 +280049A78:lI32|H280049A88 +280049A88:lI110|H280049A98 +280049A98:lI111|H280049AA8 +280049AA8:lI116|H280049AB8 +280049AB8:lI32|H280049AC8 +280049AC8:lI102|H280049AD8 +280049AD8:lI111|H280049AE8 +280049AE8:lI117|H280049AF8 +280049AF8:lI110|H280049B08 +280049B08:lI100|N +280049B18:lI67|H280049B28 +280049B28:lI111|H280049B38 +280049B38:lI117|H280049B48 +280049B48:lI108|H280049B58 +280049B58:lI100|H280049B68 +280049B68:lI32|H280049B78 +280049B78:lI110|H280049B88 +280049B88:lI111|H280049B98 +280049B98:lI116|H280049BA8 +280049BA8:lI32|H280049BB8 +280049BB8:lI114|H280049BC8 +280049BC8:lI101|H280049BD8 +280049BD8:lI97|H280049BE8 +280049BE8:lI100|H280049BF8 +280049BF8:lI32|H280049C08 +280049C08:lI102|H280049C18 +280049C18:lI114|H280049C28 +280049C28:lI111|H280049C38 +280049C38:lI109|H280049C48 +280049C48:lI32|H280049C58 +280049C58:lI102|H280049C68 +280049C68:lI105|H280049C78 +280049C78:lI108|H280049C88 +280049C88:lI101|H280049C98 +280049C98:lI32|H280049CA8 +280049CA8:lI100|H280049CB8 +280049CB8:lI101|H280049CC8 +280049CC8:lI115|H280049CD8 +280049CD8:lI99|H280049CE8 +280049CE8:lI114|H280049CF8 +280049CF8:lI105|H280049D08 +280049D08:lI112|H280049D18 +280049D18:lI116|H280049D28 +280049D28:lI111|H280049D38 +280049D38:lI114|H280049D48 +280049D48:lI58|H280049D58 +280049D58:lI32|H280049D68 +280049D68:lI126|H280049D78 +280049D78:lI115|N +280049D88:t2:A5:error,H280049DA0 +280049DA0:t3:A4:none,A9:load_file,H280049DC0 +280049DC0:lI110|H280049DD0 +280049DD0:lI111|H280049DE0 +280049DE0:lI32|H280049DF0 +280049DF0:lI101|H280049E00 +280049E00:lI110|H280049E10 +280049E10:lI100|H280049E20 +280049E20:lI105|H280049E30 +280049E30:lI110|H280049E40 +280049E40:lI103|H280049E50 +280049E50:lI32|H280049E60 +280049E60:lI60|H280049E70 +280049E70:lI100|H280049E80 +280049E80:lI111|H280049E90 +280049E90:lI116|H280049EA0 +280049EA0:lI62|H280049EB0 +280049EB0:lI32|H280049EC0 +280049EC0:lI102|H280049ED0 +280049ED0:lI111|H280049EE0 +280049EE0:lI117|H280049EF0 +280049EF0:lI110|H280049F00 +280049F00:lI100|N +280049F10:t2:A5:error,H280049F28 +280049F28:t3:A4:none,A9:load_file,H280049F48 +280049F48:lI99|H280049F58 +280049F58:lI111|H280049F68 +280049F68:lI110|H280049F78 +280049F78:lI102|H280049F88 +280049F88:lI105|H280049F98 +280049F98:lI103|H280049FA8 +280049FA8:lI117|H280049FB8 +280049FB8:lI114|H280049FC8 +280049FC8:lI97|H280049FD8 +280049FD8:lI116|H280049FE8 +280049FE8:lI105|H280049FF8 +280049FF8:lI111|H28004A008 +28004A008:lI110|H28004A018 +28004A018:lI32|H28004A028 +28004A028:lI102|H28004A038 +28004A038:lI105|H28004A048 +28004A048:lI108|H28004A058 +28004A058:lI101|H28004A068 +28004A068:lI32|H28004A078 +28004A078:lI109|H28004A088 +28004A088:lI117|H28004A098 +28004A098:lI115|H28004A0A8 +28004A0A8:lI116|H28004A0B8 +28004A0B8:lI32|H28004A0C8 +28004A0C8:lI99|H28004A0D8 +28004A0D8:lI111|H28004A0E8 +28004A0E8:lI110|H28004A0F8 +28004A0F8:lI116|H28004A108 +28004A108:lI97|H28004A118 +28004A118:lI105|H28004A128 +28004A128:lI110|H28004A138 +28004A138:lI32|H28004A148 +28004A148:lI79|H28004A158 +28004A158:lI78|H28004A168 +28004A168:lI69|H28004A178 +28004A178:lI32|H28004A188 +28004A188:lI108|H28004A198 +28004A198:lI105|H28004A1A8 +28004A1A8:lI115|H28004A1B8 +28004A1B8:lI116|H28004A1C8 +28004A1C8:lI32|H28004A1D8 +28004A1D8:lI101|H28004A1E8 +28004A1E8:lI110|H28004A1F8 +28004A1F8:lI100|H28004A208 +28004A208:lI101|H28004A218 +28004A218:lI100|H28004A228 +28004A228:lI32|H28004A238 +28004A238:lI98|H28004A248 +28004A248:lI121|H28004A258 +28004A258:lI32|H28004A268 +28004A268:lI60|H28004A278 +28004A278:lI100|H28004A288 +28004A288:lI111|H28004A298 +28004A298:lI116|H28004A2A8 +28004A2A8:lI62|N +28004A2B8:Mf0:H280010188: +28004A2D0:t2:A16:application_controller,A8:progress +28004A2E8:t4:AC:error_logger,A6:domain,A10:logger_formatter,A9:report_cb +28004A310:Mf4:H28004A2E8:H28004A388,H28004A348,H28004A3F0,H28004A500 +28004A348:lA3:otp|H28004A358 +28004A358:lA4:sasl|N +28004A368:t3:A3:tag,A4:type,A9:report_cb +28004A388:Mf3:H28004A368:AB:info_report,A8:progress,H28004A3B8 +28004A3B8:E28:g3F3FmFwcGxpY2F0aW9uX2NvbnRyb2xsZXJ3CmZvcm1hdF9sb2dhAQ== +28004A3E0:t1:A5:title +28004A3F0:Mf1:H28004A3E0:H28004A410 +28004A410:lI80|H28004A420 +28004A420:lI82|H28004A430 +28004A430:lI79|H28004A440 +28004A440:lI71|H28004A450 +28004A450:lI82|H28004A460 +28004A460:lI69|H28004A470 +28004A470:lI83|H28004A480 +28004A480:lI83|H28004A490 +28004A490:lI32|H28004A4A0 +28004A4A0:lI82|H28004A4B0 +28004A4B0:lI69|H28004A4C0 +28004A4C0:lI80|H28004A4D0 +28004A4D0:lI79|H28004A4E0 +28004A4E0:lI82|H28004A4F0 +28004A4F0:lI84|N +28004A500:E28:g3F3FmFwcGxpY2F0aW9uX2NvbnRyb2xsZXJ3CmZvcm1hdF9sb2dhAg== +28004A528:t3:A4:line,A4:file,A3:mfa +28004A548:Mf3:H28004A528:I2117,H28004A578,H28004A718 +28004A578:lI97|H28004A588 +28004A588:lI112|H28004A598 +28004A598:lI112|H28004A5A8 +28004A5A8:lI108|H28004A5B8 +28004A5B8:lI105|H28004A5C8 +28004A5C8:lI99|H28004A5D8 +28004A5D8:lI97|H28004A5E8 +28004A5E8:lI116|H28004A5F8 +28004A5F8:lI105|H28004A608 +28004A608:lI111|H28004A618 +28004A618:lI110|H28004A628 +28004A628:lI95|H28004A638 +28004A638:lI99|H28004A648 +28004A648:lI111|H28004A658 +28004A658:lI110|H28004A668 +28004A668:lI116|H28004A678 +28004A678:lI114|H28004A688 +28004A688:lI111|H28004A698 +28004A698:lI108|H28004A6A8 +28004A6A8:lI108|H28004A6B8 +28004A6B8:lI101|H28004A6C8 +28004A6C8:lI114|H28004A6D8 +28004A6D8:lI46|H28004A6E8 +28004A6E8:lI101|H28004A6F8 +28004A6F8:lI114|H28004A708 +28004A708:lI108|N +28004A718:t3:A16:application_controller,AC:info_started,I2 +28004A738:t2:A16:application_controller,A4:exit +28004A750:t3:AC:error_logger,A6:domain,A9:report_cb +28004A770:Mf3:H28004A750:H28004A7D0,H28004A7A0,H28004A828 +28004A7A0:lA3:otp|N +28004A7B0:t3:A3:tag,A4:type,A9:report_cb +28004A7D0:Mf3:H28004A7B0:AB:info_report,A8:std_info,H28004A800 +28004A800:E28:g3F3FmFwcGxpY2F0aW9uX2NvbnRyb2xsZXJ3CmZvcm1hdF9sb2dhAQ== +28004A828:E28:g3F3FmFwcGxpY2F0aW9uX2NvbnRyb2xsZXJ3CmZvcm1hdF9sb2dhAg== +28004A850:t3:A4:line,A4:file,A3:mfa +28004A870:Mf3:H28004A850:I2129,H28004A8A0,H28004AA40 +28004A8A0:lI97|H28004A8B0 +28004A8B0:lI112|H28004A8C0 +28004A8C0:lI112|H28004A8D0 +28004A8D0:lI108|H28004A8E0 +28004A8E0:lI105|H28004A8F0 +28004A8F0:lI99|H28004A900 +28004A900:lI97|H28004A910 +28004A910:lI116|H28004A920 +28004A920:lI105|H28004A930 +28004A930:lI111|H28004A940 +28004A940:lI110|H28004A950 +28004A950:lI95|H28004A960 +28004A960:lI99|H28004A970 +28004A970:lI111|H28004A980 +28004A980:lI110|H28004A990 +28004A990:lI116|H28004A9A0 +28004A9A0:lI114|H28004A9B0 +28004A9B0:lI111|H28004A9C0 +28004A9C0:lI108|H28004A9D0 +28004A9D0:lI108|H28004A9E0 +28004A9E0:lI101|H28004A9F0 +28004A9F0:lI114|H28004AA00 +28004AA00:lI46|H28004AA10 +28004AA10:lI101|H28004AA20 +28004AA20:lI114|H28004AA30 +28004AA30:lI108|N +28004AA40:t3:A16:application_controller,AB:info_exited,I3 +28004AA60:t4:AB:chars_limit,A5:depth,A8:encoding,AB:single_line +28004AA88:Mf4:H28004AA60:A9:unlimited,A9:unlimited,A4:utf8,A5:false +28004AAC0:lI46|N +28004AAD0:lI46|H28004AAE0 +28004AAE0:lI32|H28004AAF0 +28004AAF0:lI83|H28004AB00 +28004AB00:lI116|H28004AB10 +28004AB10:lI97|H28004AB20 +28004AB20:lI114|H28004AB30 +28004AB30:lI116|H28004AB40 +28004AB40:lI101|H28004AB50 +28004AB50:lI100|H28004AB60 +28004AB60:lI32|H28004AB70 +28004AB70:lI97|H28004AB80 +28004AB80:lI116|H28004AB90 +28004AB90:lI58|H28004ABA0 +28004ABA0:lI32|N +28004ABB0:lI65|H28004ABC0 +28004ABC0:lI112|H28004ABD0 +28004ABD0:lI112|H28004ABE0 +28004ABE0:lI108|H28004ABF0 +28004ABF0:lI105|H28004AC00 +28004AC00:lI99|H28004AC10 +28004AC10:lI97|H28004AC20 +28004AC20:lI116|H28004AC30 +28004AC30:lI105|H28004AC40 +28004AC40:lI111|H28004AC50 +28004AC50:lI110|H28004AC60 +28004AC60:lI58|H28004AC70 +28004AC70:lI32|N +28004AC80:lH28004AC90|N +28004AC90:lI46|N +28004ACA0:lI46|H28004ACB0 +28004ACB0:lI32|H28004ACC0 +28004ACC0:lI84|H28004ACD0 +28004ACD0:lI121|H28004ACE0 +28004ACE0:lI112|H28004ACF0 +28004ACF0:lI101|H28004AD00 +28004AD00:lI58|H28004AD10 +28004AD10:lI32|N +28004AD20:lI46|H28004AD30 +28004AD30:lI32|H28004AD40 +28004AD40:lI69|H28004AD50 +28004AD50:lI120|H28004AD60 +28004AD60:lI105|H28004AD70 +28004AD70:lI116|H28004AD80 +28004AD80:lI101|H28004AD90 +28004AD90:lI100|H28004ADA0 +28004ADA0:lI58|H28004ADB0 +28004ADB0:lI32|N +28004ADC0:lH28004ADD0|N +28004ADD0:lI126|H28004ADE0 +28004ADE0:lI110|N +28004ADF0:lI32|H28004AE00 +28004AE00:lI32|H28004AE10 +28004AE10:lI32|H28004AE20 +28004AE20:lI32|H28004AE30 +28004AE30:lI115|H28004AE40 +28004AE40:lI116|H28004AE50 +28004AE50:lI97|H28004AE60 +28004AE60:lI114|H28004AE70 +28004AE70:lI116|H28004AE80 +28004AE80:lI101|H28004AE90 +28004AE90:lI100|H28004AEA0 +28004AEA0:lI95|H28004AEB0 +28004AEB0:lI97|H28004AEC0 +28004AEC0:lI116|H28004AED0 +28004AED0:lI58|H28004AEE0 +28004AEE0:lI32|N +28004AEF0:lI126|H28004AF00 +28004AF00:lI110|N +28004AF10:lI32|H28004AF20 +28004AF20:lI32|H28004AF30 +28004AF30:lI32|H28004AF40 +28004AF40:lI32|H28004AF50 +28004AF50:lI97|H28004AF60 +28004AF60:lI112|H28004AF70 +28004AF70:lI112|H28004AF80 +28004AF80:lI108|H28004AF90 +28004AF90:lI105|H28004AFA0 +28004AFA0:lI99|H28004AFB0 +28004AFB0:lI97|H28004AFC0 +28004AFC0:lI116|H28004AFD0 +28004AFD0:lI105|H28004AFE0 +28004AFE0:lI111|H28004AFF0 +28004AFF0:lI110|H28004B000 +28004B000:lI58|H28004B010 +28004B010:lI32|N +28004B020:lI32|H28004B030 +28004B030:lI32|H28004B040 +28004B040:lI32|H28004B050 +28004B050:lI32|H28004B060 +28004B060:lI116|H28004B070 +28004B070:lI121|H28004B080 +28004B080:lI112|H28004B090 +28004B090:lI101|H28004B0A0 +28004B0A0:lI58|H28004B0B0 +28004B0B0:lI32|N +28004B0C0:lI32|H28004B0D0 +28004B0D0:lI32|H28004B0E0 +28004B0E0:lI32|H28004B0F0 +28004B0F0:lI32|H28004B100 +28004B100:lI101|H28004B110 +28004B110:lI120|H28004B120 +28004B120:lI105|H28004B130 +28004B130:lI116|H28004B140 +28004B140:lI101|H28004B150 +28004B150:lI100|H28004B160 +28004B160:lI58|H28004B170 +28004B170:lI32|N +28004B180:lI112|N +28004B190:lI80|N +28004B1A0:lI48|N +28004B1B0:lI116|N +28004B1C0:t3:A3:env,A6:kernel,AB:permissions +28004B1E0:lI126|H28004B1F0 +28004B1F0:lI48|H28004B200 +28004B200:lI112|N +28004B210:lI83|H28004B220 +28004B220:lI108|H28004B230 +28004B230:lI111|H28004B240 +28004B240:lI119|H28004B250 +28004B250:lI32|H28004B260 +28004B260:lI45|H28004B270 +28004B270:lI99|H28004B280 +28004B280:lI111|H28004B290 +28004B290:lI110|H28004B2A0 +28004B2A0:lI102|H28004B2B0 +28004B2B0:lI105|H28004B2C0 +28004B2C0:lI103|H28004B2D0 +28004B2D0:lI102|H28004B2E0 +28004B2E0:lI100|H28004B2F0 +28004B2F0:lI32|H28004B300 +28004B300:lI102|H28004B310 +28004B310:lI105|H28004B320 +28004B320:lI108|H28004B330 +28004B330:lI101|H28004B340 +28004B340:lI32|H28004B350 +28004B350:lI100|H28004B360 +28004B360:lI101|H28004B370 +28004B370:lI115|H28004B380 +28004B380:lI99|H28004B390 +28004B390:lI114|H28004B3A0 +28004B3A0:lI105|H28004B3B0 +28004B3B0:lI112|H28004B3C0 +28004B3C0:lI116|H28004B3D0 +28004B3D0:lI111|H28004B3E0 +28004B3E0:lI114|H28004B3F0 +28004B3F0:lI32|H28004B400 +28004B400:lI126|H28004B410 +28004B410:lI112|H28004B420 +28004B420:lI46|H28004B430 +28004B430:lI32|H28004B440 +28004B440:lI84|H28004B450 +28004B450:lI104|H28004B460 +28004B460:lI101|H28004B470 +28004B470:lI32|H28004B480 +28004B480:lI115|H28004B490 +28004B490:lI121|H28004B4A0 +28004B4A0:lI115|H28004B4B0 +28004B4B0:lI116|H28004B4C0 +28004B4C0:lI101|H28004B4D0 +28004B4D0:lI109|H28004B4E0 +28004B4E0:lI32|H28004B4F0 +28004B4F0:lI119|H28004B500 +28004B500:lI105|H28004B510 +28004B510:lI108|H28004B520 +28004B520:lI108|H28004B530 +28004B530:lI32|H28004B540 +28004B540:lI99|H28004B550 +28004B550:lI111|H28004B560 +28004B560:lI110|H28004B570 +28004B570:lI116|H28004B580 +28004B580:lI105|H28004B590 +28004B590:lI110|H28004B5A0 +28004B5A0:lI117|H28004B5B0 +28004B5B0:lI101|H28004B5C0 +28004B5C0:lI32|H28004B5D0 +28004B5D0:lI116|H28004B5E0 +28004B5E0:lI111|H28004B5F0 +28004B5F0:lI32|H28004B600 +28004B600:lI114|H28004B610 +28004B610:lI101|H28004B620 +28004B620:lI97|H28004B630 +28004B630:lI100|H28004B640 +28004B640:lI32|H28004B650 +28004B650:lI102|H28004B660 +28004B660:lI114|H28004B670 +28004B670:lI111|H28004B680 +28004B680:lI109|H28004B690 +28004B690:lI32|H28004B6A0 +28004B6A0:lI116|H28004B6B0 +28004B6B0:lI104|H28004B6C0 +28004B6C0:lI101|H28004B6D0 +28004B6D0:lI32|H28004B6E0 +28004B6E0:lI102|H28004B6F0 +28004B6F0:lI105|H28004B700 +28004B700:lI108|H28004B710 +28004B710:lI101|H28004B720 +28004B720:lI32|H28004B730 +28004B730:lI100|H28004B740 +28004B740:lI101|H28004B750 +28004B750:lI115|H28004B760 +28004B760:lI99|H28004B770 +28004B770:lI114|H28004B780 +28004B780:lI105|H28004B790 +28004B790:lI112|H28004B7A0 +28004B7A0:lI116|H28004B7B0 +28004B7B0:lI111|H28004B7C0 +28004B7C0:lI114|H28004B7D0 +28004B7D0:lI32|H28004B7E0 +28004B7E0:lI97|H28004B7F0 +28004B7F0:lI110|H28004B800 +28004B800:lI100|H28004B810 +28004B810:lI32|H28004B820 +28004B820:lI119|H28004B830 +28004B830:lI105|H28004B840 +28004B840:lI108|H28004B850 +28004B850:lI108|H28004B860 +28004B860:lI32|H28004B870 +28004B870:lI98|H28004B880 +28004B880:lI101|H28004B890 +28004B890:lI32|H28004B8A0 +28004B8A0:lI98|H28004B8B0 +28004B8B0:lI108|H28004B8C0 +28004B8C0:lI111|H28004B8D0 +28004B8D0:lI99|H28004B8E0 +28004B8E0:lI107|H28004B8F0 +28004B8F0:lI101|H28004B900 +28004B900:lI100|H28004B910 +28004B910:lI32|H28004B920 +28004B920:lI117|H28004B930 +28004B930:lI110|H28004B940 +28004B940:lI116|H28004B950 +28004B950:lI105|H28004B960 +28004B960:lI108|H28004B970 +28004B970:lI32|H28004B980 +28004B980:lI101|H28004B990 +28004B990:lI110|H28004B9A0 +28004B9A0:lI100|H28004B9B0 +28004B9B0:lI32|H28004B9C0 +28004B9C0:lI111|H28004B9D0 +28004B9D0:lI102|H28004B9E0 +28004B9E0:lI32|H28004B9F0 +28004B9F0:lI102|H28004BA00 +28004BA00:lI105|H28004BA10 +28004BA10:lI108|H28004BA20 +28004BA20:lI101|H28004BA30 +28004BA30:lI32|H28004BA40 +28004BA40:lI105|H28004BA50 +28004BA50:lI115|H28004BA60 +28004BA60:lI32|H28004BA70 +28004BA70:lI114|H28004BA80 +28004BA80:lI101|H28004BA90 +28004BA90:lI99|H28004BAA0 +28004BAA0:lI101|H28004BAB0 +28004BAB0:lI105|H28004BAC0 +28004BAC0:lI118|H28004BAD0 +28004BAD0:lI101|H28004BAE0 +28004BAE0:lI100|H28004BAF0 +28004BAF0:lI46|N +28004BB00:t3:A4:line,A4:file,A3:mfa +28004BB20:Mf3:H28004BB00:I2094,H28004BB50,H28004BCF0 +28004BB50:lI97|H28004BB60 +28004BB60:lI112|H28004BB70 +28004BB70:lI112|H28004BB80 +28004BB80:lI108|H28004BB90 +28004BB90:lI105|H28004BBA0 +28004BBA0:lI99|H28004BBB0 +28004BBB0:lI97|H28004BBC0 +28004BBC0:lI116|H28004BBD0 +28004BBD0:lI105|H28004BBE0 +28004BBE0:lI111|H28004BBF0 +28004BBF0:lI110|H28004BC00 +28004BC00:lI95|H28004BC10 +28004BC10:lI99|H28004BC20 +28004BC20:lI111|H28004BC30 +28004BC30:lI110|H28004BC40 +28004BC40:lI116|H28004BC50 +28004BC50:lI114|H28004BC60 +28004BC60:lI111|H28004BC70 +28004BC70:lI108|H28004BC80 +28004BC80:lI108|H28004BC90 +28004BC90:lI101|H28004BCA0 +28004BCA0:lI114|H28004BCB0 +28004BCB0:lI46|H28004BCC0 +28004BCC0:lI101|H28004BCD0 +28004BCD0:lI114|H28004BCE0 +28004BCE0:lI108|N +28004BCF0:t3:A16:application_controller,A1B:read_fd_until_end_and_close,I3 +28004BD10:lA4:read|N +28004BD20:lI73|H28004BD30 +28004BD30:lI110|H28004BD40 +28004BD40:lI118|H28004BD50 +28004BD50:lI97|H28004BD60 +28004BD60:lI108|H28004BD70 +28004BD70:lI105|H28004BD80 +28004BD80:lI100|H28004BD90 +28004BD90:lI32|H28004BDA0 +28004BDA0:lI102|H28004BDB0 +28004BDB0:lI105|H28004BDC0 +28004BDC0:lI108|H28004BDD0 +28004BDD0:lI101|H28004BDE0 +28004BDE0:lI32|H28004BDF0 +28004BDF0:lI100|H28004BE00 +28004BE00:lI101|H28004BE10 +28004BE10:lI115|H28004BE20 +28004BE20:lI99|H28004BE30 +28004BE30:lI114|H28004BE40 +28004BE40:lI105|H28004BE50 +28004BE50:lI112|H28004BE60 +28004BE60:lI116|H28004BE70 +28004BE70:lI111|H28004BE80 +28004BE80:lI114|N +28004BE90:lI134217728|N +28004BEA0:lI77|H28004BEB0 +28004BEB0:lI97|H28004BEC0 +28004BEC0:lI120|H28004BED0 +28004BED0:lI32|H28004BEE0 +28004BEE0:lI115|H28004BEF0 +28004BEF0:lI105|H28004BF00 +28004BF00:lI122|H28004BF10 +28004BF10:lI101|H28004BF20 +28004BF20:lI32|H28004BF30 +28004BF30:lI126|H28004BF40 +28004BF40:lI119|H28004BF50 +28004BF50:lI32|H28004BF60 +28004BF60:lI98|H28004BF70 +28004BF70:lI121|H28004BF80 +28004BF80:lI116|H28004BF90 +28004BF90:lI101|H28004BFA0 +28004BFA0:lI115|H28004BFB0 +28004BFB0:lI32|H28004BFC0 +28004BFC0:lI101|H28004BFD0 +28004BFD0:lI120|H28004BFE0 +28004BFE0:lI99|H28004BFF0 +28004BFF0:lI101|H28004C000 +28004C000:lI101|H28004C010 +28004C010:lI100|H28004C020 +28004C020:lI101|H28004C030 +28004C030:lI100|N +28004C040:lI48|H28004C050 +28004C050:lI49|H28004C060 +28004C060:lI50|H28004C070 +28004C070:lI51|H28004C080 +28004C080:lI52|H28004C090 +28004C090:lI53|H28004C0A0 +28004C0A0:lI54|H28004C0B0 +28004C0B0:lI55|H28004C0C0 +28004C0C0:lI56|H28004C0D0 +28004C0D0:lI57|N +28004C0E0:lI126|H28004C0F0 +28004C0F0:lI116|H28004C100 +28004C100:lI112|H28004C110 +28004C110:lI58|H28004C120 +28004C120:lI32|H28004C130 +28004C130:lI126|H28004C140 +28004C140:lI119|H28004C150 +28004C150:lI58|H28004C160 +28004C160:lI32|H28004C170 +28004C170:lI126|H28004C180 +28004C180:lI116|H28004C190 +28004C190:lI115|H28004C1A0 +28004C1A0:lI126|H28004C1B0 +28004C1B0:lI110|N +28004C1C0:t3:A4:line,A4:file,A3:mfa +28004C1E0:Mf3:H28004C1C0:I1588,H28004C210,H28004C3B0 +28004C210:lI97|H28004C220 +28004C220:lI112|H28004C230 +28004C230:lI112|H28004C240 +28004C240:lI108|H28004C250 +28004C250:lI105|H28004C260 +28004C260:lI99|H28004C270 +28004C270:lI97|H28004C280 +28004C280:lI116|H28004C290 +28004C290:lI105|H28004C2A0 +28004C2A0:lI111|H28004C2B0 +28004C2B0:lI110|H28004C2C0 +28004C2C0:lI95|H28004C2D0 +28004C2D0:lI99|H28004C2E0 +28004C2E0:lI111|H28004C2F0 +28004C2F0:lI110|H28004C300 +28004C300:lI116|H28004C310 +28004C310:lI114|H28004C320 +28004C320:lI111|H28004C330 +28004C330:lI108|H28004C340 +28004C340:lI108|H28004C350 +28004C350:lI101|H28004C360 +28004C360:lI114|H28004C370 +28004C370:lI46|H28004C380 +28004C380:lI101|H28004C390 +28004C390:lI114|H28004C3A0 +28004C3A0:lI108|N +28004C3B0:t3:A16:application_controller,AE:do_change_apps,I3 +28004C3D0:lI108|N +28004C3E0:lI114|H28004C3D0 +28004C3F0:lI101|H28004C3E0 +28004C400:lI46|H28004C3F0 +28004C410:lI114|H28004C400 +28004C420:lI101|H28004C410 +28004C430:lI108|H28004C420 +28004C440:lI108|H28004C430 +28004C450:lI111|H28004C440 +28004C460:lI114|H28004C450 +28004C470:lI116|H28004C460 +28004C480:lI110|H28004C470 +28004C490:lI111|H28004C480 +28004C4A0:lI99|H28004C490 +28004C4B0:lI95|H28004C4A0 +28004C4C0:lI110|H28004C4B0 +28004C4D0:lI111|H28004C4C0 +28004C4E0:lI105|H28004C4D0 +28004C4F0:lI116|H28004C4E0 +28004C500:lI97|H28004C4F0 +28004C510:lI99|H28004C500 +28004C520:lI105|H28004C510 +28004C530:lI108|H28004C520 +28004C540:lI112|H28004C530 +28004C550:lI112|H28004C540 +28004C560:lI97|H28004C550 +28004C570:E5A:g3AAAABYAQnO5ercdDL+Dqkv8OJgo/EAAAABAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEBYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28004C598:E5A:g3AAAABYAgnO5ercdDL+Dqkv8OJgo/EAAAAEAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEEYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28004C5C0:E5A:g3AAAABYAQnO5ercdDL+Dqkv8OJgo/EAAAAFAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEFYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28004C5E8:E5A:g3AAAABYAQnO5ercdDL+Dqkv8OJgo/EAAAAGAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEGYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28004C610:E5A:g3AAAABYAgnO5ercdDL+Dqkv8OJgo/EAAAAIAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEIYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28004C638:E5A:g3AAAABYAgnO5ercdDL+Dqkv8OJgo/EAAAAJAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEJYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28004C660:E5A:g3AAAABYAQnO5ercdDL+Dqkv8OJgo/EAAAAMAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEMYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28004C688:E5A:g3AAAABYAQnO5ercdDL+Dqkv8OJgo/EAAAANAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmENYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28004C6B0:E5A:g3AAAABYAgnO5ercdDL+Dqkv8OJgo/EAAAAPAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEPYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28004C6D8:E5A:g3AAAABYAgnO5ercdDL+Dqkv8OJgo/EAAAARAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmERYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28004C700:E5A:g3AAAABYAQnO5ercdDL+Dqkv8OJgo/EAAAASAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmESYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28004C728:E5A:g3AAAABYAQnO5ercdDL+Dqkv8OJgo/EAAAATAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmETYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28004C750:E5A:g3AAAABYAgnO5ercdDL+Dqkv8OJgo/EAAAAUAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEUYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28004C778:t2:A5:label,A6:report +28004C790:t4:AB:chars_limit,A5:depth,A8:encoding,AB:single_line +280052908:lAB:named_table|H280052918 +280052918:lA9:protected|N +280052928:lI108|H280052938 +280052938:lI105|H280052948 +280052948:lI98|N +280052958:lI46|N +280052968:lI69|H280052978 +280052978:lI82|H280052988 +280052988:lI76|H280052998 +280052998:lI95|H2800529A8 +2800529A8:lI76|H2800529B8 +2800529B8:lI73|H2800529C8 +2800529C8:lI66|H2800529D8 +2800529D8:lI83|N +2800529E8:lA5:flush|N +2800529F8:t2:A6:module,AB:code_server +280052A10:lI32|H280052A20 +280052A20:lI42|H280052A30 +280052A30:lI42|H280052A40 +280052A40:lI32|H280052A50 +280052A50:lI67|H280052A60 +280052A60:lI111|H280052A70 +280052A70:lI100|H280052A80 +280052A80:lI101|H280052A90 +280052A90:lI115|H280052AA0 +280052AA0:lI101|H280052AB0 +280052AB0:lI114|H280052AC0 +280052AC0:lI118|H280052AD0 +280052AD0:lI101|H280052AE0 +280052AE0:lI114|H280052AF0 +280052AF0:lI42|H280052B00 +280052B00:lI42|H280052B10 +280052B10:lI42|H280052B20 +280052B20:lI32|H280052B30 +280052B30:lI105|H280052B40 +280052B40:lI103|H280052B50 +280052B50:lI110|H280052B60 +280052B60:lI111|H280052B70 +280052B70:lI114|H280052B80 +280052B80:lI105|H280052B90 +280052B90:lI110|H280052BA0 +280052BA0:lI103|H280052BB0 +280052BB0:lI32|H280052BC0 +280052BC0:lI126|H280052BD0 +280052BD0:lI119|H280052BE0 +280052BE0:lI126|H280052BF0 +280052BF0:lI110|H280052C00 +280052C00:lI32|N +280052C10:lI0|N +280052C20:lI101|H280052C30 +280052C30:lI98|H280052C40 +280052C40:lI105|H280052C50 +280052C50:lI110|N +280052C60:lH280052C70|N +280052C70:lI101|H280052C80 +280052C80:lI98|H280052C90 +280052C90:lI105|H280052CA0 +280052CA0:lI110|N +280052CB0:t2:A2:ok,H280052CC8 +280052CC8:lH280052CD8|N +280052CD8:lH280052CE8|N +280052CE8:lI102|H280052CF8 +280052CF8:lI97|H280052D08 +280052D08:lI108|H280052D18 +280052D18:lI115|H280052D28 +280052D28:lI101|N +280052D38:lI45|N +280052D48:t2:A5:error,AD:bad_directory +280052D60:lAB:named_table|H280052D70 +280052D70:lA6:public|N +280052D80:lI101|H280052D90 +280052D90:lI114|H280052DA0 +280052DA0:lI116|H280052DB0 +280052DB0:lI115|N +280052DC0:t2:A5:error,A8:bad_name +280052DD8:lI99|H280052DE8 +280052DE8:lI111|H280052DF8 +280052DF8:lI109|H280052E08 +280052E08:lI112|H280052E18 +280052E18:lI105|H280052E28 +280052E28:lI108|H280052E38 +280052E38:lI101|H280052E48 +280052E48:lI114|N +280052E58:lI67|H280052E68 +280052E68:lI97|H280052E78 +280052E78:lI110|H280052E88 +280052E88:lI39|H280052E98 +280052E98:lI116|H280052EA8 +280052EA8:lI32|H280052EB8 +280052EB8:lI108|H280052EC8 +280052EC8:lI111|H280052ED8 +280052ED8:lI97|H280052EE8 +280052EE8:lI100|H280052EF8 +280052EF8:lI32|H280052F08 +280052F08:lI109|H280052F18 +280052F18:lI111|H280052F28 +280052F28:lI100|H280052F38 +280052F38:lI117|H280052F48 +280052F48:lI108|H280052F58 +280052F58:lI101|H280052F68 +280052F68:lI32|H280052F78 +280052F78:lI39|H280052F88 +280052F88:lI126|H280052F98 +280052F98:lI119|H280052FA8 +280052FA8:lI39|H280052FB8 +280052FB8:lI32|H280052FC8 +280052FC8:lI116|H280052FD8 +280052FD8:lI104|H280052FE8 +280052FE8:lI97|H280052FF8 +280052FF8:lI116|H280053008 +280053008:lI32|H280053018 +280053018:lI114|H280053028 +280053028:lI101|H280053038 +280053038:lI115|H280053048 +280053048:lI105|H280053058 +280053058:lI100|H280053068 +280053068:lI101|H280053078 +280053078:lI115|H280053088 +280053088:lI32|H280053098 +280053098:lI105|H2800530A8 +2800530A8:lI110|H2800530B8 +2800530B8:lI32|H2800530C8 +2800530C8:lI115|H2800530D8 +2800530D8:lI116|H2800530E8 +2800530E8:lI105|H2800530F8 +2800530F8:lI99|H280053108 +280053108:lI107|H280053118 +280053118:lI121|H280053128 +280053128:lI32|H280053138 +280053138:lI100|H280053148 +280053148:lI105|H280053158 +280053158:lI114|H280053168 +280053168:lI10|N +280053178:t2:A5:error,A10:sticky_directory +280053190:t2:A4:true,A7:nocache +2800531A8:t2:A5:false,A5:cache +2800531C0:lI58|H2800531D0 +2800531D0:lI47|N +2800531E0:t2:A5:error,A7:on_load +2800531F8:t2:A5:error,A8:deadlock +280053210:t2:A5:error,AF:on_load_failure +280053228:lH280053238|N +280053238:t3:H280053258,H280053270,H280053298 +280053258:t2:A2:$1,A1:_ +280053270:lH280053280|N +280053280:t2:A7:is_atom,A2:$1 +280053298:lA2:$_|N +2800532A8:Mf0:H280010188: +2800532C0:t1:A3:tag +2800532D0:Mf1:H2800532C0:A5:error +2800532F0:t2:AB:code_server,A5:error +280053308:t1:A3:tag +280053318:Mf1:H280053308:A8:info_msg +280053338:lI10|N +280053348:lI84|H280053358 +280053358:lI104|H280053368 +280053368:lI101|H280053378 +280053378:lI32|H280053388 +280053388:lI111|H280053398 +280053398:lI110|H2800533A8 +2800533A8:lI95|H2800533B8 +2800533B8:lI108|H2800533C8 +2800533C8:lI111|H2800533D8 +2800533D8:lI97|H2800533E8 +2800533E8:lI100|H2800533F8 +2800533F8:lI32|H280053408 +280053408:lI102|H280053418 +280053418:lI117|H280053428 +280053428:lI110|H280053438 +280053438:lI99|H280053448 +280053448:lI116|H280053458 +280053458:lI105|H280053468 +280053468:lI111|H280053478 +280053478:lI110|H280053488 +280053488:lI32|H280053498 +280053498:lI102|H2800534A8 +2800534A8:lI111|H2800534B8 +2800534B8:lI114|H2800534C8 +2800534C8:lI32|H2800534D8 +2800534D8:lI109|H2800534E8 +2800534E8:lI111|H2800534F8 +2800534F8:lI100|H280053508 +280053508:lI117|H280053518 +280053518:lI108|H280053528 +280053528:lI101|H280053538 +280053538:lI32|H280053548 +280053548:lI126|H280053558 +280053558:lI115|H280053568 +280053568:lI32|H280053578 +280053578:lI114|H280053588 +280053588:lI101|H280053598 +280053598:lI116|H2800535A8 +2800535A8:lI117|H2800535B8 +2800535B8:lI114|H2800535C8 +2800535C8:lI110|H2800535D8 +2800535D8:lI101|H2800535E8 +2800535E8:lI100|H2800535F8 +2800535F8:lI58|H280053608 +280053608:lI126|H280053618 +280053618:lI110|H280053628 +280053628:lI126|H280053638 +280053638:lI80|H280053648 +280053648:lI10|N +280053658:lI76|H280053668 +280053668:lI111|H280053678 +280053678:lI97|H280053688 +280053688:lI100|H280053698 +280053698:lI105|H2800536A8 +2800536A8:lI110|H2800536B8 +2800536B8:lI103|H2800536C8 +2800536C8:lI32|H2800536D8 +2800536D8:lI111|H2800536E8 +2800536E8:lI102|H2800536F8 +2800536F8:lI32|H280053708 +280053708:lI126|H280053718 +280053718:lI116|H280053728 +280053728:lI115|H280053738 +280053738:lI32|H280053748 +280053748:lI102|H280053758 +280053758:lI97|H280053768 +280053768:lI105|H280053778 +280053778:lI108|H280053788 +280053788:lI101|H280053798 +280053798:lI100|H2800537A8 +2800537A8:lI58|H2800537B8 +2800537B8:lI32|H2800537C8 +2800537C8:lI126|H2800537D8 +2800537D8:lI112|H2800537E8 +2800537E8:lI10|N +2800537F8:t2:A5:error,A8:embedded +280053810:t2:A5:error,A6:nofile +280053828:lI108|N +280053838:lI114|H280053828 +280053848:lI101|H280053838 +280053858:lI46|H280053848 +280053868:lI114|H280053858 +280053878:lI101|H280053868 +280053888:lI118|H280053878 +280053898:lI114|H280053888 +2800538A8:lI101|H280053898 +2800538B8:lI115|H2800538A8 +2800538C8:lI95|H2800538B8 +2800538D8:lI101|H2800538C8 +2800538E8:lI100|H2800538D8 +2800538F8:lI111|H2800538E8 +280053908:lI99|H2800538F8 +280053918:E4F:g3AAAABNAdRDfzF//Rs9hGTt7lEXZC0AAAADAAAAAHcLY29kZV9zZXJ2ZXJhA2IGohv5WHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA== +280053940:E4F:g3AAAABNAdRDfzF//Rs9hGTt7lEXZC0AAAAEAAAAAHcLY29kZV9zZXJ2ZXJhBGIGohv5WHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA== +280053968:t4:AC:error_logger,A3:pid,A4:time,A2:gl +28005A0C0:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +28005A0F8:Mf6:H28005A0C0:AC:logger_proxy,A9:temporary,I2000,H28005A150,A6:worker,H28005A140 +28005A140:lAC:logger_proxy|N +28005A150:t3:AC:logger_proxy,AA:start_link,N +28005A170:t2:A2:ok,A8:no_state +28005A188:lA9:nosuspend|N +28005A198:t2:A2:ok,H28005A1B0 +28005A1B0:E1B:g3F3DGxvZ2dlcl9wcm94eXcHcmVzdGFydGEA +28005A1D8:lI126|H28005A1E8 +28005A1E8:lI119|H28005A1F8 +28005A1F8:lI32|H28005A208 +28005A208:lI115|H28005A218 +28005A218:lI119|H28005A228 +28005A228:lI105|H28005A238 +28005A238:lI116|H28005A248 +28005A248:lI99|H28005A258 +28005A258:lI104|H28005A268 +28005A268:lI101|H28005A278 +28005A278:lI100|H28005A288 +28005A288:lI32|H28005A298 +28005A298:lI102|H28005A2A8 +28005A2A8:lI114|H28005A2B8 +28005A2B8:lI111|H28005A2C8 +28005A2C8:lI109|H28005A2D8 +28005A2D8:lI32|H28005A2E8 +28005A2E8:lI126|H28005A2F8 +28005A2F8:lI119|H28005A308 +28005A308:lI32|H28005A318 +28005A318:lI116|H28005A328 +28005A328:lI111|H28005A338 +28005A338:lI32|H28005A348 +28005A348:lI126|H28005A358 +28005A358:lI119|H28005A368 +28005A368:lI32|H28005A378 +28005A378:lI109|H28005A388 +28005A388:lI111|H28005A398 +28005A398:lI100|H28005A3A8 +28005A3A8:lI101|N +28005A3B8:t3:A4:line,A4:file,A3:mfa +28005A3D8:Mf3:H28005A3B8:I158,H28005A408,H28005A508 +28005A408:lI108|H28005A418 +28005A418:lI111|H28005A428 +28005A428:lI103|H28005A438 +28005A438:lI103|H28005A448 +28005A448:lI101|H28005A458 +28005A458:lI114|H28005A468 +28005A468:lI95|H28005A478 +28005A478:lI112|H28005A488 +28005A488:lI114|H28005A498 +28005A498:lI111|H28005A4A8 +28005A4A8:lI120|H28005A4B8 +28005A4B8:lI121|H28005A4C8 +28005A4C8:lI46|H28005A4D8 +28005A4D8:lI101|H28005A4E8 +28005A4E8:lI114|H28005A4F8 +28005A4F8:lI108|N +28005A508:t3:AC:logger_proxy,A6:notify,I2 +28005A528:Mf0:H280010188: +28005A540:lI126|H28005A550 +28005A550:lI119|H28005A560 +28005A560:lI32|H28005A570 +28005A570:lI102|H28005A580 +28005A580:lI108|H28005A590 +28005A590:lI117|H28005A5A0 +28005A5A0:lI115|H28005A5B0 +28005A5B0:lI104|H28005A5C0 +28005A5C0:lI101|H28005A5D0 +28005A5D0:lI100|H28005A5E0 +28005A5E0:lI32|H28005A5F0 +28005A5F0:lI126|H28005A600 +28005A600:lI119|H28005A610 +28005A610:lI32|H28005A620 +28005A620:lI108|H28005A630 +28005A630:lI111|H28005A640 +28005A640:lI103|H28005A650 +28005A650:lI32|H28005A660 +28005A660:lI101|H28005A670 +28005A670:lI118|H28005A680 +28005A680:lI101|H28005A690 +28005A690:lI110|H28005A6A0 +28005A6A0:lI116|H28005A6B0 +28005A6B0:lI115|N +28005A6C0:t3:A4:line,A4:file,A3:mfa +28005A6E0:Mf3:H28005A6C0:I161,H28005A710,H28005A810 +28005A710:lI108|H28005A720 +28005A720:lI111|H28005A730 +28005A730:lI103|H28005A740 +28005A740:lI103|H28005A750 +28005A750:lI101|H28005A760 +28005A760:lI114|H28005A770 +28005A770:lI95|H28005A780 +28005A780:lI112|H28005A790 +28005A790:lI114|H28005A7A0 +28005A7A0:lI111|H28005A7B0 +28005A7B0:lI120|H28005A7C0 +28005A7C0:lI121|H28005A7D0 +28005A7D0:lI46|H28005A7E0 +28005A7E0:lI101|H28005A7F0 +28005A7F0:lI114|H28005A800 +28005A800:lI108|N +28005A810:t3:AC:logger_proxy,A6:notify,I2 +28005A830:t3:A4:line,A4:file,A3:mfa +28005A850:Mf3:H28005A830:I164,H28005A880,H28005A980 +28005A880:lI108|H28005A890 +28005A890:lI111|H28005A8A0 +28005A8A0:lI103|H28005A8B0 +28005A8B0:lI103|H28005A8C0 +28005A8C0:lI101|H28005A8D0 +28005A8D0:lI114|H28005A8E0 +28005A8E0:lI95|H28005A8F0 +28005A8F0:lI112|H28005A900 +28005A900:lI114|H28005A910 +28005A910:lI111|H28005A920 +28005A920:lI120|H28005A930 +28005A930:lI121|H28005A940 +28005A940:lI46|H28005A950 +28005A950:lI101|H28005A960 +28005A960:lI114|H28005A970 +28005A970:lI108|N +28005A980:t3:AC:logger_proxy,A6:notify,I2 +28005A9A0:lH28005A9C0|H28005A9B0 +28005A9B0:lH28005AA80|N +28005A9C0:lI126|H28005A9D0 +28005A9D0:lI119|H28005A9E0 +28005A9E0:lI32|H28005A9F0 +28005A9F0:lI114|H28005AA00 +28005AA00:lI101|H28005AA10 +28005AA10:lI115|H28005AA20 +28005AA20:lI116|H28005AA30 +28005AA30:lI97|H28005AA40 +28005AA40:lI114|H28005AA50 +28005AA50:lI116|H28005AA60 +28005AA60:lI101|H28005AA70 +28005AA70:lI100|N +28005AA80:lAC:logger_proxy|N +28005AA90:t2:AC:logger_proxy,AA:log_failed +28005AAA8:t3:A4:line,A4:file,A3:mfa +28005AAC8:Mf3:H28005AAA8:I174,H28005AAF8,H28005ABF8 +28005AAF8:lI108|H28005AB08 +28005AB08:lI111|H28005AB18 +28005AB18:lI103|H28005AB28 +28005AB28:lI103|H28005AB38 +28005AB38:lI101|H28005AB48 +28005AB48:lI114|H28005AB58 +28005AB58:lI95|H28005AB68 +28005AB68:lI112|H28005AB78 +28005AB78:lI114|H28005AB88 +28005AB88:lI111|H28005AB98 +28005AB98:lI120|H28005ABA8 +28005ABA8:lI121|H28005ABB8 +28005ABB8:lI46|H28005ABC8 +28005ABC8:lI101|H28005ABD8 +28005ABD8:lI114|H28005ABE8 +28005ABE8:lI108|N +28005ABF8:t3:AC:logger_proxy,A7:try_log,I1 +28005AC18:lI108|N +28005AC28:lI114|H28005AC18 +28005AC38:lI101|H28005AC28 +28005AC48:lI46|H28005AC38 +28005AC58:lI121|H28005AC48 +28005AC68:lI120|H28005AC58 +28005AC78:lI111|H28005AC68 +28005AC88:lI114|H28005AC78 +28005AC98:lI112|H28005AC88 +28005ACA8:lI95|H28005AC98 +28005ACB8:lI114|H28005ACA8 +28005ACC8:lI101|H28005ACB8 +28005ACD8:lI103|H28005ACC8 +28005ACE8:lI103|H28005ACD8 +28005ACF8:lI111|H28005ACE8 +28005AD08:lI108|H28005ACF8 +28005B2F8:t2:N,N +28005B310:t2:A5:empty,H28005B328 +28005B328:t2:N,N +28005B340:lH28005B350|N +28005B350:t2:N,N +28005B368:lI108|N +28005B378:lI114|H28005B368 +28005B388:lI101|H28005B378 +28005B398:lI46|H28005B388 +28005B3A8:lI101|H28005B398 +28005B3B8:lI117|H28005B3A8 +28005B3C8:lI101|H28005B3B8 +28005B3D8:lI117|H28005B3C8 +28005B3E8:lI113|H28005B3D8 +280061C80:t2:I0,A3:nil +280061C98:t2:I1,I1 +280061CB0:t2:I1,I0 +280061CC8:lI108|N +280061CD8:lI114|H280061CC8 +280061CE8:lI101|H280061CD8 +280061CF8:lI46|H280061CE8 +280061D08:lI115|H280061CF8 +280061D18:lI101|H280061D08 +280061D28:lI101|H280061D18 +280061D38:lI114|H280061D28 +280061D48:lI116|H280061D38 +280061D58:lI95|H280061D48 +280061D68:lI98|H280061D58 +280061D78:lI103|H280061D68 +280068C20:t2:A5:local,A12:standard_error_sup +280068C38:lA3:out|H280068C48 +280068C48:lA6:binary|N +280068C58:t2:A5:error,AB:no_stderror +280068C70:t3:A2:fd,I2,I2 +280068C90:lA6:native|N +280068CA0:t2:A5:error,H280068CB8 +280068CB8:t2:A5:error,A9:put_chars +280068CD0:t2:A2:ok,A2:ok +280068CE8:t2:A5:error,H280068D00 +280068D00:t2:A5:error,A7:enotsup +280068D18:t2:A8:encoding,A4:utf8 +280068D30:t2:A8:encoding,A7:unicode +280068D48:t2:A8:encoding,A6:latin1 +280068D60:lI13|H280068D70 +280068D70:lI10|N +280068D80:lI125|N +280068D90:lI92|H280068DA0 +280068DA0:lI120|H280068DB0 +280068DB0:lI123|N +280068DC0:lI108|N +280068DD0:lI114|H280068DC0 +280068DE0:lI101|H280068DD0 +280068DF0:lI46|H280068DE0 +280068E00:lI114|H280068DF0 +280068E10:lI111|H280068E00 +280068E20:lI114|H280068E10 +280068E30:lI114|H280068E20 +280068E40:lI101|H280068E30 +280068E50:lI95|H280068E40 +280068E60:lI100|H280068E50 +280068E70:lI114|H280068E60 +280068E80:lI97|H280068E70 +280068E90:lI100|H280068E80 +280068EA0:lI110|H280068E90 +280068EB0:lI97|H280068EA0 +280068EC0:lI116|H280068EB0 +280068ED0:lI115|H280068EC0 +280068EE0:E52:g3AAAABQAerTAUbpHNfN5LUoR+s7ypAAAAABAAAAAHcOc3RhbmRhcmRfZXJyb3JhAWIHVpgKWHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA== +280070EF0:lH280070F00|N +280070F00:t2:A9:spawn_opt,H280070F18 +280070F18:lH280070F28|N +280070F28:t2:A12:message_queue_data,A8:off_heap +280070F40:t2:A5:local,A3:rex +280070F58:Mf0:H280010188: +280070F70:t2:A6:badrpc,H280070F88 +280070F88:t2:A4:EXIT,AC:system_limit +280070FA0:lA4:erpc|N +280070FB0:t2:A6:badrpc,A7:timeout +280070FC8:t2:A6:badrpc,A6:notsup +280070FE0:t2:A6:badrpc,A8:nodedown +280070FF8:t2:A5:error,A8:nodedown +280071010:lA5:flush|N +280071020:t2:A4:erpc,A6:badarg +280071038:t2:A5:error,A7:enotsup +280071050:t2:A5:error,A7:request +280071068:lH280071088|H280071078 +280071078:lA9:protected|N +280071088:t2:A10:read_concurrency,A4:true +2800710A0:lI108|N +2800710B0:lI114|H2800710A0 +2800710C0:lI101|H2800710B0 +2800710D0:lI46|H2800710C0 +2800710E0:lI99|H2800710D0 +2800710F0:lI112|H2800710E0 +280071100:lI114|H2800710F0 +280071110:t1:AE:nodes_observer +280071120:E47:g3AAAABFAIbTaQSrg2lQNTtMKFV2UOkAAAACAAAAAHcDcnBjYQJiBDabSFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +280071148:E47:g3AAAABFAIbTaQSrg2lQNTtMKFV2UOkAAAADAAAAAHcDcnBjYQNiBDabSFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +280071170:E47:g3AAAABFAYbTaQSrg2lQNTtMKFV2UOkAAAAHAAAAAHcDcnBjYQdiBDabSFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +2800711F8:t2:A5:local,A12:global_name_server +280071210:t2:A2:ok,A5:allow +280071228:lI103|H280071238 +280071238:lI108|H280071248 +280071248:lI111|H280071258 +280071258:lI98|H280071268 +280071268:lI97|H280071278 +280071278:lI108|H280071288 +280071288:lI58|H280071298 +280071298:lI32|H2800712A8 +2800712A8:lI126|H2800712B8 +2800712B8:lI119|H2800712C8 +2800712C8:lI32|H2800712D8 +2800712D8:lI114|H2800712E8 +2800712E8:lI101|H2800712F8 +2800712F8:lI103|H280071308 +280071308:lI105|H280071318 +280071318:lI115|H280071328 +280071328:lI116|H280071338 +280071338:lI101|H280071348 +280071348:lI114|H280071358 +280071358:lI101|H280071368 +280071368:lI100|H280071378 +280071378:lI32|H280071388 +280071388:lI117|H280071398 +280071398:lI110|H2800713A8 +2800713A8:lI100|H2800713B8 +2800713B8:lI101|H2800713C8 +2800713C8:lI114|H2800713D8 +2800713D8:lI32|H2800713E8 +2800713E8:lI115|H2800713F8 +2800713F8:lI101|H280071408 +280071408:lI118|H280071418 +280071418:lI101|H280071428 +280071428:lI114|H280071438 +280071438:lI97|H280071448 +280071448:lI108|H280071458 +280071458:lI32|H280071468 +280071468:lI110|H280071478 +280071478:lI97|H280071488 +280071488:lI109|H280071498 +280071498:lI101|H2800714A8 +2800714A8:lI115|H2800714B8 +2800714B8:lI58|H2800714C8 +2800714C8:lI32|H2800714D8 +2800714D8:lI126|H2800714E8 +2800714E8:lI116|H2800714F8 +2800714F8:lI119|H280071508 +280071508:lI10|N +280071518:lH280071528|N +280071528:t3:H280071548,N,H280071570 +280071548:t4:A2:$1,A2:$2,A2:$3,A2:$4 +280071570:lA2:$1|N +280071580:t1:AD:connection_id +280071590:Mf1:H280071580:A4:true +2800715B0:Mf0:H280010188: +2800715C8:lA3:set|H2800715D8 +2800715D8:lAB:named_table|H2800715E8 +2800715E8:lA9:protected|N +2800715F8:lA3:set|H280071608 +280071608:lAB:named_table|H280071618 +280071618:lA9:protected|H280071628 +280071628:lH280071638|N +280071638:t2:A10:read_concurrency,A4:true +280071650:lA3:bag|H280071660 +280071660:lAB:named_table|H280071670 +280071670:lA9:protected|N +280071680:lI71|H280071690 +280071690:lI76|H2800716A0 +2800716A0:lI79|H2800716B0 +2800716B0:lI66|H2800716C0 +2800716C0:lI65|H2800716D0 +2800716D0:lI76|H2800716E0 +2800716E0:lI95|H2800716F0 +2800716F0:lI72|H280071700 +280071700:lI73|H280071710 +280071710:lI71|H280071720 +280071720:lI72|H280071730 +280071730:lI95|H280071740 +280071740:lI76|H280071750 +280071750:lI69|H280071760 +280071760:lI86|H280071770 +280071770:lI69|H280071780 +280071780:lI76|H280071790 +280071790:lI95|H2800717A0 +2800717A0:lI84|H2800717B0 +2800717B0:lI82|H2800717C0 +2800717C0:lI65|H2800717D0 +2800717D0:lI67|H2800717E0 +2800717E0:lI69|N +2800717F0:lI84|H280071800 +280071800:lI82|H280071810 +280071810:lI85|H280071820 +280071820:lI69|N +280071830:lI102|H280071840 +280071840:lI97|H280071850 +280071850:lI108|H280071860 +280071860:lI115|H280071870 +280071870:lI101|N +280071880:lH280071890|N +280071890:t2:A7:timeout,A8:infinity +2800718A8:t2:A8:do_trace,A5:false +2800718C0:t2:A8:do_trace,A4:true +2800718D8:lI84|H2800718E8 +2800718E8:lI104|H2800718F8 +2800718F8:lI101|H280071908 +280071908:lI32|H280071918 +280071918:lI103|H280071928 +280071928:lI108|H280071938 +280071938:lI111|H280071948 +280071948:lI98|H280071958 +280071958:lI97|H280071968 +280071968:lI108|H280071978 +280071978:lI95|H280071988 +280071988:lI110|H280071998 +280071998:lI97|H2800719A8 +2800719A8:lI109|H2800719B8 +2800719B8:lI101|H2800719C8 +2800719C8:lI95|H2800719D8 +2800719D8:lI115|H2800719E8 +2800719E8:lI101|H2800719F8 +2800719F8:lI114|H280071A08 +280071A08:lI118|H280071A18 +280071A18:lI101|H280071A28 +280071A28:lI114|H280071A38 +280071A38:lI32|H280071A48 +280071A48:lI114|H280071A58 +280071A58:lI101|H280071A68 +280071A68:lI99|H280071A78 +280071A78:lI101|H280071A88 +280071A88:lI105|H280071A98 +280071A98:lI118|H280071AA8 +280071AA8:lI101|H280071AB8 +280071AB8:lI100|H280071AC8 +280071AC8:lI32|H280071AD8 +280071AD8:lI97|H280071AE8 +280071AE8:lI110|H280071AF8 +280071AF8:lI32|H280071B08 +280071B08:lI117|H280071B18 +280071B18:lI110|H280071B28 +280071B28:lI101|H280071B38 +280071B38:lI120|H280071B48 +280071B48:lI112|H280071B58 +280071B58:lI101|H280071B68 +280071B68:lI99|H280071B78 +280071B78:lI116|H280071B88 +280071B88:lI101|H280071B98 +280071B98:lI100|H280071BA8 +280071BA8:lI32|H280071BB8 +280071BB8:lI109|H280071BC8 +280071BC8:lI101|H280071BD8 +280071BD8:lI115|H280071BE8 +280071BE8:lI115|H280071BF8 +280071BF8:lI97|H280071C08 +280071C08:lI103|H280071C18 +280071C18:lI101|H280071C28 +280071C28:lI58|H280071C38 +280071C38:lI10|H280071C48 +280071C48:lI104|H280071C58 +280071C58:lI97|H280071C68 +280071C68:lI110|H280071C78 +280071C78:lI100|H280071C88 +280071C88:lI108|H280071C98 +280071C98:lI101|H280071CA8 +280071CA8:lI95|H280071CB8 +280071CB8:lI99|H280071CC8 +280071CC8:lI97|H280071CD8 +280071CD8:lI108|H280071CE8 +280071CE8:lI108|H280071CF8 +280071CF8:lI40|H280071D08 +280071D08:lI126|H280071D18 +280071D18:lI116|H280071D28 +280071D28:lI112|H280071D38 +280071D38:lI44|H280071D48 +280071D48:lI32|H280071D58 +280071D58:lI126|H280071D68 +280071D68:lI116|H280071D78 +280071D78:lI112|H280071D88 +280071D88:lI44|H280071D98 +280071D98:lI32|H280071DA8 +280071DA8:lI95|H280071DB8 +280071DB8:lI41|H280071DC8 +280071DC8:lI10|N +280071DD8:lI73|H280071DE8 +280071DE8:lI108|H280071DF8 +280071DF8:lI108|H280071E08 +280071E08:lI101|H280071E18 +280071E18:lI103|H280071E28 +280071E28:lI97|H280071E38 +280071E38:lI108|H280071E48 +280071E48:lI32|H280071E58 +280071E58:lI103|H280071E68 +280071E68:lI108|H280071E78 +280071E78:lI111|H280071E88 +280071E88:lI98|H280071E98 +280071E98:lI97|H280071EA8 +280071EA8:lI108|H280071EB8 +280071EB8:lI32|H280071EC8 +280071EC8:lI112|H280071ED8 +280071ED8:lI114|H280071EE8 +280071EE8:lI111|H280071EF8 +280071EF8:lI116|H280071F08 +280071F08:lI111|H280071F18 +280071F18:lI99|H280071F28 +280071F28:lI111|H280071F38 +280071F38:lI108|H280071F48 +280071F48:lI32|H280071F58 +280071F58:lI118|H280071F68 +280071F68:lI101|H280071F78 +280071F78:lI114|H280071F88 +280071F88:lI115|H280071F98 +280071F98:lI105|H280071FA8 +280071FA8:lI111|H280071FB8 +280071FB8:lI110|H280071FC8 +280071FC8:lI32|H280071FD8 +280071FD8:lI126|H280071FE8 +280071FE8:lI112|H280071FF8 +280071FF8:lI32|H280072008 +280072008:lI78|H280072018 +280072018:lI111|H280072028 +280072028:lI100|H280072038 +280072038:lI101|H280072048 +280072048:lI58|H280072058 +280072058:lI32|H280072068 +280072068:lI126|H280072078 +280072078:lI112|H280072088 +280072088:lI10|N +280072098:lI84|H2800720A8 +2800720A8:lI104|H2800720B8 +2800720B8:lI101|H2800720C8 +2800720C8:lI32|H2800720D8 +2800720D8:lI103|H2800720E8 +2800720E8:lI108|H2800720F8 +2800720F8:lI111|H280072108 +280072108:lI98|H280072118 +280072118:lI97|H280072128 +280072128:lI108|H280072138 +280072138:lI95|H280072148 +280072148:lI110|H280072158 +280072158:lI97|H280072168 +280072168:lI109|H280072178 +280072178:lI101|H280072188 +280072188:lI95|H280072198 +280072198:lI115|H2800721A8 +2800721A8:lI101|H2800721B8 +2800721B8:lI114|H2800721C8 +2800721C8:lI118|H2800721D8 +2800721D8:lI101|H2800721E8 +2800721E8:lI114|H2800721F8 +2800721F8:lI32|H280072208 +280072208:lI114|H280072218 +280072218:lI101|H280072228 +280072228:lI99|H280072238 +280072238:lI101|H280072248 +280072248:lI105|H280072258 +280072258:lI118|H280072268 +280072268:lI101|H280072278 +280072278:lI100|H280072288 +280072288:lI32|H280072298 +280072298:lI97|H2800722A8 +2800722A8:lI110|H2800722B8 +2800722B8:lI32|H2800722C8 +2800722C8:lI117|H2800722D8 +2800722D8:lI110|H2800722E8 +2800722E8:lI101|H2800722F8 +2800722F8:lI120|H280072308 +280072308:lI112|H280072318 +280072318:lI101|H280072328 +280072328:lI99|H280072338 +280072338:lI116|H280072348 +280072348:lI101|H280072358 +280072358:lI100|H280072368 +280072368:lI32|H280072378 +280072378:lI109|H280072388 +280072388:lI101|H280072398 +280072398:lI115|H2800723A8 +2800723A8:lI115|H2800723B8 +2800723B8:lI97|H2800723C8 +2800723C8:lI103|H2800723D8 +2800723D8:lI101|H2800723E8 +2800723E8:lI58|H2800723F8 +2800723F8:lI10|H280072408 +280072408:lI104|H280072418 +280072418:lI97|H280072428 +280072428:lI110|H280072438 +280072438:lI100|H280072448 +280072448:lI108|H280072458 +280072458:lI101|H280072468 +280072468:lI95|H280072478 +280072478:lI99|H280072488 +280072488:lI97|H280072498 +280072498:lI115|H2800724A8 +2800724A8:lI116|H2800724B8 +2800724B8:lI40|H2800724C8 +2800724C8:lI126|H2800724D8 +2800724D8:lI116|H2800724E8 +2800724E8:lI112|H2800724F8 +2800724F8:lI44|H280072508 +280072508:lI32|H280072518 +280072518:lI95|H280072528 +280072528:lI41|H280072538 +280072538:lI10|N +280072548:t3:A4:conf,A4:true,A4:true +280072568:lI100|H280072578 +280072578:lI105|H280072588 +280072588:lI115|H280072598 +280072598:lI99|H2800725A8 +2800725A8:lI111|H2800725B8 +2800725B8:lI110|H2800725C8 +2800725C8:lI110|H2800725D8 +2800725D8:lI101|H2800725E8 +2800725E8:lI99|H2800725F8 +2800725F8:lI116|H280072608 +280072608:lI101|H280072618 +280072618:lI100|H280072628 +280072628:lI32|H280072638 +280072638:lI111|H280072648 +280072648:lI108|H280072658 +280072658:lI100|N +280072668:lI101|H280072678 +280072678:lI120|H280072688 +280072688:lI99|H280072698 +280072698:lI108|H2800726A8 +2800726A8:lI117|H2800726B8 +2800726B8:lI100|H2800726C8 +2800726C8:lI101|H2800726D8 +2800726D8:lI100|H2800726E8 +2800726E8:lI32|H2800726F8 +2800726F8:lI103|H280072708 +280072708:lI108|H280072718 +280072718:lI111|H280072728 +280072728:lI98|H280072738 +280072738:lI97|H280072748 +280072748:lI108|H280072758 +280072758:lI32|H280072768 +280072768:lI103|H280072778 +280072778:lI114|H280072788 +280072788:lI111|H280072798 +280072798:lI117|H2800727A8 +2800727A8:lI112|H2800727B8 +2800727B8:lI32|H2800727C8 +2800727C8:lI109|H2800727D8 +2800727D8:lI101|H2800727E8 +2800727E8:lI109|H2800727F8 +2800727F8:lI98|H280072808 +280072808:lI101|H280072818 +280072818:lI114|N +280072828:lI114|H280072838 +280072838:lI101|H280072848 +280072848:lI113|H280072858 +280072858:lI117|H280072868 +280072868:lI101|H280072878 +280072878:lI115|H280072888 +280072888:lI116|H280072898 +280072898:lI101|H2800728A8 +2800728A8:lI100|H2800728B8 +2800728B8:lI32|H2800728C8 +2800728C8:lI100|H2800728D8 +2800728D8:lI105|H2800728E8 +2800728E8:lI115|H2800728F8 +2800728F8:lI99|H280072908 +280072908:lI111|H280072918 +280072918:lI110|H280072928 +280072928:lI110|H280072938 +280072938:lI101|H280072948 +280072948:lI99|H280072958 +280072958:lI116|H280072968 +280072968:lI32|H280072978 +280072978:lI102|H280072988 +280072988:lI114|H280072998 +280072998:lI111|H2800729A8 +2800729A8:lI109|N +2800729B8:lI39|H2800729C8 +2800729C8:lI103|H2800729D8 +2800729D8:lI108|H2800729E8 +2800729E8:lI111|H2800729F8 +2800729F8:lI98|H280072A08 +280072A08:lI97|H280072A18 +280072A18:lI108|H280072A28 +280072A28:lI39|H280072A38 +280072A38:lI32|H280072A48 +280072A48:lI97|H280072A58 +280072A58:lI116|H280072A68 +280072A68:lI32|H280072A78 +280072A78:lI110|H280072A88 +280072A88:lI111|H280072A98 +280072A98:lI100|H280072AA8 +280072AA8:lI101|H280072AB8 +280072AB8:lI32|H280072AC8 +280072AC8:lI126|H280072AD8 +280072AD8:lI112|H280072AE8 +280072AE8:lI32|H280072AF8 +280072AF8:lI126|H280072B08 +280072B08:lI115|H280072B18 +280072B18:lI32|H280072B28 +280072B28:lI110|H280072B38 +280072B38:lI111|H280072B48 +280072B48:lI100|H280072B58 +280072B58:lI101|H280072B68 +280072B68:lI32|H280072B78 +280072B78:lI126|H280072B88 +280072B88:lI112|H280072B98 +280072B98:lI32|H280072BA8 +280072BA8:lI105|H280072BB8 +280072BB8:lI110|H280072BC8 +280072BC8:lI32|H280072BD8 +280072BD8:lI111|H280072BE8 +280072BE8:lI114|H280072BF8 +280072BF8:lI100|H280072C08 +280072C08:lI101|H280072C18 +280072C18:lI114|H280072C28 +280072C28:lI32|H280072C38 +280072C38:lI116|H280072C48 +280072C48:lI111|H280072C58 +280072C58:lI32|H280072C68 +280072C68:lI112|H280072C78 +280072C78:lI114|H280072C88 +280072C88:lI101|H280072C98 +280072C98:lI118|H280072CA8 +280072CA8:lI101|H280072CB8 +280072CB8:lI110|H280072CC8 +280072CC8:lI116|H280072CD8 +280072CD8:lI32|H280072CE8 +280072CE8:lI111|H280072CF8 +280072CF8:lI118|H280072D08 +280072D08:lI101|H280072D18 +280072D18:lI114|H280072D28 +280072D28:lI108|H280072D38 +280072D38:lI97|H280072D48 +280072D48:lI112|H280072D58 +280072D58:lI112|H280072D68 +280072D68:lI105|H280072D78 +280072D78:lI110|H280072D88 +280072D88:lI103|H280072D98 +280072D98:lI32|H280072DA8 +280072DA8:lI112|H280072DB8 +280072DB8:lI97|H280072DC8 +280072DC8:lI114|H280072DD8 +280072DD8:lI116|H280072DE8 +280072DE8:lI105|H280072DF8 +280072DF8:lI116|H280072E08 +280072E08:lI105|H280072E18 +280072E18:lI111|H280072E28 +280072E28:lI110|H280072E38 +280072E38:lI115|N +280072E48:t3:A4:conf,A5:false,A5:false +280072E68:lI100|H280072E78 +280072E78:lI105|H280072E88 +280072E88:lI115|H280072E98 +280072E98:lI99|H280072EA8 +280072EA8:lI111|H280072EB8 +280072EB8:lI110|H280072EC8 +280072EC8:lI110|H280072ED8 +280072ED8:lI101|H280072EE8 +280072EE8:lI99|H280072EF8 +280072EF8:lI116|H280072F08 +280072F08:lI101|H280072F18 +280072F18:lI100|N +280072F28:lI62|H280072F38 +280072F38:lI62|H280072F48 +280072F48:lI62|H280072F58 +280072F58:lI62|H280072F68 +280072F68:lI32|H280072F78 +280072F78:lI126|H280072F88 +280072F88:lI112|H280072F98 +280072F98:lI10|N +280072FA8:lI84|H280072FB8 +280072FB8:lI104|H280072FC8 +280072FC8:lI101|H280072FD8 +280072FD8:lI32|H280072FE8 +280072FE8:lI103|H280072FF8 +280072FF8:lI108|H280073008 +280073008:lI111|H280073018 +280073018:lI98|H280073028 +280073028:lI97|H280073038 +280073038:lI108|H280073048 +280073048:lI95|H280073058 +280073058:lI110|H280073068 +280073068:lI97|H280073078 +280073078:lI109|H280073088 +280073088:lI101|H280073098 +280073098:lI95|H2800730A8 +2800730A8:lI115|H2800730B8 +2800730B8:lI101|H2800730C8 +2800730C8:lI114|H2800730D8 +2800730D8:lI118|H2800730E8 +2800730E8:lI101|H2800730F8 +2800730F8:lI114|H280073108 +280073108:lI32|H280073118 +280073118:lI114|H280073128 +280073128:lI101|H280073138 +280073138:lI99|H280073148 +280073148:lI101|H280073158 +280073158:lI105|H280073168 +280073168:lI118|H280073178 +280073178:lI101|H280073188 +280073188:lI100|H280073198 +280073198:lI32|H2800731A8 +2800731A8:lI97|H2800731B8 +2800731B8:lI110|H2800731C8 +2800731C8:lI32|H2800731D8 +2800731D8:lI117|H2800731E8 +2800731E8:lI110|H2800731F8 +2800731F8:lI101|H280073208 +280073208:lI120|H280073218 +280073218:lI112|H280073228 +280073228:lI101|H280073238 +280073238:lI99|H280073248 +280073248:lI116|H280073258 +280073258:lI101|H280073268 +280073268:lI100|H280073278 +280073278:lI32|H280073288 +280073288:lI109|H280073298 +280073298:lI101|H2800732A8 +2800732A8:lI115|H2800732B8 +2800732B8:lI115|H2800732C8 +2800732C8:lI97|H2800732D8 +2800732D8:lI103|H2800732E8 +2800732E8:lI101|H2800732F8 +2800732F8:lI58|H280073308 +280073308:lI10|H280073318 +280073318:lI104|H280073328 +280073328:lI97|H280073338 +280073338:lI110|H280073348 +280073348:lI100|H280073358 +280073358:lI108|H280073368 +280073368:lI101|H280073378 +280073378:lI95|H280073388 +280073388:lI105|H280073398 +280073398:lI110|H2800733A8 +2800733A8:lI102|H2800733B8 +2800733B8:lI111|H2800733C8 +2800733C8:lI40|H2800733D8 +2800733D8:lI126|H2800733E8 +2800733E8:lI116|H2800733F8 +2800733F8:lI112|H280073408 +280073408:lI44|H280073418 +280073418:lI32|H280073428 +280073428:lI95|H280073438 +280073438:lI41|H280073448 +280073448:lI10|N +280073458:lI39|H280073468 +280073468:lI103|H280073478 +280073478:lI108|H280073488 +280073488:lI111|H280073498 +280073498:lI98|H2800734A8 +2800734A8:lI97|H2800734B8 +2800734B8:lI108|H2800734C8 +2800734C8:lI39|H2800734D8 +2800734D8:lI32|H2800734E8 +2800734E8:lI97|H2800734F8 +2800734F8:lI116|H280073508 +280073508:lI32|H280073518 +280073518:lI110|H280073528 +280073528:lI111|H280073538 +280073538:lI100|H280073548 +280073548:lI101|H280073558 +280073558:lI32|H280073568 +280073568:lI126|H280073578 +280073578:lI112|H280073588 +280073588:lI32|H280073598 +280073598:lI103|H2800735A8 +2800735A8:lI111|H2800735B8 +2800735B8:lI116|H2800735C8 +2800735C8:lI32|H2800735D8 +2800735D8:lI97|H2800735E8 +2800735E8:lI110|H2800735F8 +2800735F8:lI32|H280073608 +280073608:lI111|H280073618 +280073618:lI117|H280073628 +280073628:lI116|H280073638 +280073638:lI32|H280073648 +280073648:lI111|H280073658 +280073658:lI102|H280073668 +280073668:lI32|H280073678 +280073678:lI115|H280073688 +280073688:lI121|H280073698 +280073698:lI110|H2800736A8 +2800736A8:lI99|H2800736B8 +2800736B8:lI32|H2800736C8 +2800736C8:lI99|H2800736D8 +2800736D8:lI111|H2800736E8 +2800736E8:lI110|H2800736F8 +2800736F8:lI110|H280073708 +280073708:lI101|H280073718 +280073718:lI99|H280073728 +280073728:lI116|H280073738 +280073738:lI105|H280073748 +280073748:lI111|H280073758 +280073758:lI110|H280073768 +280073768:lI32|H280073778 +280073778:lI97|H280073788 +280073788:lI116|H280073798 +280073798:lI116|H2800737A8 +2800737A8:lI101|H2800737B8 +2800737B8:lI109|H2800737C8 +2800737C8:lI112|H2800737D8 +2800737D8:lI116|H2800737E8 +2800737E8:lI32|H2800737F8 +2800737F8:lI102|H280073808 +280073808:lI114|H280073818 +280073818:lI111|H280073828 +280073828:lI109|H280073838 +280073838:lI32|H280073848 +280073848:lI111|H280073858 +280073858:lI108|H280073868 +280073868:lI100|H280073878 +280073878:lI32|H280073888 +280073888:lI118|H280073898 +280073898:lI101|H2800738A8 +2800738A8:lI114|H2800738B8 +2800738B8:lI115|H2800738C8 +2800738C8:lI105|H2800738D8 +2800738D8:lI111|H2800738E8 +2800738E8:lI110|H2800738F8 +2800738F8:lI32|H280073908 +280073908:lI126|H280073918 +280073918:lI112|H280073928 +280073928:lI32|H280073938 +280073938:lI110|H280073948 +280073948:lI111|H280073958 +280073958:lI100|H280073968 +280073968:lI101|H280073978 +280073978:lI32|H280073988 +280073988:lI126|H280073998 +280073998:lI112|H2800739A8 +2800739A8:lI46|H2800739B8 +2800739B8:lI32|H2800739C8 +2800739C8:lI68|H2800739D8 +2800739D8:lI105|H2800739E8 +2800739E8:lI115|H2800739F8 +2800739F8:lI99|H280073A08 +280073A08:lI111|H280073A18 +280073A18:lI110|H280073A28 +280073A28:lI110|H280073A38 +280073A38:lI101|H280073A48 +280073A48:lI99|H280073A58 +280073A58:lI116|H280073A68 +280073A68:lI105|H280073A78 +280073A78:lI110|H280073A88 +280073A88:lI103|H280073A98 +280073A98:lI32|H280073AA8 +280073AA8:lI102|H280073AB8 +280073AB8:lI114|H280073AC8 +280073AC8:lI111|H280073AD8 +280073AD8:lI109|H280073AE8 +280073AE8:lI32|H280073AF8 +280073AF8:lI105|H280073B08 +280073B08:lI116|H280073B18 +280073B18:lI46|N +280073B28:t2:A4:true,N +280073B40:lA5:flush|N +280073B50:lA15:allow_passive_connect|N +280073B60:lI39|H280073B70 +280073B70:lI103|H280073B80 +280073B80:lI108|H280073B90 +280073B90:lI111|H280073BA0 +280073BA0:lI98|H280073BB0 +280073BB0:lI97|H280073BC0 +280073BC0:lI108|H280073BD0 +280073BD0:lI39|H280073BE0 +280073BE0:lI32|H280073BF0 +280073BF0:lI97|H280073C00 +280073C00:lI116|H280073C10 +280073C10:lI32|H280073C20 +280073C20:lI126|H280073C30 +280073C30:lI119|H280073C40 +280073C40:lI32|H280073C50 +280073C50:lI102|H280073C60 +280073C60:lI97|H280073C70 +280073C70:lI105|H280073C80 +280073C80:lI108|H280073C90 +280073C90:lI101|H280073CA0 +280073CA0:lI100|H280073CB0 +280073CB0:lI32|H280073CC0 +280073CC0:lI116|H280073CD0 +280073CD0:lI111|H280073CE0 +280073CE0:lI32|H280073CF0 +280073CF0:lI99|H280073D00 +280073D00:lI111|H280073D10 +280073D10:lI110|H280073D20 +280073D20:lI110|H280073D30 +280073D30:lI101|H280073D40 +280073D40:lI99|H280073D50 +280073D50:lI116|H280073D60 +280073D60:lI32|H280073D70 +280073D70:lI116|H280073D80 +280073D80:lI111|H280073D90 +280073D90:lI32|H280073DA0 +280073DA0:lI126|H280073DB0 +280073DB0:lI119|H280073DC0 +280073DC0:lI10|N +280073DD0:lA9:noconnect|N +280073DE0:lI103|H280073DF0 +280073DF0:lI108|H280073E00 +280073E00:lI111|H280073E10 +280073E10:lI98|H280073E20 +280073E20:lI97|H280073E30 +280073E30:lI108|H280073E40 +280073E40:lI58|H280073E50 +280073E50:lI32|H280073E60 +280073E60:lI98|H280073E70 +280073E70:lI97|H280073E80 +280073E80:lI100|H280073E90 +280073E90:lI114|H280073EA0 +280073EA0:lI112|H280073EB0 +280073EB0:lI99|H280073EC0 +280073EC0:lI32|H280073ED0 +280073ED0:lI126|H280073EE0 +280073EE0:lI119|H280073EF0 +280073EF0:lI32|H280073F00 +280073F00:lI114|H280073F10 +280073F10:lI101|H280073F20 +280073F20:lI99|H280073F30 +280073F30:lI101|H280073F40 +280073F40:lI105|H280073F50 +280073F50:lI118|H280073F60 +280073F60:lI101|H280073F70 +280073F70:lI100|H280073F80 +280073F80:lI32|H280073F90 +280073F90:lI119|H280073FA0 +280073FA0:lI104|H280073FB0 +280073FB0:lI101|H280073FC0 +280073FC0:lI110|H280073FD0 +280073FD0:lI32|H280073FE0 +280073FE0:lI99|H280073FF0 +280073FF0:lI111|H280074000 +280074000:lI110|H280074010 +280074010:lI102|H280074020 +280074020:lI108|H280074030 +280074030:lI105|H280074040 +280074040:lI99|H280074050 +280074050:lI116|H280074060 +280074060:lI105|H280074070 +280074070:lI110|H280074080 +280074080:lI103|H280074090 +280074090:lI32|H2800740A0 +2800740A0:lI110|H2800740B0 +2800740B0:lI97|H2800740C0 +2800740C0:lI109|H2800740D0 +2800740D0:lI101|H2800740E0 +2800740E0:lI32|H2800740F0 +2800740F0:lI126|H280074100 +280074100:lI116|H280074110 +280074110:lI119|H280074120 +280074120:lI32|H280074130 +280074130:lI119|H280074140 +280074140:lI97|H280074150 +280074150:lI115|H280074160 +280074160:lI32|H280074170 +280074170:lI102|H280074180 +280074180:lI111|H280074190 +280074190:lI117|H2800741A0 +2800741A0:lI110|H2800741B0 +2800741B0:lI100|H2800741C0 +2800741C0:lI10|N +2800741D0:lI103|H2800741E0 +2800741E0:lI108|H2800741F0 +2800741F0:lI111|H280074200 +280074200:lI98|H280074210 +280074210:lI97|H280074220 +280074220:lI108|H280074230 +280074230:lI58|H280074240 +280074240:lI32|H280074250 +280074250:lI82|H280074260 +280074260:lI101|H280074270 +280074270:lI115|H280074280 +280074280:lI111|H280074290 +280074290:lI108|H2800742A0 +2800742A0:lI118|H2800742B0 +2800742B0:lI101|H2800742C0 +2800742C0:lI32|H2800742D0 +2800742D0:lI109|H2800742E0 +2800742E0:lI101|H2800742F0 +2800742F0:lI116|H280074300 +280074300:lI104|H280074310 +280074310:lI111|H280074320 +280074320:lI100|H280074330 +280074330:lI32|H280074340 +280074340:lI126|H280074350 +280074350:lI119|H280074360 +280074360:lI32|H280074370 +280074370:lI102|H280074380 +280074380:lI111|H280074390 +280074390:lI114|H2800743A0 +2800743A0:lI32|H2800743B0 +2800743B0:lI99|H2800743C0 +2800743C0:lI111|H2800743D0 +2800743D0:lI110|H2800743E0 +2800743E0:lI102|H2800743F0 +2800743F0:lI108|H280074400 +280074400:lI105|H280074410 +280074410:lI99|H280074420 +280074420:lI116|H280074430 +280074430:lI105|H280074440 +280074440:lI110|H280074450 +280074450:lI103|H280074460 +280074460:lI32|H280074470 +280074470:lI110|H280074480 +280074480:lI97|H280074490 +280074490:lI109|H2800744A0 +2800744A0:lI101|H2800744B0 +2800744B0:lI32|H2800744C0 +2800744C0:lI126|H2800744D0 +2800744D0:lI116|H2800744E0 +2800744E0:lI119|H2800744F0 +2800744F0:lI32|H280074500 +280074500:lI114|H280074510 +280074510:lI101|H280074520 +280074520:lI116|H280074530 +280074530:lI117|H280074540 +280074540:lI114|H280074550 +280074550:lI110|H280074560 +280074560:lI101|H280074570 +280074570:lI100|H280074580 +280074580:lI32|H280074590 +280074590:lI126|H2800745A0 +2800745A0:lI116|H2800745B0 +2800745B0:lI119|H2800745C0 +2800745C0:lI10|N +2800745D0:lI103|H2800745E0 +2800745E0:lI108|H2800745F0 +2800745F0:lI111|H280074600 +280074600:lI98|H280074610 +280074610:lI97|H280074620 +280074620:lI108|H280074630 +280074630:lI58|H280074640 +280074640:lI32|H280074650 +280074650:lI78|H280074660 +280074660:lI97|H280074670 +280074670:lI109|H280074680 +280074680:lI101|H280074690 +280074690:lI32|H2800746A0 +2800746A0:lI99|H2800746B0 +2800746B0:lI111|H2800746C0 +2800746C0:lI110|H2800746D0 +2800746D0:lI102|H2800746E0 +2800746E0:lI108|H2800746F0 +2800746F0:lI105|H280074700 +280074700:lI99|H280074710 +280074710:lI116|H280074720 +280074720:lI32|H280074730 +280074730:lI116|H280074740 +280074740:lI101|H280074750 +280074750:lI114|H280074760 +280074760:lI109|H280074770 +280074770:lI105|H280074780 +280074780:lI110|H280074790 +280074790:lI97|H2800747A0 +2800747A0:lI116|H2800747B0 +2800747B0:lI105|H2800747C0 +2800747C0:lI110|H2800747D0 +2800747D0:lI103|H2800747E0 +2800747E0:lI32|H2800747F0 +2800747F0:lI126|H280074800 +280074800:lI116|H280074810 +280074810:lI119|H280074820 +280074820:lI10|N +280074830:lA9:monotonic|N +280074840:t3:A9:undefined,A9:undefined,A9:undefined +280074860:lH280074880|H280074870 +280074870:lH280074898|N +280074880:t2:A5:async,A4:true +280074898:t2:A4:info,A5:false +2800748B0:lH2800748C0|N +2800748C0:t3:H2800748E0,N,H280074908 +2800748E0:t4:A2:$1,A2:$2,A2:$3,A2:$4 +280074908:lH280074918|N +280074918:t1:H280074928 +280074928:t3:A2:$1,A2:$2,A2:$3 +280074948:lI84|H280074958 +280074958:lI114|H280074968 +280074968:lI121|H280074978 +280074978:lI105|H280074988 +280074988:lI110|H280074998 +280074998:lI103|H2800749A8 +2800749A8:lI32|H2800749B8 +2800749B8:lI116|H2800749C8 +2800749C8:lI111|H2800749D8 +2800749D8:lI32|H2800749E8 +2800749E8:lI115|H2800749F8 +2800749F8:lI121|H280074A08 +280074A08:lI110|H280074A18 +280074A18:lI99|H280074A28 +280074A28:lI32|H280074A38 +280074A38:lI110|H280074A48 +280074A48:lI111|H280074A58 +280074A58:lI100|H280074A68 +280074A68:lI101|H280074A78 +280074A78:lI115|H280074A88 +280074A88:lI32|H280074A98 +280074A98:lI110|H280074AA8 +280074AA8:lI111|H280074AB8 +280074AB8:lI116|H280074AC8 +280074AC8:lI32|H280074AD8 +280074AD8:lI100|H280074AE8 +280074AE8:lI101|H280074AF8 +280074AF8:lI102|H280074B08 +280074B08:lI105|H280074B18 +280074B18:lI110|H280074B28 +280074B28:lI101|H280074B38 +280074B38:lI100|H280074B48 +280074B48:lI32|H280074B58 +280074B58:lI105|H280074B68 +280074B68:lI110|H280074B78 +280074B78:lI32|H280074B88 +280074B88:lI116|H280074B98 +280074B98:lI104|H280074BA8 +280074BA8:lI101|H280074BB8 +280074BB8:lI32|H280074BC8 +280074BC8:lI111|H280074BD8 +280074BD8:lI119|H280074BE8 +280074BE8:lI110|H280074BF8 +280074BF8:lI32|H280074C08 +280074C08:lI103|H280074C18 +280074C18:lI108|H280074C28 +280074C28:lI111|H280074C38 +280074C38:lI98|H280074C48 +280074C48:lI97|H280074C58 +280074C58:lI108|H280074C68 +280074C68:lI32|H280074C78 +280074C78:lI103|H280074C88 +280074C88:lI114|H280074C98 +280074C98:lI111|H280074CA8 +280074CA8:lI117|H280074CB8 +280074CB8:lI112|N +280074CC8:lI103|H280074CD8 +280074CD8:lI108|H280074CE8 +280074CE8:lI111|H280074CF8 +280074CF8:lI98|H280074D08 +280074D08:lI97|H280074D18 +280074D18:lI108|H280074D28 +280074D28:lI95|H280074D38 +280074D38:lI103|H280074D48 +280074D48:lI114|H280074D58 +280074D58:lI111|H280074D68 +280074D68:lI117|H280074D78 +280074D78:lI112|H280074D88 +280074D88:lI115|H280074D98 +280074D98:lI32|H280074DA8 +280074DA8:lI100|H280074DB8 +280074DB8:lI101|H280074DC8 +280074DC8:lI102|H280074DD8 +280074DD8:lI105|H280074DE8 +280074DE8:lI110|H280074DF8 +280074DF8:lI105|H280074E08 +280074E08:lI116|H280074E18 +280074E18:lI105|H280074E28 +280074E28:lI111|H280074E38 +280074E38:lI110|H280074E48 +280074E48:lI32|H280074E58 +280074E58:lI101|H280074E68 +280074E68:lI114|H280074E78 +280074E78:lI114|H280074E88 +280074E88:lI111|H280074E98 +280074E98:lI114|N +280074EA8:lI84|H280074EB8 +280074EB8:lI104|H280074EC8 +280074EC8:lI101|H280074ED8 +280074ED8:lI32|H280074EE8 +280074EE8:lI103|H280074EF8 +280074EF8:lI108|H280074F08 +280074F08:lI111|H280074F18 +280074F18:lI98|H280074F28 +280074F28:lI97|H280074F38 +280074F38:lI108|H280074F48 +280074F48:lI95|H280074F58 +280074F58:lI110|H280074F68 +280074F68:lI97|H280074F78 +280074F78:lI109|H280074F88 +280074F88:lI101|H280074F98 +280074F98:lI95|H280074FA8 +280074FA8:lI115|H280074FB8 +280074FB8:lI101|H280074FC8 +280074FC8:lI114|H280074FD8 +280074FD8:lI118|H280074FE8 +280074FE8:lI101|H280074FF8 +280074FF8:lI114|H280075008 +280075008:lI32|H280075018 +280075018:lI126|H280075028 +280075028:lI119|H280075038 +280075038:lI32|H280075048 +280075048:lI112|H280075058 +280075058:lI114|H280075068 +280075068:lI111|H280075078 +280075078:lI99|H280075088 +280075088:lI101|H280075098 +280075098:lI115|H2800750A8 +2800750A8:lI115|H2800750B8 +2800750B8:lI32|H2800750C8 +2800750C8:lI114|H2800750D8 +2800750D8:lI101|H2800750E8 +2800750E8:lI99|H2800750F8 +2800750F8:lI101|H280075108 +280075108:lI105|H280075118 +280075118:lI118|H280075128 +280075128:lI101|H280075138 +280075138:lI100|H280075148 +280075148:lI32|H280075158 +280075158:lI97|H280075168 +280075168:lI110|H280075178 +280075178:lI32|H280075188 +280075188:lI117|H280075198 +280075198:lI110|H2800751A8 +2800751A8:lI101|H2800751B8 +2800751B8:lI120|H2800751C8 +2800751C8:lI112|H2800751D8 +2800751D8:lI101|H2800751E8 +2800751E8:lI99|H2800751F8 +2800751F8:lI116|H280075208 +280075208:lI101|H280075218 +280075218:lI100|H280075228 +280075228:lI32|H280075238 +280075238:lI109|H280075248 +280075248:lI101|H280075258 +280075258:lI115|H280075268 +280075268:lI115|H280075278 +280075278:lI97|H280075288 +280075288:lI103|H280075298 +280075298:lI101|H2800752A8 +2800752A8:lI58|H2800752B8 +2800752B8:lI10|H2800752C8 +2800752C8:lI126|H2800752D8 +2800752D8:lI116|H2800752E8 +2800752E8:lI112|H2800752F8 +2800752F8:lI10|N +280075308:lI108|N +280075318:lI114|H280075308 +280075328:lI101|H280075318 +280075338:lI46|H280075328 +280075348:lI108|H280075338 +280075358:lI97|H280075348 +280075368:lI98|H280075358 +280075378:lI111|H280075368 +280075388:lI108|H280075378 +280075398:lI103|H280075388 +2800753A8:E4A:g3AAAABIA79fDarOZVmFQtYEsqv4Sd0AAAAAAAAAAHcGZ2xvYmFsYQBiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +2800753D0:E4A:g3AAAABIAr9fDarOZVmFQtYEsqv4Sd0AAAAFAAAAAHcGZ2xvYmFsYQViBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +2800753F8:B1152921504606846975 +280075408:E4A:g3AAAABIA79fDarOZVmFQtYEsqv4Sd0AAAAGAAAAAHcGZ2xvYmFsYQZiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +280075430:E4A:g3AAAABIAr9fDarOZVmFQtYEsqv4Sd0AAAAHAAAAAHcGZ2xvYmFsYQdiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +280075458:E4A:g3AAAABIA79fDarOZVmFQtYEsqv4Sd0AAAALAAAAAHcGZ2xvYmFsYQtiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +280075480:E4A:g3AAAABIAr9fDarOZVmFQtYEsqv4Sd0AAAANAAAAAHcGZ2xvYmFsYQ1iBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +2800754A8:E4A:g3AAAABIAr9fDarOZVmFQtYEsqv4Sd0AAAATAAAAAHcGZ2xvYmFsYRNiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +2800754D0:E4A:g3AAAABIAb9fDarOZVmFQtYEsqv4Sd0AAAAXAAAAAHcGZ2xvYmFsYRdiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +2800754F8:E4A:g3AAAABIAb9fDarOZVmFQtYEsqv4Sd0AAAAZAAAAAHcGZ2xvYmFsYRliBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +280075520:E4A:g3AAAABIAr9fDarOZVmFQtYEsqv4Sd0AAAAbAAAAAHcGZ2xvYmFsYRtiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +280075548:E4A:g3AAAABIAr9fDarOZVmFQtYEsqv4Sd0AAAAcAAAAAHcGZ2xvYmFsYRxiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +280075570:E4A:g3AAAABIAr9fDarOZVmFQtYEsqv4Sd0AAAAdAAAAAHcGZ2xvYmFsYR1iBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +280075598:E4A:g3AAAABIAb9fDarOZVmFQtYEsqv4Sd0AAAAgAAAAAHcGZ2xvYmFsYSBiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +2800755C0:E4A:g3AAAABIAb9fDarOZVmFQtYEsqv4Sd0AAAAhAAAAAHcGZ2xvYmFsYSFiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +2800755E8:E4A:g3AAAABIAL9fDarOZVmFQtYEsqv4Sd0AAAAiAAAAAHcGZ2xvYmFsYSJiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +280078CF0:F1A:1.11022302462515654042e-16 +280078D00:F1A:5.55111512312578270212e-17 +280078D10:F1A:2.77555756156289135106e-17 +280078D20:F1A:1.38777878078144567553e-17 +280078D30:F1A:2.00000000000000000000e+00 +280078D40:Yh0: +280078D50:t100:H280079558,H280079580,H2800795A8,H2800795D0,H2800795F8,H280079620,H280079648,H280079670,H280079698,H2800796C0,H2800796E8,H280079710,H280079738,H280079760,H280079788,H2800797B0,H2800797D8,H280079800,H280079828,H280079850,H280079878,H2800798A0,H2800798C8,H2800798F0,H280079918,H280079940,H280079968,H280079990,H2800799B8,H2800799E0,H280079A08,H280079A30,H280079A58,H280079A80,H280079AA8,H280079AD0,H280079AF8,H280079B20,H280079B48,H280079B70,H280079B98,H280079BC0,H280079BE8,H280079C10,H280079C38,H280079C60,H280079C88,H280079CB0,H280079CD8,H280079D00,H280079D28,H280079D50,H280079D78,H280079DA0,H280079DC8,H280079DF0,H280079E18,H280079E40,H280079E68,H280079E90,H280079EB8,H280079EE0,H280079F08,H280079F30,H280079F58,H280079F80,H280079FA8,H280079FD0,H280079FF8,H28007A020,H28007A048,H28007A070,H28007A098,H28007A0C0,H28007A0E8,H28007A110,H28007A138,H28007A160,H28007A188,H28007A1B0,H28007A1D8,H28007A200,H28007A228,H28007A250,H28007A278,H28007A2A0,H28007A2C8,H28007A2F0,H28007A318,H28007A340,H28007A368,H28007A390,H28007A3B8,H28007A3E0,H28007A408,H28007A430,H28007A458,H28007A480,H28007A4A8,H28007A4D0,H28007A4F8,H28007A520,H28007A548,H28007A570,H28007A598,H28007A5C0,H28007A5E8,H28007A610,H28007A638,H28007A660,H28007A688,H28007A6B0,H28007A6D8,H28007A700,H28007A728,H28007A750,H28007A778,H28007A7A0,H28007A7C8,H28007A7F0,H28007A818,H28007A840,H28007A868,H28007A890,H28007A8B8,H28007A8E0,H28007A908,H28007A930,H28007A958,H28007A980,H28007A9A8,H28007A9D0,H28007A9F8,H28007AA20,H28007AA48,H28007AA70,H28007AA98,H28007AAC0,H28007AAE8,H28007AB10,H28007AB38,H28007AB60,H28007AB88,H28007ABB0,H28007ABD8,H28007AC00,H28007AC28,H28007AC50,H28007AC78,H28007ACA0,H28007ACC8,H28007ACF0,H28007AD18,H28007AD40,H28007AD68,H28007AD90,H28007ADB8,H28007ADE0,H28007AE08,H28007AE30,H28007AE58,H28007AE80,H28007AEA8,H28007AED0,H28007AEF8,H28007AF20,H28007AF48,H28007AF70,H28007AF98,H28007AFC0,H28007AFE8,H28007B010,H28007B038,H28007B060,H28007B088,H28007B0B0,H28007B0D8,H28007B100,H28007B128,H28007B150,H28007B178,H28007B1A0,H28007B1C8,H28007B1F0,H28007B218,H28007B240,H28007B268,H28007B290,H28007B2B8,H28007B2E0,H28007B308,H28007B330,H28007B358,H28007B380,H28007B3A8,H28007B3D0,H28007B3F8,H28007B420,H28007B448,H28007B470,H28007B498,H28007B4C0,H28007B4E8,H28007B510,H28007B538,H28007B560,H28007B588,H28007B5B0,H28007B5D8,H28007B600,H28007B628,H28007B650,H28007B678,H28007B6A0,H28007B6C8,H28007B6F0,H28007B718,H28007B740,H28007B768,H28007B790,H28007B7B8,H28007B7E0,H28007B808,H28007B830,H28007B858,H28007B880,H28007B8A8,H28007B8D0,H28007B8F8,H28007B920,H28007B948,H28007B970,H28007B998,H28007B9C0,H28007B9E8,H28007BA10,H28007BA38,H28007BA60,H28007BA88,H28007BAB0,H28007BAD8,H28007BB00,H28007BB28,H28007BB50,H28007BB78,H28007BBA0,H28007BBC8,H28007BBF0,H28007BC18,H28007BC40,H28007BC68,H28007BC90,H28007BCB8,H28007BCE0,H28007BD08,H28007BD30 +280079558:t2:I2104047571236786,H280079570 +280079570:F1A:1.73672541216026300829e-15 +280079580:t2:I0,H280079598 +280079598:F1A:9.55866035145563388593e-17 +2800795A8:t2:I1693657211986787,H2800795C0 +2800795C0:F1A:1.27087048348106232125e-16 +2800795D0:t2:I1919380038271141,H2800795E8 +2800795E8:F1A:1.49097409624954739056e-16 +2800795F8:t2:I2015384402196343,H280079610 +280079610:F1A:1.66587336315862684825e-16 +280079620:t2:I2068365869448128,H280079638 +280079638:F1A:1.81361208101190286598e-16 +280079648:t2:I2101878624052573,H280079660 +280079660:F1A:1.94297201531355877741e-16 +280079670:t2:I2124958784102998,H280079688 +280079688:F1A:2.05895006284820926559e-16 +280079698:t2:I2141808670795147,H2800796B0 +2800796B0:F1A:2.16468605768954222017e-16 +2800796C0:t2:I2154644611568301,H2800796D8 +2800796D8:F1A:2.26229403922181158232e-16 +2800796E8:t2:I2164744887587275,H280079700 +280079700:F1A:2.35327189140458915861e-16 +280079710:t2:I2172897953696594,H280079728 +280079728:F1A:2.43872345574287710295e-16 +280079738:t2:I2179616279372365,H280079750 +280079750:F1A:2.51948798292742250158e-16 +280079760:t2:I2185247251868649,H280079778 +280079778:F1A:2.59621997725281025263e-16 +280079788:t2:I2190034623107822,H2800797A0 +2800797A0:F1A:2.66944074736482849525e-16 +2800797B0:t2:I2194154434521197,H2800797C8 +2800797C8:F1A:2.73957296851424460024e-16 +2800797D8:t2:I2197736978774660,H2800797F0 +2800797F0:F1A:2.80696460024848035749e-16 +280079800:t2:I2200880740891961,H280079818 +280079818:F1A:2.87190589041139304275e-16 +280079828:t2:I2203661538010620,H280079840 +280079840:F1A:2.93464174847288832596e-16 +280079850:t2:I2206138681109102,H280079868 +280079868:F1A:2.99538093367821129281e-16 +280079878:t2:I2208359231806599,H280079890 +280079890:F1A:3.05430300071924403235e-16 +2800798A0:t2:I2210361007258210,H2800798B8 +2800798B8:F1A:3.11156363389215722701e-16 +2800798C8:t2:I2212174742388539,H2800798E0 +2800798E0:F1A:3.16729880185818151712e-16 +2800798F0:t2:I2213825672704646,H280079908 +280079908:F1A:3.22162803505499051688e-16 +280079918:t2:I2215334711002614,H280079930 +280079930:F1A:3.27465704079397507757e-16 +280079940:t2:I2216719334487595,H280079958 +280079958:F1A:3.32647981168417099987e-16 +280079968:t2:I2217994262139172,H280079980 +280079980:F1A:3.37718034173532322460e-16 +280079990:t2:I2219171977965032,H2800799A8 +2800799A8:F1A:3.42683403531193559494e-16 +2800799B8:t2:I2220263139538712,H2800799D0 +2800799D0:F1A:3.47550887317297581051e-16 +2800799E0:t2:I2221276900117330,H2800799F8 +2800799F8:F1A:3.52326638460020314094e-16 +280079A08:t2:I2222221164932930,H280079A20 +280079A20:F1A:3.57016246339534940285e-16 +280079A30:t2:I2223102796829069,H280079A48 +280079A48:F1A:3.61624805715983390475e-16 +280079A58:t2:I2223927782546658,H280079A70 +280079A70:F1A:3.66156975296535397983e-16 +280079A80:t2:I2224701368170060,H280079A98 +280079A98:F1A:3.70617027772360773203e-16 +280079AA8:t2:I2225428170204312,H280079AC0 +280079AC0:F1A:3.75008892787477978824e-16 +280079AD0:t2:I2226112267248242,H280079AE8 +280079AE8:F1A:3.79336194015495537551e-16 +280079AF8:t2:I2226757276105256,H280079B10 +280079B10:F1A:3.83602281296772790489e-16 +280079B20:t2:I2227366415328399,H280079B38 +280079B38:F1A:3.87810258612502468569e-16 +280079B48:t2:I2227942558554684,H280079B60 +280079B60:F1A:3.91963008532576783898e-16 +280079B70:t2:I2228488279492521,H280079B88 +280079B88:F1A:3.96063213662563775295e-16 +280079B98:t2:I2229005890047222,H280079BB0 +280079BB0:F1A:4.00113375525466896220e-16 +280079BC0:t2:I2229497472775193,H280079BD8 +280079BD8:F1A:4.04115831241433324136e-16 +280079BE8:t2:I2229964908627060,H280079C00 +280079C00:F1A:4.08072768309604483145e-16 +280079C10:t2:I2230409900758597,H280079C28 +280079C28:F1A:4.11986237748074422111e-16 +280079C38:t2:I2230833995044585,H280079C50 +280079C50:F1A:4.15858165808280641140e-16 +280079C60:t2:I2231238597816133,H280079C78 +280079C78:F1A:4.19690364447407329203e-16 +280079C88:t2:I2231624991250191,H280079CA0 +280079CA0:F1A:4.23484540715207084057e-16 +280079CB0:t2:I2231994346765928,H280079CC8 +280079CC8:F1A:4.27242305188997608562e-16 +280079CD8:t2:I2232347736722750,H280079CF0 +280079CF0:F1A:4.30965179571629408372e-16 +280079D00:t2:I2232686144665934,H280079D18 +280079D18:F1A:4.34654603551287596498e-16 +280079D28:t2:I2233010474325959,H280079D40 +280079D40:F1A:4.38311941008545712860e-16 +280079D50:t2:I2233321557544881,H280079D68 +280079D68:F1A:4.41938485644706647812e-16 +280079D78:t2:I2233620161276071,H280079D90 +280079D90:F1A:4.45535466095791365718e-16 +280079DA0:t2:I2233906993781271,H280079DB8 +280079DB8:F1A:4.49104050588287499193e-16 +280079DC8:t2:I2234182710130335,H280079DE0 +280079DE0:F1A:4.52645351185713967562e-16 +280079DF0:t2:I2234447917093496,H280079E08 +280079E08:F1A:4.56160427669003807995e-16 +280079E18:t2:I2234703177503020,H280079E30 +280079E30:F1A:4.59650291088494072552e-16 +280079E40:t2:I2234949014150181,H280079E58 +280079E58:F1A:4.63115907020816468447e-16 +280079E68:t2:I2235185913274316,H280079E80 +280079E80:F1A:4.66558198560087516686e-16 +280079E90:t2:I2235414327692884,H280079EA8 +280079EA8:F1A:4.69978049069419496306e-16 +280079EB8:t2:I2235634679614920,H280079ED0 +280079ED0:F1A:4.73376304715832370759e-16 +280079EE0:t2:I2235847363174595,H280079EF8 +280079EF8:F1A:4.76753776809085264392e-16 +280079F08:t2:I2236052746716837,H280079F20 +280079F20:F1A:4.80111243962701550521e-16 +280079F30:t2:I2236251174862869,H280079F48 +280079F48:F1A:4.83449454093500800172e-16 +280079F58:t2:I2236442970379967,H280079F70 +280079F70:F1A:4.86769126274220868624e-16 +280079F80:t2:I2236628435876762,H280079F98 +280079F98:F1A:4.90070952452299375578e-16 +280079FA8:t2:I2236807855342765,H280079FC0 +280079FC0:F1A:4.93355599046541390746e-16 +280079FD0:t2:I2236981495548562,H280079FE8 +280079FE8:F1A:4.96623708432217831361e-16 +280079FF8:t2:I2237149607321147,H28007A010 +28007A010:F1A:4.99875900324090879179e-16 +28007A020:t2:I2237312426707209,H28007A038 +28007A038:F1A:5.03112773065931868701e-16 +28007A048:t2:I2237470176035652,H28007A060 +28007A060:F1A:5.06334904834271949789e-16 +28007A070:t2:I2237623064889403,H28007A088 +28007A088:F1A:5.09542854763389229036e-16 +28007A098:t2:I2237771290995388,H28007A0B0 +28007A0B0:F1A:5.12737163997879663320e-16 +28007A0C0:t2:I2237915041040597,H28007A0D8 +28007A0D8:F1A:5.15918356678573644216e-16 +28007A0E8:t2:I2238054491421305,H28007A100 +28007A100:F1A:5.19086940867034337507e-16 +28007A110:t2:I2238189808931712,H28007A128 +28007A128:F1A:5.22243409413404174016e-16 +28007A138:t2:I2238321151397660,H28007A150 +28007A150:F1A:5.25388240771945425068e-16 +28007A160:t2:I2238448668260432,H28007A178 +28007A178:F1A:5.28521899768238198395e-16 +28007A188:t2:I2238572501115169,H28007A1A0 +28007A1A0:F1A:5.31644838321661755014e-16 +28007A1B0:t2:I2238692784207942,H28007A1C8 +28007A1C8:F1A:5.34757496126472954545e-16 +28007A1D8:t2:I2238809644895133,H28007A1F0 +28007A1F0:F1A:5.37860301294523479377e-16 +28007A200:t2:I2238923204068402,H28007A218 +28007A218:F1A:5.40953670962399333412e-16 +28007A228:t2:I2239033576548190,H28007A240 +28007A240:F1A:5.44038011865546709133e-16 +28007A250:t2:I2239140871448443,H28007A268 +28007A268:F1A:5.47113720881736113194e-16 +28007A278:t2:I2239245192514958,H28007A290 +28007A290:F1A:5.50181185546033624966e-16 +28007A2A0:t2:I2239346638439541,H28007A2B8 +28007A2B8:F1A:5.53240784539278360189e-16 +28007A2C8:t2:I2239445303151952,H28007A2E0 +28007A2E0:F1A:5.56292888151909017422e-16 +28007A2F0:t2:I2239541276091442,H28007A308 +28007A308:F1A:5.59337858724846207834e-16 +28007A318:t2:I2239634642459498,H28007A330 +28007A330:F1A:5.62376051069004345873e-16 +28007A340:t2:I2239725483455293,H28007A358 +28007A358:F1A:5.65407812864896043333e-16 +28007A368:t2:I2239813876495186,H28007A380 +28007A380:F1A:5.68433485043681410254e-16 +28007A390:t2:I2239899895417494,H28007A3A8 +28007A3A8:F1A:5.71453402150920397185e-16 +28007A3B8:t2:I2239983610673676,H28007A3D0 +28007A3D0:F1A:5.74467892694196087369e-16 +28007A3E0:t2:I2240065089506935,H28007A3F8 +28007A3F8:F1A:5.77477279475696482238e-16 +28007A408:t2:I2240144396119183,H28007A420 +28007A420:F1A:5.80481879910768565067e-16 +28007A430:t2:I2240221591827230,H28007A448 +28007A448:F1A:5.83482006333389205125e-16 +28007A458:t2:I2240296735208969,H28007A470 +28007A470:F1A:5.86477966289436525146e-16 +28007A480:t2:I2240369882240293,H28007A498 +28007A498:F1A:5.89470062818587176437e-16 +28007A4A8:t2:I2240441086423386,H28007A4C0 +28007A4C0:F1A:5.92458594725613394191e-16 +28007A4D0:t2:I2240510398907004,H28007A4E8 +28007A4E8:F1A:5.95443856841805979446e-16 +28007A4F8:t2:I2240577868599305,H28007A510 +28007A510:F1A:5.98426140277202811378e-16 +28007A520:t2:I2240643542273726,H28007A538 +28007A538:F1A:6.01405732664266403201e-16 +28007A548:t2:I2240707464668391,H28007A560 +28007A560:F1A:6.04382918393612501158e-16 +28007A570:t2:I2240769678579486,H28007A588 +28007A588:F1A:6.07357978842360566070e-16 +28007A598:t2:I2240830224948980,H28007A5B0 +28007A5B0:F1A:6.10331192595643943370e-16 +28007A5C0:t2:I2240889142947082,H28007A5D8 +28007A5D8:F1A:6.13302835661791100703e-16 +28007A5E8:t2:I2240946470049769,H28007A600 +28007A600:F1A:6.16273181681659631279e-16 +28007A610:t2:I2241002242111691,H28007A628 +28007A628:F1A:6.19242502132584703827e-16 +28007A638:t2:I2241056493434746,H28007A650 +28007A650:F1A:6.22211066527378790876e-16 +28007A660:t2:I2241109256832602,H28007A678 +28007A678:F1A:6.25179142608799982782e-16 +28007A688:t2:I2241160563691400,H28007A6A0 +28007A6A0:F1A:6.28146996539889530228e-16 +28007A6B0:t2:I2241210444026879,H28007A6C8 +28007A6C8:F1A:6.31114893090560423885e-16 +28007A6D8:t2:I2241258926538122,H28007A6F0 +28007A6F0:F1A:6.34083095820806000914e-16 +28007A700:t2:I2241306038658137,H28007A718 +28007A718:F1A:6.37051867260881494958e-16 +28007A728:t2:I2241351806601435,H28007A740 +28007A740:F1A:6.40021469088802472988e-16 +28007A750:t2:I2241396255408788,H28007A768 +28007A768:F1A:6.42992162305489607018e-16 +28007A778:t2:I2241439408989313,H28007A790 +28007A790:F1A:6.45964207407883213683e-16 +28007A7A0:t2:I2241481290160038,H28007A7B8 +28007A7B8:F1A:6.48937864560339654762e-16 +28007A7C8:t2:I2241521920683062,H28007A7E0 +28007A7E0:F1A:6.51913393764615873896e-16 +28007A7F0:t2:I2241561321300462,H28007A808 +28007A808:F1A:6.54891055028741540820e-16 +28007A818:t2:I2241599511767028,H28007A830 +28007A830:F1A:6.57871108535074132917e-16 +28007A840:t2:I2241636510880960,H28007A858 +28007A858:F1A:6.60853814807825874393e-16 +28007A868:t2:I2241672336512612,H28007A880 +28007A880:F1A:6.63839434880350565911e-16 +28007A890:t2:I2241707005631362,H28007A8A8 +28007A8A8:F1A:6.66828230462474590443e-16 +28007A8B8:t2:I2241740534330713,H28007A8D0 +28007A8D0:F1A:6.69820464108155789432e-16 +28007A8E0:t2:I2241772937851689,H28007A8F8 +28007A8F8:F1A:6.72816399383753114503e-16 +28007A908:t2:I2241804230604585,H28007A920 +28007A920:F1A:6.75816301037190058595e-16 +28007A930:t2:I2241834426189161,H28007A948 +28007A948:F1A:6.78820435168298025779e-16 +28007A958:t2:I2241863537413311,H28007A970 +28007A970:F1A:6.81829069400625404640e-16 +28007A980:t2:I2241891576310281,H28007A998 +28007A998:F1A:6.84842473055003829332e-16 +28007A9A8:t2:I2241918554154466,H28007A9C0 +28007A9C0:F1A:6.87860917325166366447e-16 +28007A9D0:t2:I2241944481475843,H28007A9E8 +28007A9E8:F1A:6.90884675455716901816e-16 +28007A9F8:t2:I2241969368073071,H28007AA10 +28007AA10:F1A:6.93914022922756903880e-16 +28007AA20:t2:I2241993223025298,H28007AA38 +28007AA38:F1A:6.96949237617482938615e-16 +28007AA48:t2:I2242016054702685,H28007AA60 +28007AA60:F1A:6.99990600033076396841e-16 +28007AA70:t2:I2242037870775710,H28007AA88 +28007AA88:F1A:7.03038393455215079165e-16 +28007AA98:t2:I2242058678223225,H28007AAB0 +28007AAB0:F1A:7.06092904156548215323e-16 +28007AAC0:t2:I2242078483339331,H28007AAD8 +28007AAD8:F1A:7.09154421595487341536e-16 +28007AAE8:t2:I2242097291739040,H28007AB00 +28007AB00:F1A:7.12223238619677884046e-16 +28007AB10:t2:I2242115108362774,H28007AB28 +28007AB28:F1A:7.15299651674530299286e-16 +28007AB38:t2:I2242131937479672,H28007AB50 +28007AB50:F1A:7.18383961017206285811e-16 +28007AB60:t2:I2242147782689725,H28007AB78 +28007AB78:F1A:7.21476470936470670108e-16 +28007AB88:t2:I2242162646924736,H28007ABA0 +28007ABA0:F1A:7.24577489978838698238e-16 +28007ABB0:t2:I2242176532448092,H28007ABC8 +28007ABC8:F1A:7.27687331181469271523e-16 +28007ABD8:t2:I2242189440853337,H28007ABF0 +28007ABF0:F1A:7.30806312312274287356e-16 +28007AC00:t2:I2242201373061537,H28007AC18 +28007AC18:F1A:7.33934756117740475864e-16 +28007AC28:t2:I2242212329317416,H28007AC40 +28007AC40:F1A:7.37072990578983098735e-16 +28007AC50:t2:I2242222309184237,H28007AC68 +28007AC68:F1A:7.40221349176579965727e-16 +28007AC78:t2:I2242231311537397,H28007AC90 +28007AC90:F1A:7.43380171164764792799e-16 +28007ACA0:t2:I2242239334556717,H28007ACB8 +28007ACB8:F1A:7.46549801855588902443e-16 +28007ACC8:t2:I2242246375717369,H28007ACE0 +28007ACE0:F1A:7.49730592913697934980e-16 +28007ACF0:t2:I2242252431779415,H28007AD08 +28007AD08:F1A:7.52922902662405836870e-16 +28007AD18:t2:I2242257498775893,H28007AD30 +28007AD30:F1A:7.56127096401792173910e-16 +28007AD40:t2:I2242261571999416,H28007AD58 +28007AD58:F1A:7.59343546739588950455e-16 +28007AD68:t2:I2242264645987196,H28007AD80 +28007AD80:F1A:7.62572633935675575083e-16 +28007AD90:t2:I2242266714504453,H28007ADA8 +28007ADA8:F1A:7.65814746261048733621e-16 +28007ADB8:t2:I2242267770526109,H28007ADD0 +28007ADD0:F1A:7.69070280372191911716e-16 +28007ADE0:t2:I2242267806216711,H28007ADF8 +28007ADF8:F1A:7.72339641701829854238e-16 +28007AE08:t2:I2242266812908462,H28007AE20 +28007AE20:F1A:7.75623244867117442328e-16 +28007AE30:t2:I2242264781077289,H28007AE48 +28007AE48:F1A:7.78921514096385241347e-16 +28007AE58:t2:I2242261700316818,H28007AE70 +28007AE70:F1A:7.82234883675641084120e-16 +28007AE80:t2:I2242257559310145,H28007AE98 +28007AE98:F1A:7.85563798416108405147e-16 +28007AEA8:t2:I2242252345799276,H28007AEC0 +28007AEC0:F1A:7.88908714144175521500e-16 +28007AED0:t2:I2242246046552082,H28007AEE8 +28007AEE8:F1A:7.92270098215227085966e-16 +28007AEF8:t2:I2242238647326615,H28007AF10 +28007AF10:F1A:7.95648430052936617556e-16 +28007AF20:t2:I2242230132832625,H28007AF38 +28007AF38:F1A:7.99044201715713004887e-16 +28007AF48:t2:I2242220486690076,H28007AF60 +28007AF60:F1A:8.02457918492125913510e-16 +28007AF70:t2:I2242209691384458,H28007AF88 +28007AF88:F1A:8.05890099527265683393e-16 +28007AF98:t2:I2242197728218684,H28007AFB0 +28007AFB0:F1A:8.09341278482150088838e-16 +28007AFC0:t2:I2242184577261310,H28007AFD8 +28007AFD8:F1A:8.12812004228450077447e-16 +28007AFE8:t2:I2242170217290819,H28007B000 +28007B000:F1A:8.16302841580987746960e-16 +28007B010:t2:I2242154625735679,H28007B028 +28007B028:F1A:8.19814372070653286895e-16 +28007B038:t2:I2242137778609839,H28007B050 +28007B050:F1A:8.23347194760605041733e-16 +28007B060:t2:I2242119650443327,H28007B078 +28007B078:F1A:8.26901927108847002541e-16 +28007B088:t2:I2242100214207556,H28007B0A0 +28007B0A0:F1A:8.30479205880537371959e-16 +28007B0B0:t2:I2242079441234906,H28007B0C8 +28007B0C8:F1A:8.34079688113662879173e-16 +28007B0D8:t2:I2242057301132135,H28007B0F0 +28007B0F0:F1A:8.37704052142022163322e-16 +28007B100:t2:I2242033761687079,H28007B118 +28007B118:F1A:8.41352998679802824740e-16 +28007B128:t2:I2242008788768107,H28007B140 +28007B140:F1A:8.45027251972409677425e-16 +28007B150:t2:I2241982346215682,H28007B168 +28007B168:F1A:8.48727561018615493666e-16 +28007B178:t2:I2241954395725356,H28007B190 +28007B190:F1A:8.52454700869559619833e-16 +28007B1A0:t2:I2241924896721443,H28007B1B8 +28007B1B8:F1A:8.56209474010623332794e-16 +28007B1C8:t2:I2241893806220517,H28007B1E0 +28007B1E0:F1A:8.59992711832766460322e-16 +28007B1F0:t2:I2241861078683830,H28007B208 +28007B208:F1A:8.63805276200525889234e-16 +28007B218:t2:I2241826665857598,H28007B230 +28007B230:F1A:8.67648061124558160821e-16 +28007B240:t2:I2241790516600041,H28007B258 +28007B258:F1A:8.71521994547369801105e-16 +28007B268:t2:I2241752576693881,H28007B280 +28007B280:F1A:8.75428040251717494016e-16 +28007B290:t2:I2241712788642916,H28007B2A8 +28007B2A8:F1A:8.79367199902104274846e-16 +28007B2B8:t2:I2241671091451078,H28007B2D0 +28007B2D0:F1A:8.83340515230840795477e-16 +28007B2E0:t2:I2241627420382235,H28007B2F8 +28007B2F8:F1A:8.87349070381313453209e-16 +28007B308:t2:I2241581706698773,H28007B320 +28007B320:F1A:8.91393994422408613348e-16 +28007B330:t2:I2241533877376767,H28007B348 +28007B348:F1A:8.95476464049506774624e-16 +28007B358:t2:I2241483854795281,H28007B370 +28007B370:F1A:8.99597706489109936019e-16 +28007B380:t2:I2241431556397035,H28007B398 +28007B398:F1A:9.03759002626011752555e-16 +28007B3A8:t2:I2241376894317345,H28007B3C0 +28007B3C0:F1A:9.07961690374006801893e-16 +28007B3D0:t2:I2241319774977817,H28007B3E8 +28007B3E8:F1A:9.12207168313484609982e-16 +28007B3F8:t2:I2241260098640860,H28007B410 +28007B410:F1A:9.16496899621913531320e-16 +28007B420:t2:I2241197758920538,H28007B438 +28007B438:F1A:9.20832416326230760072e-16 +28007B448:t2:I2241132642244704,H28007B460 +28007B460:F1A:9.25215323909569332723e-16 +28007B470:t2:I2241064627262652,H28007B488 +28007B488:F1A:9.29647306308641672775e-16 +28007B498:t2:I2240993584191742,H28007B4B0 +28007B4B0:F1A:9.34130131342526512592e-16 +28007B4C0:t2:I2240919374095536,H28007B4D8 +28007B4D8:F1A:9.38665656618665978610e-16 +28007B4E8:t2:I2240841848084890,H28007B500 +28007B500:F1A:9.43255835967670653963e-16 +28007B510:t2:I2240760846432232,H28007B528 +28007B528:F1A:9.47902726465173824760e-16 +28007B538:t2:I2240676197587784,H28007B550 +28007B550:F1A:9.52608496106627869756e-16 +28007B560:t2:I2240587717084782,H28007B578 +28007B578:F1A:9.57375432209744962925e-16 +28007B588:t2:I2240495206318753,H28007B5A0 +28007B5A0:F1A:9.62205950629483835507e-16 +28007B5B0:t2:I2240398451183567,H28007B5C8 +28007B5C8:F1A:9.67102605882305424755e-16 +28007B5D8:t2:I2240297220544165,H28007B5F0 +28007B5F0:F1A:9.72068102290162588019e-16 +28007B600:t2:I2240191264522612,H28007B618 +28007B618:F1A:9.77105306270720883776e-16 +28007B628:t2:I2240080312570155,H28007B640 +28007B640:F1A:9.82217259919054108939e-16 +28007B650:t2:I2239964071293331,H28007B668 +28007B668:F1A:9.87407196048067106672e-16 +28007B678:t2:I2239842221996530,H28007B690 +28007B690:F1A:9.92678554880797648454e-16 +28007B6A0:t2:I2239714417896699,H28007B6B8 +28007B6B8:F1A:9.98035002618364491509e-16 +28007B6C8:t2:I2239580280957725,H28007B6E0 +28007B6E0:F1A:1.00348045214361808924e-15 +28007B6F0:t2:I2239439398282193,H28007B708 +28007B708:F1A:1.00901908616374569449e-15 +28007B718:t2:I2239291317986196,H28007B730 +28007B730:F1A:1.01465538314670861133e-15 +28007B740:t2:I2239135544468203,H28007B758 +28007B758:F1A:1.02039414646831236830e-15 +28007B768:t2:I2238971532964979,H28007B780 +28007B780:F1A:1.02624053726135674640e-15 +28007B790:t2:I2238798683265269,H28007B7A8 +28007B7A8:F1A:1.03220011154864564914e-15 +28007B7B8:t2:I2238616332424351,H28007B7D0 +28007B7D0:F1A:1.03827886235153991696e-15 +28007B7E0:t2:I2238423746288095,H28007B7F8 +28007B7F8:F1A:1.04448326760004705473e-15 +28007B808:t2:I2238220109591890,H28007B820 +28007B820:F1A:1.05082034483551946539e-15 +28007B830:t2:I2238004514345216,H28007B848 +28007B848:F1A:1.05729771390098902296e-15 +28007B858:t2:I2237775946143212,H28007B870 +28007B870:F1A:1.06392366906768007507e-15 +28007B880:t2:I2237533267957822,H28007B898 +28007B898:F1A:1.07070726236329937629e-15 +28007B8A8:t2:I2237275200846753,H28007B8C0 +28007B8C0:F1A:1.07765840026681064032e-15 +28007B8D0:t2:I2237000300869952,H28007B8E8 +28007B8E8:F1A:1.08478795644034246815e-15 +28007B8F8:t2:I2236706931309099,H28007B910 +28007B910:F1A:1.09210790381495627955e-15 +28007B920:t2:I2236393229029147,H28007B938 +28007B938:F1A:1.09963147017856282141e-15 +28007B948:t2:I2236057063479501,H28007B960 +28007B960:F1A:1.10737332249357520075e-15 +28007B970:t2:I2235695986373246,H28007B988 +28007B988:F1A:1.11534978658531549289e-15 +28007B998:t2:I2235307169458859,H28007B9B0 +28007B9B0:F1A:1.12357911071108333166e-15 +28007B9C0:t2:I2234887326941578,H28007B9D8 +28007B9D8:F1A:1.13208178401648463069e-15 +28007B9E8:t2:I2234432617919447,H28007BA00 +28007BA00:F1A:1.14088092425827801405e-15 +28007BA10:t2:I2233938522519765,H28007BA28 +28007BA28:F1A:1.15000275378397924458e-15 +28007BA38:t2:I2233399683022677,H28007BA50 +28007BA50:F1A:1.15947718914491892724e-15 +28007BA60:t2:I2232809697779198,H28007BA78 +28007BA78:F1A:1.16933857869109599762e-15 +28007BA88:t2:I2232160850599817,H28007BAA0 +28007BAA0:F1A:1.17962663529558008258e-15 +28007BAB0:t2:I2231443750584641,H28007BAC8 +28007BAC8:F1A:1.19038762992828902828e-15 +28007BAD8:t2:I2230646845562170,H28007BAF0 +28007BAF0:F1A:1.20167593925438186168e-15 +28007BB00:t2:I2229755753817986,H28007BB18 +28007BB18:F1A:1.21355608186668970279e-15 +28007BB28:t2:I2228752329126533,H28007BB40 +28007BB40:F1A:1.22610544174505612103e-15 +28007BB50:t2:I2227613325162504,H28007BB68 +28007BB68:F1A:1.23941797891632511077e-15 +28007BB78:t2:I2226308442121174,H28007BB90 +28007BB90:F1A:1.25360939266025668161e-15 +28007BBA0:t2:I2224797391720399,H28007BBB8 +28007BBB8:F1A:1.26882448142550100004e-15 +28007BBC8:t2:I2223025347823832,H28007BBE0 +28007BBE0:F1A:1.28524793190961088468e-15 +28007BBF0:t2:I2220915633329809,H28007BC08 +28007BC08:F1A:1.30312066346899851655e-15 +28007BC18:t2:I2218357446087030,H28007BC30 +28007BC30:F1A:1.32276557701953263307e-15 +28007BC40:t2:I2215184158448668,H28007BC58 +28007BC58:F1A:1.34463009250111712861e-15 +28007BC68:t2:I2211132412537369,H28007BC80 +28007BC80:F1A:1.36936068351285175171e-15 +28007BC90:t2:I2205758503851065,H28007BCA8 +28007BCA8:F1A:1.39794366727752399083e-15 +28007BCB8:t2:I2198248265654987,H28007BCD0 +28007BCD0:F1A:1.43199898696613284312e-15 +28007BCE0:t2:I2186916352102141,H28007BCF8 +28007BCF8:F1A:1.47448486035975958423e-15 +28007BD08:t2:I2167562552481814,H28007BD20 +28007BD20:F1A:1.53178727416111435375e-15 +28007BD30:t2:I2125549880839716,H28007BD48 +28007BD48:F1A:1.62276986753129683713e-15 +28007BD58:Mf0:H280010188: +28007BD70:lI0|I0 +28007BD80:lI0|H28007BD90 +28007BD90:lI0|H28007BDA0 +28007BDA0:lI0|H28007BDB0 +28007BDB0:lI0|H28007BDC0 +28007BDC0:lI0|H28007BDD0 +28007BDD0:lI0|H28007BDE0 +28007BDE0:lI0|H28007BDF0 +28007BDF0:lI0|H28007BE00 +28007BE00:lI0|H28007BE10 +28007BE10:lI0|H28007BE20 +28007BE20:lI0|H28007BE30 +28007BE30:lI0|H28007BE40 +28007BE40:lI0|H28007BE50 +28007BE50:lI0|H28007BE60 +28007BE60:lI0|H28007BE70 +28007BE70:lI0|N +28007BE80:lI114527183042123105|H28007BE90 +28007BE90:lI160423628620659260|H28007BEA0 +28007BEA0:lI284733707589872850|H28007BEB0 +28007BEB0:lI164435740288387503|H28007BEC0 +28007BEC0:lI259572741793888962|H28007BED0 +28007BED0:lI215793509705812255|H28007BEE0 +28007BEE0:lI228241955430903492|H28007BEF0 +28007BEF0:lI221708554683218499|H28007BF00 +28007BF00:lI212006596549813798|H28007BF10 +28007BF10:lI139215019150089363|H28007BF20 +28007BF20:lI23964000621384961|H28007BF30 +28007BF30:lI55201052708218217|H28007BF40 +28007BF40:lI112969240468397636|H28007BF50 +28007BF50:lI22130735059088892|H28007BF60 +28007BF60:lI244278597799509466|H28007BF70 +28007BF70:lI220175845070832114|H28007BF80 +28007BF80:lI43243288828|N +28007BF90:lI290573448171827402|H28007BFA0 +28007BFA0:lI382251779910418577|H28007BFB0 +28007BFB0:lI423857156240780192|H28007BFC0 +28007BFC0:lI317638803078791815|H28007BFD0 +28007BFD0:lI312577798172065765|H28007BFE0 +28007BFE0:lI305801842905235492|H28007BFF0 +28007BFF0:lI450887821400921554|H28007C000 +28007C000:lI490154825290594607|H28007C010 +28007C010:lI507224882549817556|H28007C020 +28007C020:lI305131922350994371|H28007C030 +28007C030:lI524004876356613068|H28007C040 +28007C040:lI399286492428034246|H28007C050 +28007C050:lI556129459533271918|H28007C060 +28007C060:lI302163523288674092|H28007C070 +28007C070:lI295571835370094372|H28007C080 +28007C080:lI487547435355635071|N +28007C090:lI412473694820566502|H28007C0A0 +28007C0A0:lI432883605991317039|H28007C0B0 +28007C0B0:lI525373508288112196|H28007C0C0 +28007C0C0:lI403915169708599875|H28007C0D0 +28007C0D0:lI319067783491633768|H28007C0E0 +28007C0E0:lI301226760020322060|H28007C0F0 +28007C0F0:lI311627678308842608|H28007C100 +28007C100:lI376040681981803602|H28007C110 +28007C110:lI339701046172540810|H28007C120 +28007C120:lI406476937554306621|H28007C130 +28007C130:lI319178240279900411|H28007C140 +28007C140:lI538961455727032748|H28007C150 +28007C150:lI343829982822907227|H28007C160 +28007C160:lI562090186051299616|H28007C170 +28007C170:lI294421712295949406|H28007C180 +28007C180:lI517056752316592047|N +28007C190:lI171572743241724754|N +28007C1A0:F1A:5.00000000000000000000e-01 +28007C1B0:lH28007C1E0|H28007C1C0 +28007C1C0:lH28007C1F8|H28007C1D0 +28007C1D0:lA6:global|N +28007C1E0:t2:A7:newline,A3:any +28007C1F8:t3:A7:capture,AD:all_but_first,A6:binary +28007C218:lI48|H28007C228 +28007C228:lI120|H28007C238 +28007C238:lI40|H28007C248 +28007C248:lI91|H28007C258 +28007C258:lI97|H28007C268 +28007C268:lI45|H28007C278 +28007C278:lI122|H28007C288 +28007C288:lI65|H28007C298 +28007C298:lI45|H28007C2A8 +28007C2A8:lI90|H28007C2B8 +28007C2B8:lI48|H28007C2C8 +28007C2C8:lI45|H28007C2D8 +28007C2D8:lI57|H28007C2E8 +28007C2E8:lI93|H28007C2F8 +28007C2F8:lI43|H28007C308 +28007C308:lI41|N +28007C318:lI49|H28007C328 +28007C328:lI54|H28007C338 +28007C338:lI35|H28007C348 +28007C348:lI126|H28007C358 +28007C358:lI115|H28007C368 +28007C368:lI44|H28007C378 +28007C378:lI126|H28007C388 +28007C388:lI110|N +28007C398:F1B:-2.73661237329758277870e-01 +28007C3A8:F1A:3.65415288536100879568e+00 +28007C3B8:F1B:-3.65415288536100879568e+00 +28007C3C8:F1B:-5.00000000000000000000e-01 +28007C3D8:t100:H28007CBE0,H28007CBF0,H28007CC00,H28007CC10,H28007CC20,H28007CC30,H28007CC40,H28007CC50,H28007CC60,H28007CC70,H28007CC80,H28007CC90,H28007CCA0,H28007CCB0,H28007CCC0,H28007CCD0,H28007CCE0,H28007CCF0,H28007CD00,H28007CD10,H28007CD20,H28007CD30,H28007CD40,H28007CD50,H28007CD60,H28007CD70,H28007CD80,H28007CD90,H28007CDA0,H28007CDB0,H28007CDC0,H28007CDD0,H28007CDE0,H28007CDF0,H28007CE00,H28007CE10,H28007CE20,H28007CE30,H28007CE40,H28007CE50,H28007CE60,H28007CE70,H28007CE80,H28007CE90,H28007CEA0,H28007CEB0,H28007CEC0,H28007CED0,H28007CEE0,H28007CEF0,H28007CF00,H28007CF10,H28007CF20,H28007CF30,H28007CF40,H28007CF50,H28007CF60,H28007CF70,H28007CF80,H28007CF90,H28007CFA0,H28007CFB0,H28007CFC0,H28007CFD0,H28007CFE0,H28007CFF0,H28007D000,H28007D010,H28007D020,H28007D030,H28007D040,H28007D050,H28007D060,H28007D070,H28007D080,H28007D090,H28007D0A0,H28007D0B0,H28007D0C0,H28007D0D0,H28007D0E0,H28007D0F0,H28007D100,H28007D110,H28007D120,H28007D130,H28007D140,H28007D150,H28007D160,H28007D170,H28007D180,H28007D190,H28007D1A0,H28007D1B0,H28007D1C0,H28007D1D0,H28007D1E0,H28007D1F0,H28007D200,H28007D210,H28007D220,H28007D230,H28007D240,H28007D250,H28007D260,H28007D270,H28007D280,H28007D290,H28007D2A0,H28007D2B0,H28007D2C0,H28007D2D0,H28007D2E0,H28007D2F0,H28007D300,H28007D310,H28007D320,H28007D330,H28007D340,H28007D350,H28007D360,H28007D370,H28007D380,H28007D390,H28007D3A0,H28007D3B0,H28007D3C0,H28007D3D0,H28007D3E0,H28007D3F0,H28007D400,H28007D410,H28007D420,H28007D430,H28007D440,H28007D450,H28007D460,H28007D470,H28007D480,H28007D490,H28007D4A0,H28007D4B0,H28007D4C0,H28007D4D0,H28007D4E0,H28007D4F0,H28007D500,H28007D510,H28007D520,H28007D530,H28007D540,H28007D550,H28007D560,H28007D570,H28007D580,H28007D590,H28007D5A0,H28007D5B0,H28007D5C0,H28007D5D0,H28007D5E0,H28007D5F0,H28007D600,H28007D610,H28007D620,H28007D630,H28007D640,H28007D650,H28007D660,H28007D670,H28007D680,H28007D690,H28007D6A0,H28007D6B0,H28007D6C0,H28007D6D0,H28007D6E0,H28007D6F0,H28007D700,H28007D710,H28007D720,H28007D730,H28007D740,H28007D750,H28007D760,H28007D770,H28007D780,H28007D790,H28007D7A0,H28007D7B0,H28007D7C0,H28007D7D0,H28007D7E0,H28007D7F0,H28007D800,H28007D810,H28007D820,H28007D830,H28007D840,H28007D850,H28007D860,H28007D870,H28007D880,H28007D890,H28007D8A0,H28007D8B0,H28007D8C0,H28007D8D0,H28007D8E0,H28007D8F0,H28007D900,H28007D910,H28007D920,H28007D930,H28007D940,H28007D950,H28007D960,H28007D970,H28007D980,H28007D990,H28007D9A0,H28007D9B0,H28007D9C0,H28007D9D0,H28007D9E0,H28007D9F0,H28007DA00,H28007DA10,H28007DA20,H28007DA30,H28007DA40,H28007DA50,H28007DA60,H28007DA70,H28007DA80,H28007DA90,H28007DAA0,H28007DAB0,H28007DAC0,H28007DAD0,H28007DAE0,H28007DAF0,H28007DB00,H28007DB10,H28007DB20,H28007DB30,H28007DB40,H28007DB50,H28007DB60,H28007DB70,H28007DB80,H28007DB90,H28007DBA0,H28007DBB0,H28007DBC0,H28007DBD0 +28007CBE0:F1A:1.00000000000000000000e+00 +28007CBF0:F1A:9.77101701267670819107e-01 +28007CC00:F1A:9.59879091800105999077e-01 +28007CC10:F1A:9.45198953442299094618e-01 +28007CC20:F1A:9.32060075959229905607e-01 +28007CC30:F1A:9.19991505039346457728e-01 +28007CC40:F1A:9.08726440052130324254e-01 +28007CC50:F1A:8.98095921898342974821e-01 +28007CC60:F1A:8.87984660755832821977e-01 +28007CC70:F1A:8.78309655808916844855e-01 +28007CC80:F1A:8.69008688036856491443e-01 +28007CC90:F1A:8.60033621196331088399e-01 +28007CCA0:F1A:8.51346258458677507264e-01 +28007CCB0:F1A:8.42915653112203733244e-01 +28007CCC0:F1A:8.34716292986882990590e-01 +28007CCD0:F1A:8.26726833946220929228e-01 +28007CCE0:F1A:8.18929191603701922553e-01 +28007CCF0:F1A:8.11307874312655719073e-01 +28007CD00:F1A:8.03849483170963829970e-01 +28007CD10:F1A:7.96542330422958411162e-01 +28007CD20:F1A:7.89376143566024035536e-01 +28007CD30:F1A:7.82341832654801949687e-01 +28007CD40:F1A:7.75431304981186619862e-01 +28007CD50:F1A:7.68637315798485709628e-01 +28007CD60:F1A:7.61953346836794831454e-01 +28007CD70:F1A:7.55373506507095671125e-01 +28007CD80:F1A:7.48892447219156376370e-01 +28007CD90:F1A:7.42505296340150611201e-01 +28007CDA0:F1A:7.36207598126862095000e-01 +28007CDB0:F1A:7.29995264561475676324e-01 +28007CDC0:F1A:7.23864533468629667290e-01 +28007CDD0:F1A:7.17811932630721516446e-01 +28007CDE0:F1A:7.11834248878247977110e-01 +28007CDF0:F1A:7.05928501332753755015e-01 +28007CE00:F1A:7.00091918136511170978e-01 +28007CE10:F1A:6.94321916126116267520e-01 +28007CE20:F1A:6.88616083004671364343e-01 +28007CE30:F1A:6.82972161644994302243e-01 +28007CE40:F1A:6.77388036218773081920e-01 +28007CE50:F1A:6.71861719897081655084e-01 +28007CE60:F1A:6.66391343908749766989e-01 +28007CE70:F1A:6.60975147776662774746e-01 +28007CE80:F1A:6.55611470579696931082e-01 +28007CE90:F1A:6.50298743110816368507e-01 +28007CEA0:F1A:6.45035480820821960357e-01 +28007CEB0:F1A:6.39820277453056140970e-01 +28007CEC0:F1A:6.34651799287623274992e-01 +28007CED0:F1A:6.29528779924836245918e-01 +28007CEE0:F1A:6.24450015547026060503e-01 +28007CEF0:F1A:6.19414360605833991258e-01 +28007CF00:F1A:6.14420723888913444810e-01 +28007CF10:F1A:6.09468064925773100882e-01 +28007CF20:F1A:6.04555390697467331940e-01 +28007CF30:F1A:5.99681752619124819326e-01 +28007CF40:F1A:5.94846243767986893047e-01 +28007CF50:F1A:5.90047996332825452903e-01 +28007CF60:F1A:5.85286179263370898163e-01 +28007CF70:F1A:5.80559996100790343121e-01 +28007CF80:F1A:5.75868682972353163052e-01 +28007CF90:F1A:5.71211506735252672051e-01 +28007CFA0:F1A:5.66587763256163889913e-01 +28007CFB0:F1A:5.61996775814523896742e-01 +28007CFC0:F1A:5.57437893618765500925e-01 +28007CFD0:F1A:5.52910490425831846473e-01 +28007CFE0:F1A:5.48413963255265368701e-01 +28007CFF0:F1A:5.43947731190025818293e-01 +28007D000:F1A:5.39511234256951577315e-01 +28007D010:F1A:5.35103932380457170126e-01 +28007D020:F1A:5.30725304403661501951e-01 +28007D030:F1A:5.26374847171684034919e-01 +28007D040:F1A:5.22052074672321397841e-01 +28007D050:F1A:5.17756517229755908183e-01 +28007D060:F1A:5.13487720747326514825e-01 +28007D070:F1A:5.09245245995747608525e-01 +28007D080:F1A:5.05028667943467901580e-01 +28007D090:F1A:5.00837575126148348836e-01 +28007D0A0:F1A:4.96671569052489325635e-01 +28007D0B0:F1A:4.92530263643868149170e-01 +28007D0C0:F1A:4.88413284705457584334e-01 +28007D0D0:F1A:4.84320269426682881164e-01 +28007D0E0:F1A:4.80250865909046420477e-01 +28007D0F0:F1A:4.76204732719505474670e-01 +28007D100:F1A:4.72181538467729755570e-01 +28007D110:F1A:4.68180961405693207844e-01 +28007D120:F1A:4.64202689048173910980e-01 +28007D130:F1A:4.60246417812842478767e-01 +28007D140:F1A:4.56311852678716101117e-01 +28007D150:F1A:4.52398706861848243221e-01 +28007D160:F1A:4.48506701507202731882e-01 +28007D170:F1A:4.44635565395739118522e-01 +28007D180:F1A:4.40785034665803765463e-01 +28007D190:F1A:4.36954852547985328481e-01 +28007D1A0:F1A:4.33144769112652094911e-01 +28007D1B0:F1A:4.29354541029441261202e-01 +28007D1C0:F1A:4.25583931338021803636e-01 +28007D1D0:F1A:4.21832709229495728120e-01 +28007D1E0:F1A:4.18100649837847948564e-01 +28007D1F0:F1A:4.14387534040890903597e-01 +28007D200:F1A:4.10693148270187990967e-01 +28007D210:F1A:4.07017284329473150173e-01 +28007D220:F1A:4.03359739221114288465e-01 +28007D230:F1A:3.99720314980197000132e-01 +28007D240:F1A:3.96098818515832229448e-01 +28007D250:F1A:3.92495061459315397467e-01 +28007D260:F1A:3.88908860018788549162e-01 +28007D270:F1A:3.85340034840077061418e-01 +28007D280:F1A:3.81788410873393435629e-01 +28007D290:F1A:3.78253817245618961795e-01 +28007D2A0:F1A:3.74736087137890860888e-01 +28007D2B0:F1A:3.71235057668239221140e-01 +28007D2C0:F1A:3.67750569779032254747e-01 +28007D2D0:F1A:3.64282468129003722535e-01 +28007D2E0:F1A:3.60830600989647753973e-01 +28007D2F0:F1A:3.57394820145780223175e-01 +28007D300:F1A:3.53974980800076555187e-01 +28007D310:F1A:3.50570941481405884410e-01 +28007D320:F1A:3.47182563956793477367e-01 +28007D330:F1A:3.43809713146850548515e-01 +28007D340:F1A:3.40452257044521644502e-01 +28007D350:F1A:3.37110066637005878487e-01 +28007D360:F1A:3.33783015830718232664e-01 +28007D370:F1A:3.30470981379163419867e-01 +28007D380:F1A:3.27173842813601289947e-01 +28007D390:F1A:3.23891482376391037779e-01 +28007D3A0:F1A:3.20623784956905300003e-01 +28007D3B0:F1A:3.17370638029913498812e-01 +28007D3C0:F1A:3.14131931596337066193e-01 +28007D3D0:F1A:3.10907558126286343025e-01 +28007D3E0:F1A:3.07697412504291889501e-01 +28007D3F0:F1A:3.04501391976649826709e-01 +28007D400:F1A:3.01319396100802883165e-01 +28007D410:F1A:2.98151326696685314843e-01 +28007D420:F1A:2.94997087799961643650e-01 +28007D430:F1A:2.91856585617094987928e-01 +28007D440:F1A:2.88729728482182701477e-01 +28007D450:F1A:2.85616426815501589509e-01 +28007D460:F1A:2.82516593083707412415e-01 +28007D470:F1A:2.79430141761637718112e-01 +28007D480:F1A:2.76356989295668098450e-01 +28007D490:F1A:2.73297054068576905639e-01 +28007D4A0:F1A:2.70250256365875185516e-01 +28007D4B0:F1A:2.67216518343561137971e-01 +28007D4C0:F1A:2.64195763997260801847e-01 +28007D4D0:F1A:2.61187919132720824944e-01 +28007D4E0:F1A:2.58192911337618902223e-01 +28007D4F0:F1A:2.55210669954661684145e-01 +28007D500:F1A:2.52241126055941899953e-01 +28007D510:F1A:2.49284212418528244859e-01 +28007D520:F1A:2.46339863501263633960e-01 +28007D530:F1A:2.43408015422750118040e-01 +28007D540:F1A:2.40488605940500393965e-01 +28007D550:F1A:2.37581574431237951828e-01 +28007D560:F1A:2.34686861872329899370e-01 +28007D570:F1A:2.31804410824338585906e-01 +28007D580:F1A:2.28934165414680229622e-01 +28007D590:F1A:2.26076071322380195427e-01 +28007D5A0:F1A:2.23230075763917457099e-01 +28007D5B0:F1A:2.20396127480151943212e-01 +28007D5C0:F1A:2.17574176724331130872e-01 +28007D5D0:F1A:2.14764175251173583536e-01 +28007D5E0:F1A:2.11966076307030154569e-01 +28007D5F0:F1A:2.09179834621124993710e-01 +28007D600:F1A:2.06405406397880714087e-01 +28007D610:F1A:2.03642749310334852941e-01 +28007D620:F1A:2.00891822494656563380e-01 +28007D630:F1A:1.98152586545775111215e-01 +28007D640:F1A:1.95425003514134276728e-01 +28007D650:F1A:1.92709036903589120415e-01 +28007D660:F1A:1.90004651670464957958e-01 +28007D670:F1A:1.87311814223800249257e-01 +28007D680:F1A:1.84630492426799269756e-01 +28007D690:F1A:1.81960655599522541648e-01 +28007D6A0:F1A:1.79302274522847665539e-01 +28007D6B0:F1A:1.76655321443734997233e-01 +28007D6C0:F1A:1.74019770081838748288e-01 +28007D6D0:F1A:1.71395595637505948616e-01 +28007D6E0:F1A:1.68782774801211510329e-01 +28007D6F0:F1A:1.66181285764482045142e-01 +28007D700:F1A:1.63591108232365695097e-01 +28007D710:F1A:1.61012223437511065027e-01 +28007D720:F1A:1.58444614155924312637e-01 +28007D730:F1A:1.55888264724479197465e-01 +28007D740:F1A:1.53343161060262828110e-01 +28007D750:F1A:1.50809290681845675763e-01 +28007D760:F1A:1.48286642732574525105e-01 +28007D770:F1A:1.45775208005994028060e-01 +28007D780:F1A:1.43274978973513406055e-01 +28007D790:F1A:1.40785949814444699690e-01 +28007D7A0:F1A:1.38308116448550705302e-01 +28007D7B0:F1A:1.35841476571253727545e-01 +28007D7C0:F1A:1.33386029691669127928e-01 +28007D7D0:F1A:1.30941777173644302579e-01 +28007D7E0:F1A:1.28508722279999515470e-01 +28007D7F0:F1A:1.26086870220185859326e-01 +28007D800:F1A:1.23676228201596544176e-01 +28007D810:F1A:1.21276805484790209388e-01 +28007D820:F1A:1.18888613442909976681e-01 +28007D830:F1A:1.16511665625610799646e-01 +28007D840:F1A:1.14145977827838349117e-01 +28007D850:F1A:1.11791568163838006544e-01 +28007D860:F1A:1.09448457146811631291e-01 +28007D870:F1A:1.07116667774683635428e-01 +28007D880:F1A:1.04796225622486902096e-01 +28007D890:F1A:1.02487158941935080358e-01 +28007D8A0:F1A:1.00189498768809809315e-01 +28007D8B0:F1A:9.79032790388622842226e-02 +28007D8C0:F1A:9.56285367130088187482e-02 +28007D8D0:F1A:9.33653119126908598302e-02 +28007D8E0:F1A:9.11136480663736342267e-02 +28007D8F0:F1A:8.88735920682757890576e-02 +28007D900:F1A:8.66451944505579607636e-02 +28007D910:F1A:8.44285095703533744471e-02 +28007D920:F1A:8.22235958132028627032e-02 +28007D930:F1A:8.00305158146630557514e-02 +28007D940:F1A:7.78493367020960391756e-02 +28007D950:F1A:7.56801303589270668581e-02 +28007D960:F1A:7.35229737139812683511e-02 +28007D970:F1A:7.13779490588903747783e-02 +28007D980:F1A:6.92451443970067692657e-02 +28007D990:F1A:6.71246538277884968737e-02 +28007D9A0:F1A:6.50165779712428421044e-02 +28007D9B0:F1A:6.29210244377581134900e-02 +28007D9C0:F1A:6.08381083495398641836e-02 +28007D9D0:F1A:5.87679529209337581097e-02 +28007D9E0:F1A:5.67106901062029017391e-02 +28007D9F0:F1A:5.46664613248889139085e-02 +28007DA00:F1A:5.26354182767921757735e-02 +28007DA10:F1A:5.06177238609477608833e-02 +28007DA20:F1A:4.86135532158685212956e-02 +28007DA30:F1A:4.66230949019303675396e-02 +28007DA40:F1A:4.46465522512944426592e-02 +28007DA50:F1A:4.26841449164744313194e-02 +28007DA60:F1A:4.07361106559409325012e-02 +28007DA70:F1A:3.88027074045261127777e-02 +28007DA80:F1A:3.68842156885672844968e-02 +28007DA90:F1A:3.49809414617160835403e-02 +28007DAA0:F1A:3.30932194585785224850e-02 +28007DAB0:F1A:3.12214171919202448935e-02 +28007DAC0:F1A:2.93659397581333136973e-02 +28007DAD0:F1A:2.75272356696030819079e-02 +28007DAE0:F1A:2.57058040085488964666e-02 +28007DAF0:F1A:2.39022033057958820101e-02 +28007DB00:F1A:2.21170627073088640890e-02 +28007DB10:F1A:2.03510962300445172324e-02 +28007DB20:F1A:1.86051212757246432761e-02 +28007DB30:F1A:1.68800831525431661861e-02 +28007DB40:F1A:1.51770883079353248457e-02 +28007DB50:F1A:1.34974506017398795249e-02 +28007DB60:F1A:1.18427578579078877224e-02 +28007DB70:F1A:1.02149714397014711870e-02 +28007DB80:F1A:8.61658276939873159217e-03 +28007DB90:F1A:7.05087547137322676050e-03 +28007DBA0:F1A:5.52240329925099675962e-03 +28007DBB0:F1A:4.03797259336303050042e-03 +28007DBC0:F1A:2.60907274610216273134e-03 +28007DBD0:F1A:1.26028593049859753868e-03 +28007DBE0:lI126|H28007DBF0 +28007DBF0:lI99|H28007DC00 +28007DC00:lI126|H28007DC10 +28007DC10:lI99|H28007DC20 +28007DC20:lI46|H28007DC30 +28007DC30:lI126|H28007DC40 +28007DC40:lI49|H28007DC50 +28007DC50:lI51|H28007DC60 +28007DC60:lI46|H28007DC70 +28007DC70:lI49|H28007DC80 +28007DC80:lI54|H28007DC90 +28007DC90:lI46|H28007DCA0 +28007DCA0:lI48|H28007DCB0 +28007DCB0:lI98|H28007DCC0 +28007DCC0:lI69|H28007DCD0 +28007DCD0:lI126|H28007DCE0 +28007DCE0:lI98|N +28007DCF0:lI108|N +28007DD00:lI114|H28007DCF0 +28007DD10:lI101|H28007DD00 +28007DD20:lI46|H28007DD10 +28007DD30:lI100|H28007DD20 +28007DD40:lI110|H28007DD30 +28007DD50:lI97|H28007DD40 +28007DD60:lI114|H28007DD50 +28007DD70:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAAAAAAAHcEcmFuZGEAYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007DD98:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAABAAAAAHcEcmFuZGEBYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007DDC0:E48:g3AAAABGAn3XkEUS41MGPnrQPyy5JUoAAAACAAAAAHcEcmFuZGECYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007DDE8:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAADAAAAAHcEcmFuZGEDYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007DE10:t6:A4:type,A4:next,A4:bits,A7:uniform,A9:uniform_n,A4:jump +28007DE48:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAEAAAAAHcEcmFuZGEEYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007DE70:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAFAAAAAHcEcmFuZGEFYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007DE98:t4:A3:max,A4:type,A4:next,A4:jump +28007DEC0:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAGAAAAAHcEcmFuZGEGYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007DEE8:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAHAAAAAHcEcmFuZGEHYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007DF10:E48:g3AAAABGAn3XkEUS41MGPnrQPyy5JUoAAAAIAAAAAHcEcmFuZGEIYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007DF38:t7:A4:type,A4:next,A4:bits,A7:uniform,AD:weak_low_bits,A9:uniform_n,A4:jump +28007DF78:B18446744073709551615 +28007DF88:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAJAAAAAHcEcmFuZGEJYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007DFB0:t3:A3:max,A4:type,A4:next +28007DFD0:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAKAAAAAHcEcmFuZGEKYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007DFF8:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAALAAAAAHcEcmFuZGELYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E020:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAMAAAAAHcEcmFuZGEMYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E048:t5:A4:type,A4:next,A4:bits,AD:weak_low_bits,A4:jump +28007E078:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAANAAAAAHcEcmFuZGENYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E0A0:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAOAAAAAHcEcmFuZGEOYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E0C8:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAPAAAAAHcEcmFuZGEPYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E0F0:E48:g3AAAABGAn3XkEUS41MGPnrQPyy5JUoAAAAQAAAAAHcEcmFuZGEQYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E118:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAARAAAAAHcEcmFuZGERYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E140:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAASAAAAAHcEcmFuZGESYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E168:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAATAAAAAHcEcmFuZGETYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E190:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAUAAAAAHcEcmFuZGEUYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E1B8:E48:g3AAAABGAn3XkEUS41MGPnrQPyy5JUoAAAAVAAAAAHcEcmFuZGEVYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E1E0:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAWAAAAAHcEcmFuZGEWYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E208:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAXAAAAAHcEcmFuZGEXYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E230:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAYAAAAAHcEcmFuZGEYYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E258:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAZAAAAAHcEcmFuZGEZYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E280:E48:g3AAAABGAn3XkEUS41MGPnrQPyy5JUoAAAAaAAAAAHcEcmFuZGEaYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E2A8:t5:A4:type,A4:next,A4:bits,A7:uniform,A9:uniform_n +28007E2D8:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAbAAAAAHcEcmFuZGEbYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E300:B2685821657736338717 +28007E310:B18446744073709551614 +28007E320:B1181783497276652981 +28007E330:E48:g3AAAABGAn3XkEUS41MGPnrQPyy5JUoAAAAcAAAAAHcEcmFuZGEcYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E358:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAdAAAAAHcEcmFuZGEdYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007E380:B11400714819323198485 +28007E390:B13787848793156543929 +28007E3A0:B10723151780598845931 +28007E3B0:B9223372036854775808 +28007F160:t2:A5:error,AB:not_boolean +28007F178:t2:A5:error,A17:global_group_not_runnig +28007F190:t2:A5:local,AC:global_group +28007F1A8:t1:AD:connection_id +28007F1B8:Mf1:H28007F1A8:A4:true +28007F1D8:lA9:undefined|N +28007F1E8:Mf0:H280010188: +28007F200:t2:A4:node,AB:test3844zty +28007F218:t2:A5:error,A15:illegal_function_call +28007F230:t2:A5:error,A1A:no global_groups definiton +28007F248:t2:H28007F260,H28007F278 +28007F260:Mf0:H280010188: +28007F278:Mf0:H280010188: +28007F290:t3:N,N,N +28007F2B0:lI103|H28007F2C0 +28007F2C0:lI108|H28007F2D0 +28007F2D0:lI111|H28007F2E0 +28007F2E0:lI98|H28007F2F0 +28007F2F0:lI97|H28007F300 +28007F300:lI108|H28007F310 +28007F310:lI95|H28007F320 +28007F320:lI103|H28007F330 +28007F330:lI114|H28007F340 +28007F340:lI111|H28007F350 +28007F350:lI117|H28007F360 +28007F360:lI112|H28007F370 +28007F370:lI58|H28007F380 +28007F380:lI32|H28007F390 +28007F390:lI67|H28007F3A0 +28007F3A0:lI111|H28007F3B0 +28007F3B0:lI117|H28007F3C0 +28007F3C0:lI108|H28007F3D0 +28007F3D0:lI100|H28007F3E0 +28007F3E0:lI32|H28007F3F0 +28007F3F0:lI110|H28007F400 +28007F400:lI111|H28007F410 +28007F410:lI116|H28007F420 +28007F420:lI32|H28007F430 +28007F430:lI115|H28007F440 +28007F440:lI121|H28007F450 +28007F450:lI110|H28007F460 +28007F460:lI99|H28007F470 +28007F470:lI104|H28007F480 +28007F480:lI114|H28007F490 +28007F490:lI111|H28007F4A0 +28007F4A0:lI110|H28007F4B0 +28007F4B0:lI105|H28007F4C0 +28007F4C0:lI122|H28007F4D0 +28007F4D0:lI101|H28007F4E0 +28007F4E0:lI32|H28007F4F0 +28007F4F0:lI119|H28007F500 +28007F500:lI105|H28007F510 +28007F510:lI116|H28007F520 +28007F520:lI104|H28007F530 +28007F530:lI32|H28007F540 +28007F540:lI110|H28007F550 +28007F550:lI111|H28007F560 +28007F560:lI100|H28007F570 +28007F570:lI101|H28007F580 +28007F580:lI32|H28007F590 +28007F590:lI126|H28007F5A0 +28007F5A0:lI112|H28007F5B0 +28007F5B0:lI126|H28007F5C0 +28007F5C0:lI110|H28007F5D0 +28007F5D0:lI98|H28007F5E0 +28007F5E0:lI101|H28007F5F0 +28007F5F0:lI99|H28007F600 +28007F600:lI97|H28007F610 +28007F610:lI117|H28007F620 +28007F620:lI115|H28007F630 +28007F630:lI101|H28007F640 +28007F640:lI32|H28007F650 +28007F650:lI103|H28007F660 +28007F660:lI108|H28007F670 +28007F670:lI111|H28007F680 +28007F680:lI98|H28007F690 +28007F690:lI97|H28007F6A0 +28007F6A0:lI108|H28007F6B0 +28007F6B0:lI95|H28007F6C0 +28007F6C0:lI103|H28007F6D0 +28007F6D0:lI114|H28007F6E0 +28007F6E0:lI111|H28007F6F0 +28007F6F0:lI117|H28007F700 +28007F700:lI112|H28007F710 +28007F710:lI115|H28007F720 +28007F720:lI32|H28007F730 +28007F730:lI112|H28007F740 +28007F740:lI97|H28007F750 +28007F750:lI114|H28007F760 +28007F760:lI97|H28007F770 +28007F770:lI109|H28007F780 +28007F780:lI101|H28007F790 +28007F790:lI116|H28007F7A0 +28007F7A0:lI101|H28007F7B0 +28007F7B0:lI114|H28007F7C0 +28007F7C0:lI32|H28007F7D0 +28007F7D0:lI119|H28007F7E0 +28007F7E0:lI101|H28007F7F0 +28007F7F0:lI114|H28007F800 +28007F800:lI101|H28007F810 +28007F810:lI32|H28007F820 +28007F820:lI110|H28007F830 +28007F830:lI111|H28007F840 +28007F840:lI116|H28007F850 +28007F850:lI32|H28007F860 +28007F860:lI105|H28007F870 +28007F870:lI110|H28007F880 +28007F880:lI32|H28007F890 +28007F890:lI97|H28007F8A0 +28007F8A0:lI103|H28007F8B0 +28007F8B0:lI114|H28007F8C0 +28007F8C0:lI101|H28007F8D0 +28007F8D0:lI101|H28007F8E0 +28007F8E0:lI109|H28007F8F0 +28007F8F0:lI101|H28007F900 +28007F900:lI110|H28007F910 +28007F910:lI116|H28007F920 +28007F920:lI46|H28007F930 +28007F930:lI126|H28007F940 +28007F940:lI110|N +28007F950:t2:A4:erpc,AC:noconnection +28007F968:t9:A5:gconf,A7:invalid,A9:undefined,N,A6:normal,N,A3:all,N,A7:no_conf +28007F9B8:t2:A2:ok,A3:all +28007F9D0:lI108|N +28007F9E0:lI114|H28007F9D0 +28007F9F0:lI101|H28007F9E0 +28007FA00:lI46|H28007F9F0 +28007FA10:lI112|H28007FA00 +28007FA20:lI117|H28007FA10 +28007FA30:lI111|H28007FA20 +28007FA40:lI114|H28007FA30 +28007FA50:lI103|H28007FA40 +28007FA60:lI95|H28007FA50 +28007FA70:lI108|H28007FA60 +28007FA80:lI97|H28007FA70 +28007FA90:lI98|H28007FA80 +28007FAA0:lI111|H28007FA90 +28007FAB0:lI108|H28007FAA0 +28007FAC0:lI103|H28007FAB0 +28007FAD0:E50:g3AAAABOAP90bxlFikMVMF8VpcuovIcAAAAAAAAAAHcMZ2xvYmFsX2dyb3VwYQBiB/ujeFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +28007FAF8:E50:g3AAAABOAv90bxlFikMVMF8VpcuovIcAAAABAAAAAHcMZ2xvYmFsX2dyb3VwYQFiB/ujeFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +28007FB20:E50:g3AAAABOAv90bxlFikMVMF8VpcuovIcAAAACAAAAAHcMZ2xvYmFsX2dyb3VwYQJiB/ujeFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +28007FB48:E50:g3AAAABOAv90bxlFikMVMF8VpcuovIcAAAADAAAAAHcMZ2xvYmFsX2dyb3VwYQNiB/ujeFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +28007FB70:E50:g3AAAABOA/90bxlFikMVMF8VpcuovIcAAAAHAAAAAHcMZ2xvYmFsX2dyb3VwYQdiB/ujeFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +28007FB98:E50:g3AAAABOAv90bxlFikMVMF8VpcuovIcAAAAIAAAAAHcMZ2xvYmFsX2dyb3VwYQhiB/ujeFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +28007FC58:lN|N +28007FC68:t2:A4:erpc,A6:badarg +28007FC80:lH28007FCA0|H28007FC90 +28007FC90:lA7:monitor|N +28007FCA0:t2:A5:reply,AA:error_only +28007FCB8:t2:A4:erpc,AC:noconnection +28007FCD0:t2:A4:erpc,A7:timeout +28007FCE8:Mf0:H280010188: +28007FD00:lH28007FD10|N +28007FD10:t2:A5:reply,A2:no +28007FD28:lA4:info|N +28007FD38:t2:A5:reply,AA:error_only +28007FD50:t2:A5:error,H28007FD68 +28007FD68:t2:A4:erpc,A7:timeout +28007FD80:lI108|N +28007FD90:lI114|H28007FD80 +28007FDA0:lI101|H28007FD90 +28007FDB0:lI46|H28007FDA0 +28007FDC0:lI99|H28007FDB0 +28007FDD0:lI112|H28007FDC0 +28007FDE0:lI114|H28007FDD0 +28007FDF0:lI101|H28007FDE0 +28007FE00:E48:g3AAAABGArZvHmfGlHCs4XDYkOAiwhMAAAAAAAAAAHcEZXJwY2EAYgWzePNYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007FE28:E48:g3AAAABGA7ZvHmfGlHCs4XDYkOAiwhMAAAABAAAAAHcEZXJwY2EBYgWzePNYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +28007FE50:t1:AA:local_call +280082718:lA8:infinity|N +280082728:lH280082738|N +280082738:t2:A8:postpone,A5:false +280082750:lAA:gen_statem|N +280082760:t1:A3:t0q +280082770:Mf1:H280082760:N +280082790:lH2800827A0|N +2800827A0:t2:A8:internal,AA:init_state +2800827B8:t5:A5:state,H2800827E8,N,H280082810,A5:false +2800827E8:t2:A9:undefined,A9:undefined +280082800:t1:A3:t0q +280082810:Mf1:H280082800:N +280082830:t2:A4:exit,A6:normal +280082848:lI83|H280082858 +280082858:lI116|H280082868 +280082868:lI97|H280082878 +280082878:lI116|H280082888 +280082888:lI117|H280082898 +280082898:lI115|H2800828A8 +2800828A8:lI32|H2800828B8 +2800828B8:lI102|H2800828C8 +2800828C8:lI111|H2800828D8 +2800828D8:lI114|H2800828E8 +2800828E8:lI32|H2800828F8 +2800828F8:lI115|H280082908 +280082908:lI116|H280082918 +280082918:lI97|H280082928 +280082928:lI116|H280082938 +280082938:lI101|H280082948 +280082948:lI32|H280082958 +280082958:lI109|H280082968 +280082968:lI97|H280082978 +280082978:lI99|H280082988 +280082988:lI104|H280082998 +280082998:lI105|H2800829A8 +2800829A8:lI110|H2800829B8 +2800829B8:lI101|N +2800829C8:Mf0:H280010188: +2800829E0:lI83|H2800829F0 +2800829F0:lI116|H280082A00 +280082A00:lI97|H280082A10 +280082A10:lI116|H280082A20 +280082A20:lI101|N +280082A30:lI80|H280082A40 +280082A40:lI111|H280082A50 +280082A50:lI115|H280082A60 +280082A60:lI116|H280082A70 +280082A70:lI112|H280082A80 +280082A80:lI111|H280082A90 +280082A90:lI110|H280082AA0 +280082AA0:lI101|H280082AB0 +280082AB0:lI100|N +280082AC0:lI76|H280082AD0 +280082AD0:lI111|H280082AE0 +280082AE0:lI103|H280082AF0 +280082AF0:lI103|H280082B00 +280082B00:lI101|H280082B10 +280082B10:lI100|H280082B20 +280082B20:lI32|H280082B30 +280082B30:lI69|H280082B40 +280082B40:lI118|H280082B50 +280082B50:lI101|H280082B60 +280082B60:lI110|H280082B70 +280082B70:lI116|H280082B80 +280082B80:lI115|N +280082B90:lI84|H280082BA0 +280082BA0:lI105|H280082BB0 +280082BB0:lI109|H280082BC0 +280082BC0:lI101|H280082BD0 +280082BD0:lI45|H280082BE0 +280082BE0:lI111|H280082BF0 +280082BF0:lI117|H280082C00 +280082C00:lI116|H280082C10 +280082C10:lI115|N +280082C20:lI77|H280082C30 +280082C30:lI111|H280082C40 +280082C40:lI100|H280082C50 +280082C50:lI117|H280082C60 +280082C60:lI108|H280082C70 +280082C70:lI101|H280082C80 +280082C80:lI115|N +280082C90:lI80|H280082CA0 +280082CA0:lI97|H280082CB0 +280082CB0:lI114|H280082CC0 +280082CC0:lI101|H280082CD0 +280082CD0:lI110|H280082CE0 +280082CE0:lI116|N +280082CF0:lI83|H280082D00 +280082D00:lI116|H280082D10 +280082D10:lI97|H280082D20 +280082D20:lI116|H280082D30 +280082D30:lI117|H280082D40 +280082D40:lI115|N +280082D50:lI126|H280082D60 +280082D60:lI116|H280082D70 +280082D70:lI112|N +280082D80:lI126|H280082D90 +280082D90:lI116|H280082DA0 +280082DA0:lI112|H280082DB0 +280082DB0:lI32|H280082DC0 +280082DC0:lI61|H280082DD0 +280082DD0:lI62|H280082DE0 +280082DE0:lI32|H280082DF0 +280082DF0:lI126|H280082E00 +280082E00:lI116|H280082E10 +280082E10:lI112|N +280082E20:lI42|H280082E30 +280082E30:lI68|H280082E40 +280082E40:lI66|H280082E50 +280082E50:lI71|H280082E60 +280082E60:lI42|H280082E70 +280082E70:lI32|H280082E80 +280082E80:lI126|H280082E90 +280082E90:lI116|H280082EA0 +280082EA0:lI112|H280082EB0 +280082EB0:lI32|H280082EC0 +280082EC0:lI126|H280082ED0 +280082ED0:lI116|H280082EE0 +280082EE0:lI119|H280082EF0 +280082EF0:lI32|H280082F00 +280082F00:lI126|H280082F10 +280082F10:lI116|H280082F20 +280082F20:lI115|H280082F30 +280082F30:lI32|H280082F40 +280082F40:lI105|H280082F50 +280082F50:lI110|H280082F60 +280082F60:lI32|H280082F70 +280082F70:lI115|H280082F80 +280082F80:lI116|H280082F90 +280082F90:lI97|H280082FA0 +280082FA0:lI116|H280082FB0 +280082FB0:lI101|H280082FC0 +280082FC0:lI32|H280082FD0 +280082FD0:lI126|H280082FE0 +280082FE0:lI116|H280082FF0 +280082FF0:lI115|H280083000 +280083000:lI126|H280083010 +280083010:lI110|N +280083020:lI42|H280083030 +280083030:lI68|H280083040 +280083040:lI66|H280083050 +280083050:lI71|H280083060 +280083060:lI42|H280083070 +280083070:lI32|H280083080 +280083080:lI126|H280083090 +280083090:lI116|H2800830A0 +2800830A0:lI112|H2800830B0 +2800830B0:lI32|H2800830C0 +2800830C0:lI116|H2800830D0 +2800830D0:lI101|H2800830E0 +2800830E0:lI114|H2800830F0 +2800830F0:lI109|H280083100 +280083100:lI105|H280083110 +280083110:lI110|H280083120 +280083120:lI97|H280083130 +280083130:lI116|H280083140 +280083140:lI101|H280083150 +280083150:lI32|H280083160 +280083160:lI126|H280083170 +280083170:lI116|H280083180 +280083180:lI112|H280083190 +280083190:lI32|H2800831A0 +2800831A0:lI105|H2800831B0 +2800831B0:lI110|H2800831C0 +2800831C0:lI32|H2800831D0 +2800831D0:lI115|H2800831E0 +2800831E0:lI116|H2800831F0 +2800831F0:lI97|H280083200 +280083200:lI116|H280083210 +280083210:lI101|H280083220 +280083220:lI32|H280083230 +280083230:lI126|H280083240 +280083240:lI116|H280083250 +280083250:lI112|H280083260 +280083260:lI126|H280083270 +280083270:lI110|N +280083280:lI42|H280083290 +280083290:lI68|H2800832A0 +2800832A0:lI66|H2800832B0 +2800832B0:lI71|H2800832C0 +2800832C0:lI42|H2800832D0 +2800832D0:lI32|H2800832E0 +2800832E0:lI126|H2800832F0 +2800832F0:lI116|H280083300 +280083300:lI112|H280083310 +280083310:lI32|H280083320 +280083320:lI115|H280083330 +280083330:lI116|H280083340 +280083340:lI97|H280083350 +280083350:lI114|H280083360 +280083360:lI116|H280083370 +280083370:lI95|H280083380 +280083380:lI116|H280083390 +280083390:lI105|H2800833A0 +2800833A0:lI109|H2800833B0 +2800833B0:lI101|H2800833C0 +2800833C0:lI114|H2800833D0 +2800833D0:lI32|H2800833E0 +2800833E0:lI126|H2800833F0 +2800833F0:lI116|H280083400 +280083400:lI112|H280083410 +280083410:lI32|H280083420 +280083420:lI105|H280083430 +280083430:lI110|H280083440 +280083440:lI32|H280083450 +280083450:lI115|H280083460 +280083460:lI116|H280083470 +280083470:lI97|H280083480 +280083480:lI116|H280083490 +280083490:lI101|H2800834A0 +2800834A0:lI32|H2800834B0 +2800834B0:lI126|H2800834C0 +2800834C0:lI116|H2800834D0 +2800834D0:lI112|H2800834E0 +2800834E0:lI126|H2800834F0 +2800834F0:lI110|N +280083500:lI42|H280083510 +280083510:lI68|H280083520 +280083520:lI66|H280083530 +280083530:lI71|H280083540 +280083540:lI42|H280083550 +280083550:lI32|H280083560 +280083560:lI126|H280083570 +280083570:lI116|H280083580 +280083580:lI112|H280083590 +280083590:lI32|H2800835A0 +2800835A0:lI115|H2800835B0 +2800835B0:lI101|H2800835C0 +2800835C0:lI110|H2800835D0 +2800835D0:lI100|H2800835E0 +2800835E0:lI32|H2800835F0 +2800835F0:lI126|H280083600 +280083600:lI116|H280083610 +280083610:lI112|H280083620 +280083620:lI32|H280083630 +280083630:lI116|H280083640 +280083640:lI111|H280083650 +280083650:lI32|H280083660 +280083660:lI126|H280083670 +280083670:lI116|H280083680 +280083680:lI119|H280083690 +280083690:lI126|H2800836A0 +2800836A0:lI110|N +2800836B0:lI42|H2800836C0 +2800836C0:lI68|H2800836D0 +2800836D0:lI66|H2800836E0 +2800836E0:lI71|H2800836F0 +2800836F0:lI42|H280083700 +280083700:lI32|H280083710 +280083710:lI126|H280083720 +280083720:lI116|H280083730 +280083730:lI112|H280083740 +280083740:lI32|H280083750 +280083750:lI109|H280083760 +280083760:lI111|H280083770 +280083770:lI100|H280083780 +280083780:lI117|H280083790 +280083790:lI108|H2800837A0 +2800837A0:lI101|H2800837B0 +2800837B0:lI32|H2800837C0 +2800837C0:lI126|H2800837D0 +2800837D0:lI116|H2800837E0 +2800837E0:lI112|H2800837F0 +2800837F0:lI32|H280083800 +280083800:lI105|H280083810 +280083810:lI110|H280083820 +280083820:lI32|H280083830 +280083830:lI115|H280083840 +280083840:lI116|H280083850 +280083850:lI97|H280083860 +280083860:lI116|H280083870 +280083870:lI101|H280083880 +280083880:lI32|H280083890 +280083890:lI126|H2800838A0 +2800838A0:lI116|H2800838B0 +2800838B0:lI112|H2800838C0 +2800838C0:lI126|H2800838D0 +2800838D0:lI110|N +2800838E0:lI42|H2800838F0 +2800838F0:lI68|H280083900 +280083900:lI66|H280083910 +280083910:lI71|H280083920 +280083920:lI42|H280083930 +280083930:lI32|H280083940 +280083940:lI126|H280083950 +280083950:lI116|H280083960 +280083960:lI112|H280083970 +280083970:lI32|H280083980 +280083980:lI105|H280083990 +280083990:lI110|H2800839A0 +2800839A0:lI115|H2800839B0 +2800839B0:lI101|H2800839C0 +2800839C0:lI114|H2800839D0 +2800839D0:lI116|H2800839E0 +2800839E0:lI95|H2800839F0 +2800839F0:lI116|H280083A00 +280083A00:lI105|H280083A10 +280083A10:lI109|H280083A20 +280083A20:lI101|H280083A30 +280083A30:lI111|H280083A40 +280083A40:lI117|H280083A50 +280083A50:lI116|H280083A60 +280083A60:lI32|H280083A70 +280083A70:lI126|H280083A80 +280083A80:lI116|H280083A90 +280083A90:lI112|H280083AA0 +280083AA0:lI32|H280083AB0 +280083AB0:lI105|H280083AC0 +280083AC0:lI110|H280083AD0 +280083AD0:lI32|H280083AE0 +280083AE0:lI115|H280083AF0 +280083AF0:lI116|H280083B00 +280083B00:lI97|H280083B10 +280083B10:lI116|H280083B20 +280083B20:lI101|H280083B30 +280083B30:lI32|H280083B40 +280083B40:lI126|H280083B50 +280083B50:lI116|H280083B60 +280083B60:lI112|H280083B70 +280083B70:lI126|H280083B80 +280083B80:lI110|N +280083B90:lI42|H280083BA0 +280083BA0:lI68|H280083BB0 +280083BB0:lI66|H280083BC0 +280083BC0:lI71|H280083BD0 +280083BD0:lI42|H280083BE0 +280083BE0:lI32|H280083BF0 +280083BF0:lI126|H280083C00 +280083C00:lI116|H280083C10 +280083C10:lI112|H280083C20 +280083C20:lI32|H280083C30 +280083C30:lI114|H280083C40 +280083C40:lI101|H280083C50 +280083C50:lI99|H280083C60 +280083C60:lI101|H280083C70 +280083C70:lI105|H280083C80 +280083C80:lI118|H280083C90 +280083C90:lI101|H280083CA0 +280083CA0:lI32|H280083CB0 +280083CB0:lI126|H280083CC0 +280083CC0:lI116|H280083CD0 +280083CD0:lI115|H280083CE0 +280083CE0:lI32|H280083CF0 +280083CF0:lI105|H280083D00 +280083D00:lI110|H280083D10 +280083D10:lI32|H280083D20 +280083D20:lI115|H280083D30 +280083D30:lI116|H280083D40 +280083D40:lI97|H280083D50 +280083D50:lI116|H280083D60 +280083D60:lI101|H280083D70 +280083D70:lI32|H280083D80 +280083D80:lI126|H280083D90 +280083D90:lI116|H280083DA0 +280083DA0:lI112|H280083DB0 +280083DB0:lI126|H280083DC0 +280083DC0:lI110|N +280083DD0:lI42|H280083DE0 +280083DE0:lI68|H280083DF0 +280083DF0:lI66|H280083E00 +280083E00:lI71|H280083E10 +280083E10:lI42|H280083E20 +280083E20:lI32|H280083E30 +280083E30:lI126|H280083E40 +280083E40:lI116|H280083E50 +280083E50:lI112|H280083E60 +280083E60:lI32|H280083E70 +280083E70:lI101|H280083E80 +280083E80:lI110|H280083E90 +280083E90:lI116|H280083EA0 +280083EA0:lI101|H280083EB0 +280083EB0:lI114|H280083EC0 +280083EC0:lI32|H280083ED0 +280083ED0:lI126|H280083EE0 +280083EE0:lI116|H280083EF0 +280083EF0:lI112|H280083F00 +280083F00:lI32|H280083F10 +280083F10:lI105|H280083F20 +280083F20:lI110|H280083F30 +280083F30:lI32|H280083F40 +280083F40:lI115|H280083F50 +280083F50:lI116|H280083F60 +280083F60:lI97|H280083F70 +280083F70:lI116|H280083F80 +280083F80:lI101|H280083F90 +280083F90:lI32|H280083FA0 +280083FA0:lI126|H280083FB0 +280083FB0:lI116|H280083FC0 +280083FC0:lI112|H280083FD0 +280083FD0:lI126|H280083FE0 +280083FE0:lI110|N +280083FF0:lI99|H280084000 +280084000:lI97|H280084010 +280084010:lI108|H280084020 +280084020:lI108|H280084030 +280084030:lI32|H280084040 +280084040:lI126|H280084050 +280084050:lI116|H280084060 +280084060:lI112|H280084070 +280084070:lI32|H280084080 +280084080:lI102|H280084090 +280084090:lI114|H2800840A0 +2800840A0:lI111|H2800840B0 +2800840B0:lI109|H2800840C0 +2800840C0:lI32|H2800840D0 +2800840D0:lI126|H2800840E0 +2800840E0:lI116|H2800840F0 +2800840F0:lI119|N +280084100:lI126|H280084110 +280084110:lI116|H280084120 +280084120:lI119|H280084130 +280084130:lI32|H280084140 +280084140:lI126|H280084150 +280084150:lI116|H280084160 +280084160:lI112|N +280084170:t2:A2B:should_not_have_arrived_here_but_instead_in,H280084188 +280084188:t3:AA:gen_statem,A15:wakeup_from_hibernate,I3 +2800841A8:t2:A2A:bad_state_enter_action_from_state_function,A8:postpone +2800841C0:t2:A2A:bad_state_enter_action_from_state_function,A13:pop_callback_module +2800841D8:t2:AA:gen_statem,A9:terminate +2800841F0:t3:AC:error_logger,A6:domain,A9:report_cb +280084210:Mf3:H2800841F0:H280084268,H280084240,H2800842B8 +280084240:lA3:otp|N +280084250:t2:A3:tag,A9:report_cb +280084268:Mf2:H280084250:A5:error,H280084290 +280084290:E1C:g3F3Cmdlbl9zdGF0ZW13CmZvcm1hdF9sb2dhAQ== +2800842B8:E1C:g3F3Cmdlbl9zdGF0ZW13CmZvcm1hdF9sb2dhAg== +2800842E0:t3:A4:line,A4:file,A3:mfa +280084300:Mf3:H2800842E0:I2617,H280084330,H280084410 +280084330:lI103|H280084340 +280084340:lI101|H280084350 +280084350:lI110|H280084360 +280084360:lI95|H280084370 +280084370:lI115|H280084380 +280084380:lI116|H280084390 +280084390:lI97|H2800843A0 +2800843A0:lI116|H2800843B0 +2800843B0:lI101|H2800843C0 +2800843C0:lI109|H2800843D0 +2800843D0:lI46|H2800843E0 +2800843E0:lI101|H2800843F0 +2800843F0:lI114|H280084400 +280084400:lI108|N +280084410:t3:AA:gen_statem,AA:error_info,I7 +280084430:lA12:current_stacktrace|H280084440 +280084440:lAF:registered_name|N +280084450:t4:AB:chars_limit,A5:depth,A8:encoding,AB:single_line +280084478:Mf4:H280084450:A9:unlimited,A9:unlimited,A4:utf8,A5:false +2800844B0:lI46|H2800844C0 +2800844C0:lI32|H2800844D0 +2800844D0:lI83|H2800844E0 +2800844E0:lI116|H2800844F0 +2800844F0:lI97|H280084500 +280084500:lI99|H280084510 +280084510:lI107|H280084520 +280084520:lI58|H280084530 +280084530:lI32|N +280084540:lI46|H280084550 +280084550:lI32|H280084560 +280084560:lI76|H280084570 +280084570:lI97|H280084580 +280084580:lI115|H280084590 +280084590:lI116|H2800845A0 +2800845A0:lI32|H2800845B0 +2800845B0:lI101|H2800845C0 +2800845C0:lI118|H2800845D0 +2800845D0:lI101|H2800845E0 +2800845E0:lI110|H2800845F0 +2800845F0:lI116|H280084600 +280084600:lI58|H280084610 +280084610:lI32|N +280084620:lI46|H280084630 +280084630:lI32|H280084640 +280084640:lI76|H280084650 +280084650:lI111|H280084660 +280084660:lI103|H280084670 +280084670:lI58|H280084680 +280084680:lI32|N +280084690:lH2800846A0|N +2800846A0:lI46|N +2800846B0:lI46|H2800846C0 +2800846C0:lI32|H2800846D0 +2800846D0:lI83|H2800846E0 +2800846E0:lI116|H2800846F0 +2800846F0:lI97|H280084700 +280084700:lI116|H280084710 +280084710:lI101|H280084720 +280084720:lI58|H280084730 +280084730:lI32|N +280084740:lI32|H280084750 +280084750:lI116|H280084760 +280084760:lI101|H280084770 +280084770:lI114|H280084780 +280084780:lI109|H280084790 +280084790:lI105|H2800847A0 +2800847A0:lI110|H2800847B0 +2800847B0:lI97|H2800847C0 +2800847C0:lI116|H2800847D0 +2800847D0:lI105|H2800847E0 +2800847E0:lI110|H2800847F0 +2800847F0:lI103|H280084800 +280084800:lI46|H280084810 +280084810:lI32|H280084820 +280084820:lI82|H280084830 +280084830:lI101|H280084840 +280084840:lI97|H280084850 +280084850:lI115|H280084860 +280084860:lI111|H280084870 +280084870:lI110|H280084880 +280084880:lI58|H280084890 +280084890:lI32|N +2800848A0:lI83|H2800848B0 +2800848B0:lI116|H2800848C0 +2800848C0:lI97|H2800848D0 +2800848D0:lI116|H2800848E0 +2800848E0:lI101|H2800848F0 +2800848F0:lI32|H280084900 +280084900:lI109|H280084910 +280084910:lI97|H280084920 +280084920:lI99|H280084930 +280084930:lI104|H280084940 +280084940:lI105|H280084950 +280084950:lI110|H280084960 +280084960:lI101|H280084970 +280084970:lI32|N +280084980:lAB:state_enter|N +280084990:lI126|H2800849A0 +2800849A0:lI110|N +2800849B0:lI42|H2800849C0 +2800849C0:lI42|H2800849D0 +2800849D0:lI32|H2800849E0 +2800849E0:lI76|H2800849F0 +2800849F0:lI97|H280084A00 +280084A00:lI115|H280084A10 +280084A10:lI116|H280084A20 +280084A20:lI32|H280084A30 +280084A30:lI101|H280084A40 +280084A40:lI118|H280084A50 +280084A50:lI101|H280084A60 +280084A60:lI110|H280084A70 +280084A70:lI116|H280084A80 +280084A80:lI32|H280084A90 +280084A90:lI61|H280084AA0 +280084AA0:lI32|N +280084AB0:lI42|H280084AC0 +280084AC0:lI42|H280084AD0 +280084AD0:lI32|H280084AE0 +280084AE0:lI81|H280084AF0 +280084AF0:lI117|H280084B00 +280084B00:lI101|H280084B10 +280084B10:lI117|H280084B20 +280084B20:lI101|H280084B30 +280084B30:lI100|H280084B40 +280084B40:lI32|H280084B50 +280084B50:lI61|H280084B60 +280084B60:lI32|N +280084B70:lI42|H280084B80 +280084B80:lI42|H280084B90 +280084B90:lI32|H280084BA0 +280084BA0:lI80|H280084BB0 +280084BB0:lI111|H280084BC0 +280084BC0:lI115|H280084BD0 +280084BD0:lI116|H280084BE0 +280084BE0:lI112|H280084BF0 +280084BF0:lI111|H280084C00 +280084C00:lI110|H280084C10 +280084C10:lI101|H280084C20 +280084C20:lI100|H280084C30 +280084C30:lI32|H280084C40 +280084C40:lI61|H280084C50 +280084C50:lI32|N +280084C60:lI42|H280084C70 +280084C70:lI42|H280084C80 +280084C80:lI32|H280084C90 +280084C90:lI83|H280084CA0 +280084CA0:lI116|H280084CB0 +280084CB0:lI97|H280084CC0 +280084CC0:lI99|H280084CD0 +280084CD0:lI107|H280084CE0 +280084CE0:lI116|H280084CF0 +280084CF0:lI114|H280084D00 +280084D00:lI97|H280084D10 +280084D10:lI99|H280084D20 +280084D20:lI101|H280084D30 +280084D30:lI32|H280084D40 +280084D40:lI61|H280084D50 +280084D50:lI126|H280084D60 +280084D60:lI110|H280084D70 +280084D70:lI42|H280084D80 +280084D80:lI42|H280084D90 +280084D90:lI32|H280084DA0 +280084DA0:lI32|N +280084DB0:lI42|H280084DC0 +280084DC0:lI42|H280084DD0 +280084DD0:lI32|H280084DE0 +280084DE0:lI84|H280084DF0 +280084DF0:lI105|H280084E00 +280084E00:lI109|H280084E10 +280084E10:lI101|H280084E20 +280084E20:lI45|H280084E30 +280084E30:lI111|H280084E40 +280084E40:lI117|H280084E50 +280084E50:lI116|H280084E60 +280084E60:lI115|H280084E70 +280084E70:lI58|H280084E80 +280084E80:lI32|N +280084E90:lI42|H280084EA0 +280084EA0:lI42|H280084EB0 +280084EB0:lI32|H280084EC0 +280084EC0:lI76|H280084ED0 +280084ED0:lI111|H280084EE0 +280084EE0:lI103|H280084EF0 +280084EF0:lI32|H280084F00 +280084F00:lI61|H280084F10 +280084F10:lI126|H280084F20 +280084F20:lI110|H280084F30 +280084F30:lI42|H280084F40 +280084F40:lI42|H280084F50 +280084F50:lI32|H280084F60 +280084F60:lI32|N +280084F70:lI42|H280084F80 +280084F80:lI42|H280084F90 +280084F90:lI32|H280084FA0 +280084FA0:lI67|H280084FB0 +280084FB0:lI97|H280084FC0 +280084FC0:lI108|H280084FD0 +280084FD0:lI108|H280084FE0 +280084FE0:lI98|H280084FF0 +280084FF0:lI97|H280085000 +280085000:lI99|H280085010 +280085010:lI107|H280085020 +280085020:lI32|H280085030 +280085030:lI109|H280085040 +280085040:lI111|H280085050 +280085050:lI100|H280085060 +280085060:lI101|H280085070 +280085070:lI32|H280085080 +280085080:lI61|H280085090 +280085090:lI32|N +2800850A0:lI42|H2800850B0 +2800850B0:lI42|H2800850C0 +2800850C0:lI32|H2800850D0 +2800850D0:lI67|H2800850E0 +2800850E0:lI97|H2800850F0 +2800850F0:lI108|H280085100 +280085100:lI108|H280085110 +280085110:lI98|H280085120 +280085120:lI97|H280085130 +280085130:lI99|H280085140 +280085140:lI107|H280085150 +280085150:lI32|H280085160 +280085160:lI109|H280085170 +280085170:lI111|H280085180 +280085180:lI100|H280085190 +280085190:lI117|H2800851A0 +2800851A0:lI108|H2800851B0 +2800851B0:lI101|H2800851C0 +2800851C0:lI115|H2800851D0 +2800851D0:lI32|H2800851E0 +2800851E0:lI61|H2800851F0 +2800851F0:lI32|N +280085200:lI58|N +280085210:lI42|H280085220 +280085220:lI42|H280085230 +280085230:lI32|H280085240 +280085240:lI82|H280085250 +280085250:lI101|H280085260 +280085260:lI97|H280085270 +280085270:lI115|H280085280 +280085280:lI111|H280085290 +280085290:lI110|H2800852A0 +2800852A0:lI32|H2800852B0 +2800852B0:lI102|H2800852C0 +2800852C0:lI111|H2800852D0 +2800852D0:lI114|H2800852E0 +2800852E0:lI32|H2800852F0 +2800852F0:lI116|H280085300 +280085300:lI101|H280085310 +280085310:lI114|H280085320 +280085320:lI109|H280085330 +280085330:lI105|H280085340 +280085340:lI110|H280085350 +280085350:lI97|H280085360 +280085360:lI116|H280085370 +280085370:lI105|H280085380 +280085380:lI111|H280085390 +280085390:lI110|H2800853A0 +2800853A0:lI32|H2800853B0 +2800853B0:lI61|H2800853C0 +2800853C0:lI32|N +2800853D0:lI42|H2800853E0 +2800853E0:lI42|H2800853F0 +2800853F0:lI32|H280085400 +280085400:lI87|H280085410 +280085410:lI104|H280085420 +280085420:lI101|H280085430 +280085430:lI110|H280085440 +280085440:lI32|H280085450 +280085450:lI115|H280085460 +280085460:lI101|H280085470 +280085470:lI114|H280085480 +280085480:lI118|H280085490 +280085490:lI101|H2800854A0 +2800854A0:lI114|H2800854B0 +2800854B0:lI32|H2800854C0 +2800854C0:lI115|H2800854D0 +2800854D0:lI116|H2800854E0 +2800854E0:lI97|H2800854F0 +2800854F0:lI116|H280085500 +280085500:lI101|H280085510 +280085510:lI32|H280085520 +280085520:lI32|H280085530 +280085530:lI61|H280085540 +280085540:lI32|N +280085550:lI32|H280085560 +280085560:lI116|H280085570 +280085570:lI101|H280085580 +280085580:lI114|H280085590 +280085590:lI109|H2800855A0 +2800855A0:lI105|H2800855B0 +2800855B0:lI110|H2800855C0 +2800855C0:lI97|H2800855D0 +2800855D0:lI116|H2800855E0 +2800855E0:lI105|H2800855F0 +2800855F0:lI110|H280085600 +280085600:lI103|H280085610 +280085610:lI126|H280085620 +280085620:lI110|N +280085630:lI42|H280085640 +280085640:lI42|H280085650 +280085650:lI32|H280085660 +280085660:lI83|H280085670 +280085670:lI116|H280085680 +280085680:lI97|H280085690 +280085690:lI116|H2800856A0 +2800856A0:lI101|H2800856B0 +2800856B0:lI32|H2800856C0 +2800856C0:lI109|H2800856D0 +2800856D0:lI97|H2800856E0 +2800856E0:lI99|H2800856F0 +2800856F0:lI104|H280085700 +280085700:lI105|H280085710 +280085710:lI110|H280085720 +280085720:lI101|H280085730 +280085730:lI32|N +280085740:lI32|H280085750 +280085750:lI115|H280085760 +280085760:lI116|H280085770 +280085770:lI97|H280085780 +280085780:lI99|H280085790 +280085790:lI107|H2800857A0 +2800857A0:lI116|H2800857B0 +2800857B0:lI114|H2800857C0 +2800857C0:lI97|H2800857D0 +2800857D0:lI99|H2800857E0 +2800857E0:lI101|H2800857F0 +2800857F0:lI58|H280085800 +280085800:lI32|N +280085810:lI32|H280085820 +280085820:lI67|H280085830 +280085830:lI108|H280085840 +280085840:lI105|H280085850 +280085850:lI101|H280085860 +280085860:lI110|H280085870 +280085870:lI116|H280085880 +280085880:lI32|N +280085890:lI32|H2800858A0 +2800858A0:lI67|H2800858B0 +2800858B0:lI108|H2800858C0 +2800858C0:lI105|H2800858D0 +2800858D0:lI101|H2800858E0 +2800858E0:lI110|H2800858F0 +2800858F0:lI116|H280085900 +280085900:lI32|H280085910 +280085910:lI126|H280085920 +280085920:lI48|H280085930 +280085930:lI112|H280085940 +280085940:lI32|H280085950 +280085950:lI105|H280085960 +280085960:lI115|H280085970 +280085970:lI32|H280085980 +280085980:lI114|H280085990 +280085990:lI101|H2800859A0 +2800859A0:lI109|H2800859B0 +2800859B0:lI111|H2800859C0 +2800859C0:lI116|H2800859D0 +2800859D0:lI101|H2800859E0 +2800859E0:lI32|H2800859F0 +2800859F0:lI111|H280085A00 +280085A00:lI110|H280085A10 +280085A10:lI32|H280085A20 +280085A20:lI110|H280085A30 +280085A30:lI111|H280085A40 +280085A40:lI100|H280085A50 +280085A50:lI101|H280085A60 +280085A60:lI32|H280085A70 +280085A70:lI126|H280085A80 +280085A80:lI48|H280085A90 +280085A90:lI112|H280085AA0 +280085AA0:lI46|N +280085AB0:lI32|H280085AC0 +280085AC0:lI67|H280085AD0 +280085AD0:lI108|H280085AE0 +280085AE0:lI105|H280085AF0 +280085AF0:lI101|H280085B00 +280085B00:lI110|H280085B10 +280085B10:lI116|H280085B20 +280085B20:lI32|H280085B30 +280085B30:lI126|H280085B40 +280085B40:lI48|H280085B50 +280085B50:lI112|H280085B60 +280085B60:lI32|H280085B70 +280085B70:lI105|H280085B80 +280085B80:lI115|H280085B90 +280085B90:lI32|H280085BA0 +280085BA0:lI100|H280085BB0 +280085BB0:lI101|H280085BC0 +280085BC0:lI97|H280085BD0 +280085BD0:lI100|H280085BE0 +280085BE0:lI46|N +280085BF0:t2:N,N +280085C08:lH280085C18|N +280085C18:lI126|H280085C28 +280085C28:lI110|N +280085C38:lI32|H280085C48 +280085C48:lI115|H280085C58 +280085C58:lI116|H280085C68 +280085C68:lI97|H280085C78 +280085C78:lI99|H280085C88 +280085C88:lI107|H280085C98 +280085C98:lI116|H280085CA8 +280085CA8:lI114|H280085CB8 +280085CB8:lI97|H280085CC8 +280085CC8:lI99|H280085CD8 +280085CD8:lI101|H280085CE8 +280085CE8:lI126|H280085CF8 +280085CF8:lI110|H280085D08 +280085D08:lI42|H280085D18 +280085D18:lI42|H280085D28 +280085D28:lI32|N +280085D38:lI42|H280085D48 +280085D48:lI42|H280085D58 +280085D58:lI32|H280085D68 +280085D68:lI67|H280085D78 +280085D78:lI108|H280085D88 +280085D88:lI105|H280085D98 +280085D98:lI101|H280085DA8 +280085DA8:lI110|H280085DB8 +280085DB8:lI116|H280085DC8 +280085DC8:lI32|N +280085DD8:lI42|H280085DE8 +280085DE8:lI42|H280085DF8 +280085DF8:lI32|H280085E08 +280085E08:lI67|H280085E18 +280085E18:lI108|H280085E28 +280085E28:lI105|H280085E38 +280085E38:lI101|H280085E48 +280085E48:lI110|H280085E58 +280085E58:lI116|H280085E68 +280085E68:lI32|H280085E78 +280085E78:lI126|H280085E88 +280085E88:lI112|H280085E98 +280085E98:lI32|H280085EA8 +280085EA8:lI105|H280085EB8 +280085EB8:lI115|H280085EC8 +280085EC8:lI32|H280085ED8 +280085ED8:lI114|H280085EE8 +280085EE8:lI101|H280085EF8 +280085EF8:lI109|H280085F08 +280085F08:lI111|H280085F18 +280085F18:lI116|H280085F28 +280085F28:lI101|H280085F38 +280085F38:lI32|H280085F48 +280085F48:lI111|H280085F58 +280085F58:lI110|H280085F68 +280085F68:lI32|H280085F78 +280085F78:lI110|H280085F88 +280085F88:lI111|H280085F98 +280085F98:lI100|H280085FA8 +280085FA8:lI101|H280085FB8 +280085FB8:lI32|H280085FC8 +280085FC8:lI126|H280085FD8 +280085FD8:lI112|H280085FE8 +280085FE8:lI126|H280085FF8 +280085FF8:lI110|N +280086008:lI42|H280086018 +280086018:lI42|H280086028 +280086028:lI32|H280086038 +280086038:lI67|H280086048 +280086048:lI108|H280086058 +280086058:lI105|H280086068 +280086068:lI101|H280086078 +280086078:lI110|H280086088 +280086088:lI116|H280086098 +280086098:lI32|H2800860A8 +2800860A8:lI126|H2800860B8 +2800860B8:lI112|H2800860C8 +2800860C8:lI32|H2800860D8 +2800860D8:lI105|H2800860E8 +2800860E8:lI115|H2800860F8 +2800860F8:lI32|H280086108 +280086108:lI100|H280086118 +280086118:lI101|H280086128 +280086128:lI97|H280086138 +280086138:lI100|H280086148 +280086148:lI126|H280086158 +280086158:lI110|N +280086168:lI112|N +280086178:lI80|N +280086188:lI48|N +280086198:lI116|N +2800861A8:lH280086208|H2800861B8 +2800861B8:lH280086220|H2800861C8 +2800861C8:lH280086238|H2800861D8 +2800861D8:lH280086250|H2800861E8 +2800861E8:lH280086268|H2800861F8 +2800861F8:lH280086280|N +280086208:t2:AD:format_status,I1 +280086220:t2:AD:format_status,I2 +280086238:t2:A9:terminate,I3 +280086250:t2:AB:code_change,I4 +280086268:t2:AA:state_name,I3 +280086280:t2:AC:handle_event,I4 +280086298:lH280086318|H2800862A8 +2800862A8:lH280086330|H2800862B8 +2800862B8:lH280086348|H2800862C8 +2800862C8:lH280086360|H2800862D8 +2800862D8:lH280086378|H2800862E8 +2800862E8:lH280086390|H2800862F8 +2800862F8:lH2800863A8|H280086308 +280086308:lH2800863C0|N +280086318:t2:A4:init,I1 +280086330:t2:AD:callback_mode,I0 +280086348:t2:AA:state_name,I3 +280086360:t2:AC:handle_event,I4 +280086378:t2:A9:terminate,I3 +280086390:t2:AB:code_change,I4 +2800863A8:t2:AD:format_status,I2 +2800863C0:t2:AD:format_status,I1 +2800863D8:lI108|N +2800863E8:lI114|H2800863D8 +2800863F8:lI101|H2800863E8 +280086408:lI46|H2800863F8 +280086418:lI109|H280086408 +280086428:lI101|H280086418 +280086438:lI116|H280086428 +280086448:lI97|H280086438 +280086458:lI116|H280086448 +280086468:lI115|H280086458 +280086478:lI95|H280086468 +280086488:lI110|H280086478 +280086498:lI101|H280086488 +2800864A8:lI103|H280086498 +2800864B8:t5:A4:data,A3:log,A5:state,A9:postponed,A8:timeouts +2800864E8:E4E:g3AAAABMA28avFfTiJ0lhkokoxIXuNAAAAAAAAAAAHcKZ2VuX3N0YXRlbWEAYgN41eJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +280086510:t7:A4:data,A6:reason,A3:log,A5:state,A5:queue,A9:postponed,A8:timeouts +280086550:tC:A5:label,A4:name,A6:reason,A3:log,A5:state,A5:queue,A7:modules,AB:client_info,AD:callback_mode,A9:postponed,A8:timeouts,AB:state_enter +2800865B8:t4:AB:chars_limit,A5:depth,A8:encoding,AB:single_line +2800865F8:Mf0:H280010188: +280086610:lI112|H280086620 +280086620:lI114|H280086630 +280086630:lI105|H280086640 +280086640:lI109|H280086650 +280086650:lI95|H280086660 +280086660:lI116|H280086670 +280086670:lI116|H280086680 +280086680:lI121|N +280086690:t2:A5:error,A7:enotsup +2800866A8:lH2800866D8|H2800866B8 +2800866B8:lH280086738|H2800866C8 +2800866C8:lH2800867B8|N +2800866D8:lI76|H2800866E8 +2800866E8:lI67|H2800866F8 +2800866F8:lI95|H280086708 +280086708:lI65|H280086718 +280086718:lI76|H280086728 +280086728:lI76|N +280086738:lI76|H280086748 +280086748:lI67|H280086758 +280086758:lI95|H280086768 +280086768:lI67|H280086778 +280086778:lI84|H280086788 +280086788:lI89|H280086798 +280086798:lI80|H2800867A8 +2800867A8:lI69|N +2800867B8:lI76|H2800867C8 +2800867C8:lI65|H2800867D8 +2800867D8:lI78|H2800867E8 +2800867E8:lI71|N +2800867F8:lA7:unicode|N +280086808:Yc1309301C0:0:9C +280086838:Yh7:G1tIG1sySg== +280086850:Yh3:G1tB +280086868:Yh1:Cg== +280086880:Yh1:CA== +280086898:Yh3:G1tD +2800868B0:Yh4:G1sxSQ== +2800868C8:Yh3:G1tK +2800868E0:Yh4:G1s2bg== +2800868F8:Yh15:G1xbKFswLTldKyk7KFswLTldKylS +280086920:t4:A5:input,A4:echo,A3:tty,A5:canon +280086948:Mf4:H280086920:A4:true,A5:false,A4:true,A5:false +280086980:lI84|H280086990 +280086990:lI69|H2800869A0 +2800869A0:lI82|H2800869B0 +2800869B0:lI77|N +2800869C0:lI99|H2800869D0 +2800869D0:lI108|H2800869E0 +2800869E0:lI101|H2800869F0 +2800869F0:lI97|H280086A00 +280086A00:lI114|N +280086A10:lI99|H280086A20 +280086A20:lI111|N +280086A30:lI117|H280086A40 +280086A40:lI112|N +280086A50:lI100|H280086A60 +280086A60:lI111|N +280086A70:lI98|H280086A80 +280086A80:lI115|N +280086A90:lI98|H280086AA0 +280086AA0:lI99|N +280086AB0:lI110|H280086AC0 +280086AC0:lI100|N +280086AD0:lI73|H280086AE0 +280086AE0:lI67|N +280086AF0:lI116|H280086B00 +280086B00:lI97|N +280086B10:lI68|H280086B20 +280086B20:lI67|N +280086B30:lI117|H280086B40 +280086B40:lI55|N +280086B50:lI117|H280086B60 +280086B60:lI54|N +280086B70:t2:A2:ok,H280086B88 +280086B88:YhA:G1slaSVkOyVkUg== +280086BA8:lI99|H280086BB8 +280086BB8:lI100|N +280086BC8:lI120|H280086BD8 +280086BD8:lI110|N +280086BE8:lH280086BF8|N +280086BF8:t2:A5:alias,AF:reply_demonitor +280086C10:Yh0: +280086C20:t2:A11:set_unicode_state,A5:false +280086C38:t2:A5:utf16,A6:little +280086C50:lI13|H280086C60 +280086C60:lI10|N +280086C70:t2:A4:move,I0 +280086C88:lN|N +280086C98:Yh1:Bw== +280086CB0:t2:N,N +280086CC8:Yh1:IA== +280086CE0:Yh1:DQ== +280086CF8:Yh2:DQo= +280086D10:lI94|H280086D20 +280086D20:lI63|N +280086D30:lI0|N +280086D40:lI92|H280086D50 +280086D50:lI36|H280086D60 +280086D60:lI60|H280086D70 +280086D70:lI91|H280086D80 +280086D80:lI94|H280086D90 +280086D90:lI62|H280086DA0 +280086DA0:lI93|H280086DB0 +280086DB0:lI42|H280086DC0 +280086DC0:lI62|N +280086DD0:lI10|N +280086DE0:lI85|H280086DF0 +280086DF0:lI84|H280086E00 +280086E00:lI70|H280086E10 +280086E10:lI45|H280086E20 +280086E20:lI56|N +280086E30:lI108|N +280086E40:lI114|H280086E30 +280086E50:lI101|H280086E40 +280086E60:lI46|H280086E50 +280086E70:lI121|H280086E60 +280086E80:lI116|H280086E70 +280086E90:lI116|H280086E80 +280086EA0:lI95|H280086E90 +280086EB0:lI109|H280086EA0 +280086EC0:lI105|H280086EB0 +280086ED0:lI114|H280086EC0 +280086EE0:lI112|H280086ED0 +280086EF0:E4C:g3AAAABKAY/2CN5VWPSliGwYiyNwoQIAAAAAAAAAAHcIcHJpbV90dHlhAGIEf7BGWHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA== +280086F18:t2:A4:read,A5:write +280086F30:E4C:g3AAAABKAY/2CN5VWPSliGwYiyNwoQIAAAABAAAAAHcIcHJpbV90dHlhAWIEf7BGWHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA== +280086F58:E4C:g3AAAABKAY/2CN5VWPSliGwYiyNwoQIAAAACAAAAAHcIcHJpbV90dHlhAmIEf7BGWHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA== +2800870F0:E1A:g3F3DGVkbGluX2V4cGFuZHcGZXhwYW5kYQI= +280087118:t2:A5:error,A7:timeout +280087130:t2:A5:error,A7:enotsup +280087148:t2:AC:get_password,A6:latin1 +280087160:t2:A5:error,A7:request +280087178:t2:A8:encoding,A7:unicode +280087190:t2:A8:encoding,A6:latin1 +2800871A8:lH2800871B8|N +2800871B8:t2:A4:list,A6:binary +2800871D0:t2:A4:exit,AA:terminated +2800871E8:t3:A5:error,H280087208,N +280087208:t2:A5:error,AB:interrupted +280087220:lAA:new_prompt|N +280087230:lI10|N +280087240:lI27|H280087250 +280087250:lI91|H280087260 +280087260:lI59|H280087270 +280087270:lI49|H280087280 +280087280:lI59|H280087290 +280087290:lI52|H2800872A0 +2800872A0:lI109|H2800872B0 +2800872B0:lI115|H2800872C0 +2800872C0:lI101|H2800872D0 +2800872D0:lI97|H2800872E0 +2800872E0:lI114|H2800872F0 +2800872F0:lI99|H280087300 +280087300:lI104|H280087310 +280087310:lI58|H280087320 +280087320:lI27|H280087330 +280087330:lI91|H280087340 +280087340:lI48|H280087350 +280087350:lI109|H280087360 +280087360:lI32|N +280087370:lI80|H280087380 +280087380:lI114|H280087390 +280087390:lI101|H2800873A0 +2800873A0:lI115|H2800873B0 +2800873B0:lI115|H2800873C0 +2800873C0:lI32|H2800873D0 +2800873D0:lI116|H2800873E0 +2800873E0:lI97|H2800873F0 +2800873F0:lI98|H280087400 +280087400:lI32|H280087410 +280087410:lI116|H280087420 +280087420:lI111|H280087430 +280087430:lI32|H280087440 +280087440:lI115|H280087450 +280087450:lI101|H280087460 +280087460:lI101|H280087470 +280087470:lI32|H280087480 +280087480:lI97|H280087490 +280087490:lI108|H2800874A0 +2800874A0:lI108|H2800874B0 +2800874B0:lI32|H2800874C0 +2800874C0:lI126|H2800874D0 +2800874D0:lI112|H2800874E0 +2800874E0:lI32|H2800874F0 +2800874F0:lI101|H280087500 +280087500:lI120|H280087510 +280087510:lI112|H280087520 +280087520:lI97|H280087530 +280087530:lI110|H280087540 +280087540:lI115|H280087550 +280087550:lI105|H280087560 +280087560:lI111|H280087570 +280087570:lI110|H280087580 +280087580:lI115|N +280087590:lI27|H2800875A0 +2800875A0:lI108|N +2800875B0:t3:N,H2800875D0,N +2800875D0:t2:N,N +2800875E8:lI126|H2800875F8 +2800875F8:lI110|H280087608 +280087608:lI32|H280087618 +280087618:lI32|H280087628 +280087628:lI46|H280087638 +280087638:lI46|H280087648 +280087648:lI46|H280087658 +280087658:lI32|H280087668 +280087668:lI40|H280087678 +280087678:lI126|H280087688 +280087688:lI119|H280087698 +280087698:lI32|H2800876A8 +2800876A8:lI108|H2800876B8 +2800876B8:lI105|H2800876C8 +2800876C8:lI110|H2800876D8 +2800876D8:lI101|H2800876E8 +2800876E8:lI115|H2800876F8 +2800876F8:lI32|H280087708 +280087708:lI111|H280087718 +280087718:lI109|H280087728 +280087728:lI105|H280087738 +280087738:lI116|H280087748 +280087748:lI116|H280087758 +280087758:lI101|H280087768 +280087768:lI100|H280087778 +280087778:lI41|N +280087788:t3:A4:done,A3:eof,A3:eof +2800877A8:lH2800877B8|N +2800877B8:lI10|N +2800877C8:lI36|H2800877D8 +2800877D8:lI10|N +2800877E8:lH2800877F8|N +2800877F8:t3:AC:insert_chars,A7:unicode,H280087818 +280087818:lI10|N +280087828:lI108|N +280087838:lI114|H280087828 +280087848:lI101|H280087838 +280087858:lI46|H280087848 +280087868:lI112|H280087858 +280087878:lI117|H280087868 +280087888:lI111|H280087878 +280087898:lI114|H280087888 +2800878A8:lI103|H280087898 +2800878B8:E49:g3AAAABHAqhn0q4vp+7qt42F8kJsnfMAAAABAAAAAHcFZ3JvdXBhAWIFQz6VWHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA== +2800878E0:E49:g3AAAABHAqhn0q4vp+7qt42F8kJsnfMAAAACAAAAAHcFZ3JvdXBhAmIFQz6VWHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA== +280088258:t2:A5:local,AA:logger_sup +280088270:t3:A2:id,A8:shutdown,A5:start +280088290:Mf3:H280088270:A16:logger_handler_watcher,AB:brutal_kill,H2800882C0 +2800882C0:t3:A16:logger_handler_watcher,AA:start_link,N +2800882E0:t3:A8:strategy,A6:period,A9:intensity +280088300:Mf3:H2800882E0:AB:one_for_one,I5,I1 +280088330:lI108|N +280088340:lI114|H280088330 +280088350:lI101|H280088340 +280088360:lI46|H280088350 +280088370:lI112|H280088360 +280088380:lI117|H280088370 +280088390:lI115|H280088380 +2800883A0:lI95|H280088390 +2800883B0:lI114|H2800883A0 +2800883C0:lI101|H2800883B0 +2800883D0:lI103|H2800883C0 +2800883E0:lI103|H2800883D0 +2800883F0:lI111|H2800883E0 +280088400:lI108|H2800883F0 +28008FA28:t2:A5:local,AB:kernel_refc +28008FA40:t2:A2:ok,H28008FA68 +28008FA58:t1:A13:scheduler_wall_time +28008FA68:Mf1:H28008FA58:H28008FA88 +28008FA88:Mf0:H280010188: +28008FAA0:lA5:flush|N +28008FAB0:lI108|N +28008FAC0:lI114|H28008FAB0 +28008FAD0:lI101|H28008FAC0 +28008FAE0:lI46|H28008FAD0 +28008FAF0:lI99|H28008FAE0 +28008FB00:lI102|H28008FAF0 +28008FB10:lI101|H28008FB00 +28008FB20:lI114|H28008FB10 +28008FB30:lI95|H28008FB20 +28008FB40:lI108|H28008FB30 +28008FB50:lI101|H28008FB40 +28008FB60:lI110|H28008FB50 +28008FB70:lI114|H28008FB60 +28008FB80:lI101|H28008FB70 +28008FB90:lI107|H28008FB80 +28008FBB8:t2:A2:ok,H28008FBD0 +28008FBD0:t1:A5:state +28008FBE0:lI82|H28008FBF0 +28008FBF0:lI101|H28008FC00 +28008FC00:lI99|H28008FC10 +28008FC10:lI101|H28008FC20 +28008FC20:lI105|H28008FC30 +28008FC30:lI118|H28008FC40 +28008FC40:lI101|H28008FC50 +28008FC50:lI100|H28008FC60 +28008FC60:lI32|H28008FC70 +28008FC70:lI83|H28008FC80 +28008FC80:lI73|H28008FC90 +28008FC90:lI71|H28008FCA0 +28008FCA0:lI85|H28008FCB0 +28008FCB0:lI83|H28008FCC0 +28008FCC0:lI82|H28008FCD0 +28008FCD0:lI49|N +28008FCE0:lI83|H28008FCF0 +28008FCF0:lI73|H28008FD00 +28008FD00:lI71|H28008FD10 +28008FD10:lI84|H28008FD20 +28008FD20:lI69|H28008FD30 +28008FD30:lI82|H28008FD40 +28008FD40:lI77|H28008FD50 +28008FD50:lI32|H28008FD60 +28008FD60:lI114|H28008FD70 +28008FD70:lI101|H28008FD80 +28008FD80:lI99|H28008FD90 +28008FD90:lI101|H28008FDA0 +28008FDA0:lI105|H28008FDB0 +28008FDB0:lI118|H28008FDC0 +28008FDC0:lI101|H28008FDD0 +28008FDD0:lI100|H28008FDE0 +28008FDE0:lI32|H28008FDF0 +28008FDF0:lI45|H28008FE00 +28008FE00:lI32|H28008FE10 +28008FE10:lI115|H28008FE20 +28008FE20:lI104|H28008FE30 +28008FE30:lI117|H28008FE40 +28008FE40:lI116|H28008FE50 +28008FE50:lI116|H28008FE60 +28008FE60:lI105|H28008FE70 +28008FE70:lI110|H28008FE80 +28008FE80:lI103|H28008FE90 +28008FE90:lI32|H28008FEA0 +28008FEA0:lI100|H28008FEB0 +28008FEB0:lI111|H28008FEC0 +28008FEC0:lI119|H28008FED0 +28008FED0:lI110|H28008FEE0 +28008FEE0:lI126|H28008FEF0 +28008FEF0:lI110|N +28008FF00:lI108|N +28008FF10:lI114|H28008FF00 +28008FF20:lI101|H28008FF10 +28008FF30:lI46|H28008FF20 +28008FF40:lI114|H28008FF30 +28008FF50:lI101|H28008FF40 +28008FF60:lI108|H28008FF50 +28008FF70:lI100|H28008FF60 +28008FF80:lI110|H28008FF70 +28008FF90:lI97|H28008FF80 +28008FFA0:lI104|H28008FF90 +28008FFB0:lI95|H28008FFA0 +28008FFC0:lI108|H28008FFB0 +28008FFD0:lI97|H28008FFC0 +28008FFE0:lI110|H28008FFD0 +28008FFF0:lI103|H28008FFE0 +280090000:lI105|H28008FFF0 +280090010:lI115|H280090000 +280090020:lI95|H280090010 +280090030:lI108|H280090020 +280090040:lI114|H280090030 +280090050:lI101|H280090040 +280091550:lA4:type|H280091560 +280091560:lA4:file|H280091570 +280091570:lA5:modes|H280091580 +280091580:lAA:file_check|H280091590 +280091590:lAC:max_no_bytes|H2800915A0 +2800915A0:lAC:max_no_files|H2800915B0 +2800915B0:lA12:compress_on_rotate|N +2800915C0:lA4:type|H2800915D0 +2800915D0:lA4:file|H2800915E0 +2800915E0:lA5:modes|N +2800915F0:Mf0:H280010188: +280091608:lA3:raw|H280091618 +280091618:lA6:append|N +280091628:lA3:raw|N +280091638:lA5:write|H280091648 +280091648:lA6:append|H280091658 +280091658:lA9:exclusive|N +280091668:t2:A5:error,A1D:file_ctrl_process_not_started +280091680:lA5:flush|N +280091690:lI70|H2800916A0 +2800916A0:lI97|H2800916B0 +2800916B0:lI105|H2800916C0 +2800916C0:lI108|H2800916D0 +2800916D0:lI101|H2800916E0 +2800916E0:lI100|H2800916F0 +2800916F0:lI32|H280091700 +280091700:lI116|H280091710 +280091710:lI111|H280091720 +280091720:lI32|H280091730 +280091730:lI119|H280091740 +280091740:lI114|H280091750 +280091750:lI105|H280091760 +280091760:lI116|H280091770 +280091770:lI101|H280091780 +280091780:lI32|H280091790 +280091790:lI108|H2800917A0 +2800917A0:lI111|H2800917B0 +2800917B0:lI103|H2800917C0 +2800917C0:lI32|H2800917D0 +2800917D0:lI109|H2800917E0 +2800917E0:lI101|H2800917F0 +2800917F0:lI115|H280091800 +280091800:lI115|H280091810 +280091810:lI97|H280091820 +280091820:lI103|H280091830 +280091830:lI101|H280091840 +280091840:lI32|H280091850 +280091850:lI116|H280091860 +280091860:lI111|H280091870 +280091870:lI32|H280091880 +280091880:lI115|H280091890 +280091890:lI116|H2800918A0 +2800918A0:lI100|H2800918B0 +2800918B0:lI111|H2800918C0 +2800918C0:lI117|H2800918D0 +2800918D0:lI116|H2800918E0 +2800918E0:lI44|H2800918F0 +2800918F0:lI32|H280091900 +280091900:lI116|H280091910 +280091910:lI114|H280091920 +280091920:lI121|H280091930 +280091930:lI105|H280091940 +280091940:lI110|H280091950 +280091950:lI103|H280091960 +280091960:lI32|H280091970 +280091970:lI115|H280091980 +280091980:lI116|H280091990 +280091990:lI100|H2800919A0 +2800919A0:lI101|H2800919B0 +2800919B0:lI114|H2800919C0 +2800919C0:lI114|H2800919D0 +2800919D0:lI10|N +2800919E0:t2:A5:error,A6:enoent +2800919F8:lI46|H280091A08 +280091A08:lI48|N +280091A18:lI46|H280091A28 +280091A28:lI103|H280091A38 +280091A38:lI122|N +280091A48:lA4:read|H280091A58 +280091A58:lA6:binary|N +280091A68:lA5:write|N +280091A78:Yh0: +280091A88:lI108|N +280091A98:lI114|H280091A88 +280091AA8:lI101|H280091A98 +280091AB8:lI46|H280091AA8 +280091AC8:lI104|H280091AB8 +280091AD8:lI95|H280091AC8 +280091AE8:lI100|H280091AD8 +280091AF8:lI116|H280091AE8 +280091B08:lI115|H280091AF8 +280091B18:lI95|H280091B08 +280091B28:lI114|H280091B18 +280091B38:lI101|H280091B28 +280091B48:lI103|H280091B38 +280091B58:lI103|H280091B48 +280091B68:lI111|H280091B58 +280091B78:lI108|H280091B68 +280091B88:t7:A4:type,A4:file,A12:compress_on_rotate,AA:file_check,AC:max_no_bytes,AC:max_no_files,A5:modes +280091BC8:t1:A4:type +280091BD8:E50:g3AAAABOAQjqLBPECzXLncj+B21nkB0AAAAAAAAAAHcMbG9nZ2VyX3N0ZF9oYQBiAEdRYFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +280091C00:t4:A12:compress_on_rotate,AA:file_check,AC:max_no_bytes,AC:max_no_files +280091C28:tA:A2:fd,A9:file_name,A6:synced,AA:file_check,A5:modes,AC:handler_name,A5:inode,AA:last_check,A8:sync_res,A9:write_res +280091C80:t2:AC:handler_name,A3:dev +280091C98:t4:A5:count,A4:size,A8:compress,A9:curr_size +280091CD8:Mf0:H280010188: +280091CF0:lAE:sync_mode_qlen|H280091D00 +280091D00:lAE:drop_mode_qlen|H280091D10 +280091D10:lAA:flush_qlen|H280091D20 +280091D20:lA12:burst_limit_enable|H280091D30 +280091D30:lA15:burst_limit_max_count|H280091D40 +280091D40:lA17:burst_limit_window_time|H280091D50 +280091D50:lA14:overload_kill_enable|H280091D60 +280091D60:lA12:overload_kill_qlen|H280091D70 +280091D70:lA16:overload_kill_mem_size|H280091D80 +280091D80:lA1B:overload_kill_restart_after|H280091D90 +280091D90:lA18:filesync_repeat_interval|N +280091DA0:lA18:filesync_repeat_interval|N +280091DB0:lAE:sync_mode_qlen|H280091DC0 +280091DC0:lAE:drop_mode_qlen|H280091DD0 +280091DD0:lAA:flush_qlen|H280091DE0 +280091DE0:lA12:burst_limit_enable|H280091DF0 +280091DF0:lA15:burst_limit_max_count|H280091E00 +280091E00:lA17:burst_limit_window_time|H280091E10 +280091E10:lA14:overload_kill_enable|H280091E20 +280091E20:lA12:overload_kill_qlen|H280091E30 +280091E30:lA16:overload_kill_mem_size|H280091E40 +280091E40:lA1B:overload_kill_restart_after|N +280091E50:lI95|N +280091E60:lAE:sync_mode_qlen|H280091E70 +280091E70:lAE:drop_mode_qlen|H280091E80 +280091E80:lAA:flush_qlen|H280091E90 +280091E90:lA12:burst_limit_enable|H280091EA0 +280091EA0:lA15:burst_limit_max_count|H280091EB0 +280091EB0:lA17:burst_limit_window_time|H280091EC0 +280091EC0:lA14:overload_kill_enable|H280091ED0 +280091ED0:lA12:overload_kill_qlen|H280091EE0 +280091EE0:lA16:overload_kill_mem_size|H280091EF0 +280091EF0:lA1B:overload_kill_restart_after|H280091F00 +280091F00:lA18:filesync_repeat_interval|H280091F10 +280091F10:lA3:olp|N +280091F20:lA3:olp|N +280091F30:lAF:logger_h_common|N +280091F40:lI72|H280091F50 +280091F50:lI97|H280091F60 +280091F60:lI110|H280091F70 +280091F70:lI100|H280091F80 +280091F80:lI108|H280091F90 +280091F90:lI101|H280091FA0 +280091FA0:lI114|H280091FB0 +280091FB0:lI32|H280091FC0 +280091FC0:lI126|H280091FD0 +280091FD0:lI112|H280091FE0 +280091FE0:lI32|H280091FF0 +280091FF0:lI111|H280092000 +280092000:lI118|H280092010 +280092010:lI101|H280092020 +280092020:lI114|H280092030 +280092030:lI108|H280092040 +280092040:lI111|H280092050 +280092050:lI97|H280092060 +280092060:lI100|H280092070 +280092070:lI101|H280092080 +280092080:lI100|H280092090 +280092090:lI32|H2800920A0 +2800920A0:lI97|H2800920B0 +2800920B0:lI110|H2800920C0 +2800920C0:lI100|H2800920D0 +2800920D0:lI32|H2800920E0 +2800920E0:lI115|H2800920F0 +2800920F0:lI116|H280092100 +280092100:lI111|H280092110 +280092110:lI112|H280092120 +280092120:lI112|H280092130 +280092130:lI105|H280092140 +280092140:lI110|H280092150 +280092150:lI103|N +280092160:t2:A5:error,A4:busy +280092178:t2:A5:error,AC:handler_busy +280092190:lI72|H2800921A0 +2800921A0:lI97|H2800921B0 +2800921B0:lI110|H2800921C0 +2800921C0:lI100|H2800921D0 +2800921D0:lI108|H2800921E0 +2800921E0:lI101|H2800921F0 +2800921F0:lI114|H280092200 +280092200:lI32|H280092210 +280092210:lI126|H280092220 +280092220:lI112|H280092230 +280092230:lI32|H280092240 +280092240:lI115|H280092250 +280092250:lI119|H280092260 +280092260:lI105|H280092270 +280092270:lI116|H280092280 +280092280:lI99|H280092290 +280092290:lI104|H2800922A0 +2800922A0:lI101|H2800922B0 +2800922B0:lI100|H2800922C0 +2800922C0:lI32|H2800922D0 +2800922D0:lI102|H2800922E0 +2800922E0:lI114|H2800922F0 +2800922F0:lI111|H280092300 +280092300:lI109|H280092310 +280092310:lI32|H280092320 +280092320:lI126|H280092330 +280092330:lI112|H280092340 +280092340:lI32|H280092350 +280092350:lI116|H280092360 +280092360:lI111|H280092370 +280092370:lI32|H280092380 +280092380:lI126|H280092390 +280092390:lI112|H2800923A0 +2800923A0:lI32|H2800923B0 +2800923B0:lI109|H2800923C0 +2800923C0:lI111|H2800923D0 +2800923D0:lI100|H2800923E0 +2800923E0:lI101|N +2800923F0:lI72|H280092400 +280092400:lI97|H280092410 +280092410:lI110|H280092420 +280092420:lI100|H280092430 +280092430:lI108|H280092440 +280092440:lI101|H280092450 +280092450:lI114|H280092460 +280092460:lI32|H280092470 +280092470:lI126|H280092480 +280092480:lI112|H280092490 +280092490:lI32|H2800924A0 +2800924A0:lI102|H2800924B0 +2800924B0:lI108|H2800924C0 +2800924C0:lI117|H2800924D0 +2800924D0:lI115|H2800924E0 +2800924E0:lI104|H2800924F0 +2800924F0:lI101|H280092500 +280092500:lI100|H280092510 +280092510:lI32|H280092520 +280092520:lI126|H280092530 +280092530:lI119|H280092540 +280092540:lI32|H280092550 +280092550:lI108|H280092560 +280092560:lI111|H280092570 +280092570:lI103|H280092580 +280092580:lI32|H280092590 +280092590:lI101|H2800925A0 +2800925A0:lI118|H2800925B0 +2800925B0:lI101|H2800925C0 +2800925C0:lI110|H2800925D0 +2800925D0:lI116|H2800925E0 +2800925E0:lI115|N +2800925F0:lI72|H280092600 +280092600:lI97|H280092610 +280092610:lI110|H280092620 +280092620:lI100|H280092630 +280092630:lI108|H280092640 +280092640:lI101|H280092650 +280092650:lI114|H280092660 +280092660:lI32|H280092670 +280092670:lI126|H280092680 +280092680:lI112|H280092690 +280092690:lI32|H2800926A0 +2800926A0:lI114|H2800926B0 +2800926B0:lI101|H2800926C0 +2800926C0:lI115|H2800926D0 +2800926D0:lI116|H2800926E0 +2800926E0:lI97|H2800926F0 +2800926F0:lI114|H280092700 +280092700:lI116|H280092710 +280092710:lI101|H280092720 +280092720:lI100|N +280092730:t1:A9:formatter +280092740:Mf1:H280092730:H280092760 +280092760:t2:A10:logger_formatter,H280092790 +280092778:t2:AB:single_line,AD:legacy_header +280092790:Mf2:H280092778:A5:false,A4:true +2800927B8:E1F:g3F3BmxvZ2dlcncRZm9ybWF0X290cF9yZXBvcnRhAQ== +2800927E0:t2:A10:logger_formatter,H280092810 +2800927F8:t2:AB:single_line,AD:legacy_header +280092810:Mf2:H2800927F8:A5:false,A4:true +280092838:t3:A4:line,A4:file,A3:mfa +280092858:Mf3:H280092838:I398,H280092888,H2800929B8 +280092888:lI108|H280092898 +280092898:lI111|H2800928A8 +2800928A8:lI103|H2800928B8 +2800928B8:lI103|H2800928C8 +2800928C8:lI101|H2800928D8 +2800928D8:lI114|H2800928E8 +2800928E8:lI95|H2800928F8 +2800928F8:lI104|H280092908 +280092908:lI95|H280092918 +280092918:lI99|H280092928 +280092928:lI111|H280092938 +280092938:lI109|H280092948 +280092948:lI109|H280092958 +280092958:lI111|H280092968 +280092968:lI110|H280092978 +280092978:lI46|H280092988 +280092988:lI101|H280092998 +280092998:lI114|H2800929A8 +2800929A8:lI108|N +2800929B8:t3:AF:logger_h_common,A10:do_log_to_binary,I2 +2800929D8:Yh22:Rk9STUFUVEVSIEVSUk9SOiBiYWQgcmV0dXJuIHZhbHVlCg== +280092A10:t3:A4:line,A4:file,A3:mfa +280092A30:Mf3:H280092A10:I410,H280092A60,H280092B90 +280092A60:lI108|H280092A70 +280092A70:lI111|H280092A80 +280092A80:lI103|H280092A90 +280092A90:lI103|H280092AA0 +280092AA0:lI101|H280092AB0 +280092AB0:lI114|H280092AC0 +280092AC0:lI95|H280092AD0 +280092AD0:lI104|H280092AE0 +280092AE0:lI95|H280092AF0 +280092AF0:lI99|H280092B00 +280092B00:lI111|H280092B10 +280092B10:lI109|H280092B20 +280092B20:lI109|H280092B30 +280092B30:lI111|H280092B40 +280092B40:lI110|H280092B50 +280092B50:lI46|H280092B60 +280092B60:lI101|H280092B70 +280092B70:lI114|H280092B80 +280092B80:lI108|N +280092B90:t3:AF:logger_h_common,AA:try_format,I3 +280092BB0:lI68|H280092BC0 +280092BC0:lI69|H280092BD0 +280092BD0:lI70|H280092BE0 +280092BE0:lI65|H280092BF0 +280092BF0:lI85|H280092C00 +280092C00:lI76|H280092C10 +280092C10:lI84|H280092C20 +280092C20:lI32|H280092C30 +280092C30:lI70|H280092C40 +280092C40:lI79|H280092C50 +280092C50:lI82|H280092C60 +280092C60:lI77|H280092C70 +280092C70:lI65|H280092C80 +280092C80:lI84|H280092C90 +280092C90:lI84|H280092CA0 +280092CA0:lI69|H280092CB0 +280092CB0:lI82|H280092CC0 +280092CC0:lI32|H280092CD0 +280092CD0:lI67|H280092CE0 +280092CE0:lI82|H280092CF0 +280092CF0:lI65|H280092D00 +280092D00:lI83|H280092D10 +280092D10:lI72|H280092D20 +280092D20:lI69|H280092D30 +280092D30:lI68|H280092D40 +280092D40:lI10|N +280092D50:lI70|H280092D60 +280092D60:lI79|H280092D70 +280092D70:lI82|H280092D80 +280092D80:lI77|H280092D90 +280092D90:lI65|H280092DA0 +280092DA0:lI84|H280092DB0 +280092DB0:lI84|H280092DC0 +280092DC0:lI69|H280092DD0 +280092DD0:lI82|H280092DE0 +280092DE0:lI32|H280092DF0 +280092DF0:lI67|H280092E00 +280092E00:lI82|H280092E10 +280092E10:lI65|H280092E20 +280092E20:lI83|H280092E30 +280092E30:lI72|H280092E40 +280092E40:lI58|H280092E50 +280092E50:lI32|H280092E60 +280092E60:lI126|H280092E70 +280092E70:lI116|H280092E80 +280092E80:lI112|N +280092E90:t1:A18:filesync_repeat_interval +280092EA0:Mf1:H280092E90:I5000 +280092EC0:lI108|N +280092ED0:lI114|H280092EC0 +280092EE0:lI101|H280092ED0 +280092EF0:lI46|H280092EE0 +280092F00:lI110|H280092EF0 +280092F10:lI111|H280092F00 +280092F20:lI109|H280092F10 +280092F30:lI109|H280092F20 +280092F40:lI111|H280092F30 +280092F50:lI99|H280092F40 +280092F60:lI95|H280092F50 +280092F70:lI104|H280092F60 +280092F80:lI95|H280092F70 +280092F90:lI114|H280092F80 +280092FA0:lI101|H280092F90 +280092FB0:lI103|H280092FA0 +280092FC0:lI103|H280092FB0 +280092FD0:lI111|H280092FC0 +280092FE0:lI108|H280092FD0 +280092FF0:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +280093028:t1:A4:time +280093038:t3:A4:meta,A3:msg,A5:level +280093058:t1:A18:filesync_repeat_interval +2800B0A58:lI115|H2800B0A68 +2800B0A68:lI116|H2800B0A78 +2800B0A78:lI97|H2800B0A88 +2800B0A88:lI110|H2800B0A98 +2800B0A98:lI100|H2800B0AA8 +2800B0AA8:lI95|H2800B0AB8 +2800B0AB8:lI97|H2800B0AC8 +2800B0AC8:lI108|H2800B0AD8 +2800B0AD8:lI111|H2800B0AE8 +2800B0AE8:lI110|H2800B0AF8 +2800B0AF8:lI101|H2800B0B08 +2800B0B08:lI95|N +2800B0B18:t2:A4:line,I173 +2800B0B30:t2:A6:module,AD:httpc_manager +2800B0B48:lI105|H2800B0B58 +2800B0B58:lI110|H2800B0B68 +2800B0B68:lI115|H2800B0B78 +2800B0B78:lI101|H2800B0B88 +2800B0B88:lI114|H2800B0B98 +2800B0B98:lI116|H2800B0BA8 +2800B0BA8:lI32|H2800B0BB8 +2800B0BB8:lI115|H2800B0BC8 +2800B0BC8:lI101|H2800B0BD8 +2800B0BD8:lI115|H2800B0BE8 +2800B0BE8:lI115|H2800B0BF8 +2800B0BF8:lI105|H2800B0C08 +2800B0C08:lI111|H2800B0C18 +2800B0C18:lI110|N +2800B0C28:t2:A4:line,I188 +2800B0C40:lI108|H2800B0C50 +2800B0C50:lI111|H2800B0C60 +2800B0C60:lI111|H2800B0C70 +2800B0C70:lI107|H2800B0C80 +2800B0C80:lI117|H2800B0C90 +2800B0C90:lI112|H2800B0CA0 +2800B0CA0:lI32|H2800B0CB0 +2800B0CB0:lI115|H2800B0CC0 +2800B0CC0:lI101|H2800B0CD0 +2800B0CD0:lI115|H2800B0CE0 +2800B0CE0:lI115|H2800B0CF0 +2800B0CF0:lI105|H2800B0D00 +2800B0D00:lI111|H2800B0D10 +2800B0D10:lI110|N +2800B0D20:t2:A4:line,I205 +2800B0D38:lI117|H2800B0D48 +2800B0D48:lI112|H2800B0D58 +2800B0D58:lI100|H2800B0D68 +2800B0D68:lI97|H2800B0D78 +2800B0D78:lI116|H2800B0D88 +2800B0D88:lI101|H2800B0D98 +2800B0D98:lI32|H2800B0DA8 +2800B0DA8:lI115|H2800B0DB8 +2800B0DB8:lI101|H2800B0DC8 +2800B0DC8:lI115|H2800B0DD8 +2800B0DD8:lI115|H2800B0DE8 +2800B0DE8:lI105|H2800B0DF8 +2800B0DF8:lI111|H2800B0E08 +2800B0E08:lI110|N +2800B0E18:t2:A4:line,I225 +2800B0E30:lI100|H2800B0E40 +2800B0E40:lI101|H2800B0E50 +2800B0E50:lI108|H2800B0E60 +2800B0E60:lI101|H2800B0E70 +2800B0E70:lI116|H2800B0E80 +2800B0E80:lI101|H2800B0E90 +2800B0E90:lI32|H2800B0EA0 +2800B0EA0:lI115|H2800B0EB0 +2800B0EB0:lI101|H2800B0EC0 +2800B0EC0:lI115|H2800B0ED0 +2800B0ED0:lI115|H2800B0EE0 +2800B0EE0:lI105|H2800B0EF0 +2800B0EF0:lI111|H2800B0F00 +2800B0F00:lI110|N +2800B0F10:t2:A4:line,I243 +2800B0F28:lI119|H2800B0F38 +2800B0F38:lI104|H2800B0F48 +2800B0F48:lI105|H2800B0F58 +2800B0F58:lI99|H2800B0F68 +2800B0F68:lI104|H2800B0F78 +2800B0F78:lI95|H2800B0F88 +2800B0F88:lI115|H2800B0F98 +2800B0F98:lI101|H2800B0FA8 +2800B0FA8:lI115|H2800B0FB8 +2800B0FB8:lI115|H2800B0FC8 +2800B0FC8:lI105|H2800B0FD8 +2800B0FD8:lI111|H2800B0FE8 +2800B0FE8:lI110|H2800B0FF8 +2800B0FF8:lI115|N +2800B1008:t2:A4:line,I276 +2800B1020:lI119|H2800B1030 +2800B1030:lI104|H2800B1040 +2800B1040:lI105|H2800B1050 +2800B1050:lI99|H2800B1060 +2800B1060:lI104|H2800B1070 +2800B1070:lI95|H2800B1080 +2800B1080:lI115|H2800B1090 +2800B1090:lI101|H2800B10A0 +2800B10A0:lI115|H2800B10B0 +2800B10B0:lI115|H2800B10C0 +2800B10C0:lI105|H2800B10D0 +2800B10D0:lI111|H2800B10E0 +2800B10E0:lI110|H2800B10F0 +2800B10F0:lI95|H2800B1100 +2800B1100:lI105|H2800B1110 +2800B1110:lI110|H2800B1120 +2800B1120:lI102|H2800B1130 +2800B1130:lI111|N +2800B1140:t2:A4:line,I406 +2800B1158:lI115|H2800B1168 +2800B1168:lI116|H2800B1178 +2800B1178:lI97|H2800B1188 +2800B1188:lI114|H2800B1198 +2800B1198:lI116|H2800B11A8 +2800B11A8:lI105|H2800B11B8 +2800B11B8:lI110|H2800B11C8 +2800B11C8:lI103|N +2800B11D8:t2:A4:line,I409 +2800B11F0:lI115|H2800B1200 +2800B1200:lI116|H2800B1210 +2800B1210:lI97|H2800B1220 +2800B1220:lI114|H2800B1230 +2800B1230:lI116|H2800B1240 +2800B1240:lI101|H2800B1250 +2800B1250:lI100|N +2800B1260:lI99|H2800B1270 +2800B1270:lI114|H2800B1280 +2800B1280:lI101|H2800B1290 +2800B1290:lI97|H2800B12A0 +2800B12A0:lI116|H2800B12B0 +2800B12B0:lI101|H2800B12C0 +2800B12C0:lI32|H2800B12D0 +2800B12D0:lI115|H2800B12E0 +2800B12E0:lI101|H2800B12F0 +2800B12F0:lI115|H2800B1300 +2800B1300:lI115|H2800B1310 +2800B1310:lI105|H2800B1320 +2800B1320:lI111|H2800B1330 +2800B1330:lI110|H2800B1340 +2800B1340:lI32|H2800B1350 +2800B1350:lI100|H2800B1360 +2800B1360:lI98|N +2800B1370:lH2800B1390|H2800B1380 +2800B1380:lH2800B13A8|N +2800B1390:t2:A6:module,AD:httpc_manager +2800B13A8:t2:A4:line,I420 +2800B13C0:lA6:public|H2800B13D0 +2800B13D0:lA3:set|H2800B13E0 +2800B13E0:lAB:named_table|H2800B13F0 +2800B13F0:lH2800B1400|N +2800B1400:t2:A6:keypos,I2 +2800B1418:lI99|H2800B1428 +2800B1428:lI114|H2800B1438 +2800B1438:lI101|H2800B1448 +2800B1448:lI97|H2800B1458 +2800B1458:lI116|H2800B1468 +2800B1468:lI101|H2800B1478 +2800B1478:lI32|H2800B1488 +2800B1488:lI104|H2800B1498 +2800B1498:lI97|H2800B14A8 +2800B14A8:lI110|H2800B14B8 +2800B14B8:lI100|H2800B14C8 +2800B14C8:lI108|H2800B14D8 +2800B14D8:lI101|H2800B14E8 +2800B14E8:lI114|H2800B14F8 +2800B14F8:lI47|H2800B1508 +2800B1508:lI114|H2800B1518 +2800B1518:lI101|H2800B1528 +2800B1528:lI113|H2800B1538 +2800B1538:lI117|H2800B1548 +2800B1548:lI101|H2800B1558 +2800B1558:lI115|H2800B1568 +2800B1568:lI116|H2800B1578 +2800B1578:lI32|H2800B1588 +2800B1588:lI100|H2800B1598 +2800B1598:lI98|N +2800B15A8:lH2800B15C8|H2800B15B8 +2800B15B8:lH2800B15E0|N +2800B15C8:t2:A6:module,AD:httpc_manager +2800B15E0:t2:A4:line,I426 +2800B15F8:lA9:protected|H2800B1608 +2800B1608:lA3:set|H2800B1618 +2800B1618:lAB:named_table|H2800B1628 +2800B1628:lH2800B1638|N +2800B1638:t2:A6:keypos,I1 +2800B1650:lI99|H2800B1660 +2800B1660:lI114|H2800B1670 +2800B1670:lI101|H2800B1680 +2800B1680:lI97|H2800B1690 +2800B1690:lI116|H2800B16A0 +2800B16A0:lI101|H2800B16B0 +2800B16B0:lI32|H2800B16C0 +2800B16C0:lI99|H2800B16D0 +2800B16D0:lI111|H2800B16E0 +2800B16E0:lI111|H2800B16F0 +2800B16F0:lI107|H2800B1700 +2800B1700:lI105|H2800B1710 +2800B1710:lI101|H2800B1720 +2800B1720:lI32|H2800B1730 +2800B1730:lI100|H2800B1740 +2800B1740:lI98|N +2800B1750:lH2800B1770|H2800B1760 +2800B1760:lH2800B1788|N +2800B1770:t2:A6:module,AD:httpc_manager +2800B1788:t2:A4:line,I431 +2800B17A0:tF:A7:options,H2800B1820,H2800B1838,I0,I2,I5,I120000,I2,A8:disabled,A5:false,A4:inet,A7:default,A7:default,N,A9:undefined +2800B1820:t2:A9:undefined,N +2800B1838:t2:A9:undefined,N +2800B1850:t2:A4:line,I474 +2800B1868:lI119|H2800B1878 +2800B1878:lI104|H2800B1888 +2800B1888:lI105|H2800B1898 +2800B1898:lI99|H2800B18A8 +2800B18A8:lI104|H2800B18B8 +2800B18B8:lI32|H2800B18C8 +2800B18C8:lI99|H2800B18D8 +2800B18D8:lI111|H2800B18E8 +2800B18E8:lI111|H2800B18F8 +2800B18F8:lI107|H2800B1908 +2800B1908:lI105|H2800B1918 +2800B1918:lI101|H2800B1928 +2800B1928:lI115|N +2800B1938:t2:A4:line,I454 +2800B1950:lI114|H2800B1960 +2800B1960:lI101|H2800B1970 +2800B1970:lI113|H2800B1980 +2800B1980:lI117|H2800B1990 +2800B1990:lI101|H2800B19A0 +2800B19A0:lI115|H2800B19B0 +2800B19B0:lI116|N +2800B19C0:t2:A4:line,I485 +2800B19D8:lI103|H2800B19E8 +2800B19E8:lI101|H2800B19F8 +2800B19F8:lI116|H2800B1A08 +2800B1A08:lI32|H2800B1A18 +2800B1A18:lI111|H2800B1A28 +2800B1A28:lI112|H2800B1A38 +2800B1A38:lI116|H2800B1A48 +2800B1A48:lI105|H2800B1A58 +2800B1A58:lI111|H2800B1A68 +2800B1A68:lI110|H2800B1A78 +2800B1A78:lI115|N +2800B1A88:lH2800B1AA8|H2800B1A98 +2800B1A98:lH2800B1AC0|N +2800B1AA8:t2:A6:module,AD:httpc_manager +2800B1AC0:t2:A4:line,I468 +2800B1AD8:lI114|H2800B1AE8 +2800B1AE8:lI101|H2800B1AF8 +2800B1AF8:lI115|H2800B1B08 +2800B1B08:lI101|H2800B1B18 +2800B1B18:lI116|H2800B1B28 +2800B1B28:lI32|H2800B1B38 +2800B1B38:lI99|H2800B1B48 +2800B1B48:lI111|H2800B1B58 +2800B1B58:lI111|H2800B1B68 +2800B1B68:lI107|H2800B1B78 +2800B1B78:lI105|H2800B1B88 +2800B1B88:lI101|H2800B1B98 +2800B1B98:lI115|N +2800B1BA8:lH2800B1BC8|H2800B1BB8 +2800B1BB8:lH2800B1BE0|N +2800B1BC8:t2:A6:module,AD:httpc_manager +2800B1BE0:t2:A4:line,I463 +2800B1BF8:lI105|H2800B1C08 +2800B1C08:lI110|H2800B1C18 +2800B1C18:lI102|H2800B1C28 +2800B1C28:lI111|N +2800B1C38:lH2800B1C58|H2800B1C48 +2800B1C48:lH2800B1C70|N +2800B1C58:t2:A6:module,AD:httpc_manager +2800B1C70:t2:A4:line,I491 +2800B1C88:lI114|H2800B1C98 +2800B1C98:lI101|H2800B1CA8 +2800B1CA8:lI99|H2800B1CB8 +2800B1CB8:lI101|H2800B1CC8 +2800B1CC8:lI105|H2800B1CD8 +2800B1CD8:lI118|H2800B1CE8 +2800B1CE8:lI101|H2800B1CF8 +2800B1CF8:lI100|H2800B1D08 +2800B1D08:lI32|H2800B1D18 +2800B1D18:lI117|H2800B1D28 +2800B1D28:lI110|H2800B1D38 +2800B1D38:lI107|H2800B1D48 +2800B1D48:lI110|H2800B1D58 +2800B1D58:lI111|H2800B1D68 +2800B1D68:lI119|H2800B1D78 +2800B1D78:lI110|H2800B1D88 +2800B1D88:lI32|H2800B1D98 +2800B1D98:lI114|H2800B1DA8 +2800B1DA8:lI101|H2800B1DB8 +2800B1DB8:lI113|H2800B1DC8 +2800B1DC8:lI117|H2800B1DD8 +2800B1DD8:lI101|H2800B1DE8 +2800B1DE8:lI115|H2800B1DF8 +2800B1DF8:lI116|H2800B1E08 +2800B1E08:lI126|H2800B1E18 +2800B1E18:lI110|H2800B1E28 +2800B1E28:lI32|H2800B1E38 +2800B1E38:lI32|H2800B1E48 +2800B1E48:lI32|H2800B1E58 +2800B1E58:lI82|H2800B1E68 +2800B1E68:lI101|H2800B1E78 +2800B1E78:lI113|H2800B1E88 +2800B1E88:lI58|H2800B1E98 +2800B1E98:lI32|H2800B1EA8 +2800B1EA8:lI32|H2800B1EB8 +2800B1EB8:lI126|H2800B1EC8 +2800B1EC8:lI112|H2800B1ED8 +2800B1ED8:lI126|H2800B1EE8 +2800B1EE8:lI110|H2800B1EF8 +2800B1EF8:lI32|H2800B1F08 +2800B1F08:lI32|H2800B1F18 +2800B1F18:lI32|H2800B1F28 +2800B1F28:lI70|H2800B1F38 +2800B1F38:lI114|H2800B1F48 +2800B1F48:lI111|H2800B1F58 +2800B1F58:lI109|H2800B1F68 +2800B1F68:lI58|H2800B1F78 +2800B1F78:lI32|H2800B1F88 +2800B1F88:lI126|H2800B1F98 +2800B1F98:lI112|N +2800B1FA8:t2:A5:error,AD:API_violation +2800B1FC0:t2:A4:line,I542 +2800B1FD8:lI115|H2800B1FE8 +2800B1FE8:lI101|H2800B1FF8 +2800B1FF8:lI116|H2800B2008 +2800B2008:lI32|H2800B2018 +2800B2018:lI111|H2800B2028 +2800B2028:lI112|H2800B2038 +2800B2038:lI116|H2800B2048 +2800B2048:lI105|H2800B2058 +2800B2058:lI111|H2800B2068 +2800B2068:lI110|H2800B2078 +2800B2078:lI115|N +2800B2088:t2:A4:line,I537 +2800B20A0:lI114|H2800B20B0 +2800B20B0:lI101|H2800B20C0 +2800B20C0:lI113|H2800B20D0 +2800B20D0:lI117|H2800B20E0 +2800B20E0:lI101|H2800B20F0 +2800B20F0:lI115|H2800B2100 +2800B2100:lI116|H2800B2110 +2800B2110:lI32|H2800B2120 +2800B2120:lI100|H2800B2130 +2800B2130:lI111|H2800B2140 +2800B2140:lI110|H2800B2150 +2800B2150:lI101|N +2800B2160:lI114|H2800B2170 +2800B2170:lI101|H2800B2180 +2800B2180:lI99|H2800B2190 +2800B2190:lI101|H2800B21A0 +2800B21A0:lI105|H2800B21B0 +2800B21B0:lI118|H2800B21C0 +2800B21C0:lI101|H2800B21D0 +2800B21D0:lI100|H2800B21E0 +2800B21E0:lI32|H2800B21F0 +2800B21F0:lI117|H2800B2200 +2800B2200:lI110|H2800B2210 +2800B2210:lI107|H2800B2220 +2800B2220:lI110|H2800B2230 +2800B2230:lI111|H2800B2240 +2800B2240:lI119|H2800B2250 +2800B2250:lI110|H2800B2260 +2800B2260:lI32|H2800B2270 +2800B2270:lI109|H2800B2280 +2800B2280:lI101|H2800B2290 +2800B2290:lI115|H2800B22A0 +2800B22A0:lI115|H2800B22B0 +2800B22B0:lI97|H2800B22C0 +2800B22C0:lI103|H2800B22D0 +2800B22D0:lI101|H2800B22E0 +2800B22E0:lI126|H2800B22F0 +2800B22F0:lI110|H2800B2300 +2800B2300:lI32|H2800B2310 +2800B2310:lI32|H2800B2320 +2800B2320:lI32|H2800B2330 +2800B2330:lI77|H2800B2340 +2800B2340:lI115|H2800B2350 +2800B2350:lI103|H2800B2360 +2800B2360:lI58|H2800B2370 +2800B2370:lI32|H2800B2380 +2800B2380:lI126|H2800B2390 +2800B2390:lI112|N +2800B23A0:lI85|H2800B23B0 +2800B23B0:lI110|H2800B23C0 +2800B23C0:lI107|H2800B23D0 +2800B23D0:lI110|H2800B23E0 +2800B23E0:lI111|H2800B23F0 +2800B23F0:lI119|H2800B2400 +2800B2400:lI110|H2800B2410 +2800B2410:lI32|H2800B2420 +2800B2420:lI109|H2800B2430 +2800B2430:lI101|H2800B2440 +2800B2440:lI115|H2800B2450 +2800B2450:lI115|H2800B2460 +2800B2460:lI97|H2800B2470 +2800B2470:lI103|H2800B2480 +2800B2480:lI101|H2800B2490 +2800B2490:lI32|H2800B24A0 +2800B24A0:lI105|H2800B24B0 +2800B24B0:lI110|H2800B24C0 +2800B24C0:lI32|H2800B24D0 +2800B24D0:lI104|H2800B24E0 +2800B24E0:lI116|H2800B24F0 +2800B24F0:lI116|H2800B2500 +2800B2500:lI112|H2800B2510 +2800B2510:lI99|H2800B2520 +2800B2520:lI95|H2800B2530 +2800B2530:lI109|H2800B2540 +2800B2540:lI97|H2800B2550 +2800B2550:lI110|H2800B2560 +2800B2560:lI97|H2800B2570 +2800B2570:lI103|H2800B2580 +2800B2580:lI101|H2800B2590 +2800B2590:lI114|H2800B25A0 +2800B25A0:lI58|H2800B25B0 +2800B25B0:lI104|H2800B25C0 +2800B25C0:lI97|H2800B25D0 +2800B25D0:lI110|H2800B25E0 +2800B25E0:lI100|H2800B25F0 +2800B25F0:lI108|H2800B2600 +2800B2600:lI101|H2800B2610 +2800B2610:lI95|H2800B2620 +2800B2620:lI105|H2800B2630 +2800B2630:lI110|H2800B2640 +2800B2640:lI102|H2800B2650 +2800B2650:lI111|H2800B2660 +2800B2660:lI32|H2800B2670 +2800B2670:lI126|H2800B2680 +2800B2680:lI112|H2800B2690 +2800B2690:lI126|H2800B26A0 +2800B26A0:lI110|N +2800B26B0:lA5:proxy|H2800B26C0 +2800B26C0:lAB:https_proxy|H2800B26D0 +2800B26D0:lA10:pipeline_timeout|H2800B26E0 +2800B26E0:lA13:max_pipeline_length|H2800B26F0 +2800B26F0:lA15:max_keep_alive_length|H2800B2700 +2800B2700:lA12:keep_alive_timeout|H2800B2710 +2800B2710:lAC:max_sessions|H2800B2720 +2800B2720:lA7:cookies|H2800B2730 +2800B2730:lA7:verbose|H2800B2740 +2800B2740:lA8:ipfamily|H2800B2750 +2800B2750:lA2:ip|H2800B2760 +2800B2760:lA4:port|H2800B2770 +2800B2770:lAB:socket_opts|H2800B2780 +2800B2780:lAB:unix_socket|N +2800B2790:t3:A2:$2,A2:$1,A1:_ +2800B27B0:lI72|H2800B27C0 +2800B27C0:lI84|H2800B27D0 +2800B27D0:lI84|H2800B27E0 +2800B27E0:lI80|H2800B27F0 +2800B27F0:lI47|H2800B2800 +2800B2800:lI49|H2800B2810 +2800B2810:lI46|H2800B2820 +2800B2820:lI48|N +2800B2830:lI99|H2800B2840 +2800B2840:lI108|H2800B2850 +2800B2850:lI111|H2800B2860 +2800B2860:lI115|H2800B2870 +2800B2870:lI101|N +2800B2880:t2:A4:line,I817 +2800B2898:lI115|H2800B28A8 +2800B28A8:lI101|H2800B28B8 +2800B28B8:lI108|H2800B28C8 +2800B28C8:lI101|H2800B28D8 +2800B28D8:lI99|H2800B28E8 +2800B28E8:lI116|H2800B28F8 +2800B28F8:lI32|H2800B2908 +2800B2908:lI115|H2800B2918 +2800B2918:lI101|H2800B2928 +2800B2928:lI115|H2800B2938 +2800B2938:lI115|H2800B2948 +2800B2948:lI105|H2800B2958 +2800B2958:lI111|H2800B2968 +2800B2968:lI110|N +2800B2978:t2:A4:line,I838 +2800B2990:lI115|H2800B29A0 +2800B29A0:lI101|H2800B29B0 +2800B29B0:lI108|H2800B29C0 +2800B29C0:lI101|H2800B29D0 +2800B29D0:lI99|H2800B29E0 +2800B29E0:lI116|H2800B29F0 +2800B29F0:lI32|H2800B2A00 +2800B2A00:lI115|H2800B2A10 +2800B2A10:lI101|H2800B2A20 +2800B2A20:lI115|H2800B2A30 +2800B2A30:lI115|H2800B2A40 +2800B2A40:lI105|H2800B2A50 +2800B2A50:lI111|H2800B2A60 +2800B2A60:lI110|H2800B2A70 +2800B2A70:lI32|H2800B2A80 +2800B2A80:lI45|H2800B2A90 +2800B2A90:lI32|H2800B2AA0 +2800B2AA0:lI110|H2800B2AB0 +2800B2AB0:lI111|H2800B2AC0 +2800B2AC0:lI32|H2800B2AD0 +2800B2AD0:lI99|H2800B2AE0 +2800B2AE0:lI97|H2800B2AF0 +2800B2AF0:lI110|H2800B2B00 +2800B2B00:lI100|H2800B2B10 +2800B2B10:lI105|H2800B2B20 +2800B2B20:lI100|H2800B2B30 +2800B2B30:lI97|H2800B2B40 +2800B2B40:lI116|H2800B2B50 +2800B2B50:lI101|N +2800B2B60:lH2800B2B80|H2800B2B70 +2800B2B70:lH2800B2B98|N +2800B2B80:t2:A6:module,AD:httpc_manager +2800B2B98:t2:A4:line,I853 +2800B2BB0:t2:A4:line,I862 +2800B2BC8:lI115|H2800B2BD8 +2800B2BD8:lI101|H2800B2BE8 +2800B2BE8:lI108|H2800B2BF8 +2800B2BF8:lI101|H2800B2C08 +2800B2C08:lI99|H2800B2C18 +2800B2C18:lI116|H2800B2C28 +2800B2C28:lI32|H2800B2C38 +2800B2C38:lI115|H2800B2C48 +2800B2C48:lI101|H2800B2C58 +2800B2C58:lI115|H2800B2C68 +2800B2C68:lI115|H2800B2C78 +2800B2C78:lI105|H2800B2C88 +2800B2C88:lI111|H2800B2C98 +2800B2C98:lI110|H2800B2CA8 +2800B2CA8:lI32|H2800B2CB8 +2800B2CB8:lI45|H2800B2CC8 +2800B2CC8:lI32|H2800B2CD8 +2800B2CD8:lI102|H2800B2CE8 +2800B2CE8:lI111|H2800B2CF8 +2800B2CF8:lI117|H2800B2D08 +2800B2D08:lI110|H2800B2D18 +2800B2D18:lI100|H2800B2D28 +2800B2D28:lI32|H2800B2D38 +2800B2D38:lI111|H2800B2D48 +2800B2D48:lI110|H2800B2D58 +2800B2D58:lI101|N +2800B2D68:t2:A5:error,A6:closed +2800B2D80:t2:H2800B2D98,N +2800B2D98:lI99|H2800B2DA8 +2800B2DA8:lI111|H2800B2DB8 +2800B2DB8:lI111|H2800B2DC8 +2800B2DC8:lI107|H2800B2DD8 +2800B2DD8:lI105|H2800B2DE8 +2800B2DE8:lI101|N +2800B2DF8:lI95|H2800B2E08 +2800B2E08:lI95|H2800B2E18 +2800B2E18:lI115|H2800B2E28 +2800B2E28:lI101|H2800B2E38 +2800B2E38:lI115|H2800B2E48 +2800B2E48:lI115|H2800B2E58 +2800B2E58:lI105|H2800B2E68 +2800B2E68:lI111|H2800B2E78 +2800B2E78:lI110|H2800B2E88 +2800B2E88:lI95|H2800B2E98 +2800B2E98:lI100|H2800B2EA8 +2800B2EA8:lI98|N +2800B2EB8:lI95|H2800B2EC8 +2800B2EC8:lI95|H2800B2ED8 +2800B2ED8:lI99|H2800B2EE8 +2800B2EE8:lI111|H2800B2EF8 +2800B2EF8:lI111|H2800B2F08 +2800B2F08:lI107|H2800B2F18 +2800B2F18:lI105|H2800B2F28 +2800B2F28:lI101|H2800B2F38 +2800B2F38:lI95|H2800B2F48 +2800B2F48:lI100|H2800B2F58 +2800B2F58:lI98|N +2800B2F68:lI95|H2800B2F78 +2800B2F78:lI95|H2800B2F88 +2800B2F88:lI115|H2800B2F98 +2800B2F98:lI101|H2800B2FA8 +2800B2FA8:lI115|H2800B2FB8 +2800B2FB8:lI115|H2800B2FC8 +2800B2FC8:lI105|H2800B2FD8 +2800B2FD8:lI111|H2800B2FE8 +2800B2FE8:lI110|H2800B2FF8 +2800B2FF8:lI95|H2800B3008 +2800B3008:lI99|H2800B3018 +2800B3018:lI111|H2800B3028 +2800B3028:lI111|H2800B3038 +2800B3038:lI107|H2800B3048 +2800B3048:lI105|H2800B3058 +2800B3058:lI101|H2800B3068 +2800B3068:lI95|H2800B3078 +2800B3078:lI100|H2800B3088 +2800B3088:lI98|N +2800B3098:lI95|H2800B30A8 +2800B30A8:lI95|H2800B30B8 +2800B30B8:lI104|H2800B30C8 +2800B30C8:lI97|H2800B30D8 +2800B30D8:lI110|H2800B30E8 +2800B30E8:lI100|H2800B30F8 +2800B30F8:lI108|H2800B3108 +2800B3108:lI101|H2800B3118 +2800B3118:lI114|H2800B3128 +2800B3128:lI95|H2800B3138 +2800B3138:lI100|H2800B3148 +2800B3148:lI98|N +2800B3158:lI115|N +2800B3168:lA4:call|N +2800B3178:lH2800B3188|N +2800B3188:t3:A1:_,N,H2800B31A8 +2800B31A8:lH2800B31B8|N +2800B31B8:t1:AC:return_trace +2800B31C8:lI126|H2800B31D8 +2800B31D8:lI110|N +2800B31E8:lI72|H2800B31F8 +2800B31F8:lI84|H2800B3208 +2800B3208:lI84|H2800B3218 +2800B3218:lI80|H2800B3228 +2800B3228:lI67|H2800B3238 +2800B3238:lI45|H2800B3248 +2800B3248:lI77|H2800B3258 +2800B3258:lI65|H2800B3268 +2800B3268:lI78|H2800B3278 +2800B3278:lI65|H2800B3288 +2800B3288:lI71|H2800B3298 +2800B3298:lI69|H2800B32A8 +2800B32A8:lI82|H2800B32B8 +2800B32B8:lI60|H2800B32C8 +2800B32C8:lI126|H2800B32D8 +2800B32D8:lI112|H2800B32E8 +2800B32E8:lI62|H2800B32F8 +2800B32F8:lI32|N +2800B3308:lI108|N +2800B3318:lI114|H2800B3308 +2800B3328:lI101|H2800B3318 +2800B3338:lI46|H2800B3328 +2800B3348:lI114|H2800B3338 +2800B3358:lI101|H2800B3348 +2800B3368:lI103|H2800B3358 +2800B3378:lI97|H2800B3368 +2800B3388:lI110|H2800B3378 +2800B3398:lI97|H2800B3388 +2800B33A8:lI109|H2800B3398 +2800B33B8:lI95|H2800B33A8 +2800B33C8:lI99|H2800B33B8 +2800B33D8:lI112|H2800B33C8 +2800B33E8:lI116|H2800B33D8 +2800B33F8:lI116|H2800B33E8 +2800B3408:lI104|H2800B33F8 +2800B3418:E51:g3AAAABPAav5MfhExLjVj7CSaHK/DswAAAAAAAAAAHcNaHR0cGNfbWFuYWdlcmEAYgVfyY9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +2800B3440:E51:g3AAAABPAav5MfhExLjVj7CSaHK/DswAAAABAAAAAHcNaHR0cGNfbWFuYWdlcmEBYgVfyY9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA +2800B6F58:t2:A5:local,A11:httpc_handler_sup +2800B6F70:lAD:httpc_handler|N +2800B6F80:t3:A12:simple_one_for_one,I0,I3600 +2800B6FA0:lI108|N +2800B6FB0:lI114|H2800B6FA0 +2800B6FC0:lI101|H2800B6FB0 +2800B6FD0:lI46|H2800B6FC0 +2800B6FE0:lI112|H2800B6FD0 +2800B6FF0:lI117|H2800B6FE0 +2800B7000:lI115|H2800B6FF0 +2800B7010:lI95|H2800B7000 +2800B7020:lI114|H2800B7010 +2800B7030:lI101|H2800B7020 +2800B7040:lI108|H2800B7030 +2800B7050:lI100|H2800B7040 +2800B7060:lI110|H2800B7050 +2800B7070:lI97|H2800B7060 +2800B7080:lI104|H2800B7070 +2800B7090:lI95|H2800B7080 +2800B70A0:lI99|H2800B7090 +2800B70B0:lI112|H2800B70A0 +2800B70C0:lI116|H2800B70B0 +2800B70D0:lI116|H2800B70C0 +2800B70E0:lI104|H2800B70D0 +2800BDB80:t2:A5:local,A12:tls_connection_sup +2800BDB98:t2:A5:local,A17:tls_dist_connection_sup +2800BDBB0:t2:A2:ok,H2800BDBC8 +2800BDBC8:t2:H2800BDC00,H2800BDC30 +2800BDBE0:t3:A8:strategy,A6:period,A9:intensity +2800BDC00:Mf3:H2800BDBE0:A12:simple_one_for_one,I3600,I0 +2800BDC30:lH2800BDC68|N +2800BDC40:t4:A2:id,A7:restart,A5:start,A4:type +2800BDC68:Mf4:H2800BDC40:A9:undefined,A9:temporary,H2800BDCA0,AA:supervisor +2800BDCA0:t3:A16:tls_dyn_connection_sup,AA:start_link,N +2800BDCC0:lI108|N +2800BDCD0:lI114|H2800BDCC0 +2800BDCE0:lI101|H2800BDCD0 +2800BDCF0:lI46|H2800BDCE0 +2800BDD00:lI112|H2800BDCF0 +2800BDD10:lI117|H2800BDD00 +2800BDD20:lI115|H2800BDD10 +2800BDD30:lI95|H2800BDD20 +2800BDD40:lI110|H2800BDD30 +2800BDD50:lI111|H2800BDD40 +2800BDD60:lI105|H2800BDD50 +2800BDD70:lI116|H2800BDD60 +2800BDD80:lI99|H2800BDD70 +2800BDD90:lI101|H2800BDD80 +2800BDDA0:lI110|H2800BDD90 +2800BDDB0:lI110|H2800BDDA0 +2800BDDC0:lI111|H2800BDDB0 +2800BDDD0:lI99|H2800BDDC0 +2800BDDE0:lI95|H2800BDDD0 +2800BDDF0:lI115|H2800BDDE0 +2800BDE00:lI108|H2800BDDF0 +2800BDE10:lI116|H2800BDE00 +2800BE298:t2:A5:local,A16:ssl_listen_tracker_sup +2800BE2B0:t2:A5:local,A1B:ssl_listen_tracker_sup_dist +2800BE2C8:t2:A2:ok,H2800BE2E0 +2800BE2E0:t2:H2800BE318,H2800BE348 +2800BE2F8:t3:A8:strategy,A6:period,A9:intensity +2800BE318:Mf3:H2800BE2F8:A12:simple_one_for_one,I3600,I0 +2800BE348:lH2800BE390|N +2800BE358:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +2800BE390:Mf6:H2800BE358:A9:undefined,A9:temporary,I4000,H2800BE3E8,A6:worker,H2800BE3D8 +2800BE3D8:lAA:tls_socket|N +2800BE3E8:t3:AA:tls_socket,AA:start_link,N +2800BE408:lI108|N +2800BE418:lI114|H2800BE408 +2800BE428:lI101|H2800BE418 +2800BE438:lI46|H2800BE428 +2800BE448:lI112|H2800BE438 +2800BE458:lI117|H2800BE448 +2800BE468:lI115|H2800BE458 +2800BE478:lI95|H2800BE468 +2800BE488:lI114|H2800BE478 +2800BE498:lI101|H2800BE488 +2800BE4A8:lI107|H2800BE498 +2800BE4B8:lI99|H2800BE4A8 +2800BE4C8:lI97|H2800BE4B8 +2800BE4D8:lI114|H2800BE4C8 +2800BE4E8:lI116|H2800BE4D8 +2800BE4F8:lI95|H2800BE4E8 +2800BE508:lI110|H2800BE4F8 +2800BE518:lI101|H2800BE508 +2800BE528:lI116|H2800BE518 +2800BE538:lI115|H2800BE528 +2800BE548:lI105|H2800BE538 +2800BE558:lI108|H2800BE548 +2800BE568:lI95|H2800BE558 +2800BE578:lI108|H2800BE568 +2800BE588:lI115|H2800BE578 +2800BE598:lI115|H2800BE588 +2800BE5C0:t2:A5:local,A1D:tls_server_session_ticket_sup +2800BE5D8:t2:A5:local,A22:tls_server_session_ticket_sup_dist +2800BE5F0:t2:A2:ok,H2800BE608 +2800BE608:t2:H2800BE640,H2800BE670 +2800BE620:t3:A8:strategy,A6:period,A9:intensity +2800BE640:Mf3:H2800BE620:A12:simple_one_for_one,I3600,I0 +2800BE670:lH2800BE6B8|N +2800BE680:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +2800BE6B8:Mf6:H2800BE680:A9:undefined,A9:transient,I4000,H2800BE710,A6:worker,H2800BE700 +2800BE700:lA19:tls_server_session_ticket|N +2800BE710:t3:A19:tls_server_session_ticket,AA:start_link,N +2800BE730:lI108|N +2800BE740:lI114|H2800BE730 +2800BE750:lI101|H2800BE740 +2800BE760:lI46|H2800BE750 +2800BE770:lI112|H2800BE760 +2800BE780:lI117|H2800BE770 +2800BE790:lI115|H2800BE780 +2800BE7A0:lI95|H2800BE790 +2800BE7B0:lI116|H2800BE7A0 +2800BE7C0:lI101|H2800BE7B0 +2800BE7D0:lI107|H2800BE7C0 +2800BE7E0:lI99|H2800BE7D0 +2800BE7F0:lI105|H2800BE7E0 +2800BE800:lI116|H2800BE7F0 +2800BE810:lI95|H2800BE800 +2800BE820:lI110|H2800BE810 +2800BE830:lI111|H2800BE820 +2800BE840:lI105|H2800BE830 +2800BE850:lI115|H2800BE840 +2800BE860:lI115|H2800BE850 +2800BE870:lI101|H2800BE860 +2800BE880:lI115|H2800BE870 +2800BE890:lI95|H2800BE880 +2800BE8A0:lI114|H2800BE890 +2800BE8B0:lI101|H2800BE8A0 +2800BE8C0:lI118|H2800BE8B0 +2800BE8D0:lI114|H2800BE8C0 +2800BE8E0:lI101|H2800BE8D0 +2800BE8F0:lI115|H2800BE8E0 +2800BE900:lI95|H2800BE8F0 +2800BE910:lI115|H2800BE900 +2800BE920:lI108|H2800BE910 +2800BE930:lI116|H2800BE920 +2800BE958:t2:A5:local,A1C:ssl_server_session_cache_sup +2800BE970:t2:A2:ok,H2800BE988 +2800BE988:t2:H2800BE9C0,H2800BE9F0 +2800BE9A0:t3:A8:strategy,A6:period,A9:intensity +2800BE9C0:Mf3:H2800BE9A0:A12:simple_one_for_one,I3600,I3 +2800BE9F0:lH2800BEA38|N +2800BEA00:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +2800BEA38:Mf6:H2800BEA00:A9:undefined,A9:transient,I4000,H2800BEA90,A6:worker,H2800BEA80 +2800BEA80:lA18:ssl_server_session_cache|N +2800BEA90:t3:A18:ssl_server_session_cache,AA:start_link,N +2800BEAB0:lI108|N +2800BEAC0:lI114|H2800BEAB0 +2800BEAD0:lI101|H2800BEAC0 +2800BEAE0:lI46|H2800BEAD0 +2800BEAF0:lI112|H2800BEAE0 +2800BEB00:lI117|H2800BEAF0 +2800BEB10:lI115|H2800BEB00 +2800BEB20:lI95|H2800BEB10 +2800BEB30:lI101|H2800BEB20 +2800BEB40:lI104|H2800BEB30 +2800BEB50:lI99|H2800BEB40 +2800BEB60:lI97|H2800BEB50 +2800BEB70:lI99|H2800BEB60 +2800BEB80:lI95|H2800BEB70 +2800BEB90:lI110|H2800BEB80 +2800BEBA0:lI111|H2800BEB90 +2800BEBB0:lI105|H2800BEBA0 +2800BEBC0:lI115|H2800BEBB0 +2800BEBD0:lI115|H2800BEBC0 +2800BEBE0:lI101|H2800BEBD0 +2800BEBF0:lI115|H2800BEBE0 +2800BEC00:lI95|H2800BEBF0 +2800BEC10:lI114|H2800BEC00 +2800BEC20:lI101|H2800BEC10 +2800BEC30:lI118|H2800BEC20 +2800BEC40:lI114|H2800BEC30 +2800BEC50:lI101|H2800BEC40 +2800BEC60:lI115|H2800BEC50 +2800BEC70:lI95|H2800BEC60 +2800BEC80:lI108|H2800BEC70 +2800BEC90:lI115|H2800BEC80 +2800BECA0:lI115|H2800BEC90 +2800BECC8:t2:A5:local,A24:ssl_upgrade_server_session_cache_sup +2800BECE0:t2:A5:local,A29:ssl_upgrade_server_session_cache_sup_dist +2800BECF8:t2:A2:ok,H2800BED10 +2800BED10:t2:H2800BED48,H2800BED78 +2800BED28:t3:A8:strategy,A6:period,A9:intensity +2800BED48:Mf3:H2800BED28:A12:simple_one_for_one,I3600,I3 +2800BED78:lH2800BEDC0|N +2800BED88:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +2800BEDC0:Mf6:H2800BED88:A9:undefined,A9:transient,I4000,H2800BEE18,A6:worker,H2800BEE08 +2800BEE08:lA18:ssl_server_session_cache|N +2800BEE18:t3:A18:ssl_server_session_cache,AA:start_link,N +2800BEE38:lI108|N +2800BEE48:lI114|H2800BEE38 +2800BEE58:lI101|H2800BEE48 +2800BEE68:lI46|H2800BEE58 +2800BEE78:lI112|H2800BEE68 +2800BEE88:lI117|H2800BEE78 +2800BEE98:lI115|H2800BEE88 +2800BEEA8:lI95|H2800BEE98 +2800BEEB8:lI101|H2800BEEA8 +2800BEEC8:lI104|H2800BEEB8 +2800BEED8:lI99|H2800BEEC8 +2800BEEE8:lI97|H2800BEED8 +2800BEEF8:lI99|H2800BEEE8 +2800BEF08:lI95|H2800BEEF8 +2800BEF18:lI110|H2800BEF08 +2800BEF28:lI111|H2800BEF18 +2800BEF38:lI105|H2800BEF28 +2800BEF48:lI115|H2800BEF38 +2800BEF58:lI115|H2800BEF48 +2800BEF68:lI101|H2800BEF58 +2800BEF78:lI115|H2800BEF68 +2800BEF88:lI95|H2800BEF78 +2800BEF98:lI114|H2800BEF88 +2800BEFA8:lI101|H2800BEF98 +2800BEFB8:lI118|H2800BEFA8 +2800BEFC8:lI114|H2800BEFB8 +2800BEFD8:lI101|H2800BEFC8 +2800BEFE8:lI115|H2800BEFD8 +2800BEFF8:lI95|H2800BEFE8 +2800BF008:lI101|H2800BEFF8 +2800BF018:lI100|H2800BF008 +2800BF028:lI97|H2800BF018 +2800BF038:lI114|H2800BF028 +2800BF048:lI103|H2800BF038 +2800BF058:lI112|H2800BF048 +2800BF068:lI117|H2800BF058 +2800BF078:lI95|H2800BF068 +2800BF088:lI108|H2800BF078 +2800BF098:lI115|H2800BF088 +2800BF0A8:lI115|H2800BF098 +2800BF370:t2:A5:local,A13:dtls_connection_sup +2800BF388:t2:A5:local,A18:dtls_connection_sup_dist +2800BF3A0:t2:A2:ok,H2800BF3B8 +2800BF3B8:t2:H2800BF3F0,H2800BF420 +2800BF3D0:t3:A8:strategy,A6:period,A9:intensity +2800BF3F0:Mf3:H2800BF3D0:A12:simple_one_for_one,I3600,I0 +2800BF420:lH2800BF468|N +2800BF430:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +2800BF468:Mf6:H2800BF430:A9:undefined,A9:temporary,I4000,H2800BF4D0,A6:worker,H2800BF4B0 +2800BF4B0:lAE:ssl_gen_statem|H2800BF4C0 +2800BF4C0:lAF:dtls_connection|N +2800BF4D0:t3:AE:ssl_gen_statem,AA:start_link,N +2800BF4F0:lI108|N +2800BF500:lI114|H2800BF4F0 +2800BF510:lI101|H2800BF500 +2800BF520:lI46|H2800BF510 +2800BF530:lI112|H2800BF520 +2800BF540:lI117|H2800BF530 +2800BF550:lI115|H2800BF540 +2800BF560:lI95|H2800BF550 +2800BF570:lI110|H2800BF560 +2800BF580:lI111|H2800BF570 +2800BF590:lI105|H2800BF580 +2800BF5A0:lI116|H2800BF590 +2800BF5B0:lI99|H2800BF5A0 +2800BF5C0:lI101|H2800BF5B0 +2800BF5D0:lI110|H2800BF5C0 +2800BF5E0:lI110|H2800BF5D0 +2800BF5F0:lI111|H2800BF5E0 +2800BF600:lI99|H2800BF5F0 +2800BF610:lI95|H2800BF600 +2800BF620:lI115|H2800BF610 +2800BF630:lI108|H2800BF620 +2800BF640:lI116|H2800BF630 +2800BF650:lI100|H2800BF640 +2800BF988:t2:A5:local,A11:dtls_listener_sup +2800BF9A0:t2:A5:error,A11:already_listening +2800BF9B8:lAB:named_table|H2800BF9C8 +2800BF9C8:lA6:public|H2800BF9D8 +2800BF9D8:lA3:set|N +2800BF9E8:t2:A2:ok,H2800BFA00 +2800BFA00:t2:H2800BFA38,H2800BFA68 +2800BFA18:t3:A8:strategy,A6:period,A9:intensity +2800BFA38:Mf3:H2800BFA18:A12:simple_one_for_one,I3600,I0 +2800BFA68:lH2800BFAB0|N +2800BFA78:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +2800BFAB0:Mf6:H2800BFA78:A9:undefined,A9:temporary,I4000,H2800BFB08,A6:worker,H2800BFAF8 +2800BFAF8:lA11:dtls_packet_demux|N +2800BFB08:t3:A11:dtls_packet_demux,AA:start_link,N +2800BFB28:lI108|N +2800BFB38:lI114|H2800BFB28 +2800BFB48:lI101|H2800BFB38 +2800BFB58:lI46|H2800BFB48 +2800BFB68:lI112|H2800BFB58 +2800BFB78:lI117|H2800BFB68 +2800BFB88:lI115|H2800BFB78 +2800BFB98:lI95|H2800BFB88 +2800BFBA8:lI114|H2800BFB98 +2800BFBB8:lI101|H2800BFBA8 +2800BFBC8:lI110|H2800BFBB8 +2800BFBD8:lI101|H2800BFBC8 +2800BFBE8:lI116|H2800BFBD8 +2800BFBF8:lI115|H2800BFBE8 +2800BFC08:lI105|H2800BFBF8 +2800BFC18:lI108|H2800BFC08 +2800BFC28:lI95|H2800BFC18 +2800BFC38:lI115|H2800BFC28 +2800BFC48:lI108|H2800BFC38 +2800BFC58:lI116|H2800BFC48 +2800BFC68:lI100|H2800BFC58 +2800BFC90:t2:A5:local,A1D:dtls_server_session_cache_sup +2800BFCA8:t2:A2:ok,H2800BFCC0 +2800BFCC0:t2:H2800BFCF8,H2800BFD28 +2800BFCD8:t3:A8:strategy,A6:period,A9:intensity +2800BFCF8:Mf3:H2800BFCD8:A12:simple_one_for_one,I3600,I0 +2800BFD28:lH2800BFD70|N +2800BFD38:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules +2800BFD70:Mf6:H2800BFD38:A9:undefined,A9:temporary,I4000,H2800BFDC8,A6:worker,H2800BFDB8 +2800BFDB8:lA18:ssl_server_session_cache|N +2800BFDC8:t3:A18:ssl_server_session_cache,AA:start_link,N +2800BFDE8:lI108|N +2800BFDF8:lI114|H2800BFDE8 +2800BFE08:lI101|H2800BFDF8 +2800BFE18:lI46|H2800BFE08 +2800BFE28:lI112|H2800BFE18 +2800BFE38:lI117|H2800BFE28 +2800BFE48:lI115|H2800BFE38 +2800BFE58:lI95|H2800BFE48 +2800BFE68:lI101|H2800BFE58 +2800BFE78:lI104|H2800BFE68 +2800BFE88:lI99|H2800BFE78 +2800BFE98:lI97|H2800BFE88 +2800BFEA8:lI99|H2800BFE98 +2800BFEB8:lI95|H2800BFEA8 +2800BFEC8:lI110|H2800BFEB8 +2800BFED8:lI111|H2800BFEC8 +2800BFEE8:lI105|H2800BFED8 +2800BFEF8:lI115|H2800BFEE8 +2800BFF08:lI115|H2800BFEF8 +2800BFF18:lI101|H2800BFF08 +2800BFF28:lI115|H2800BFF18 +2800BFF38:lI95|H2800BFF28 +2800BFF48:lI114|H2800BFF38 +2800BFF58:lI101|H2800BFF48 +2800BFF68:lI118|H2800BFF58 +2800BFF78:lI114|H2800BFF68 +2800BFF88:lI101|H2800BFF78 +2800BFF98:lI115|H2800BFF88 +2800BFFA8:lI95|H2800BFF98 +2800BFFB8:lI115|H2800BFFA8 +2800BFFC8:lI108|H2800BFFB8 +2800BFFD8:lI116|H2800BFFC8 +2800BFFE8:lI100|H2800BFFD8 +2800CCFF0:E30:g3F3EmdsZWFtX290cF9leHRlcm5hbHcWY29udmVydF9zeXN0ZW1fbWVzc2FnZWEC +2800CD018:Yh27:QWN0b3IgZGlzY2FyZGluZyB1bmV4cGVjdGVkIG1lc3NhZ2U6IH5z +2800CD050:t2:A5:error,AC:init_timeout +2800CD068:lI108|N +2800CD078:lI114|H2800CD068 +2800CD088:lI101|H2800CD078 +2800CD098:lI46|H2800CD088 +2800CD0A8:lI114|H2800CD098 +2800CD0B8:lI111|H2800CD0A8 +2800CD0C8:lI116|H2800CD0B8 +2800CD0D8:lI99|H2800CD0C8 +2800CD0E8:lI97|H2800CD0D8 +2800CD0F8:lI64|H2800CD0E8 +2800CD108:lI112|H2800CD0F8 +2800CD118:lI116|H2800CD108 +2800CD128:lI111|H2800CD118 +2800CD138:lI64|H2800CD128 +2800CD148:lI109|H2800CD138 +2800CD158:lI97|H2800CD148 +2800CD168:lI101|H2800CD158 +2800CD178:lI108|H2800CD168 +2800CD188:lI103|H2800CD178 +2800CD198:lI108|N +2800CD1A8:lI114|H2800CD198 +2800CD1B8:lI101|H2800CD1A8 +2800CD1C8:lI46|H2800CD1B8 +2800CD1D8:lI114|H2800CD1C8 +2800CD1E8:lI111|H2800CD1D8 +2800CD1F8:lI116|H2800CD1E8 +2800CD208:lI99|H2800CD1F8 +2800CD218:lI97|H2800CD208 +2800CD228:lI64|H2800CD218 +2800CD238:lI112|H2800CD228 +2800CD248:lI116|H2800CD238 +2800CD258:lI111|H2800CD248 +2800CD268:lI64|H2800CD258 +2800CD278:lI109|H2800CD268 +2800CD288:lI97|H2800CD278 +2800CD298:lI101|H2800CD288 +2800CD2A8:lI108|H2800CD298 +2800CD2B8:lI103|H2800CD2A8 +2800CD2C8:lI47|H2800CD2B8 +2800CD2D8:lI115|H2800CD2C8 +2800CD2E8:lI116|H2800CD2D8 +2800CD2F8:lI99|H2800CD2E8 +2800CD308:lI97|H2800CD2F8 +2800CD318:lI102|H2800CD308 +2800CD328:lI101|H2800CD318 +2800CD338:lI116|H2800CD328 +2800CD348:lI114|H2800CD338 +2800CD358:lI97|H2800CD348 +2800CD368:lI95|H2800CD358 +2800CD378:lI109|H2800CD368 +2800CD388:lI97|H2800CD378 +2800CD398:lI101|H2800CD388 +2800CD3A8:lI108|H2800CD398 +2800CD3B8:lI103|H2800CD3A8 +2800CD3C8:lI95|H2800CD3B8 +2800CD3D8:lI47|H2800CD3C8 +2800CD3E8:lI112|H2800CD3D8 +2800CD3F8:lI116|H2800CD3E8 +2800CD408:lI111|H2800CD3F8 +2800CD418:lI95|H2800CD408 +2800CD428:lI109|H2800CD418 +2800CD438:lI97|H2800CD428 +2800CD448:lI101|H2800CD438 +2800CD458:lI108|H2800CD448 +2800CD468:lI103|H2800CD458 +2800CD478:lI47|H2800CD468 +2800CD488:lI103|H2800CD478 +2800CD498:lI110|H2800CD488 +2800CD4A8:lI97|H2800CD498 +2800CD4B8:lI108|H2800CD4A8 +2800CD4C8:lI114|H2800CD4B8 +2800CD4D8:lI101|H2800CD4C8 +2800CD4E8:lI47|H2800CD4D8 +2800CD4F8:lI118|H2800CD4E8 +2800CD508:lI101|H2800CD4F8 +2800CD518:lI100|H2800CD508 +2800CD528:lI47|H2800CD518 +2800CD538:lI100|H2800CD528 +2800CD548:lI108|H2800CD538 +2800CD558:lI105|H2800CD548 +2800CD568:lI117|H2800CD558 +2800CD578:lI98|H2800CD568 +2800CD588:lI47|H2800CD578 +2800CD598:lI51|H2800CD588 +2800CD5A8:lI50|H2800CD598 +2800CD5B8:lI48|H2800CD5A8 +2800CD5C8:lI50|H2800CD5B8 +2800CD5D8:lI99|H2800CD5C8 +2800CD5E8:lI111|H2800CD5D8 +2800CD5F8:lI97|H2800CD5E8 +2800CD608:lI47|H2800CD5F8 +2800CD618:lI101|H2800CD608 +2800CD628:lI100|H2800CD618 +2800CD638:lI111|H2800CD628 +2800CD648:lI67|H2800CD638 +2800CD658:lI102|H2800CD648 +2800CD668:lI79|H2800CD658 +2800CD678:lI116|H2800CD668 +2800CD688:lI110|H2800CD678 +2800CD698:lI101|H2800CD688 +2800CD6A8:lI118|H2800CD698 +2800CD6B8:lI100|H2800CD6A8 +2800CD6C8:lI65|H2800CD6B8 +2800CD6D8:lI47|H2800CD6C8 +2800CD6E8:lI101|H2800CD6D8 +2800CD6F8:lI100|H2800CD6E8 +2800CD708:lI111|H2800CD6F8 +2800CD718:lI67|H2800CD708 +2800CD728:lI32|H2800CD718 +2800CD738:lI83|H2800CD728 +2800CD748:lI86|H2800CD738 +2800CD758:lI47|H2800CD748 +2800CD768:lI110|H2800CD758 +2800CD778:lI111|H2800CD768 +2800CD788:lI115|H2800CD778 +2800CD798:lI108|H2800CD788 +2800CD7A8:lI114|H2800CD798 +2800CD7B8:lI97|H2800CD7A8 +2800CD7C8:lI99|H2800CD7B8 +2800CD7D8:lI115|H2800CD7C8 +2800CD7E8:lI97|H2800CD7D8 +2800CD7F8:lI108|H2800CD7E8 +2800CD808:lI111|H2800CD7F8 +2800CD818:lI104|H2800CD808 +2800CD828:lI99|H2800CD818 +2800CD838:lI105|H2800CD828 +2800CD848:lI110|H2800CD838 +2800CD858:lI47|H2800CD848 +2800CD868:lI115|H2800CD858 +2800CD878:lI114|H2800CD868 +2800CD888:lI101|H2800CD878 +2800CD898:lI115|H2800CD888 +2800CD8A8:lI85|H2800CD898 +2800CD8B8:lI47|H2800CD8A8 +2800CD8C8:E53:g3AAAABRAaydgc7BzWhFu0HOQjKx7YoAAAAAAAAAAHcPZ2xlYW1Ab3RwQGFjdG9yYQBiBWTsDlh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +2800CD8F0:E53:g3AAAABRAaydgc7BzWhFu0HOQjKx7YoAAAABAAAAAHcPZ2xlYW1Ab3RwQGFjdG9yYQFiBWTsDlh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +2800CD918:E53:g3AAAABRAaydgc7BzWhFu0HOQjKx7YoAAAACAAAAAHcPZ2xlYW1Ab3RwQGFjdG9yYQJiBWTsDlh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +2800CD940:E53:g3AAAABRAaydgc7BzWhFu0HOQjKx7YoAAAAFAAAAAHcPZ2xlYW1Ab3RwQGFjdG9yYQViBWTsDlh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +2800CD968:E53:g3AAAABRAaydgc7BzWhFu0HOQjKx7YoAAAAGAAAAAHcPZ2xlYW1Ab3RwQGFjdG9yYQZiBWTsDlh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA= +280093080:t2:H280093098,A5:async +280093098:t2:AA:logger_olp,A14:logger_std_h_default +28008F548:t2:AC:logger_proxy,H28008F560 +28008F560:t3:AC:logger_proxy,P<0.72.0>,H28008F580 +28008F580:t2:AA:logger_olp,AC:logger_proxy +2800930C8:t2:H2800930E0,I10 +2800930E0:t2:AD:logger_config,H2800930F8 +2800930F8:t2:A10:$handler_config$,A7:default +28001C1F8:t2:H28001C210,H28001C228 +28001C210:t2:AB:prim_socket,A7:options +28001C228:MhC2:10:H28001C2B8,H28001C2F8,H28001C338,H28001C380,H28001C3E0,H28001C410,H28001C460,H28001C4B0,H28001C4F8,H28001C550,H28001C598,H28001C5F0,H28001C658,H28001C6B8,H28001C710,H28001C740 +28001C2B8:Mn7:H28001C790,H28001C7A0,H28001C7B0,H28001C7C0,H28001C7D0,H28001C7E0,H28001C7F8 +28001C2F8:Mn7:H28001C808,H28001C830,H28001C840,H28001C850,H28001C860,H28001C878,H28001C888 +28001C338:Mn8:H28001C8A0,H28001C8B0,H28001C8D8,H28001C900,H28001C910,H28001C938,H28001C950,H28001C960 +28001C380:MnB:H28001C988,H28001C998,H28001C9A8,H28001C9C0,H28001C9E0,H28001CA08,H28001CA30,H28001CA48,H28001CA70,H28001CA80,H28001CA90 +28001C3E0:Mn5:H28001CAB8,H28001CAC8,H28001CAD8,H28001CB00,H28001CB20 +28001C410:Mn9:H28001CB38,H28001CB48,H28001CB58,H28001CB68,H28001CB90,H28001CBA8,H28001CBD0,H28001CBF8,H28001CC08 +28001C460:Mn9:H28001CC18,H28001CC30,H28001CC58,H28001CC70,H28001CC88,H28001CC98,H28001CCA8,H28001CCC0,H28001CCD0 +28001C4B0:Mn8:H28001CCF8,H28001CD08,H28001CD18,H28001CD28,H28001CD40,H28001CD50,H28001CD60,H28001CD78 +28001C4F8:MnA:H28001CD88,H28001CDA0,H28001CDC8,H28001CDD8,H28001CDE8,H28001CE00,H28001CE18,H28001CE28,H28001CE38,H28001CE60 +28001C550:Mn8:H28001CE88,H28001CEB0,H28001CED8,H28001CEF0,H28001CF18,H28001CF30,H28001CF40,H28001CF50 +28001C598:MnA:H28001CF60,H28001CF78,H28001CFA0,H28001CFB8,H28001CFD8,H28001D000,H28001D010,H28001D020,H28001D038,H28001D048 +28001C5F0:MnC:H28001D058,H28001D080,H28001D090,H28001D0A8,H28001D0C0,H28001D0E8,H28001D110,H28001D120,H28001D130,H28001D140,H28001D150,H28001D160 +28001C658:MnB:H28001D170,H28001D180,H28001D190,H28001D1A0,H28001D1B0,H28001D1C0,H28001D1E8,H28001D1F8,H28001D208,H28001D218,H28001D228 +28001C6B8:MnA:H28001D238,H28001D248,H28001D268,H28001D278,H28001D298,H28001D2A8,H28001D2B8,H28001D2D0,H28001D2E8,H28001D308 +28001C710:Mn5:H28001D318,H28001D330,H28001D348,H28001D370,H28001D388 +28001C740:Mn9:H28001D398,H28001D3A8,H28001D3B8,H28001D3E0,H28001D3F0,H28001D400,H28001D410,H28001D420,H28001D430 +28001C790:lH28001D440|A9:undefined +28001C7A0:lH28001D458|A9:undefined +28001C7B0:lH28001D470|A9:undefined +28001C7C0:lH28001D488|A9:undefined +28001C7D0:lH28001D4A0|A9:undefined +28001C7E0:Mn2:H28001D4B8,H28001D4C8 +28001C7F8:lH28001D4D8|A9:undefined +28001C808:lH28001D4F0|H28001C818 +28001C818:t2:A6:socket,I1024 +28001C830:lH28001D508|A9:undefined +28001C840:lH28001D520|A9:undefined +28001C850:lH28001D538|A9:undefined +28001C860:Mn2:H28001D550,H28001D560 +28001C878:lH28001D588|A9:undefined +28001C888:Mn2:H28001D5A0,H28001D5C8 +28001C8A0:lH28001D5F0|A9:undefined +28001C8B0:lH28001D608|H28001C8C0 +28001C8C0:t2:I0,I4 +28001C8D8:Mn4:H28001D620,H28001D648,H28001D658,H28001D668 +28001C900:lH28001D678|A9:undefined +28001C910:lH28001D690|H28001C920 +28001C920:t2:I0,I26 +28001C938:Mn2:H28001D6A8,H28001D6B8 +28001C950:lH28001D6C8|A9:undefined +28001C960:lH28001D6E0|H28001C970 +28001C970:t2:A6:socket,I4099 +28001C988:lH28001D6F8|A9:undefined +28001C998:lH28001D710|A9:undefined +28001C9A8:Mn2:H28001D728,H28001D738 +28001C9C0:Mn3:H28001D748,H28001D770,H28001D780 +28001C9E0:lH28001D790|H28001C9F0 +28001C9F0:t2:I0,I72 +28001CA08:lH28001D7A8|H28001CA18 +28001CA18:t2:I41,I36 +28001CA30:Mn2:H28001D7C0,H28001D7D0 +28001CA48:lH28001D7F8|H28001CA58 +28001CA58:t2:I41,I27 +28001CA70:lH28001D810|A9:undefined +28001CA80:lH28001D828|A9:undefined +28001CA90:lH28001D840|H28001CAA0 +28001CAA0:t2:I0,I70 +28001CAB8:lH28001D858|A9:undefined +28001CAC8:lH28001D870|A9:undefined +28001CAD8:lH28001D888|H28001CAE8 +28001CAE8:t2:I6,I2 +28001CB00:Mn3:H28001D8A0,H28001D8B0,H28001D8D8 +28001CB20:Mn2:H28001D8E8,H28001D8F8 +28001CB38:Mn1:H28001D908 +28001CB48:lH28001D920|A9:undefined +28001CB58:lH28001D938|A9:undefined +28001CB68:lH28001D950|H28001CB78 +28001CB78:t2:I0,I73 +28001CB90:Mn2:H28001D968,H28001D978 +28001CBA8:lH28001D9A0|H28001CBB8 +28001CBB8:t2:A6:socket,I256 +28001CBD0:lH28001D9B8|H28001CBE0 +28001CBE0:t2:I41,I10 +28001CBF8:lH28001D9D0|A9:undefined +28001CC08:lH28001D9E8|A9:undefined +28001CC18:Mn2:H28001DA00,H28001DA10 +28001CC30:lH28001DA20|H28001CC40 +28001CC40:t2:I0,I3 +28001CC58:Mn2:H28001DA38,H28001DA48 +28001CC70:Mn2:H28001DA58,H28001DA68 +28001CC88:lH28001DA78|A9:undefined +28001CC98:lH28001DA90|A9:undefined +28001CCA8:Mn2:H28001DAA8,H28001DAB8 +28001CCC0:lH28001DAC8|A9:undefined +28001CCD0:Mn4:H28001DAE0,H28001DAF0,H28001DB00,H28001DB10 +28001CCF8:lH28001DB20|A9:undefined +28001CD08:lH28001DB38|H28001CA58 +28001CD18:lH28001DB50|A9:undefined +28001CD28:Mn2:H28001DB68,H28001DB90 +28001CD40:lH28001DBA0|H28001CAA0 +28001CD50:lH28001DBB8|H28001CA18 +28001CD60:Mn2:H28001DBD0,H28001DBF8 +28001CD78:lH28001DC08|A9:undefined +28001CD88:Mn2:H28001DC20,H28001DC30 +28001CDA0:lH28001DC40|H28001CDB0 +28001CDB0:t2:A6:socket,I8 +28001CDC8:Mn1:H28001DC58 +28001CDD8:lH28001DC70|A9:undefined +28001CDE8:Mn2:H28001DC88,H28001DC98 +28001CE00:Mn2:H28001DCA8,H28001DCB8 +28001CE18:lH28001DCC8|A9:undefined +28001CE28:lH28001DCE0|A9:undefined +28001CE38:lH28001DCF8|H28001CE48 +28001CE48:t2:I0,I27 +28001CE60:lH28001DD10|H28001CE70 +28001CE70:t2:I0,I8 +28001CE88:Mn4:H28001DD28,H28001DD38,H28001DD48,H28001DD70 +28001CEB0:lH28001DD98|H28001CEC0 +28001CEC0:t2:I0,I9 +28001CED8:Mn2:H28001DDB0,H28001DDC0 +28001CEF0:lH28001DDE8|H28001CF00 +28001CF00:t2:I0,I24 +28001CF18:Mn2:H28001DE00,H28001DE10 +28001CF30:lH28001DE20|A9:undefined +28001CF40:lH28001DE38|H28001CB78 +28001CF50:lH28001DE50|A9:undefined +28001CF60:Mn2:H28001DE68,H28001DE78 +28001CF78:lH28001DE88|H28001CF88 +28001CF88:t2:A6:socket,I1 +28001CFA0:Mn2:H28001DEA0,H28001DEB0 +28001CFB8:Mn3:H28001DEC0,H28001DED8,H28001DEE8 +28001CFD8:lH28001DEF8|H28001CFE8 +28001CFE8:t2:I6,I1 +28001D000:lH28001DF10|A9:undefined +28001D010:lH28001DF28|A9:undefined +28001D020:Mn2:H28001DF40,H28001DF50 +28001D038:lH28001DF60|A9:undefined +28001D048:lH28001DF78|A9:undefined +28001D058:lH28001DF90|H28001D068 +28001D068:t2:I0,I13 +28001D080:lH28001DFA8|A9:undefined +28001D090:Mn2:H28001DFC0,H28001DFD0 +28001D0A8:Mn2:H28001DFF8,H28001E008 +28001D0C0:lH28001E018|H28001D0D0 +28001D0D0:t2:I0,I10 +28001D0E8:lH28001E030|H28001D0F8 +28001D0F8:t2:A6:socket,I16 +28001D110:lH28001E048|A9:undefined +28001D120:lH28001E060|A9:undefined +28001D130:lH28001E078|A9:undefined +28001D140:lH28001E090|A9:undefined +28001D150:lH28001E0A8|A9:undefined +28001D160:lH28001E0C0|A9:undefined +28001D170:lH28001E0D8|A9:undefined +28001D180:Mn1:H28001E0F0 +28001D190:lH28001E108|A9:undefined +28001D1A0:lH28001E120|A9:undefined +28001D1B0:lH28001E138|H28001D0D0 +28001D1C0:lH28001E150|H28001D1D0 +28001D1D0:t2:A6:socket,I2 +28001D1E8:lH28001E168|A9:undefined +28001D1F8:lH28001E180|A9:undefined +28001D208:lH28001E198|A9:undefined +28001D218:Mn1:H28001E1B0 +28001D228:lH28001E1C8|A9:undefined +28001D238:lH28001E1E0|A9:undefined +28001D248:Mn3:H28001E1F8,H28001E208,H28001E218 +28001D268:lH28001E228|A9:undefined +28001D278:Mn3:H28001E240,H28001E268,H28001E278 +28001D298:lH28001E288|A9:undefined +28001D2A8:lH28001E2A0|H28001CE70 +28001D2B8:Mn2:H28001E2B8,H28001E2C8 +28001D2D0:Mn2:H28001E2D8,H28001E2E8 +28001D2E8:Mn3:H28001E2F8,H28001E320,H28001E330 +28001D308:lH28001E340|A9:undefined +28001D318:Mn2:H28001E358,H28001E368 +28001D330:Mn2:H28001E378,H28001E388 +28001D348:lH28001E398|H28001D358 +28001D358:t2:A6:socket,I4104 +28001D370:Mn2:H28001E3B0,H28001E3C0 +28001D388:lH28001E3D0|A9:undefined +28001D398:lH28001E3E8|A9:undefined +28001D3A8:lH28001E400|A9:undefined +28001D3B8:lH28001E418|H28001D3C8 +28001D3C8:t2:A6:socket,I32 +28001D3E0:lH28001E430|A9:undefined +28001D3F0:lH28001E448|A9:undefined +28001D400:lH28001E460|A9:undefined +28001D410:lH28001E478|A9:undefined +28001D420:lH28001E490|A9:undefined +28001D430:lH28001E4A8|A9:undefined +28001D440:t2:A3:tcp,A8:keepidle +28001D458:t2:A3:TCP,A5:noopt +28001D470:t2:A4:ipv6,AA:pktoptions +28001D488:t2:A4:IPV6,AF:drop_membership +28001D4A0:t2:A3:tcp,AC:user_timeout +28001D4B8:lH28001E4C0|A9:undefined +28001D4C8:lH28001E4D8|A9:undefined +28001D4D8:t2:A4:IPV6,AB:use_min_mtu +28001D4F0:t2:A6:socket,A9:timestamp +28001D508:t2:A2:IP,AD:multicast_all +28001D520:t2:A3:TCP,A6:syncnt +28001D538:t2:A4:ipv6,AF:drop_membership +28001D550:lH28001E4F0|A9:undefined +28001D560:lH28001E508|H28001D570 +28001D570:t2:I0,I2 +28001D588:t2:A3:TCP,A7:keepcnt +28001D5A0:lH28001E520|H28001D5B0 +28001D5B0:t2:I0,I20 +28001D5C8:lH28001E538|H28001D5D8 +28001D5D8:t2:A6:socket,I512 +28001D5F0:t2:A2:IP,A8:dontfrag +28001D608:t2:A2:IP,A3:ttl +28001D620:lH28001E550|H28001D630 +28001D630:t2:I0,I12 +28001D648:lH28001E568|A9:undefined +28001D658:lH28001E580|H28001CBE0 +28001D668:lH28001E598|H28001C920 +28001D678:t2:A4:ipv6,AB:use_min_mtu +28001D690:t2:A2:IP,A7:pktinfo +28001D6A8:lH28001E5B0|A9:undefined +28001D6B8:lH28001E5C8|A9:undefined +28001D6C8:t2:A4:IPV6,A9:portrange +28001D6E0:t2:A6:socket,A8:sndlowat +28001D6F8:t2:A3:TCP,A8:keepidle +28001D710:t2:A2:ip,A3:mtu +28001D728:lH28001E5E0|A9:undefined +28001D738:lH28001E5F8|A9:undefined +28001D748:lH28001E610|H28001D758 +28001D758:t2:A6:socket,I4100 +28001D770:lH28001E628|A9:undefined +28001D780:lH28001E640|A9:undefined +28001D790:t2:A2:IP,AC:block_source +28001D7A8:t2:A4:IPV6,A6:tclass +28001D7C0:lH28001E658|A9:undefined +28001D7D0:lH28001E670|H28001D7E0 +28001D7E0:t2:A6:socket,I4098 +28001D7F8:t2:A4:ipv6,A6:v6only +28001D810:t2:A2:ip,A8:nodefrag +28001D828:t2:A3:tcp,A7:keepcnt +28001D840:t2:A2:ip,A15:add_source_membership +28001D858:t2:A4:ipv6,AB:leave_group +28001D870:t2:A2:ip,A6:minttl +28001D888:t2:A3:TCP,A6:maxseg +28001D8A0:lH28001E688|A9:undefined +28001D8B0:lH28001E6A0|H28001D8C0 +28001D8C0:t2:I41,I4 +28001D8D8:lH28001E6B8|A9:undefined +28001D8E8:lH28001E6D0|A9:undefined +28001D8F8:lH28001E6E8|H28001CE48 +28001D908:Mn2:H28001E700,H28001E710 +28001D920:t2:A6:socket,AB:sndbufforce +28001D938:t2:A4:IPV6,A5:faith +28001D950:t2:A2:ip,AE:unblock_source +28001D968:lH28001E720|A9:undefined +28001D978:lH28001E738|H28001D988 +28001D988:t2:I41,I35 +28001D9A0:t2:A6:socket,A9:oobinline +28001D9B8:t2:A4:ipv6,AE:multicast_hops +28001D9D0:t2:A6:socket,A8:passcred +28001D9E8:t2:A3:TCP,AA:congestion +28001DA00:lH28001E750|A9:undefined +28001DA10:lH28001E768|H28001C8C0 +28001DA20:t2:A2:ip,A3:tos +28001DA38:lH28001E780|A9:undefined +28001DA48:lH28001E798|A9:undefined +28001DA58:lH28001E7B0|A9:undefined +28001DA68:lH28001E7C8|A9:undefined +28001DA78:t2:A6:socket,A6:setfib +28001DA90:t2:A6:socket,A8:protocol +28001DAA8:lH28001E7E0|A9:undefined +28001DAB8:lH28001E7F8|H28001CFE8 +28001DAC8:t2:A6:socket,A8:rxq_ovfl +28001DAE0:lH28001E810|A9:undefined +28001DAF0:lH28001E828|A9:undefined +28001DB00:lH28001E840|A9:undefined +28001DB10:lH28001E858|A9:undefined +28001DB20:t2:A6:socket,AB:rcvbufforce +28001DB38:t2:A4:IPV6,A6:v6only +28001DB50:t2:A4:ipv6,AB:recvpktinfo +28001DB68:lH28001E870|H28001DB78 +28001DB78:t2:A6:socket,I4 +28001DB90:lH28001E888|H28001D630 +28001DBA0:t2:A2:IP,A15:add_source_membership +28001DBB8:t2:A4:ipv6,A6:tclass +28001DBD0:lH28001E8A0|H28001DBE0 +28001DBE0:t2:I0,I7 +28001DBF8:lH28001E8B8|A9:undefined +28001DC08:t2:A4:ipv6,A7:recverr +28001DC20:lH28001E8D0|H28001CC40 +28001DC30:lH28001E8E8|A9:undefined +28001DC40:t2:A6:socket,A9:keepalive +28001DC58:Mn2:H28001E900,H28001E910 +28001DC70:t2:A6:socket,AC:bindtodevice +28001DC88:lH28001E920|H28001DBE0 +28001DC98:lH28001E938|A9:undefined +28001DCA8:lH28001E950|A9:undefined +28001DCB8:lH28001E968|A9:undefined +28001DCC8:t2:A4:IPV6,A8:flowinfo +28001DCE0:t2:A4:IPV6,A8:hoplimit +28001DCF8:t2:A2:IP,A7:recvtos +28001DD10:t2:A2:IP,A7:retopts +28001DD28:lH28001E980|A9:undefined +28001DD38:lH28001E998|A9:undefined +28001DD48:lH28001E9B0|H28001DD58 +28001DD58:t2:I41,I11 +28001DD70:lH28001E9C8|H28001DD80 +28001DD80:t2:I0,I11 +28001DD98:t2:A2:IP,AC:multicast_if +28001DDB0:lH28001E9E0|H28001CAE8 +28001DDC0:lH28001E9F8|H28001DDD0 +28001DDD0:t2:I0,I71 +28001DDE8:t2:A2:ip,A7:recvttl +28001DE00:lH28001EA10|H28001D8C0 +28001DE10:lH28001EA28|H28001CF00 +28001DE20:t2:A4:ipv6,A8:checksum +28001DE38:t2:A2:IP,AE:unblock_source +28001DE50:t2:A4:IPV6,AC:mtu_discover +28001DE68:lH28001EA40|A9:undefined +28001DE78:lH28001EA58|A9:undefined +28001DE88:t2:A6:socket,A5:debug +28001DEA0:lH28001EA70|H28001D570 +28001DEB0:lH28001EA88|A9:undefined +28001DEC0:Mn2:H28001EAA0,H28001EAB0 +28001DED8:lH28001EAC0|A9:undefined +28001DEE8:lH28001EAD8|A9:undefined +28001DEF8:t2:A3:TCP,A7:nodelay +28001DF10:t2:A4:IPV6,AC:ipcomp_level +28001DF28:t2:A3:tcp,A4:cork +28001DF40:lH28001EAF0|A9:undefined +28001DF50:lH28001EB08|H28001DD80 +28001DF60:t2:A2:IP,A8:freebind +28001DF78:t2:A4:IPV6,AA:join_group +28001DF90:t2:A2:ip,AF:drop_membership +28001DFA8:t2:A3:tcp,A5:noopt +28001DFC0:lH28001EB20|H28001CEC0 +28001DFD0:lH28001EB38|H28001DFE0 +28001DFE0:t2:I41,I9 +28001DFF8:lH28001EB50|A9:undefined +28001E008:lH28001EB68|A9:undefined +28001E018:t2:A2:ip,AD:multicast_ttl +28001E030:t2:A6:socket,A9:dontroute +28001E048:t2:A4:ipv6,AC:ipcomp_level +28001E060:t2:A2:ip,AA:pktoptions +28001E078:t2:A4:IPV6,AC:recvhoplimit +28001E090:t2:A4:IPV6,AE:add_membership +28001E0A8:t2:A2:ip,AC:router_alert +28001E0C0:t2:A3:udp,A4:cork +28001E0D8:t2:A2:ip,A7:options +28001E0F0:Mn2:H28001EB80,H28001EBA8 +28001E108:t2:A4:IPV6,A7:authhdr +28001E120:t2:A2:IP,A8:msfilter +28001E138:t2:A2:IP,AD:multicast_ttl +28001E150:t2:A6:socket,AA:acceptconn +28001E168:t2:A4:ipv6,AA:join_group +28001E180:t2:A4:ipv6,AC:mtu_discover +28001E198:t2:A4:ipv6,AC:recvhoplimit +28001E1B0:Mn2:H28001EBB8,H28001EBC8 +28001E1C8:t2:A6:socket,A8:sndtimeo +28001E1E0:t2:A4:ipv6,A7:authhdr +28001E1F8:lH28001EBD8|A9:undefined +28001E208:lH28001EBF0|A9:undefined +28001E218:lH28001EC08|A9:undefined +28001E228:t2:A2:ip,A8:msfilter +28001E240:lH28001EC20|H28001E250 +28001E250:t2:I0,I5 +28001E268:lH28001EC38|A9:undefined +28001E278:lH28001EC50|H28001D988 +28001E288:t2:A3:tcp,A9:keepintvl +28001E2A0:t2:A2:ip,A7:retopts +28001E2B8:lH28001EC68|A9:undefined +28001E2C8:lH28001EC80|A9:undefined +28001E2D8:lH28001EC98|A9:undefined +28001E2E8:lH28001ECB0|A9:undefined +28001E2F8:lH28001ECC8|H28001E308 +28001E308:t2:A6:socket,I128 +28001E320:lH28001ECE0|H28001C9F0 +28001E330:lH28001ECF8|H28001D068 +28001E340:t2:A4:IPV6,AA:auth_level +28001E358:lH28001ED10|A9:undefined +28001E368:lH28001ED28|A9:undefined +28001E378:lH28001ED40|H28001DD58 +28001E388:lH28001ED58|A9:undefined +28001E398:t2:A6:socket,A4:type +28001E3B0:lH28001ED70|A9:undefined +28001E3C0:lH28001ED88|A9:undefined +28001E3D0:t2:A3:TCP,A9:keepintvl +28001E3E8:t2:A2:IP,AC:router_alert +28001E400:t2:A2:IP,A3:mtu +28001E418:t2:A6:socket,A9:broadcast +28001E430:t2:A6:socket,A4:mark +28001E448:t2:A4:ipv6,A5:rthdr +28001E460:t2:A2:IP,AB:sendsrcaddr +28001E478:t2:A4:ipv6,A9:portrange +28001E490:t2:A6:socket,A6:domain +28001E4A8:t2:A2:ip,AB:transparent +28001E4C0:t2:A4:ipv6,AE:add_membership +28001E4D8:t2:A3:TCP,A4:cork +28001E4F0:t2:A4:ipv6,A5:faith +28001E508:t2:A2:ip,A7:hdrincl +28001E520:t2:A2:IP,A6:recvif +28001E538:t2:A6:socket,A9:reuseport +28001E550:t2:A2:ip,AE:add_membership +28001E568:t2:A6:socket,A8:priority +28001E580:t2:A4:IPV6,AE:multicast_hops +28001E598:t2:A2:ip,A7:pktinfo +28001E5B0:t2:A2:ip,AB:sendsrcaddr +28001E5C8:t2:A4:IPV6,AC:router_alert +28001E5E0:t2:A2:IP,A6:minttl +28001E5F8:t2:A4:IPV6,A8:checksum +28001E610:t2:A6:socket,A8:rcvlowat +28001E628:t2:A3:tcp,A4:info +28001E640:t2:A3:tcp,A6:md5sig +28001E658:t2:A4:ipv6,A7:hopopts +28001E670:t2:A6:socket,A6:rcvbuf +28001E688:t2:A4:IPV6,A3:mtu +28001E6A0:t2:A4:IPV6,AC:unicast_hops +28001E6B8:t2:A4:ipv6,A8:hoplimit +28001E6D0:t2:A2:IP,AF:recvorigdstaddr +28001E6E8:t2:A2:ip,A7:recvtos +28001E700:lH28001EDA0|A9:undefined +28001E710:lH28001EDB8|A9:undefined +28001E720:t2:A2:ip,AD:multicast_all +28001E738:t2:A4:ipv6,AA:recvtclass +28001E750:t2:A2:ip,A8:freebind +28001E768:t2:A2:ip,A3:ttl +28001E780:t2:A2:IP,A7:options +28001E798:t2:A4:IPV6,A5:rthdr +28001E7B0:t2:A4:ipv6,A8:addrform +28001E7C8:t2:A6:socket,A8:rcvtimeo +28001E7E0:t2:A2:ip,AF:recvorigdstaddr +28001E7F8:t2:A3:tcp,A7:nodelay +28001E810:t2:A3:TCP,A6:nopush +28001E828:t2:A6:socket,A9:busy_poll +28001E840:t2:A2:IP,AA:pktoptions +28001E858:t2:A4:IPV6,AF:esp_trans_level +28001E870:t2:A6:socket,A9:reuseaddr +28001E888:t2:A2:IP,AE:add_membership +28001E8A0:t2:A2:ip,AB:recvdstaddr +28001E8B8:t2:A2:ip,A8:dontfrag +28001E8D0:t2:A2:IP,A3:tos +28001E8E8:t2:A4:ipv6,AF:esp_trans_level +28001E900:lH28001EDD0|H28001E250 +28001E910:lH28001EDE8|A9:undefined +28001E920:t2:A2:IP,AB:recvdstaddr +28001E938:t2:A2:IP,A7:recverr +28001E950:t2:A2:IP,A8:nodefrag +28001E968:t2:A3:UDP,A4:cork +28001E980:t2:A4:IPV6,A7:hopopts +28001E998:t2:A4:IPV6,AB:recvpktinfo +28001E9B0:t2:A4:IPV6,AE:multicast_loop +28001E9C8:t2:A2:IP,AE:multicast_loop +28001E9E0:t2:A3:tcp,A6:maxseg +28001E9F8:t2:A2:IP,A16:drop_source_membership +28001EA10:t2:A4:ipv6,AC:unicast_hops +28001EA28:t2:A2:IP,A7:recvttl +28001EA40:t2:A4:IPV6,A8:addrform +28001EA58:t2:A4:IPV6,A7:dstopts +28001EA70:t2:A2:IP,A7:hdrincl +28001EA88:t2:A3:tcp,A6:syncnt +28001EAA0:lH28001EE00|H28001DFE0 +28001EAB0:lH28001EE18|H28001DDD0 +28001EAC0:t2:A4:ipv6,A8:flowinfo +28001EAD8:t2:A2:ip,AC:mtu_discover +28001EAF0:t2:A6:socket,A8:peek_off +28001EB08:t2:A2:ip,AE:multicast_loop +28001EB20:t2:A2:ip,AC:multicast_if +28001EB38:t2:A4:ipv6,AC:multicast_if +28001EB50:t2:A4:ipv6,AA:auth_level +28001EB68:t2:A4:IPV6,A11:esp_network_level +28001EB80:lH28001EE30|H28001EB90 +28001EB90:t2:A6:socket,I4097 +28001EBA8:lH28001EE48|H28001D5B0 +28001EBB8:lH28001EE60|A9:undefined +28001EBC8:lH28001EE78|A9:undefined +28001EBD8:t2:A6:socket,A8:peercred +28001EBF0:t2:A3:TCP,AC:user_timeout +28001EC08:t2:A4:ipv6,A7:dstopts +28001EC20:t2:A2:IP,A8:recvopts +28001EC38:t2:A4:IPV6,A7:recverr +28001EC50:t2:A4:IPV6,AA:recvtclass +28001EC68:t2:A2:IP,AC:mtu_discover +28001EC80:t2:A3:tcp,A6:nopush +28001EC98:t2:A2:ip,A7:recverr +28001ECB0:t2:A3:TCP,A4:info +28001ECC8:t2:A6:socket,A6:linger +28001ECE0:t2:A2:ip,AC:block_source +28001ECF8:t2:A2:IP,AF:drop_membership +28001ED10:t2:A2:IP,AB:transparent +28001ED28:t2:A4:IPV6,AB:leave_group +28001ED40:t2:A4:ipv6,AE:multicast_loop +28001ED58:t2:A3:tcp,AA:congestion +28001ED70:t2:A4:IPV6,AA:pktoptions +28001ED88:t2:A4:ipv6,A11:esp_network_level +28001EDA0:t2:A4:ipv6,AC:router_alert +28001EDB8:t2:A3:TCP,A6:md5sig +28001EDD0:t2:A2:ip,A8:recvopts +28001EDE8:t2:A4:ipv6,A3:mtu +28001EE00:t2:A4:IPV6,AC:multicast_if +28001EE18:t2:A2:ip,A16:drop_source_membership +28001EE30:t2:A6:socket,A6:sndbuf +28001EE48:t2:A2:ip,A6:recvif +28001EE60:t2:A6:socket,A5:error +28001EE78:t2:A6:socket,AC:acceptfilter +280093128:t2:H280093140,A9:undefined +280093140:t2:AD:logger_config,H280093158 +280093158:t2:A10:$handler_config$,A6:simple +28007FBD8:t2:AC:global_group,H28007FBF0 +28007FBF0:t9:A5:gconf,A9:undefined,AD:nonode@nohost,N,A6:normal,N,A3:all,N,A7:no_conf +280017DC0:t2:H280017DD8,H280017DF0 +280017DD8:t2:AB:prim_socket,A9:protocols +280017DF0:Mh1A6:10:H280017E80,H280017EF0,H280017F68,H280017FD0,H280018040,H2800180A8,H280018120,H280018188,H2800181D8,H280018248,H2800182C0,H280018330,H2800183A0,H280018418,H280018480,H2800184F0 +280017E80:MnD:H280018568,H280018588,H2800185A0,H2800185D0,H2800185F0,H280018608,H280018620,H280018638,H280018648,H280018658,H280018668,H280018680,H2800186A0 +280017EF0:MnE:H2800186B8,H2800186D0,H2800186E8,H280018710,H280018720,H280018750,H280018760,H280018778,H280018798,H2800187A8,H2800187B8,H2800187D8,H2800187F0,H280018800 +280017F68:MnC:H280018810,H280018820,H280018840,H280018868,H280018880,H280018890,H2800188A8,H2800188C0,H2800188E0,H2800188F8,H280018920,H280018930 +280017FD0:MnD:H280018948,H280018958,H280018978,H280018998,H2800189B0,H2800189D0,H2800189E8,H2800189F8,H280018A10,H280018A30,H280018A40,H280018A50,H280018A70 +280018040:MnC:H280018A88,H280018AA0,H280018AB8,H280018AD8,H280018AE8,H280018AF8,H280018B18,H280018B30,H280018B40,H280018B70,H280018BA0,H280018BB8 +2800180A8:MnE:H280018BE0,H280018BF8,H280018C20,H280018C48,H280018C70,H280018C80,H280018C90,H280018CA8,H280018CB8,H280018CD0,H280018CE8,H280018D10,H280018D30,H280018D48 +280018120:MnC:H280018D68,H280018D88,H280018DA8,H280018DB8,H280018DD8,H280018DE8,H280018DF8,H280018E08,H280018E20,H280018E38,H280018E68,H280018E80 +280018188:Mn9:H280018EB0,H280018EC0,H280018ED8,H280018EF0,H280018F00,H280018F10,H280018F30,H280018F48,H280018F60 +2800181D8:MnD:H280018F88,H280018F98,H280018FA8,H280018FC0,H280018FE0,H280019008,H280019038,H280019048,H280019060,H280019078,H280019088,H280019098,H2800190A8 +280018248:MnE:H2800190B8,H2800190D8,H2800190E8,H2800190F8,H280019108,H280019128,H280019138,H280019150,H280019160,H280019178,H280019198,H2800191A8,H2800191B8,H2800191D0 +2800182C0:MnD:H2800191E0,H2800191F8,H280019220,H280019250,H280019268,H280019290,H2800192A8,H2800192C8,H2800192D8,H2800192E8,H2800192F8,H280019310,H280019328 +280018330:MnD:H280019338,H280019350,H280019380,H280019390,H2800193C0,H2800193E0,H2800193F8,H280019418,H280019428,H280019448,H280019468,H280019480,H280019498 +2800183A0:MnE:H2800194C8,H2800194E0,H280019500,H280019518,H280019530,H280019548,H280019558,H280019578,H2800195A8,H2800195E8,H280019600,H280019618,H280019630,H280019650 +280018418:MnC:H280019660,H280019678,H280019688,H2800196B8,H2800196D0,H2800196E0,H2800196F8,H280019710,H280019730,H280019750,H280019760,H280019770 +280018480:MnD:H280019780,H280019798,H2800197A8,H2800197C8,H2800197E8,H280019818,H280019830,H280019860,H280019870,H280019880,H2800198B0,H2800198E0,H280019910 +2800184F0:MnE:H280019930,H280019950,H280019968,H280019980,H280019990,H2800199A8,H2800199C0,H2800199D0,H2800199F8,H280019A10,H280019A30,H280019A50,H280019A60,H280019A80 +280018568:Mn3:H280019A90,H280019AA0,H280019AD0 +280018588:Mn2:H280019AE0,H280019AF0 +2800185A0:lI50|H2800185B0 +2800185B0:lA3:esp|H2800185C0 +2800185C0:lA3:ESP|N +2800185D0:Mn3:H280019B00,H280019B30,H280019B40 +2800185F0:Mn2:H280019B50,H280019B80 +280018608:Mn2:H280019BB0,H280019BC0 +280018620:Mn2:H280019BD0,H280019BE0 +280018638:lA3:mux|I18 +280018648:lA3:pvp|I75 +280018658:lA3:rvd|I66 +280018668:Mn2:H280019BF0,H280019C20 +280018680:Mn3:H280019C30,H280019C40,H280019C50 +2800186A0:Mn2:H280019C80,H280019C90 +2800186B8:Mn2:H280019CA0,H280019CB0 +2800186D0:Mn2:H280019CC0,H280019CF0 +2800186E8:Mn4:H280019D00,H280019D10,H280019D20,H280019D30 +280018710:lA5:manet|I138 +280018720:lI64|H280018730 +280018730:lA9:sat-expak|H280018740 +280018740:lA9:SAT-EXPAK|N +280018750:lA6:MOBILE|I55 +280018760:Mn2:H280019D60,H280019D70 +280018778:Mn3:H280019DA0,H280019DB0,H280019DC0 +280018798:lA4:IGMP|I2 +2800187A8:lAB:SECURE-VMTP|I82 +2800187B8:Mn3:H280019DD0,H280019E00,H280019E10 +2800187D8:Mn2:H280019E40,H280019E50 +2800187F0:lA2:ah|I51 +280018800:lAA:br-sat-mon|I76 +280018810:lA4:IDPR|I35 +280018820:Mn3:H280019E60,H280019E70,H280019EA0 +280018840:Mn4:H280019EB0,H280019EC0,H280019EF0,H280019F00 +280018868:Mn2:H280019F30,H280019F40 +280018880:Mn1:H280019F50 +280018890:Mn2:H280019F68,H280019F78 +2800188A8:Mn2:H280019FA8,H280019FB8 +2800188C0:Mn3:H280019FE8,H28001A018,H28001A028 +2800188E0:Mn2:H28001A058,H28001A088 +2800188F8:Mn4:H28001A098,H28001A0A8,H28001A0B8,H28001A0C8 +280018920:lA3:hmp|I20 +280018930:Mn2:H28001A0E0,H28001A110 +280018948:Mn1:H28001A140 +280018958:Mn3:H28001A150,H28001A180,H28001A190 +280018978:Mn3:H28001A1C0,H28001A1D0,H28001A200 +280018998:Mn2:H28001A230,H28001A240 +2800189B0:Mn3:H28001A250,H28001A280,H28001A290 +2800189D0:Mn2:H28001A2A0,H28001A2B8 +2800189E8:lA3:TCF|I87 +2800189F8:Mn2:H28001A2C8,H28001A2F8 +280018A10:Mn3:H28001A328,H28001A338,H28001A348 +280018A30:lA3:xtp|I36 +280018A40:lA5:ENCAP|I98 +280018A50:Mn3:H28001A360,H28001A370,H28001A388 +280018A70:Mn2:H28001A3B8,H28001A3C8 +280018A88:Mn2:H28001A3D8,H28001A408 +280018AA0:Mn2:H28001A438,H28001A468 +280018AB8:Mn3:H28001A498,H28001A4A8,H28001A4D8 +280018AD8:lA3:BNA|I49 +280018AE8:lA3:TCP|I6 +280018AF8:Mn3:H28001A4E8,H28001A518,H28001A528 +280018B18:Mn2:H28001A538,H28001A548 +280018B30:lA7:MFE-NSP|I31 +280018B40:lI106|H280018B50 +280018B50:lA3:qnx|H280018B60 +280018B60:lA3:QNX|N +280018B70:lI9|H280018B80 +280018B80:lA3:igp|H280018B90 +280018B90:lA3:IGP|N +280018BA0:Mn2:H28001A558,H28001A588 +280018BB8:Mn4:H28001A598,H28001A5A8,H28001A5D8,H28001A5E8 +280018BE0:Mn2:H28001A5F8,H28001A628 +280018BF8:Mn4:H28001A638,H28001A648,H28001A658,H28001A668 +280018C20:Mn4:H28001A678,H28001A688,H28001A6B8,H28001A6C8 +280018C48:Mn4:H28001A6D8,H28001A6E8,H28001A6F8,H28001A728 +280018C70:lA4:vmtp|I81 +280018C80:lA9:idpr-cmtp|I38 +280018C90:Mn2:H28001A738,H28001A768 +280018CA8:lA7:iso-tp4|I29 +280018CB8:Mn2:H28001A798,H28001A7A8 +280018CD0:Mn2:H28001A7B8,H28001A7C8 +280018CE8:Mn4:H28001A7F8,H28001A808,H28001A820,H28001A830 +280018D10:Mn3:H28001A860,H28001A870,H28001A8A0 +280018D30:Mn2:H28001A8D0,H28001A8E0 +280018D48:Mn3:H28001A910,H28001A920,H28001A930 +280018D68:Mn3:H28001A940,H28001A958,H28001A970 +280018D88:Mn3:H28001A980,H28001A990,H28001A9A0 +280018DA8:lA3:UTI|I120 +280018DB8:Mn3:H28001A9B8,H28001A9C8,H28001A9F8 +280018DD8:lAB:compaq-peer|I110 +280018DE8:lA9:IPV6-ICMP|I58 +280018DF8:lA5:chaos|I16 +280018E08:Mn2:H28001AA08,H28001AA38 +280018E20:Mn2:H28001AA48,H28001AA78 +280018E38:lI142|H280018E48 +280018E48:lA4:rohc|H280018E58 +280018E58:lA4:ROHC|N +280018E68:Mn2:H28001AAA8,H28001AAD8 +280018E80:lI56|H280018E90 +280018E90:lA4:tlsp|H280018EA0 +280018EA0:lA4:TLSP|N +280018EB0:lA3:tcp|I6 +280018EC0:Mn2:H28001AB08,H28001AB18 +280018ED8:Mn2:H28001AB28,H28001AB38 +280018EF0:lAB:Compaq-Peer|I110 +280018F00:lAF:Mobility-Header|I135 +280018F10:Mn3:H28001AB48,H28001AB58,H28001AB68 +280018F30:Mn2:H28001AB78,H28001AB88 +280018F48:Mn2:H28001AB98,H28001ABA8 +280018F60:Mn4:H28001ABB8,H28001ABE8,H28001AC00,H28001AC30 +280018F88:Mn1:H28001AC40 +280018F98:lA4:IRTP|I28 +280018FA8:Mn2:H28001AC58,H28001AC68 +280018FC0:Mn3:H28001AC78,H28001AC88,H28001AC98 +280018FE0:Mn4:H28001ACA8,H28001ACD8,H28001ACE8,H28001ACF8 +280019008:lI45|H280019018 +280019018:lA4:idrp|H280019028 +280019028:lA4:IDRP|N +280019038:lA4:ROHC|I142 +280019048:Mn2:H28001AD08,H28001AD18 +280019060:Mn2:H28001AD48,H28001AD58 +280019078:Mn1:H28001AD70 +280019088:lA3:RVD|I66 +280019098:lA7:mfe-nsp|I31 +2800190A8:lA4:PNNI|I102 +2800190B8:Mn3:H28001AD88,H28001AD98,H28001ADA8 +2800190D8:lA4:tlsp|I56 +2800190E8:lA3:CBT|I7 +2800190F8:Mn1:H28001ADB8 +280019108:Mn3:H28001ADD0,H28001ADE0,H28001AE10 +280019128:lA3:DGP|I86 +280019138:Mn2:H28001AE20,H28001AE30 +280019150:lA6:ipcomp|I108 +280019160:Mn2:H28001AE60,H28001AE70 +280019178:Mn3:H28001AE88,H28001AE98,H28001AEC8 +280019198:lA4:sdrp|I42 +2800191A8:Mn1:H28001AEF8 +2800191B8:Mn2:H28001AF10,H28001AF20 +2800191D0:lA3:mtp|I92 +2800191E0:Mn2:H28001AF50,H28001AF80 +2800191F8:Mn4:H28001AF90,H28001AFC0,H28001AFD8,H28001B008 +280019220:lI2|H280019230 +280019230:lA4:igmp|H280019240 +280019240:lA4:IGMP|N +280019250:Mn2:H28001B018,H28001B030 +280019268:Mn4:H28001B048,H28001B078,H28001B0A8,H28001B0B8 +280019290:Mn2:H28001B0E8,H28001B0F8 +2800192A8:Mn3:H28001B108,H28001B118,H28001B128 +2800192C8:lA6:I-NLSP|I52 +2800192D8:lA4:VISA|I70 +2800192E8:lA4:larp|I91 +2800192F8:Mn2:H28001B140,H28001B170 +280019310:Mn2:H28001B1A0,H28001B1B0 +280019328:lA4:IPV6|I41 +280019338:Mn2:H28001B1E0,H28001B210 +280019350:lI32|H280019360 +280019360:lA9:merit-inp|H280019370 +280019370:lA9:MERIT-INP|N +280019380:lA4:idrp|I45 +280019390:Mn5:H28001B220,H28001B230,H28001B240,H28001B250,H28001B260 +2800193C0:Mn3:H28001B270,H28001B280,H28001B2B0 +2800193E0:Mn2:H28001B2F0,H28001B320 +2800193F8:Mn3:H28001B330,H28001B340,H28001B370 +280019418:lA7:bbn-rcc|I10 +280019428:Mn3:H28001B380,H28001B390,H28001B3C0 +280019448:Mn3:H28001B3F0,H28001B400,H28001B430 +280019468:Mn2:H28001B440,H28001B450 +280019480:Mn2:H28001B460,H28001B490 +280019498:lI30|H2800194A8 +2800194A8:lA6:netblt|H2800194B8 +2800194B8:lA6:NETBLT|N +2800194C8:Mn2:H28001B4A0,H28001B4D0 +2800194E0:Mn3:H28001B500,H28001B510,H28001B540 +280019500:Mn2:H28001B550,H28001B560 +280019518:Mn2:H28001B570,H28001B580 +280019530:Mn2:H28001B5B0,H28001B5C0 +280019548:lA9:MERIT-INP|I32 +280019558:Mn3:H28001B5D0,H28001B5E0,H28001B610 +280019578:lI6|H280019588 +280019588:lA3:tcp|H280019598 +280019598:lA3:TCP|N +2800195A8:lI112|H2800195B8 +2800195B8:lA4:carp|H2800195C8 +2800195C8:lA4:vrrp|H2800195D8 +2800195D8:lA4:CARP|N +2800195E8:Mn2:H28001B620,H28001B650 +280019600:Mn2:H28001B680,H28001B6B0 +280019618:Mn2:H28001B6C0,H28001B6D0 +280019630:Mn3:H28001B6E0,H28001B710,H28001B720 +280019650:lA5:EMCON|I14 +280019660:Mn2:H28001B750,H28001B760 +280019678:lA6:leaf-1|I25 +280019688:lI116|H280019698 +280019698:lA3:ddx|H2800196A8 +2800196A8:lA3:DDX|N +2800196B8:Mn2:H28001B770,H28001B7A0 +2800196D0:lA3:QNX|I106 +2800196E0:Mn2:H28001B7B0,H28001B7E0 +2800196F8:Mn2:H28001B7F0,H28001B820 +280019710:Mn3:H28001B830,H28001B840,H28001B850 +280019730:Mn3:H28001B860,H28001B890,H28001B8C0 +280019750:lA7:OSPFIGP|I89 +280019760:lA4:skip|I57 +280019770:Mn1:H28001B8D0 +280019780:Mn2:H28001B8E8,H28001B8F8 +280019798:lA3:smp|I121 +2800197A8:Mn3:H28001B908,H28001B938,H28001B968 +2800197C8:Mn3:H28001B978,H28001B990,H28001B9A8 +2800197E8:lI52|H2800197F8 +2800197F8:lA6:i-nlsp|H280019808 +280019808:lA6:I-NLSP|N +280019818:Mn2:H28001B9B8,H28001B9E8 +280019830:lI49|H280019840 +280019840:lA3:bna|H280019850 +280019850:lA3:BNA|N +280019860:lA3:ddx|I116 +280019870:lAA:BR-SAT-MON|I76 +280019880:lI38|H280019890 +280019890:lA9:idpr-cmtp|H2800198A0 +2800198A0:lA9:IDPR-CMTP|N +2800198B0:lI134|H2800198C0 +2800198C0:lAF:rsvp-e2e-ignore|H2800198D0 +2800198D0:lAF:RSVP-E2E-IGNORE|N +2800198E0:lI118|H2800198F0 +2800198F0:lA3:stp|H280019900 +280019900:lA3:STP|N +280019910:Mn3:H28001B9F8,H28001BA08,H28001BA18 +280019930:Mn3:H28001BA48,H28001BA58,H28001BA88 +280019950:Mn2:H28001BAB8,H28001BAC8 +280019968:Mn2:H28001BAF8,H28001BB08 +280019980:lA5:VINES|I83 +280019990:Mn2:H28001BB18,H28001BB48 +2800199A8:Mn2:H28001BB58,H28001BB88 +2800199C0:lA5:swipe|I53 +2800199D0:Mn4:H28001BBB8,H28001BBE8,H28001BBF8,H28001BC28 +2800199F8:Mn2:H28001BC58,H28001BC68 +280019A10:Mn3:H28001BC78,H28001BC88,H28001BC98 +280019A30:Mn3:H28001BCA8,H28001BCB8,H28001BCC8 +280019A50:lA5:ax.25|I93 +280019A60:Mn3:H28001BCD8,H28001BCE8,H28001BCF8 +280019A80:lAA:ipv6-nonxt|I59 +280019A90:lA3:pup|I12 +280019AA0:lI65|H280019AB0 +280019AB0:lA9:kryptolan|H280019AC0 +280019AC0:lA9:KRYPTOLAN|N +280019AD0:lA5:crudp|I127 +280019AE0:lA3:MUX|I18 +280019AF0:lA4:GMTP|I100 +280019B00:lI36|H280019B10 +280019B10:lA3:xtp|H280019B20 +280019B20:lA3:XTP|N +280019B30:lA4:crtp|I126 +280019B40:lA3:gre|I47 +280019B50:lI137|H280019B60 +280019B60:lAA:mpls-in-ip|H280019B70 +280019B70:lAA:MPLS-IN-IP|N +280019B80:lI4|H280019B90 +280019B90:lA7:ipencap|H280019BA0 +280019BA0:lA8:IP-ENCAP|N +280019BB0:lA7:xns-idp|I22 +280019BC0:lA3:ddp|I37 +280019BD0:lA9:IPV6-OPTS|I60 +280019BE0:lA5:AX.25|I93 +280019BF0:lI126|H280019C00 +280019C00:lA4:crtp|H280019C10 +280019C10:lA4:CRTP|N +280019C20:lA4:pnni|I102 +280019C30:lA7:ipencap|I4 +280019C40:lA4:gmtp|I100 +280019C50:lI136|H280019C60 +280019C60:lA7:udplite|H280019C70 +280019C70:lA7:UDPLite|N +280019C80:lAA:nsfnet-igp|I85 +280019C90:lA3:egp|I8 +280019CA0:lA3:SPS|I130 +280019CB0:lA5:CRUDP|I127 +280019CC0:lI25|H280019CD0 +280019CD0:lA6:leaf-1|H280019CE0 +280019CE0:lA6:LEAF-1|N +280019CF0:lA3:udp|I17 +280019D00:lA2:IL|I40 +280019D10:lA4:RSVP|I46 +280019D20:lA4:MICP|I95 +280019D30:lI39|H280019D40 +280019D40:lA4:tp++|H280019D50 +280019D50:lA4:TP++|N +280019D60:lA3:PGM|I113 +280019D70:lI109|H280019D80 +280019D80:lA3:snp|H280019D90 +280019D90:lA3:SNP|N +280019DA0:lA4:cftp|I62 +280019DB0:lA7:trunk-1|I23 +280019DC0:lA3:stp|I118 +280019DD0:lI95|H280019DE0 +280019DE0:lA4:micp|H280019DF0 +280019DF0:lA4:MICP|N +280019E00:lA4:irtp|I28 +280019E10:lI101|H280019E20 +280019E20:lA4:ifmp|H280019E30 +280019E30:lA4:IFMP|N +280019E40:lA3:uti|I120 +280019E50:lA4:SCTP|I132 +280019E60:lA4:fire|I125 +280019E70:lI130|H280019E80 +280019E80:lA3:sps|H280019E90 +280019E90:lA3:SPS|N +280019EA0:lA4:IPLT|I129 +280019EB0:lA9:ipv6-frag|I44 +280019EC0:lI131|H280019ED0 +280019ED0:lA4:pipe|H280019EE0 +280019EE0:lA4:PIPE|N +280019EF0:lA6:LEAF-1|I25 +280019F00:lI62|H280019F10 +280019F10:lA4:cftp|H280019F20 +280019F20:lA4:CFTP|N +280019F30:lA4:rsvp|I46 +280019F40:lA4:IDRP|I45 +280019F50:Mn2:H28001BD08,H28001BD38 +280019F68:lA2:ip|I0 +280019F78:lI141|H280019F88 +280019F88:lA4:wesp|H280019F98 +280019F98:lA4:WESP|N +280019FA8:lA4:IPIP|I94 +280019FB8:lI132|H280019FC8 +280019FC8:lA4:sctp|H280019FD8 +280019FD8:lA4:SCTP|N +280019FE8:lI43|H280019FF8 +280019FF8:lAA:ipv6-route|H28001A008 +28001A008:lAA:IPV6-ROUTE|N +28001A018:lA6:mobile|I55 +28001A028:lI105|H28001A038 +28001A038:lA4:scps|H28001A048 +28001A048:lA4:SCPS|N +28001A058:lI59|H28001A068 +28001A068:lAA:ipv6-nonxt|H28001A078 +28001A078:lAA:IPV6-NONXT|N +28001A088:lA3:A/N|I107 +28001A098:lA3:igp|I9 +28001A0A8:lA4:CFTP|I62 +28001A0B8:lA7:trunk-2|I24 +28001A0C8:Mn2:H28001BD48,H28001BD78 +28001A0E0:lI87|H28001A0F0 +28001A0F0:lA3:tcf|H28001A100 +28001A100:lA3:TCF|N +28001A110:lI51|H28001A120 +28001A120:lA2:ah|H28001A130 +28001A130:lA2:AH|N +28001A140:Mn1:H28001BDA8 +28001A150:lI110|H28001A160 +28001A160:lAB:compaq-peer|H28001A170 +28001A170:lAB:Compaq-Peer|N +28001A180:lA4:CARP|I112 +28001A190:lI1|H28001A1A0 +28001A1A0:lA4:icmp|H28001A1B0 +28001A1B0:lA4:ICMP|N +28001A1C0:lA3:HMP|I20 +28001A1D0:lI107|H28001A1E0 +28001A1E0:lA3:a/n|H28001A1F0 +28001A1F0:lA3:A/N|N +28001A200:lI128|H28001A210 +28001A210:lA8:sscopmce|H28001A220 +28001A220:lA8:SSCOPMCE|N +28001A230:lA6:scc-sp|I96 +28001A240:lA8:SSCOPMCE|I128 +28001A250:lI70|H28001A260 +28001A260:lA4:visa|H28001A270 +28001A270:lA4:VISA|N +28001A280:lA4:icmp|I1 +28001A290:lA6:iso-ip|I80 +28001A2A0:Mn2:H28001BDC0,H28001BDF0 +28001A2B8:lA3:XTP|I36 +28001A2C8:lI46|H28001A2D8 +28001A2D8:lA4:rsvp|H28001A2E8 +28001A2E8:lA4:RSVP|N +28001A2F8:lI77|H28001A308 +28001A308:lA6:sun-nd|H28001A318 +28001A318:lA6:SUN-ND|N +28001A328:lA3:snp|I109 +28001A338:lA4:NARP|I54 +28001A348:Mn2:H28001BE00,H28001BE30 +28001A360:lA4:iplt|I129 +28001A370:Mn2:H28001BE60,H28001BE70 +28001A388:lI10|H28001A398 +28001A398:lA7:bbn-rcc|H28001A3A8 +28001A3A8:lAB:BBN-RCC-MON|N +28001A3B8:lA9:kryptolan|I65 +28001A3C8:lA6:leaf-2|I26 +28001A3D8:lI124|H28001A3E8 +28001A3E8:lA4:isis|H28001A3F8 +28001A3F8:lA4:ISIS|N +28001A408:lI48|H28001A418 +28001A418:lA3:dsr|H28001A428 +28001A428:lA3:DSR|N +28001A438:lI103|H28001A448 +28001A448:lA3:pim|H28001A458 +28001A458:lA3:PIM|N +28001A468:lI7|H28001A478 +28001A478:lA3:cbt|H28001A488 +28001A488:lA3:CBT|N +28001A498:lA4:VMTP|I81 +28001A4A8:lI138|H28001A4B8 +28001A4B8:lA5:manet|H28001A4C8 +28001A4C8:lA5:MANET|N +28001A4D8:lA4:WESP|I141 +28001A4E8:lI71|H28001A4F8 +28001A4F8:lA4:ipcv|H28001A508 +28001A508:lA4:IPCV|N +28001A518:lA3:ggp|I3 +28001A528:lA4:tp++|I39 +28001A538:lA3:rdp|I27 +28001A548:lA3:IGP|I9 +28001A558:lI258|H28001A568 +28001A568:lA6:divert|H28001A578 +28001A578:lA6:DIVERT|N +28001A588:lA3:PTP|I123 +28001A598:lA6:wb-mon|I78 +28001A5A8:lI11|H28001A5B8 +28001A5B8:lA3:nvp|H28001A5C8 +28001A5C8:lA6:NVP-II|N +28001A5D8:lA5:argus|I13 +28001A5E8:lA4:xnet|I15 +28001A5F8:lI12|H28001A608 +28001A608:lA3:pup|H28001A618 +28001A618:lA3:PUP|N +28001A628:lA4:ifmp|I101 +28001A638:lA3:3pc|I34 +28001A648:lA6:DIVERT|I258 +28001A658:lA3:PUP|I12 +28001A668:lAF:mobility-header|I135 +28001A678:lA4:idpr|I35 +28001A688:lI28|H28001A698 +28001A698:lA4:irtp|H28001A6A8 +28001A6A8:lA4:IRTP|N +28001A6B8:lAB:secure-vmtp|I82 +28001A6C8:lA3:prm|I21 +28001A6D8:lA3:EGP|I8 +28001A6E8:lA3:cbt|I7 +28001A6F8:lI47|H28001A708 +28001A708:lA3:gre|H28001A718 +28001A718:lA3:GRE|N +28001A728:lAA:sprite-rpc|I90 +28001A738:lI89|H28001A748 +28001A748:lA4:ospf|H28001A758 +28001A758:lA7:OSPFIGP|N +28001A768:lI24|H28001A778 +28001A778:lA7:trunk-2|H28001A788 +28001A788:lA7:TRUNK-2|N +28001A798:lA2:IP|I0 +28001A7A8:lA4:ICMP|I1 +28001A7B8:lA5:MANET|I138 +28001A7C8:lI13|H28001A7D8 +28001A7D8:lA5:argus|H28001A7E8 +28001A7E8:lA5:ARGUS|N +28001A7F8:lA6:pfsync|I240 +28001A808:Mn2:H28001BE80,H28001BE90 +28001A820:lA6:SUN-ND|I77 +28001A830:lI94|H28001A840 +28001A840:lA4:ipip|H28001A850 +28001A850:lA4:IPIP|N +28001A860:lA3:tcf|I87 +28001A870:lI3|H28001A880 +28001A880:lA3:ggp|H28001A890 +28001A890:lA3:GGP|N +28001A8A0:lI18|H28001A8B0 +28001A8B0:lA3:mux|H28001A8C0 +28001A8C0:lA3:MUX|N +28001A8D0:lA4:l2tp|I115 +28001A8E0:lI113|H28001A8F0 +28001A8F0:lA3:pgm|H28001A900 +28001A900:lA3:PGM|N +28001A910:lA3:SMP|I121 +28001A920:lA8:wb-expak|I79 +28001A930:lA7:SAT-MON|I69 +28001A940:Mn2:H28001BEA0,H28001BEB0 +28001A958:Mn2:H28001BEC0,H28001BED0 +28001A970:lA9:KRYPTOLAN|I65 +28001A980:lA7:udplite|I136 +28001A990:lA3:DDP|I37 +28001A9A0:Mn2:H28001BEE0,H28001BEF0 +28001A9B8:lA3:TTP|I84 +28001A9C8:lI29|H28001A9D8 +28001A9D8:lA7:iso-tp4|H28001A9E8 +28001A9E8:lA7:ISO-TP4|N +28001A9F8:lA2:AH|I51 +28001AA08:lI72|H28001AA18 +28001AA18:lA4:cpnx|H28001AA28 +28001AA28:lA4:CPNX|N +28001AA38:lA4:LARP|I91 +28001AA48:lI53|H28001AA58 +28001AA58:lA5:swipe|H28001AA68 +28001AA68:lA5:SWIPE|N +28001AA78:lI135|H28001AA88 +28001AA88:lAF:mobility-header|H28001AA98 +28001AA98:lAF:Mobility-Header|N +28001AAA8:lI69|H28001AAB8 +28001AAB8:lA7:sat-mon|H28001AAC8 +28001AAC8:lA7:SAT-MON|N +28001AAD8:lI120|H28001AAE8 +28001AAE8:lA3:uti|H28001AAF8 +28001AAF8:lA3:UTI|N +28001AB08:lAA:IPV6-ROUTE|I43 +28001AB18:lA4:carp|I112 +28001AB28:lA7:UDPLite|I136 +28001AB38:lA4:ARIS|I104 +28001AB48:lAA:MPLS-IN-IP|I137 +28001AB58:lA7:XNS-IDP|I22 +28001AB68:lA3:sps|I130 +28001AB78:lA7:TRUNK-1|I23 +28001AB88:lA4:IATP|I117 +28001AB98:lA4:igmp|I2 +28001ABA8:lA3:ptp|I123 +28001ABB8:lI42|H28001ABC8 +28001ABC8:lA4:sdrp|H28001ABD8 +28001ABD8:lA4:SDRP|N +28001ABE8:Mn2:H28001BF00,H28001BF10 +28001AC00:lI76|H28001AC10 +28001AC10:lAA:br-sat-mon|H28001AC20 +28001AC20:lAA:BR-SAT-MON|N +28001AC30:lAA:IPV6-NONXT|I59 +28001AC40:Mn2:H28001BF20,H28001BF30 +28001AC58:lA4:L2TP|I115 +28001AC68:lA3:WSN|I74 +28001AC78:lA3:GRE|I47 +28001AC88:lA4:vrrp|I112 +28001AC98:lA6:divert|I258 +28001ACA8:lI98|H28001ACB8 +28001ACB8:lA5:encap|H28001ACC8 +28001ACC8:lA5:ENCAP|N +28001ACD8:lA6:i-nlsp|I52 +28001ACE8:lA4:sctp|I132 +28001ACF8:lA5:encap|I98 +28001AD08:lA4:visa|I70 +28001AD18:lI26|H28001AD28 +28001AD28:lA6:leaf-2|H28001AD38 +28001AD38:lA6:LEAF-2|N +28001AD48:lA4:pipe|I131 +28001AD58:Mn2:H28001BF60,H28001BF70 +28001AD70:Mn2:H28001BF80,H28001BF90 +28001AD88:lA2:SM|I122 +28001AD98:lA5:eigrp|I88 +28001ADA8:lAF:rsvp-e2e-ignore|I134 +28001ADB8:Mn2:H28001BFA0,H28001BFB0 +28001ADD0:lA3:GGP|I3 +28001ADE0:lI108|H28001ADF0 +28001ADF0:lA6:ipcomp|H28001AE00 +28001AE00:lA6:IPComp|N +28001AE10:lA4:micp|I95 +28001AE20:lA4:FIRE|I125 +28001AE30:lI133|H28001AE40 +28001AE40:lA2:fc|H28001AE50 +28001AE50:lA2:FC|N +28001AE60:lA3:ST2|I5 +28001AE70:Mn2:H28001BFC0,H28001BFF0 +28001AE88:lA6:NVP-II|I11 +28001AE98:lI44|H28001AEA8 +28001AEA8:lA9:ipv6-frag|H28001AEB8 +28001AEB8:lA9:IPV6-FRAG|N +28001AEC8:lI19|H28001AED8 +28001AED8:lA3:dcn|H28001AEE8 +28001AEE8:lA8:DCN-MEAS|N +28001AEF8:Mn2:H28001C000,H28001C010 +28001AF10:lA3:3PC|I34 +28001AF20:lI79|H28001AF30 +28001AF30:lA8:wb-expak|H28001AF40 +28001AF40:lA8:WB-EXPAK|N +28001AF50:lI0|H28001AF60 +28001AF60:lA2:ip|H28001AF70 +28001AF70:lA2:IP|N +28001AF80:lA9:sat-expak|I64 +28001AF90:lI100|H28001AFA0 +28001AFA0:lA4:gmtp|H28001AFB0 +28001AFB0:lA4:GMTP|N +28001AFC0:Mn2:H28001C040,H28001C070 +28001AFD8:lI139|H28001AFE8 +28001AFE8:lA3:hip|H28001AFF8 +28001AFF8:lA3:HIP|N +28001B008:lA4:rohc|I142 +28001B018:Mn2:H28001C080,H28001C090 +28001B030:Mn2:H28001C0A0,H28001C0B0 +28001B048:lI104|H28001B058 +28001B058:lA4:aris|H28001B068 +28001B068:lA4:ARIS|N +28001B078:lI60|H28001B088 +28001B088:lA9:ipv6-opts|H28001B098 +28001B098:lA9:IPV6-OPTS|N +28001B0A8:lA3:pgm|I113 +28001B0B8:lI33|H28001B0C8 +28001B0C8:lA4:dccp|H28001B0D8 +28001B0D8:lA4:DCCP|N +28001B0E8:lA5:emcon|I14 +28001B0F8:lA3:MTP|I92 +28001B108:lA4:ipv6|I41 +28001B118:lA8:WB-EXPAK|I79 +28001B128:Mn2:H28001C0E0,H28001C0F0 +28001B140:lI88|H28001B150 +28001B150:lA5:eigrp|H28001B160 +28001B160:lA5:EIGRP|N +28001B170:lI96|H28001B180 +28001B180:lA6:scc-sp|H28001B190 +28001B190:lA6:SCC-SP|N +28001B1A0:lA4:iatp|I117 +28001B1B0:lI21|H28001B1C0 +28001B1C0:lA3:prm|H28001B1D0 +28001B1D0:lA3:PRM|N +28001B1E0:lI73|H28001B1F0 +28001B1F0:lA4:cphb|H28001B200 +28001B200:lA4:CPHB|N +28001B210:lA4:PIPE|I131 +28001B220:lA5:CHAOS|I16 +28001B230:lA9:ipv6-opts|I60 +28001B240:lA7:ETHERIP|I97 +28001B250:lA7:etherip|I97 +28001B260:lA3:ttp|I84 +28001B270:lA5:vines|I83 +28001B280:lI121|H28001B290 +28001B290:lA3:smp|H28001B2A0 +28001B2A0:lA3:SMP|N +28001B2B0:lI58|H28001B2C0 +28001B2C0:lA9:ipv6-icmp|H28001B2D0 +28001B2D0:lA5:icmp6|H28001B2E0 +28001B2E0:lA9:IPV6-ICMP|N +28001B2F0:lI117|H28001B300 +28001B300:lA4:iatp|H28001B310 +28001B310:lA4:IATP|N +28001B320:lA4:SCPS|I105 +28001B330:lAB:BBN-RCC-MON|I10 +28001B340:lI20|H28001B350 +28001B350:lA3:hmp|H28001B360 +28001B360:lA3:HMP|N +28001B370:lA4:ISIS|I124 +28001B380:lA3:HIP|I139 +28001B390:lI17|H28001B3A0 +28001B3A0:lA3:udp|H28001B3B0 +28001B3B0:lA3:UDP|N +28001B3C0:lI82|H28001B3D0 +28001B3D0:lAB:secure-vmtp|H28001B3E0 +28001B3E0:lAB:SECURE-VMTP|N +28001B3F0:lA5:SHIM6|I140 +28001B400:lI74|H28001B410 +28001B410:lA3:wsn|H28001B420 +28001B420:lA3:WSN|N +28001B430:lA4:IPCV|I71 +28001B440:lA9:IPX-in-IP|I111 +28001B450:lA4:scps|I105 +28001B460:lI119|H28001B470 +28001B470:lA3:srp|H28001B480 +28001B480:lA3:SRP|N +28001B490:lA6:SCC-SP|I96 +28001B4A0:lI140|H28001B4B0 +28001B4B0:lA5:shim6|H28001B4C0 +28001B4C0:lA5:SHIM6|N +28001B4D0:lI90|H28001B4E0 +28001B4E0:lAA:sprite-rpc|H28001B4F0 +28001B4F0:lAA:Sprite-RPC|N +28001B500:lA3:dsr|I48 +28001B510:lI14|H28001B520 +28001B520:lA5:emcon|H28001B530 +28001B530:lA5:EMCON|N +28001B540:lA4:wesp|I141 +28001B550:lA6:NETBLT|I30 +28001B560:lA7:ISO-TP4|I29 +28001B570:lA3:esp|I50 +28001B580:lI5|H28001B590 +28001B590:lA3:st2|H28001B5A0 +28001B5A0:lA3:ST2|N +28001B5B0:lA3:srp|I119 +28001B5C0:lA5:EIGRP|I88 +28001B5D0:lA4:TP++|I39 +28001B5E0:lI67|H28001B5F0 +28001B5F0:lA4:ippc|H28001B600 +28001B600:lA4:IPPC|N +28001B610:lA9:ipx-in-ip|I111 +28001B620:lI102|H28001B630 +28001B630:lA4:pnni|H28001B640 +28001B640:lA4:PNNI|N +28001B650:lI55|H28001B660 +28001B660:lA6:mobile|H28001B670 +28001B670:lA6:MOBILE|N +28001B680:lI97|H28001B690 +28001B690:lA7:etherip|H28001B6A0 +28001B6A0:lA7:ETHERIP|N +28001B6B0:lA3:dcn|I19 +28001B6C0:lA4:CPHB|I73 +28001B6D0:lA2:il|I40 +28001B6E0:lI123|H28001B6F0 +28001B6F0:lA3:ptp|H28001B700 +28001B700:lA3:PTP|N +28001B710:lAA:Sprite-RPC|I90 +28001B720:lI125|H28001B730 +28001B730:lA4:fire|H28001B740 +28001B740:lA4:FIRE|N +28001B750:lA8:DCN-MEAS|I19 +28001B760:lAA:mpls-in-ip|I137 +28001B770:lI66|H28001B780 +28001B780:lA3:rvd|H28001B790 +28001B790:lA3:RVD|N +28001B7A0:lA4:CRTP|I126 +28001B7B0:lI91|H28001B7C0 +28001B7C0:lA4:larp|H28001B7D0 +28001B7D0:lA4:LARP|N +28001B7E0:lA7:sat-mon|I69 +28001B7F0:lI129|H28001B800 +28001B800:lA4:iplt|H28001B810 +28001B810:lA4:IPLT|N +28001B820:lA3:UDP|I17 +28001B830:lA2:sm|I122 +28001B840:lA5:SWIPE|I53 +28001B850:lA4:IPPC|I67 +28001B860:lI80|H28001B870 +28001B870:lA6:iso-ip|H28001B880 +28001B880:lA6:ISO-IP|N +28001B890:lI75|H28001B8A0 +28001B8A0:lA3:pvp|H28001B8B0 +28001B8B0:lA3:PVP|N +28001B8C0:lA3:STP|I118 +28001B8D0:Mn2:H28001C100,H28001C130 +28001B8E8:lA6:IPComp|I108 +28001B8F8:lA3:nvp|I11 +28001B908:lI41|H28001B918 +28001B918:lA4:ipv6|H28001B928 +28001B928:lA4:IPV6|N +28001B938:lI37|H28001B948 +28001B948:lA3:ddp|H28001B958 +28001B958:lA3:DDP|N +28001B968:lA4:CPNX|I72 +28001B978:Mn2:H28001C140,H28001C150 +28001B990:Mn2:H28001C180,H28001C190 +28001B9A8:lA4:ipip|I94 +28001B9B8:lI27|H28001B9C8 +28001B9C8:lA3:rdp|H28001B9D8 +28001B9D8:lA3:RDP|N +28001B9E8:lA3:PIM|I103 +28001B9F8:lA4:isis|I124 +28001BA08:lA5:icmp6|I58 +28001BA18:lI240|H28001BA28 +28001BA28:lA6:pfsync|H28001BA38 +28001BA38:lA6:PFSYNC|N +28001BA48:lA3:DSR|I48 +28001BA58:lI83|H28001BA68 +28001BA68:lA5:vines|H28001BA78 +28001BA78:lA5:VINES|N +28001BA88:lI34|H28001BA98 +28001BA98:lA3:3pc|H28001BAA8 +28001BAA8:lA3:3PC|N +28001BAB8:lA2:FC|I133 +28001BAC8:lI86|H28001BAD8 +28001BAD8:lA3:dgp|H28001BAE8 +28001BAE8:lA3:DGP|N +28001BAF8:lA4:narp|I54 +28001BB08:lA6:netblt|I30 +28001BB18:lI16|H28001BB28 +28001BB28:lA5:chaos|H28001BB38 +28001BB38:lA5:CHAOS|N +28001BB48:lA4:SDRP|I42 +28001BB58:lI31|H28001BB68 +28001BB68:lA7:mfe-nsp|H28001BB78 +28001BB78:lA7:MFE-NSP|N +28001BB88:lI15|H28001BB98 +28001BB98:lA4:xnet|H28001BBA8 +28001BBA8:lA4:XNET|N +28001BBB8:lI78|H28001BBC8 +28001BBC8:lA6:wb-mon|H28001BBD8 +28001BBD8:lA6:WB-MON|N +28001BBE8:lA3:PVP|I75 +28001BBF8:lI93|H28001BC08 +28001BC08:lA5:ax.25|H28001BC18 +28001BC18:lA5:AX.25|N +28001BC28:lI122|H28001BC38 +28001BC38:lA2:sm|H28001BC48 +28001BC48:lA2:SM|N +28001BC58:lA4:ipcv|I71 +28001BC68:lAA:NSFNET-IGP|I85 +28001BC78:lA5:ARGUS|I13 +28001BC88:lA4:IFMP|I101 +28001BC98:lA3:wsn|I74 +28001BCA8:lA3:a/n|I107 +28001BCB8:lA9:IPV6-FRAG|I44 +28001BCC8:lA4:aris|I104 +28001BCD8:lA3:DDX|I116 +28001BCE8:lA3:RDP|I27 +28001BCF8:lA3:bna|I49 +28001BD08:lI54|H28001BD18 +28001BD18:lA4:narp|H28001BD28 +28001BD28:lA4:NARP|N +28001BD38:lA4:ospf|I89 +28001BD48:lI85|H28001BD58 +28001BD58:lAA:nsfnet-igp|H28001BD68 +28001BD68:lAA:NSFNET-IGP|N +28001BD78:lI40|H28001BD88 +28001BD88:lA2:il|H28001BD98 +28001BD98:lA2:IL|N +28001BDA8:Mn2:H28001C1A0,H28001C1B0 +28001BDC0:lI127|H28001BDD0 +28001BDD0:lA5:crudp|H28001BDE0 +28001BDE0:lA5:CRUDP|N +28001BDF0:lA3:pim|I103 +28001BE00:lI92|H28001BE10 +28001BE10:lA3:mtp|H28001BE20 +28001BE20:lA3:MTP|N +28001BE30:lI23|H28001BE40 +28001BE40:lA7:trunk-1|H28001BE50 +28001BE50:lA7:TRUNK-1|N +28001BE60:lAA:ipv6-route|I43 +28001BE70:lA7:TRUNK-2|I24 +28001BE80:lA6:sun-nd|I77 +28001BE90:lA4:dccp|I33 +28001BEA0:lA3:SNP|I109 +28001BEB0:lA3:ESP|I50 +28001BEC0:lA3:hip|I139 +28001BED0:lA9:SAT-EXPAK|I64 +28001BEE0:lA6:ISO-IP|I80 +28001BEF0:lA4:cphb|I73 +28001BF00:lA3:SRP|I119 +28001BF10:lAF:RSVP-E2E-IGNORE|I134 +28001BF20:lA6:WB-MON|I78 +28001BF30:lI111|H28001BF40 +28001BF40:lA9:ipx-in-ip|H28001BF50 +28001BF50:lA9:IPX-in-IP|N +28001BF60:lA8:IP-ENCAP|I4 +28001BF70:lA8:sscopmce|I128 +28001BF80:lA3:st2|I5 +28001BF90:lA4:ippc|I67 +28001BFA0:lA4:TLSP|I56 +28001BFB0:lA9:IDPR-CMTP|I38 +28001BFC0:lI22|H28001BFD0 +28001BFD0:lA7:xns-idp|H28001BFE0 +28001BFE0:lA7:XNS-IDP|N +28001BFF0:lA4:SKIP|I57 +28001C000:lA4:cpnx|I72 +28001C010:lI84|H28001C020 +28001C020:lA3:ttp|H28001C030 +28001C030:lA3:TTP|N +28001C040:lI35|H28001C050 +28001C050:lA4:idpr|H28001C060 +28001C060:lA4:IDPR|N +28001C070:lA5:shim6|I140 +28001C080:lA9:ipv6-icmp|I58 +28001C090:lA4:DCCP|I33 +28001C0A0:lA6:LEAF-2|I26 +28001C0B0:lI57|H28001C0C0 +28001C0C0:lA4:skip|H28001C0D0 +28001C0D0:lA4:SKIP|N +28001C0E0:lA6:PFSYNC|I240 +28001C0F0:lA3:PRM|I21 +28001C100:lI81|H28001C110 +28001C110:lA4:vmtp|H28001C120 +28001C120:lA4:VMTP|N +28001C130:lA3:qnx|I106 +28001C140:lA9:merit-inp|I32 +28001C150:lI115|H28001C160 +28001C160:lA4:l2tp|H28001C170 +28001C170:lA4:L2TP|N +28001C180:lA3:dgp|I86 +28001C190:lA4:XNET|I15 +28001C1A0:lA2:fc|I133 +28001C1B0:lI8|H28001C1C0 +28001C1C0:lA3:egp|H28001C1D0 +28001C1D0:lA3:EGP|N +2800BB848:t2:H2800BB860,I23 +2800BB860:t2:AD:logger_config,AA:ssl_logger +28001F238:t2:H28001F250,H28001F268 +28001F250:t2:AB:prim_socket,A9:msg_flags +28001F268:MfB:H28001F2D8:I0,I16,I4,I0,I0,I32,I8,I0,I524288,I1,I2 +28001F2D8:tB:A4:more,A5:trunc,A9:dontroute,AC:cmsg_cloexec,A7:confirm,A6:ctrunc,A3:eor,A8:errqueue,A8:nosignal,A3:oob,A4:peek +280068258:t2:H280068270,H280068288 +280068270:t2:AC:erl_features,AD:feature_specs +280068288:Mf1:H2800682A8:H2800682B8 +2800682A8:t1:AA:maybe_expr +2800682B8:Mf6:H280068300:H280068AD8,AC:experimental,A9:extension,H2800688B8,H280068348,I25 +280068300:t6:A5:short,A6:status,A4:type,AB:description,A8:keywords,AC:experimental +280068338:lA4:else|N +280068348:lA5:maybe|H280068338 +280068358:lI46|N +280068368:lI103|H280068358 +280068378:lI110|H280068368 +280068388:lI105|H280068378 +280068398:lI108|H280068388 +2800683A8:lI100|H280068398 +2800683B8:lI110|H2800683A8 +2800683C8:lI97|H2800683B8 +2800683D8:lI104|H2800683C8 +2800683E8:lI32|H2800683D8 +2800683F8:lI114|H2800683E8 +280068408:lI111|H2800683F8 +280068418:lI114|H280068408 +280068428:lI114|H280068418 +280068438:lI101|H280068428 +280068448:lI32|H280068438 +280068458:lI100|H280068448 +280068468:lI101|H280068458 +280068478:lI115|H280068468 +280068488:lI97|H280068478 +280068498:lI98|H280068488 +2800684A8:lI32|H280068498 +2800684B8:lI101|H2800684A8 +2800684C8:lI117|H2800684B8 +2800684D8:lI108|H2800684C8 +2800684E8:lI97|H2800684D8 +2800684F8:lI86|H2800684E8 +280068508:lI32|H2800684F8 +280068518:lI45|H280068508 +280068528:lI45|H280068518 +280068538:lI32|H280068528 +280068548:lI57|H280068538 +280068558:lI52|H280068548 +280068568:lI80|H280068558 +280068578:lI69|H280068568 +280068588:lI69|H280068578 +280068598:lI32|H280068588 +2800685A8:lI110|H280068598 +2800685B8:lI105|H2800685A8 +2800685C8:lI32|H2800685B8 +2800685D8:lI100|H2800685C8 +2800685E8:lI101|H2800685D8 +2800685F8:lI115|H2800685E8 +280068608:lI111|H2800685F8 +280068618:lI112|H280068608 +280068628:lI111|H280068618 +280068638:lI114|H280068628 +280068648:lI112|H280068638 +280068658:lI32|H280068648 +280068668:lI110|H280068658 +280068678:lI111|H280068668 +280068688:lI105|H280068678 +280068698:lI115|H280068688 +2800686A8:lI115|H280068698 +2800686B8:lI101|H2800686A8 +2800686C8:lI114|H2800686B8 +2800686D8:lI112|H2800686C8 +2800686E8:lI120|H2800686D8 +2800686F8:lI101|H2800686E8 +280068708:lI32|H2800686F8 +280068718:lI101|H280068708 +280068728:lI98|H280068718 +280068738:lI121|H280068728 +280068748:lI97|H280068738 +280068758:lI109|H280068748 +280068768:lI32|H280068758 +280068778:lI101|H280068768 +280068788:lI104|H280068778 +280068798:lI116|H280068788 +2800687A8:lI32|H280068798 +2800687B8:lI102|H2800687A8 +2800687C8:lI111|H2800687B8 +2800687D8:lI32|H2800687C8 +2800687E8:lI110|H2800687D8 +2800687F8:lI111|H2800687E8 +280068808:lI105|H2800687F8 +280068818:lI116|H280068808 +280068828:lI97|H280068818 +280068838:lI116|H280068828 +280068848:lI110|H280068838 +280068858:lI101|H280068848 +280068868:lI109|H280068858 +280068878:lI101|H280068868 +280068888:lI108|H280068878 +280068898:lI112|H280068888 +2800688A8:lI109|H280068898 +2800688B8:lI73|H2800688A8 +2800688C8:lI41|N +2800688D8:lI57|H2800688C8 +2800688E8:lI52|H2800688D8 +2800688F8:lI80|H2800688E8 +280068908:lI69|H2800688F8 +280068918:lI69|H280068908 +280068928:lI40|H280068918 +280068938:lI32|H280068928 +280068948:lI103|H280068938 +280068958:lI110|H280068948 +280068968:lI105|H280068958 +280068978:lI108|H280068968 +280068988:lI100|H280068978 +280068998:lI110|H280068988 +2800689A8:lI97|H280068998 +2800689B8:lI104|H2800689A8 +2800689C8:lI32|H2800689B8 +2800689D8:lI114|H2800689C8 +2800689E8:lI111|H2800689D8 +2800689F8:lI114|H2800689E8 +280068A08:lI114|H2800689F8 +280068A18:lI101|H280068A08 +280068A28:lI32|H280068A18 +280068A38:lI100|H280068A28 +280068A48:lI101|H280068A38 +280068A58:lI115|H280068A48 +280068A68:lI97|H280068A58 +280068A78:lI98|H280068A68 +280068A88:lI32|H280068A78 +280068A98:lI101|H280068A88 +280068AA8:lI117|H280068A98 +280068AB8:lI108|H280068AA8 +280068AC8:lI97|H280068AB8 +280068AD8:lI86|H280068AC8 +280068B48:t2:H280068B60,N +280068B60:t2:AC:erl_features,A8:keywords +28001EEA8:t2:H28001EEC0,H28001EED8 +28001EEC0:t2:AB:prim_socket,AE:ioctl_requests +28001EED8:MfC:H28001EF50:I2149607696,I3223349537,I3223349539,I3222038820,I3223349538,I3223349521,I3223349555,I3223349541,I2149607692,I2149607699,I2149607694,I2149607732 +28001EF50:tC:A8:sifflags,A7:gifaddr,AA:gifbrdaddr,A7:gifconf,AA:gifdstaddr,A8:gifflags,A6:gifmtu,AA:gifnetmask,A7:sifaddr,AA:sifbrdaddr,AA:sifdstaddr,A6:sifmtu +2800BB7E8:t2:H2800BB800,I7 +2800BB800:t2:AD:logger_config,H2800BB818 +2800BB818:t2:A10:$handler_config$,AB:ssl_handler +2800BB7A0:t2:H2800BB7B8,A5:async +2800BB7B8:t2:AA:logger_olp,A18:logger_std_h_ssl_handler +2800711B0:t2:A12:rex_nodes_observer,H2800711C8 +2800711C8:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALAE+vYAAd/g02c= +28001EFD0:t2:H28001EFE8,H28001F000 +28001EFE8:t2:AB:prim_socket,AB:ioctl_flags +28001F000:Mf20:H28001F118:I0,I64,I4,I2,I8,I1,I32768,I0,I512,I0,I0,I0,I0,I0,I0,I0,I4096,I8192,I16384,I0,I0,I128,I32,I1024,I16,I0,I0,I256,I0,I2048,I0,I0 +28001F118:t20:A7:monitor,A7:running,A5:debug,A9:broadcast,A8:loopback,A2:up,A9:multicast,A7:nogroup,A8:allmulti,A9:automedia,AA:cantconfig,A7:dormant,A5:dying,A7:dynamic,A4:echo,AA:knowsepoch,A5:link0,A5:link1,A5:link2,A8:lower_up,A6:master,A5:noarp,AA:notrailers,A7:oactive,AB:pointopoint,A7:portsel,A8:ppromisc,A7:promisc,A8:renaming,A7:simplex,A5:slave,A9:staticarp +28005B250:t2:H28005B268,I5 +28005B268:t2:AD:logger_config,A10:$primary_config$ +28006A4A0:t2:H28006A4B8,I5 +28006A4B8:t2:AD:logger_config,A11:supervisor_bridge +28008F5B0:t2:H28008F5C8,A5:async +28008F5C8:t2:AA:logger_olp,AC:logger_proxy +280068BD8:t2:H280068BF0,I5 +280068BF0:t2:AD:logger_config,AA:supervisor +280068B90:t2:H280068BA8,A4:true +280068BA8:t2:AC:erl_features,A9:init_done +280068B00:t2:H280068B18,N +280068B18:t2:AC:erl_features,A10:enabled_features +28005B298:t2:H28005B2B0,I5 +28005B2B0:t2:AD:logger_config,A16:application_controller +=binary:1309301C0 +9C:XlsbwptdW1tcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcZFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxkXSsoPzo7Wy1hLXpBLVpcZFwvIyYuOj0/JUB+X10qKSopPwcpfCg/Oig/OlxkezEsNH0oPzo7XGR7MCw0fSkqKT9bXGRBLVBSLVRaY2YtbnEtdXk9Pjx+XSkp +=binary:130931BD0 +15E:RVJDUF4BAAAQCAAAAQAAAP//////////AAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMBGhtuAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAABuAAAAAAgDAIgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAABigwCNgwCHkoMALpKDACcdO24AAAAAaOD/p////4f+//9HAAAAAAAAAAAAAAAAAAAAAGR5ACd3AFBuAAAAAAAA/wP+//8H/v//BwAAAAAAAAAAAAAAAAAAAABrkoMAJx07bgAAAABo4P+n////h/7//0cAAAAAAAAAAAAAAAAAAAAAYnkAJ3gAfh0HeACHdwBDgwA9koMAFQdbAAMHkoMACR07WwAEB3kACXgAFW4AAAAAAAD/c/7/HQTIfz5CAAAAAAAAAAAAAAAAAAAAAHgAPXgA0HgBGgA= +=atoms +glee_unit_assert_match +glee_unit_assert_equal +glee_unit_assert_not_equal +expected +'-erlang_error_to_unified/3-fun-0-' +'-format_reason/4-fun-0-' +'-format_reason/4-fun-1-' +'-format_reason/4-fun-2-' +'-format_reason/4-fun-3-' +'-format_reason/4-fun-4-' +'-format_reason/4-fun-5-' +module_and_test_run +'-create_test_report/1-fun-0-' +'-create_test_report/1-fun-1-' +'-create_test_report/1-fun-2-' +'-create_test_report/1-fun-3-' +'-create_test_report/1-fun-4-' +'-create_test_report/1-fun-5-' +'-create_test_report/1-fun-6-' +align_table +'showtime@internal@reports@table' +ignored_style +failed_style +passed_style +function_style +error_style +align_left_overflow +stacktrace_style +align_right +align_left +content +styled_content +format_reason +got_highlight +expected_highlight +'showtime@internal@reports@compare' +not_style +'showtime@internal@reports@styles' +gleam_error_to_unified +unified_error +erlang_error_to_unified +'-part1/1-fun-2-' +'-find_best_joker_substitution/1-fun-0-' +'-find_best_joker_substitution/1-fun-1-' +'-part2/1-fun-0-' +'-part2/1-fun-2-' +get_input +get_part +find_best_joker_substitution +compare_hands +compare_top_card +classify_hand +card_counts +hand +parse_hand +card_rank +two_pair +three_of_a_kind +one_pair +high_card +full_house +four_of_a_kind +five_of_a_kind +hand_rank +be_false_meta +be_false +be_true_meta +be_true +fail_meta +be_error_meta +be_error +be_ok_meta +be_ok +not_equal_meta +equal_meta +evaluate +'-run_test/4-fun-0-' +'-run_test/4-fun-1-' +reason_line +expression +'-run_test/4-fun-2-' +trace_module +'-run_test/4-fun-3-' +'-map_extra_info_list/1-fun-0-' +num +arg_list +map_arity +map_extra_info_list +erlang_exception +trace_list +erlang_error +generic_exception +gleam_assert +not_eq +assert_equal +assert_match +assert_not_equal +assertNotEqual +assertMatch +assertEqual +test_function_return +test +capture_done +stop_output_capture +capture_output +start_output_capture +'-run_test_suite/4-fun-0-' +showtime_ffi +run_test +example +part1 +'-part1_test/0-fun-0-' +part2 +'-part2_test/0-fun-0-' +part2_test +'showtime@tests@should' +part1_test +'-optional/1-fun-0-' +'-any/1-fun-0-' +'-decode1/2-fun-0-' +'-push_path/2-fun-0-' +'-result/2-fun-3-' +'-result/2-fun-2-' +'-result/2-fun-1-' +'-result/2-fun-0-' +'-result/2-fun-4-' +'-result/2-fun-5-' +'-list/1-fun-0-' +'-list/1-fun-1-' +'-list/1-fun-2-' +'-map_errors/2-fun-0-' +'-decode_string/1-fun-0-' +'-decode_string/1-fun-1-' +'-field/2-fun-0-' +'-field/2-fun-1-' +'-field/2-fun-2-' +'-optional_field/2-fun-0-' +'-optional_field/2-fun-1-' +'-optional_field/2-fun-2-' +'-element/2-fun-0-' +'-element/2-fun-1-' +'-element/2-fun-2-' +'-element/2-fun-3-' +'-tuple_errors/2-fun-0-' +'-tuple2/2-fun-0-' +'-tuple2/2-fun-1-' +'-tuple3/3-fun-0-' +'-tuple3/3-fun-1-' +'-tuple4/4-fun-0-' +'-tuple4/4-fun-1-' +'-tuple5/5-fun-0-' +'-tuple5/5-fun-1-' +'-tuple6/6-fun-0-' +'-tuple6/6-fun-1-' +'-dict/2-fun-4-' +'-dict/2-fun-2-' +'-dict/2-fun-1-' +'-dict/2-fun-3-' +'-dict/2-fun-5-' +'-dict/2-fun-0-' +'-dict/2-fun-6-' +'-dict/2-fun-7-' +'-decode2/3-fun-0-' +'-decode3/4-fun-0-' +'-decode4/5-fun-0-' +'-decode5/6-fun-0-' +'-decode6/7-fun-0-' +'-decode7/8-fun-0-' +'-decode8/9-fun-0-' +'-decode9/10-fun-0-' +decode9 +decode8 +decode7 +decode6 +decode5 +decode4 +decode3 +decode2 +tuple6 +tuple5 +tuple4 +tuple3 +tuple2 +tuple_errors +optional_field +decode_string +map_errors +push_path +decode1 +all_errors +at_least_decode_tuple_error +optional +shallow_list +put_expected +bit_string +bit_array +'-do_wildcard/3-lc$^0/1-0-' +'-do_wildcard_4/3-lc$^1/1-1-' +'-do_wildcard_4/3-lc$^0/1-0-' +'-compile_alt/2-lc$^0/1-0-' +'-keep_dir_search_rules/1-lc$^0/1-0-' +'-keep_suffix_search_rules/1-lc$^0/1-0-' +'-add_local_search/1-fun-0-' +climb +safe_relative_path_1 +find_regular_file +try_dir_rule +try_dir_rules +add_local_search +try_suffix_rules +find_file +asn1_source_search_rules +c_source_search_rules +erl_source_search_rules +basic_source_search_rules +default_search_rules +source_search_rules +get_search_rules +keep_suffix_search_rules +keep_dir_search_rules +eval_list_dir +eval_read_link_info +eval_read_file_info +do_exists +wrap_escapes +convert_escapes +compile_alt +compile_range +compile_charset1 +compile_charset +missing_delimiter +escaped +compile_part_to_sep +compile_part +compile_join +compile_wildcard_3 +is_literal_pattern +compile_wildcard_2 +cwd +compiled_wildcard +compile_wildcard +do_list_dir +do_alt +do_star +do_double_star +prepare_base +will_always_match +star +question +alt +match_part +do_wildcard_4 +double_star +do_wildcard_3 +do_wildcard_2 +do_wildcard_1 +do_wildcard +do_file_size +do_last_modified +do_fold_files2 +do_fold_files1 +do_fold_files +do_is_regular +do_is_file +do_is_dir +file_size +last_modified +fold_files +is_regular +badpattern +'-do_all/2-fun-0-' +'-do_values/2-fun-0-' +do_values +to_result +is_none +is_some +do_all +panic +not_utf8 +'-do_copy_directory/2-fun-1-' +'-do_copy_directory/2-fun-0-' +'-do_copy_directory/2-fun-2-' +'-do_copy_directory/2-fun-3-' +'-get_files/1-fun-0-' +'-get_files/1-fun-3-' +'-get_files/1-fun-5-' +'-copy_directory/2-fun-0-' +'-rename_directory/2-fun-0-' +rename_file +copy_file +rename_directory +copy_directory +create_dir_all +create_directory_all +get_files +do_copy_directory +create_file +create_directory +append_bits +write_bits +read_bits +cast_error +'gleam@bit_array' +do_read +do_write +simplifile_erl +do_append +start_test +completed_test_run +ongoing_test_run +end_test +'-collect_modules_in_folder/3-fun-0-' +'-collect_modules_in_folder/3-fun-1-' +test_module +'-collect_modules_in_folder/3-fun-2-' +'-collect_modules_in_folder/3-fun-3-' +'-collect_modules_in_folder/3-fun-4-' +'-collect_modules_in_folder/3-fun-5-' +'-collect_test_functions/1-fun-0-' +'-collect_test_functions/1-fun-1-' +'-collect_test_functions/1-fun-2-' +test_function +'-collect_test_functions/1-fun-3-' +test_suite +unsafe_coerce +read_directory +collect_modules_in_folder +get_module_prefix +end_test_suite +start_test_suite +'-start/5-fun-0-' +'-start/5-fun-1-' +'-start/5-fun-2-' +'-debug_cmd/2-lc$^0/1-0-' +'-get_log/1-lc$^0/1-0-' +'-nlog_new/2-fun-0-' +nlog_get +nlog_put +nlog_new +print_log +get_debug2 +remove_debug +install_debug +stat +no_statistics +start_time +current_time +messages_in +messages_out +get_stat +init_stat +do_change_code +unknown_debug +debug_cmd +do_replace_state +callback_failed +do_get_state +suspend_loop_hib +terminating +send_system_msg +install +no_debug +log_to_file +replace_state +failed_to_connect +local_node_is_not_alive +atom_not_loaded +'-list_directory/1-lc$^0/1-0-' +'-get_all_env/0-fun-0-' +'-map_selector/2-fun-0-' +'-map_selector/2-fun-1-' +process_down +selector +free_bsd +windows_nt +os_family +recursive_delete +delete_directory +list_directory +make_directory +delete_file +append_file +posix_result +link_info +exdev +etxtbsy +estale +esrch +espipe +erofs +erange +epipe +eperm +eopnotsupp +enotblk +enosys +enostr +enosr +enospc +enomem +enolink +enolck +enodev +enobufs +enfile +emultihop +emlink +eloop +eisdir +eio +eintr +eftype +efbig +eexist +edquot +edeadlock +edeadlk +ebadmsg +eacces +no_access +file_info_result +unknown_application +errored +thrown +classify +atom_from_dynamic +atom_from_string +call_timeout +exit_message +'-selecting_trapped_exits/2-fun-0-' +'-selecting/3-fun-0-' +'-receive/2-fun-0-' +'-selecting_record2/3-fun-0-' +'-selecting_record3/3-fun-0-' +'-selecting_record4/3-fun-0-' +'-selecting_record5/3-fun-0-' +'-selecting_record6/3-fun-0-' +'-selecting_record7/3-fun-0-' +'-selecting_record8/3-fun-0-' +'-try_call/3-fun-0-' +callee_down +'-try_call/3-fun-1-' +process_named +named +unregister_process +register_process +trap_exits +send_abnormal_exit +send_exit +timer_not_found +try_call +demonitor_process +process_monitor +sleep_forever +anything +selecting_record8 +selecting_record7 +selecting_record6 +selecting_record5 +selecting_record4 +selecting_record2 +insert_selector_handler +selecting_trapped_exits +flush_messages +select_forever +subject +init_timeout +convert_system_message +gleam_otp_external +'-receive_message/1-fun-0-' +'-init_selector/2-fun-0-' +'-init_selector/2-fun-1-' +'-start_spec/1-fun-0-' +'-start_spec/1-fun-1-' +'-start_spec/1-fun-2-' +init_failed +init_crashed +selecting_process_down +monitor_process +to_erlang_start_result +abnormal +failed +subject_owner +ready +initialise_actor +map_selector +init_selector +status_info +from +'gleam@dynamic' +process_status_info +merge_selector +selecting_anything +receive_message +selecting_record3 +selecting_system_messages +exit_process +with_selector +create_test_report +'showtime@internal@reports@formatter' +'showtime@internal@common@common_event_handler' +'-start/0-fun-1-' +'-start/0-fun-2-' +event_handler_message +'-start/0-fun-3-' +selecting +new_selector +new_subject +'gleam@erlang@process' +'gleam@otp@actor' +is_equal +prepend_builder +'-pretty_print_cause/1-fun-0-' +line_print +pretty_print_cause +not_assigned +surrogate +spacing_combining +enclosing +non_spacing +decimal +letter +connector +dash +punctuation +currency +paragraph +space +separator +noBreak +fraction +vertical +small +medial +isolated +wide +narrow +font +square +circle +'-inlined-class/1-' +'-canonical_order_2/2-lc$^0/1-0-' +is_wide_cp +subcat_letter +zs +zp +zl +so +sk +sc +ps +po +pi +pf +pe +pd +pc +mn +me +lu +lo +ll +cs +co +cn +cf +cc +cat_translate +unicode_table +case_table +nolist +compose_pair +gc_h_lv_lvt +gc_h_T +gc_h_V +gc_h_L +gc_regional +is_ext_pict +gc_ext_pict_zwj +gc_ext_pict +zwj +is_extend +gc_extend2 +gc_extend +is_control +gc_prepend +gc_1 +cp_no_binl +binary_found +cp_no_bin +cpl_1_cont3 +cpl_1_cont2 +cpl_1_cont +cpl_cont3 +cpl_cont2 +cpl_cont +cpl +is_whitespace +compose_compat_many +compose_compat +compose_compat_0 +compose_many +decompose_compat_1 +decompose_compat +canonical_order_2 +canonical_order_1 +canonical_order +decompose_1 +decompose +lookup_category +spec_version +lower +get_case +compat +ccc +'-inlined-rev/1-' +'-inlined-append/2-' +'-titlecase/1-lbc$^0/2-0-' +'-to_lower/1-lc$^0/1-0-' +'-to_upper/1-lc$^0/1-0-' +'-join/2-lc$^0/1-0-' +to_upper_char +to_lower_char +sub_string +centre +r_pad +l_pad +strip_right +strip_left +s_word +sub_word +w_count +words +copies +tokens_multiple_2 +tokens_multiple_1 +tokens_single_2 +tokens_single_1 +substr2 +substr1 +cspan +span +l_prefix +rstr +str +rchr +bin_search_str_2 +bin_search_str_1 +bin_search_str +bin_search_inv_n +bin_search_inv_1 +bin_search_inv +bin_search_loop +bin_pattern +search_cp +search_pattern +bin_search +cp_prefix_1 +cp_prefix +add_non_empty +find_r +find_l +lexeme_skip +nth_lexeme_m +lexeme_pick +lexemes_m +prefix_1 +take_tc +take_t +take_lc +take_l +trim_t +trim_ts +trim_l +trim_ls +casefold_bin +casefold_list +lowercase_bin +lowercase_list +uppercase_bin +uppercase_list +slice_bin +slice_list +slice_trail +slice_lb +slice_l +slice_l0 +reverse_b +reverse_1 +equal_norm_nocase +equal_norm +equal_nocase +equal_1 +length_b +length_1 +cp +next_codepoint +nth_lexeme +to_number +to_integer +casefold +titlecase +whitespace +split_string +not_a_utf8_string +'-decode_option/2-fun-0-' +'-compile_regex/2-lc$^0/1-0-' +'-regex_matches/2-fun-0-' +'-regex_scan/2-fun-0-' +'-parse_query/1-fun-0-' +'-inspect/1-fun-4-' +'-inspect/1-lc$^1/1-1-' +'-inspect/1-lc$^0/1-0-' +base16_decode +inspect_maybe_utf8_string +append_segment +inspect_bit_array +improper +inspect_list +inspect_maybe_gleam_atom +proper +println_error +maps_get_or +maps_get_optional +check_utf8 +is_hex_digit +percent_ok +percent_decode +percent_encode +dissect_query +wrap_list +base_decode64 +regex_scan +regex_matches +regex_submatches +regex_split +regex_check +compile_error +compile_regex +bit_array_int_from_u32 +bit_array_int_to_u32 +bit_array_slice +bit_array_concat +string_invalid_utf8 +string_pad +decode_result +decode_option +decode_tuple6 +decode_tuple5 +decode_tuple4 +decode_tuple3 +decode_tuple2 +decode_tuple +tuple_get +size_of_tuple +decode_field +decode_list +decode_bool +decode_float +decode_int +decode_bit_array +decode_map +classify_dynamic +decode_error +decode_error_msg +iodata_append +capitalise +to_option +utf_codepoint_to_int +utf_codepoint +utf_codepoint_list_to_string +from_utf_codepoints +to_utf_codepoints +do_to_utf_codepoints +do_to_utf_codepoints_impl +do_to_graphemes +string_pop_grapheme +pop_grapheme +trim_right +do_trim_right +trim_left +do_trim_left +do_trim +pad_left +padding +do_join +'gleam@iterator' +do_split_once +string_ends_with +ends_with +string_starts_with +contains_string +drop_right +crop_string +crop +less_than +from_string +do_reverse +'-compose/2-fun-0-' +'-curry2/1-fun-0-' +'-curry2/1-fun-1-' +'-curry3/1-fun-0-' +'-curry3/1-fun-1-' +'-curry3/1-fun-2-' +'-curry4/1-fun-0-' +'-curry4/1-fun-1-' +'-curry4/1-fun-2-' +'-curry4/1-fun-3-' +'-curry5/1-fun-0-' +'-curry5/1-fun-1-' +'-curry5/1-fun-2-' +'-curry5/1-fun-3-' +'-curry5/1-fun-4-' +'-curry6/1-fun-0-' +'-curry6/1-fun-1-' +'-curry6/1-fun-2-' +'-curry6/1-fun-3-' +'-curry6/1-fun-4-' +'-curry6/1-fun-5-' +'-flip/1-fun-0-' +'-constant/1-fun-0-' +apply3 +apply2 +apply1 +tap +identity +flip +curry6 +curry5 +curry4 +curry3 +curry2 +compose +'-nil_error/1-fun-0-' +'-all/1-fun-0-' +'-values/1-fun-0-' +try_recover +lazy_or +nil_error +unwrap_both +unwrap_error +is_error +loosely_equals +loosely_compare +ceiling +float_to_string +parse_float +invalid_base +bitwise_shift_right +bitwise_shift_left +bitwise_exclusive_or +bitwise_or +bitwise_not +bitwise_and +floor_divide +modulo +remainder +undigits +do_undigits +digits +do_digits +do_product +do_sum +negate +is_odd +is_even +clamp +square_root +to_base36 +to_base8 +to_base2 +to_base_string +int_from_base_string +base_parse +parse_int +absolute_value +'-hex_string_to_int/1-fun-0-' +power +'-hex_string_to_int/1-fun-1-' +'-hex_string_to_int/1-fun-2-' +'-rgba_to_hsla/4-fun-0-' +'-rgba_to_hsla/4-fun-1-' +'-from_rgb255/3-fun-0-' +'-from_rgb255/3-fun-2-' +'-from_rgb255/3-fun-4-' +'-from_rgb/3-fun-0-' +'-from_rgb/3-fun-1-' +'-from_rgb/3-fun-2-' +'-from_rgba/4-fun-0-' +'-from_rgba/4-fun-1-' +'-from_rgba/4-fun-2-' +'-from_rgba/4-fun-3-' +'-from_hsla/4-fun-0-' +'-from_hsla/4-fun-1-' +'-from_hsla/4-fun-2-' +'-from_hsla/4-fun-3-' +'-from_rgb_hex_string/1-fun-0-' +'-from_rgba_hex_string/1-fun-0-' +'-to_css_rgba_string/1-fun-0-' +multiply +'-to_css_rgba_string/1-fun-1-' +to_rgb_hex_string +to_base16 +to_rgba_hex_string +to_rgba_hex +to_css_rgba_string +to_hsla +rgba +hsla +to_rgba +from_rgba_hex_string +from_rgba_hex +from_rgb_hex_string +from_rgb_hex +from_hsl +from_hsla +from_rgba +from_rgb +to_float +then +divide +rgba_to_hsla +hsla_to_rgba +hex_string_to_int +hue_to_rgb +valid_colour_value +'-do_add/3-fun-1-' +'-flags/2-fun-0-' +'-global_flags/2-fun-0-' +command_input +'-execute_root/4-fun-0-' +'-usage_help/3-fun-0-' +'-cmd_help/4-fun-0-' +'-cmd_help/4-fun-1-' +'-cmd_help/4-fun-2-' +'-cmd_help/4-fun-4-' +'-execute/2-fun-0-' +starts_with +'-execute/2-fun-1-' +add_command_from_stub +constant +'gleam@function' +pretty_print +println +'gleam@io' +run_and_handle +execute +do_execute +lazy_unwrap +cmd_help +append_builder +from_strings +'gleam@string_builder' +unwrap +usage_help +to_rgb_hex +italic +underline +bold +'gleam_community@ansi' +heading_style +subcommands_help +subcommand_help +wrap_with_space +help_flag +sanitize_path +is_not_empty +pretty_help +from_rgb255 +'gleam_community@colour' +execute_root +global_flags +global_flag_tuple +global_flag +flag_tuple +command_node +empty_command +with_name +without_pretty_help +with_config +do_fold +from_result +'gleam@option' +map_values +has_key +'-from_list/1-fun-0-' +'-fold/3-fun-0-' +'-filter/2-fun-0-' +order +is_ok +'-one_of/1-fun-0-' +'-one_of/1-fun-1-' +'-none_of/1-fun-0-' +'-none_of/1-fun-1-' +'-each/1-fun-0-' +none_of +'gleam@set' +'-string/0-fun-1-' +'-string/0-fun-0-' +'-string_list/0-fun-1-' +'-string_list/0-fun-0-' +'-attempt/2-fun-0-' +'-wrap_with_constraint/2-fun-0-' +'-construct_value/3-fun-0-' +'-compute_flag/2-fun-12-' +'-compute_flag/2-fun-13-' +'-compute_flag/2-fun-10-' +'-compute_flag/2-fun-11-' +'-compute_flag/2-fun-8-' +'-compute_flag/2-fun-9-' +'-compute_flag/2-fun-6-' +'-compute_flag/2-fun-7-' +'-compute_flag/2-fun-4-' +'-compute_flag/2-fun-5-' +'-compute_flag/2-fun-2-' +'-compute_flag/2-fun-3-' +'-compute_flag/2-fun-0-' +'-compute_flag/2-fun-1-' +'-int/0-fun-1-' +'-int/0-fun-0-' +'-int_list/0-fun-1-' +'-int_list/0-fun-0-' +'-float/0-fun-1-' +'-float/0-fun-0-' +'-float_list/0-fun-1-' +'-float_list/0-fun-0-' +'-bool/0-fun-1-' +'-bool/0-fun-0-' +'-update_flag_value/2-fun-1-' +'-update_flag_value/2-fun-0-' +map_error +'-update_flag_value/2-fun-2-' +'-attempt_toggle_flag/2-fun-2-' +get_floats +get_floats_value +get_float +get_float_value +get_strings_value +get_string_value +get_bool_value +get_ints +get_ints_value +get_int +get_int_value +split_once +drop_left +update_flags +attempt_toggle_flag +update_flag_value +replace_error +flags_help +flag_help +flag_type_help +float_list +undefined_flag_err +no_value_flag_err +layer +layer_invalid_flag +li +b +compute_flag +construct_value +flag_not_provided_error +access_type_error +'gleam@map' +build_map +wrap_with_constraint +attempt +flag_builder +length_mismatch +'-update_group/1-fun-0-' +'-map_fold/3-fun-0-' +'-unique/1-fun-0-' +'-key_find/2-fun-0-' +'-key_filter/2-fun-0-' +'-key_pop/2-fun-0-' +'-permutations/1-fun-0-' +'-permutations/1-fun-1-' +'-permutations/1-fun-2-' +'-last/1-fun-0-' +'-combinations/2-fun-0-' +'-combinations/2-fun-1-' +'-do_combination_pairs/1-fun-0-' +'-transpose/1-fun-0-' +'-transpose/1-fun-1-' +'-do_shuffle_by_pair_indexes/1-fun-0-' +'gleam@float' +'-shuffle/1-fun-0-' +shuffle +do_shuffle_by_pair_indexes +do_shuffle_pair_unwrap +interleave +transpose +combination_pairs +do_combination_pairs +combinations +do_scan +reduce +sized_chunk +do_sized_chunk +do_chunk +take_while +do_take_while +drop_while +window_by_2 +window +do_window +permutations +do_partition +try_each +each +key_set +key_pop +pop_map +do_pop_map +pop +do_pop +key_filter +key_find +split_while +do_split_while +do_split +repeat +do_repeat +compare +'gleam@int' +tail_recursive_range +merge_sort +merge_down +merge_up +intersperse +do_intersperse +do_unzip +strict_zip +do_zip +find_map +fold_until +try_fold +index_fold +do_index_fold +fold_right +map_second +'gleam@pair' +map_fold +'gleam@dict' +flat_map +do_concat +reverse_and_prepend +prepend +do_take +try_map +do_try_map +index_map +do_index_map +map2 +do_map2 +do_map +filter_map +do_filter_map +do_filter +update_group +rest +contains +'-binary_to_term/1-fun-0-' +'-unsafe_binary_to_term/1-fun-0-' +priv_directory +make_reference +unsafe_binary_to_term +rescue +erlang_timestamp +gleam_erlang_ffi +collect_test_functions +run_test_suite +'showtime@internal@erlang@runner' +some +'-mk_runner/2-fun-0-' +'gleam@string' +'-mk_runner/2-fun-1-' +mixed +'-mk_runner/2-fun-2-' +'-start_with_args/2-fun-0-' +end_test_run +'gleam@list' +collect_modules +'showtime@internal@erlang@discover' +start_test_run +'showtime@internal@erlang@module_handler' +'showtime@internal@erlang@event_handler' +'-main/0-fun-0-' +start_arguments +'gleam@erlang' +with_pretty_help +default_pretty_help +one_of +'glint@flag@constraint' +string_list +start_with_args +let_assert +gleam_error +get_string +'gleam@result' +get_strings +'glint@flag' +mk_runner +showtime +already_listening +register_listener +lookup_listener +dtls_listeners_spec +dtls_connection_sup_dist +dtls_connection_child_spec +ssl_upgrade_server_session_cache_sup_dist +ssl_unknown_listener +tls_server_session_ticket_sup_dist +sup_name +ssl_listen_tracker_sup_dist +tracker_name +ssl_upgrade_server_session_child_spec +ssl_server_session_child_spec +tls_server_session_child_spec +listen_options_tracker_child_spec +tls_dist_connection_sup +start_child_dist +server_instance_child_spec +tls_connection_child_spec +dtls_sup_child_spec +tls_sup_child_spec +update_data_lock +collect_invalid_tickets +remove_ticket +obfuscate_ticket_age +ticket_data +psk_identity +verify_ticket_sni +last_elem +get_max_early_data +iterate_tickets +do_find_ticket +inital_state +remove_invalid_tickets +update_ticket +unlock_tickets +store_ticket +remove_tickets +lock_tickets +get_tickets +find_ticket +client_ssl_otp_session_cache +cache_name +'-init_certs_keys/3-fun-0-' +'-prio_ecdsa/1-lc$^0/1-0-' +namedCurves +'-prio_ecdsa/1-fun-1-' +privat_key +'-prio_rsa_pss/1-fun-0-' +'-prio_rsa/1-fun-0-' +'-prio_dsa/1-fun-0-' +'-init_private_key/3-lc$^0/1-0-' +'-dh_file/2-lc$^0/1-0-' +session_cb_opts +session_cache_client_max +session_cache_server_max +max_session_cache_size +client_session_cb_init_args +server_session_cb_init_args +dhfile +dh_file +asn1_NOVALUE +modp2048_generator +modp2048_prime +'DHParameter' +dh +init_diffie_hellman +'EcpkParameters' +asn1_OPENTYPE +'PrivateKeyInfo_privateKeyAlgorithm' +'PrivateKeyInfo' +pem_entry_decode +password +keyfile +invalid_key_id +key_id +init_private_key +init_certificate_file +certfile +init_certificates +cacertfile +crl_cache +init_cacerts +init_manager_name +internal_active_n +get_internal_active_n +server_session_ticket_max_early_data +get_max_early_data_size +server_session_ticket_store_size +get_ticket_store_size +server_session_ticket_lifetime +get_ticket_lifetime +prio_dsa +prio_rsa +pkix_hash_type +'HashAlgorithm' +prio_params_1 +prio_rsa_pss +using_curve +ecc_curves +prio_ecdsa +prio_eddsa +prioritize_groups +dss +engine +rsa_pss_pss +'RSASSA-PSS-params' +ecdsa +eddsa +namedCurve +'ECPrivateKey' +dsa +'DSAPrivateKey' +rsa +'RSAPrivateKey' +group_pairs +private_key +certs +key +init_cert_key_pair +certs_keys +init_certs_keys +dh_params +cert_key_alts +erl_dist +load_mitigation +no_longer_defined +exists_equivalent +register_unique_session +do_register_session +client_register_session +client_register_unique_session +session_validation +init_session_validator +start_session_validator +valid_session +validate_session +session_cache +pem_cache +fileref_db_handle +crl_db_info +cert_db_ref +cert_db_handle +validate_sessions +lifetime +pre_1_3_session_opts +client +delete_crls +insert_crls +invalidate_session +unique +register_session +clean_cert_db +cache_pem_file +connection_init +ssl_manager_dist +'-remove_cert_entries/2-inlined-0-' +'-refresh_trusted_certs/2-inlined-0-' +'-remove/1-fun-0-' +'-lookup_trusted_cert/4-lc$^0/1-0-' +'-refresh_trusted_certs/2-fun-0-' +'-extract_trusted_certs/1-lc$^0/1-0-' +'-lookup/2-fun-0-' +'-lookup/2-lc$^1/1-1-' +'-add_certs_from_der/3-fun-0-' +'-add_certs_from_der/3-lc$^1/1-0-' +'-certs_from_der/1-lc$^1/1-1-' +'-certs_from_der/1-lc$^0/1-0-' +'-add_certs_from_pem/3-fun-0-' +not_encrypted +'Certificate' +'-add_certs_from_pem/3-lc$^1/1-0-' +'-add_crls/3-lc$^0/1-1-' +'-add_crls/3-lc$^1/1-0-' +'-remove_crls/2-lc$^0/1-1-' +'-remove_crls/2-lc$^1/1-0-' +'-remove_cert_entries/2-fun-0-' +remove_cert_entries +insert_cert_entries +insert_delete_lists +update_certs +'TBSCertList' +der_decode +'CertificateList' +crl_issuer +rm_crls +remove_crls +add_crls +new_trusted_cert_entry +pkix_decode_cert +decoded +pkix_normalize_name +'OTPTBSCertificate' +'OTPCertificate' +cert +decode_cert +add_cert +add_certs_from_pem +certs_from_der +add_certs_from_der +remove_certs +init_ref_db +db_size +not_cached +ref_count +select_certentries_by_ref +remove_trusted_certs +decode_pem_file +pem_decode +der_otp +extract_trusted_certs +refresh +file_to_certificats +refresh_trusted_certs +der +add_trusted_certs +extracted +lookup_trusted_cert +ssl_otp_crl_issuer_mapping +ssl_otp_crl_cache +ssl_otp_ca_ref_file_mapping +ssl_otp_ca_file_ref +ssl_otp_cacertificate_db +ssl_manager_type +bypass_pem_cache +bypass_cache +ssl_pem_cache_clean +pem_check_interval +pem_cache_validate +init_pem_cache_validator +start_pem_cache_validator +refresh_trusted_db +clear_pem_cache +create_pem_cache +invalidate_pem +unconditionally_clear_pem_cache +cache_pem +start_link_dist +ssl_pem_cache_dist +client_session_ticket_lifetime +client_session_ticket_store_size +ticket_store_spec +session_and_cert_manager_child_spec +pem_cache_child_spec +session_lifetime +session_cb_init_args +session_cb +manager_opts +ssl_admin_child_spec +logger_h_common_logger_std_h_ssl_handler_restarting +logger_std_h_ssl_handler +asn1_certificates +verify_data +request_update +exchange_keys +certificate_list +certificate_request_context +status_type +hashsign_algorithm +algorithm +protocol_version +certificate_authorities +hashsign_algorithms +certificate_types +hashsign +params_bin +ticket +ticket_nonce +ticket_age_add +ticket_lifetime +compression_method +cipher_suite +server_version +compression_methods +client_version +'-parse_cipher_suites/1-lc$^0/1-0-' +format_uknown_cipher_suite +number_to_hex +prepend_eighths_hex +prepend_hex +prepend_row +prepend_first_row +update_row +calculate_padding +end_row +row_prefix +leading +convert_to_hex +msg_type +tls_record_version +header_prefix_tls_record +format_tls_record +header_prefix +server_hello_selected_version +get_server_version +client_hello_versions +get_client_version +suite_map_to_str +suite_bin_to_map +format_cipher +parse_cipher_suites +server_hello_done +hello_request +end_of_early_data +server_key_exchange +key_update +encrypted_extensions +client_key_exchange +certificate +hello_verify_request +certificate_verify_1_3 +certificate_verify +certificate_status +certificate_request_1_3 +certificate_1_3 +certificate_request +server_key_params +new_session_ticket +server_hello +client_hello +parse_handshake +format_handshake +build_tls_record +own_alert_format +alert_format +role +statename +own +alerter +direction +handshake +outbound +inbound +stop_logger +filter_non_ssl +ssl_handler +start_logger +asn1db +asn1_ns +asn1rt_nif +'PKCS-FRAME' +'OTP-PUB-KEY' +pubkey_os_cacerts +pubkey_ocsp +pubkey_crl +pubkey_cert_records +pubkey_cert +pubkey_ssh +pubkey_pbe +pubkey_pem +rand_cache_size +fips_mode +crypto_ec_curves +ssl_connection_sup +ssl_admin_sup +ssl_sup +ssl_app +ssl_trace +ssl_logger +ssl_crl_hash_dir +ssl_crl_cache_api +ssl_crl_cache +ssl_crl +ssl_certificate +ssl_pkix_db +ssl_pem_cache +ssl_manager +ssl_upgrade_server_session_cache_sup +ssl_server_session_cache_sup +ssl_server_session_cache_db +ssl_server_session_cache +ssl_client_session_cache_db +ssl_session +tls_dist_server_sup +tls_dist_sup +ssl_dist_admin_sup +ssl_dist_connection_sup +ssl_dist_sup +inet6_tls_dist +inet_tls_dist +tls_client_ticket_store +tls_bloom_filter +ssl_listen_tracker_sup +ssl_alert +ssl_srp_primes +ssl_cipher_format +ssl_cipher +ssl_record +ssl_handshake +ssl_gen_statem +ssl_config +tls_dtls_connection +ssl_session_cache_api +dtls_server_session_cache_sup +dtls_server_sup +dtls_sup +dtls_listener_sup +dtls_packet_demux +dtls_gen_connection +dtls_connection_sup +dtls_v1 +dtls_socket +dtls_record +dtls_handshake +dtls_connection +ssl_dh_groups +tls_dyn_connection_sup +tls_sup +tls_server_session_ticket +tls_server_session_ticket_sup +tls_server_sup +tls_sender +tls_gen_connection +tls_connection_sup +tls_v1 +tls_socket +tls_record_1_3 +tls_record +tls_handshake_1_3 +tls_handshake +tls_gen_connection_1_3 +tls_server_connection_1_3 +tls_client_connection_1_3 +tls_connection +bad_descriptor +get_fd +ip_comm +socket_type +listen_loop +listen_init +listen_owner +start_listen +socket_start_failed +mk_tuple_list +httpd_child_spec_nolisten +httpd_child_spec_listen +bind_address +could_not_consult_proplist_file +validate_properties +proplist_file +httpd_config +valid_options +accept_timeout +'-lookup_cookies/3-fun-0-' +'-parse_set_cookies/2-lc$^0/1-0-' +'-parse_set_cookies/2-lc$^1/1-1-' +'-parse_set_cookie_attributes/1-lc$^0/1-0-' +'-accept_cookies/3-fun-0-' +image_of +path_sort +valid_cookies +is_cookie_expired +cookie_expires +accept_domain +accept_path +accept_cookie +accept_cookies +skip_right_most_slash +path_default +domain_default +datetime_to_gregorian_seconds +convert_netscapecookie_date +cookie_attributes +parse_set_cookie_attribute +parse_set_cookie_attributes +substr +parse_set_cookie +parse_set_cookies +chr +is_set_cookie_valid +add_domain +cookie_to_string +cookies_to_string +merge_domain_parts +lookup_domain_cookies +is_hostname +lookup_cookies +session_cookies +headers +request_path +request_host +http_cookie +maybe_dets_close +failed_open_file +cookie_db +httpc_manager__cookie_db +httpc_manager__session_cookie_db +httpc_manager__handler_db +httpc_manager__session_db +do_print_trace +print_trace +do_print_inets_trace +print_inets_trace +format_timestamp +closed_file +handle_trace +hopefully_traced +error_to_exit +ctp +change_pattern +bad_level +make_pattern +set_level +stop_trace +valid_trace_service +do_enable +trace_port +enable2 +invalid_service +'API_violation' +'-which_sessions2/1-lc$^0/1-0-' +'-which_sessions2/1-lc$^1/1-1-' +'-which_sessions2/1-lc$^2/1-2-' +'-code_change/3-fun-1-' +'-code_change/3-fun-0-' +'-get_manager_info/1-lc$^0/1-0-' +'-get_handler_info/1-lc$^0/1-0-' +'-get_handler_info/1-lc$^1/1-1-' +'-select_session/2-lc$^0/1-0-' +tp +tpl +handle_verbose +get_unix_socket_opts +get_socket_opts +get_verbose +get_port +get_ipfamily +get_cookies +get_max_sessions +get_keep_alive_timeout +get_max_keep_alive_length +get_max_pipeline_length +get_pipeline_timeout +get_https_proxy +get_proxy +scheme_default_port +unexpected +maybe_error +uri_parse +make_db_name +handler_db_name +session_cookie_db_name +cookie_db_name +session_db_name +do_store_cookies +handle_cookies +generate_request_id +is_inets_manager +pipeline_or_keep_alive +no_session +no_connection +host_port +candidates +is_idempotent +select_session +start_handler +convert_options +get_handler_info +sort_handlers2 +sort_handlers +sessions +get_manager_info +update_session_table +upgrade_from_pre_5_8_1 +downgrade_to_pre_5_8_1 +close_db +request_id +option_items +url +open_db +do_init +pipeline +keep_alive +session_type +which_session_info +non_session +bad_session +good_session +which_sessions_order +which_sessions2 +session_is +delete_session +pos +update_session +session_id +lookup_session +session +insert_session +request_done +redirect_request +retry_or_redirect_request +retry_request +no_such_service +invalid_field +invalid_value +headers_error +http_request_h +streaming_error +field +no_scheme +return_map +service_not_available +verify_peer +inets_not_started +invalid_method +invalid_request +patch +post +'-services/0-lc$^0/1-0-' +'-service_info/1-lc$^0/1-0-' +to_lower +'-handle_request/9-lc$^0/1-0-' +eof_body +'-mk_chunkify_fun/1-fun-0-' +'-http_options/3-fun-0-' +to_upper +'-http_options_default/0-fun-0-' +'-http_options_default/0-fun-1-' +essl +'-http_options_default/0-fun-2-' +'-http_options_default/0-fun-3-' +'-http_options_default/0-fun-4-' +'-http_options_default/0-fun-5-' +'-boolfun/0-fun-0-' +'-request_options_defaults/0-fun-0-' +'-request_options_defaults/0-fun-1-' +'-request_options_defaults/0-fun-2-' +'-request_options_defaults/0-fun-3-' +'-request_options/3-fun-0-' +bad_body_generator +check_body_gen +child_name +child_name2info +header_parse +validate_headers +header_record +validate_unix_socket +validate_verbose +validate_socket_opts +validate_port +validate_ip +validate_ipfamily +inet6fb4 +validate_ipv6 +validate_cookies +validate_max_pipeline_length +validate_pipeline_timeout +validate_max_keep_alive_length +validate_keep_alive_timeout +validate_max_sessions +validate_https_proxy +validate_proxy +not_an_option +pipeline_timeout +max_sessions +max_pipeline_length +max_keep_alive_length +keep_alive_timeout +https_proxy +ipfamily +validate_ipfamily_unix_socket +bad_options_combo +request_options_sanity_check +request_options +request_options_defaults +boolfun +autoredirect +proxy_auth +url_encode +connect_timeout +http_options_default +value_lazy +http_options +headers_as_is +body_format +maybe_format_body +full_result +return_answer +saved_to_file +handle_answer +mk_chunkify_fun +ensure_chunked_encoding +bad_scheme +scheme_to_atom +add_question_mark +bad_body +normalize_host +maybe_add_brackets +userinfo +ipv6_host_with_brackets +unix_socket +socket_opts +receiver +chunkify +normalize_and_parse_url +service_info +stand_alone +start_standalone +stream_next +reset_cookies +which_sessions +report_event +which_cookies +cookie_header +default_port +cookies +recompose +parse_failed +store_cookies +cacerts +cacerts_get +customize_hostname_check +pkix_verify_hostname_match_fun +ssl_verify_host_options +set_option +cancel_request +check_request +do_request +profile_name +no_profile +stop_child +data_dir +child_specs +only_session_cookies +'-children/0-lc$^0/1-0-' +'-children/0-lc$^1/1-1-' +default_profile +is_httpc +is_httpd +httpd_child_spec +httpc_child_spec +children +get_services +runtime_dependencies +mod_trace +mod_security_server +mod_security +mod_responsecontrol +mod_range +mod_log +mod_head +mod_get +mod_esi +mod_disk_log +mod_dir +mod_cgi +mod_auth_server +mod_auth_plain +mod_auth_mnesia +mod_auth_dets +mod_auth +mod_alias +mod_actions +httpd_sup +httpd_socket +httpd_script_env +httpd_response +httpd_request_handler +httpd_request +httpd_misc_sup +httpd_manager +httpd_logger +httpd_log +httpd_instance_sup +httpd_file +httpd_example +httpd_esi +httpd_custom_api +httpd_custom +httpd_connection_sup +httpd_cgi +httpd_acceptor_sup +httpd_acceptor +http_util +http_transport +http_chunk +httpc_cookie +httpc_sup +httpc_response +httpc_request +httpc_profile_sup +httpc_manager +httpc_handler_sup +httpc_handler +httpc +inets_lib +inets_trace +inets_service +inets_app +inets_sup +inets +gleam_community_colour +tom +snag +glint +gleam_otp +gleam_httpc +gleam_http +gleam_community_ansi +gap +'day7@solve' +'day7@day7_test' +simplifile +gleeunit +gleam_stdlib +gleam_erlang +adglent +'-open/1-fun-0-' +'-fake_reader/1-fun-0-' +'-reader/2-fun-0-' +'-com_enc_end/1-lc$^0/1-0-' +'-keep_ftr_keywords/0-fun-0-' +'-keep_ftr_keywords/0-fun-1-' +'-predef_macros/2-lc$^0/1-0-' +'-predef_macros/2-lc$^1/1-1-' +'-ftr_macro/1-fun-0-' +'-ftr_macro/1-fun-1-' +'-wait_request/1-lc$^0/1-0-' +'-eval_if/2-fun-0-' +'-interpret_file_attr/3-fun-0-' +interpret_file_attr +interpret_file_attribute +line1 +start_loc +add_line +expand_var1 +expand_var +wait_epp_reply +epp_reply +var_or_atom +find_mismatch +coalesce_strings +stringify +stringify1 +token_src +comma +classify_token_1 +classify_token +update_fun_name_1 +update_fun_name +expand_arg +expand_macro +macro_arg +count_args +store_arg +macro_args +bind_args +'FUNCTION_NAME' +'FUNCTION_ARITY' +get_macro_uses +check_uses +expand_macro1 +expand_macros +check_macro_arg +macro_expansion +macro_pars_end +macro_pars_cont +macro_pars +skip_elif +skip_else +skip_toks +scan_file1 +scan_endif +scan_elif +to_conses +defined +rewrite_expr +assert_guard_expr +eval_if +scan_if +scan_else +is_macro_defined +scan_ifndef +scan_ifdef +lib +scan_include_lib1 +scan_include_lib +expand_lib_dir +scan_include1 +scan_include +scan_undef +macro_ref +macro_uses +scan_define_cont +scan_define_2 +scan_define_1 +scan_define +update_features +scan_feature +scan_err_warn +'BASE_MODULE_STRING' +'BASE_MODULE' +scan_extends +'MODULE_STRING' +'MODULE' +scan_module_1 +extends +scan_module +leave_prefix +in_prefix +include_lib +ifndef +ifdef +endif +elif +define +scan_toks +leave_file +enter_file_reply +enter_file2 +enter_file +wait_req_skip +wait_req_scan +close_file +epp_request +wait_request +user_predef +ftr_macro +'FILE' +'LINE' +'MACHINE' +'OTP_RELEASE' +'FEATURE_AVAILABLE' +'FEATURE_ENABLED' +predef_macros +keep_ftr_keywords +source_name +init_server +not_typed +normalize_typed_record_fields +com_encoding +com_enc_end +com_enc +com_space +com_sep +com_oding +com_c +com +com_nl +read_encoding_from_file +fake_reader +in_comment_only +read_encoding +encoding_to_string +features +get_features +premature_end +missing_parenthesis +missing_comma +ftr_after_prefix +elif_after_else +cannot_parse +redefine_predef +redefine +mismatch +illegal_function_usage +illegal_function +duplicated_argument +arg_error +'NYI' +circular +macro_defs +includes +macros +print_stack_frame +stack_filter +print_error +main +aoc2023 +'X' +'-predefined_functions/1-lc$^0/1-0-' +'-predefined_functions/1-lc$^1/1-1-' +'-predefined_functions/1-lc$^2/1-2-' +'-predefined_functions/1-lc$^3/1-3-' +'-get_optional_callbacks/1-lc$^0/1-0-' +'-module_predef_func_beh_info/2-lc$^0/1-0-' +module_predef_funcs_mod_info +make_list +module_predef_func_beh_info +get_optional_callbacks +predefined_functions +add_predefined_functions +pos_integer +nonempty_string +nonempty_maybe_improper_list +nonempty_improper_list +nonempty_bitstring +nonempty_binary +non_neg_integer +neg_integer +maybe_improper_list +iolist +identifier +byte +bitsize +send_op +list_op +comp_op +bool_op +new_type_test +stream_state +retired_ecb_cipher_aliases +retired_ctr_cipher_aliases +retired_cfb_cipher_aliases +retired_cbc_cipher_aliases +hmac_state +user_info +uri +query +fragment +default_scheme_port_number +node_cookie +cookie +local_time_to_universal_time +rehash +is_module_native +literal_value +is_literal_list +is_literal +get_anno +stream_init +stream_encrypt +stream_decrypt +rand_uniform +poly1305 +next_iv +hmac_update +hmac_init +hmac_final_n +hmac_final +hmac +crypto_dyn_iv_update +crypto_dyn_iv_init +cmac +block_encrypt +block_decrypt +stop_clear +lclose +inc_wrap_file +accessible_logs +modify_line +get_attributes +get_attribute +token_info +set_attribute +attributes_info +hash +get_stacktrace +safe_relative_path +find_src +stop_service +start_service +scheme_defaults +parse_query +make_integer +is_directory +custom_clean +check_enum +integer_to_hexlist +hexlist_to_integer +ssh_hostkey_fingerprint +ssh_encode +ssh_decode +safe_multi_server_call +ssl_accept +negotiated_next_protocol +connection_info +cipher_suites +get_debug +enableYearChange +wxCalendarCtrl +public_key +os_mon_mib +httpd_util +httpd_conf +httpd +http_uri +ftp +erts_alloc_config +dbg +ct_slave +asn1ct +intersection1 +aoc2023_test +is_settable +anno_info +simplify +reset_simplify +set_anno +set_record +set_line +is_string +is_filename +is_anno2 +is_anno1 +new_location +'aoc2023@@main' +'-inlined-new_column/2-' +'-inlined-incr_column/2-' +'-options/1-fun-1-' +'-remove_digit_separators/2-lc$^0/1-0-' +let +cond +f_reserved_word +nl_tabs +spcs +nl_spcs +scan_error +tok3 +tok2 +scan_check1 +scan_check +comment +scan_comment +scan_comment_fun +skip_comment +skip_comment_fun +float_end +scan_exponent +scan_exponent_sign +scan_fraction +scan_based_int +remove_digit_separators +with_underscore +scan_number +caret_char_code +escape_char +scan_hex_end +scan_hex +scan_escape +scan_string1 +scan_string_col +scan_string_no_col +scan_string0 +scan_qatom +char_error +scan_string +scan_char +scan_white_space +scan_white_space_fun +skip_white_space +skip_white_space_fun +scan_tabs +scan_tabs_fun +scan_spcs +scan_spcs_fun +newline_end +scan_nl_white_space +scan_nl_white_space_fun +scan_nl_tabs +scan_nl_tabs_fun +scan_nl_spcs +scan_nl_spcs_fun +scan_newline +scan_dot +scan_name +scan_variable +scan_variable_fun +scan_atom +scan_atom_fun +not_character +'&' +'@' +'\\' +'^' +'`' +'~' +white_space +no_underscore +scan1 +string1 +tokens1 +expand_opt +reserved_word_fun +ssa_checks +compiler_internal +text_fun +return_white_spaces +return_comments +string_thing +category +erl_scan_continuation +no_col +illegal +'-open_1/3-fun-0-' +match_binary +match_writable +match_delayed +compressed_one +match_compressed +add_unless_matched +add_implicit_modes +open_layer +open_1 +reverse_pairs +append_list +fetch_keys +no_source +'-c/2-fun-0-' +'-c/5-fun-0-' +'-format_docs/1-fun-0-' +'-lc/1-fun-0-' +'-lc_batch/1-lc$^0/1-0-' +'-i/1-fun-0-' +'-all_procs/0-fun-0-' +'-m/0-fun-0-' +'-lm/0-lc$^0/1-0-' +'-nregs/0-fun-0-' +'-all_regs/0-lc$^0/1-0-' +'-print_node_regs/1-fun-0-' +'-print_node_regs/1-fun-1-' +appcall +parsetools +yecc +y +tools +xref +xm +seconds_to_daystime +get_uptime +uptime +max_length +ls_print +ls +pwd +portformat +portline +procformat +procline +portinfo +pwhereis +pids_and_ports +print_node_regs +all_regs +regs +nregs +split_print_exports +print_exports +get_compile_info +get_compile_options +print_md5 +print_object_file +bi +f_p_e +lm +mm +mformat +bt +all_procs +iformat +mfa_string +'more (y/n)? (y) ' +paged_output +less +ni +l +nc +d +split_def +'@o' +'@i' +'@d' +lc_batch +output_generated +purge_and_load +src_suffix +from_opt +from_core +from_asm +is_from_opt +is_outdir_opt +ensure_outdir +ensure_from +report_warnings +compile_and_load +safe_recompile +find_beam_1 +find_beam +source +find_source +old_options +format_docs +render_callback +hcb +render_type +ht +unknown_format +render +outdir +help +logger_h_common_logger_std_h_default_restarting +logger_std_h_default +handler_busy +cancel_repeated_filesync +set_repeated_filesync +check_common_config +string_to_binary +formatter_crashed +try_format +formatter_error +caught +do_log_to_binary +log_to_binary +log_handler_info +restart_impossible +rep_sync_tref +repeated_filesync +last_op +handler_state +ctrl_sync_count +olp +file_ctrl_process_not_started +'-fix_modes/1-lc$^0/1-0-' +'-fix_modes/1-fun-1-' +'-file_ctrl_start/2-fun-0-' +error_notify +maybe_notify_error +decompress_data +decompress_file +compress_data +compress_file +rot_file_name +rotate_files +rotate_file +maybe_rotate_file +maybe_update_compress +maybe_remove_archives +curr_size +rotation +update_rotation +sync_dev +write_to_dev +could_not_create_dir_for_file +could_not_reopen_file +ensure_open +ensure_file +maybe_ensure_file +file_ctrl_loop +open_failed +dev +file_ctrl_init +file_ctrl_call +file_ctrl_filesync +file_write +file_ctrl_stop +file_ctrl_start +delayed_write_close +close_log_file +write_res +sync_res +last_check +inode +handler_name +open_log_file +write_failed +config_changed +delayed_write +fix_modes +no_repeat +filesync_repeat_interval +fix_file_opts +merge_default_config +normalize_config +modes +max_no_files +max_no_bytes +file_check +compress_on_rotate +check_h_config +file_ctrl_pid +filesync +'-format/2-fun-0-' +'-check_template/1-fun-0-' +check_timezone +check_offset +check_template +check_limit +invalid_formatter_template +do_check_config +offset_to_utc +utc_log +get_utc_config +utc_to_offset +get_offset +get_depth +get_max_size +default_template +add_default_template +add_default_config +month +error_logger_notice_header +add_legacy_title +maybe_add_legacy_header +timestamp_to_datetimemicro +system_time_to_rfc3339 +time_designator +format_time +get_first +get_last +chardata_to_list +limit_depth +reformat +chars_limit_to_opts +format_msg +linearize_template +template +resource +cleanup +pong +ping +'-wait_nodes/2-fun-0-' +sync_nodes_optional +get_sync_optional_nodes +sync_nodes_mandatory +get_sync_mandatory_nodes +sync_nodes_timeout +get_sync_timeout +get_sync_data +check_up +mandatory_nodes_down +wait_nodes +sync_nodes +'__not_used' +dist_ac_took_control +go +'-start_interval_loop/5-fun-0-' +remove_timer +schedule_interval_timer +interval_loop +start_interval_loop +maybe_req +req +hms +hours +minutes +now_diff +tc +interval +send_interval +apply_repeatedly +apply_interval +kill_after +send_local +apply_once +instant +logger_proxy_logger_proxy_restarting +cond_lowercase +flat_trunc +prefixed_integer +unprefixed_integer +string_field +limit_field +limit_cdata_to_chars +cdata_to_chars +final +limit_iolist_to_chars +iolist_to_chars +float_data +signbit +abs_float_f +float_f +fwrite_f +float_exp +float_man +abs_float_e +float_e +fwrite_e +column +base +uniconv +control_limited +control_small +decr_pc +build_limited +not_small +build_small +w +count_small +collect_cc +field_value +field_width +modifiers +collect_cseq +collect +print_maps_order +print_strings +print_encoding +print_pad_char +print_precision +print_field_width +control_char +pad_char +precision +strings +width +wrap +quiet +'-to_drop/0-lc$^0/1-0-' +show +show_custom_provider_faulty_add_return +'$#erlang-history-custom-return' +show_custom_provider_faulty_load_return +'$#erlang-history-custom-crash' +show_custom_provider_crash +'$#erlang-history-size' +show_size_warning +'$#erlang-history-unexpected-close' +show_unexpected_close_warning +'$#erlang-history-unexpected-return' +show_unexpected_warning +'$#erlang-history-invalid-file' +show_invalid_file_warning +'$#erlang-history-invalid-chunk-warn' +show_invalid_chunk_warning +'$#erlang-history-rename-warn' +show_rename_warning +shell_history_drop +to_drop +shell_history_path +find_path +'$#erlang-history-disable' +disable_history +'$#erlang-history-upgrade' +upgrade_version +'$#erlang-history-resize-result' +new_size_too_small +change_size +'$#erlang-history-resize-attempt' +resize_log +'$#erlang-history-report-repairs' +report_repairs +shell_history_file_bytes +find_wrap_values +disk_log_info +'$#erlang-history-invalid-header' +not_a_log_file +invalid_index_file +'$#erlang-history-file-error' +'$#erlang-history-arg-mismatch' +handle_open_error +maybe_drop_header +maybe_resize_log +read_full_log +ensure_dir +ensure_path +log_options +open_log_no_size +open_log +init_running +is_user +shell_history +history_status +open_new_log +repair_log +wait_for_kernel_safe_sup +no_such_log +need_repair +name_already_open +invalid_header +repair +arg_mismatch +badbytes +recovered +'$#group_history' +'-write/2-fun-0-' +chars_length +test_limit_bitstring +test_limit_map_assoc +test_limit_map_body +test_limit_map +test_limit_tuple +test_limit_tail +test_limit +limit_bitstring +limit_map_assoc +limit_map_body +limit_map +limit_tuple +limit_tail +limit +binrev +collect_line_list +collect_line_bin +collect_chars_list +collect_chars1 +count_and_find_utf8 +printable_latin1_list +deep_unicode_char_list +deep_latin1_char_list +write_char_as_latin1 +write_latin1_char +write_unicode_char +string_char +write_string1 +unicode_as_latin1 +write_string_as_latin1 +write_latin1_string +write_unicode_string +unicode_as_unicode +name_char +name_chars +reserved_word +quote_atom +write_possibly_quoted_atom +tsub +write_binary_body +write_binary +write_map_assoc +write_map_body +write_map +write_ref +write_port +write_tuple +write_tail +fwrite_g +write1 +intermediate +maps_order +add_modifier +do_format_prompt +indentation +test_modules_loaded +build_text +unscan +unscan_format +scan +'-edit_line1/2-lc$^0/1-0-' +'-over_word/3-lc$^0/1-0-' +'-chars_before/1-lc$^0/1-0-' +'-current_line/1-fun-0-' +cp_len +gc_len +current_chars +length_after +length_before +chars_before +multi_line_prompt +erase_inp +over_paren_auto +over_paren +word_char +over_non_word +over_word2 +over_word1 +until_quote +over_word +skip_up +skip_down +do_op +insert_search +kill_line +transpose_char +backward_kill_word +yank +auto_blink +beginning_of_expression +backward_line +backward_word +forward_line +forward_word +forward_char +kill_word +backward_char +end_of_line +beginning_of_line +transpose_word +yank_pop +clear_line +forward_delete_char +backward_delete_char +key_map +ctlu +prefix_arg +redraw +end_of_expression +tab_expand_full +tab_expand +search_meta_left_sq_bracket +search_meta +new_line_finish +new_line +meta_o +meta_meta +meta_csi +ctlx +csi +edit +kill_buffer +'-normalize_expand_fun/2-fun-0-' +'-get_line1/5-lc$^3/1-0-' +'-get_line1/5-lc$^4/1-1-' +format_prompt +prompt_bytes +edit_password +get_password1 +get_password_line +search_down_stack +search_up_stack +save_line_buffer +pad_stack +get_all_lines +get_lines +save_line +down_stack +up_stack +stack +new_stack +get_line_timeout +remainder_after_nl +get_chars_echo_off1 +get_chars_echo_off +get_line_echo_off1 +get_line_echo_off +more_data +redraw_line +search_result +search_found +search_cancel +number_matches +format_matches +search_quit +expand_full +search_quit_prompt +edit_line1 +to_graphemes +meta_left_sq_bracket +prompt +erase_line +get_line1 +interrupted +get_chars_n_loop +current_line +get_chars_loop +get_chars_line +get_chars_n +get_password_chars +terminal +normalize_expand_fun +send_drv_reqs +send_drv +collect_chars +get_tty_geometry +exit_shell +driver_id +start_shell1 +whereis_shell +unicode_state +read_mode +line_buffer +convert_binaries +bc_req +default_output +default_input +execute_request +parse_erl_form +scan_erl_form +scan_erl_exprs +fread +conv_reason +get_password +sig +ebadf +canon +'-handle_request/2-lc$^0/1-0-' +'-handle_request/2-lc$^1/1-1-' +'-in_view/1-lc$^0/1-0-' +'-in_view/1-lc$^1/1-1-' +'-in_view/1-lc$^3/1-2-' +'-in_view/1-lc$^2/1-3-' +'-cols_multiline/4-lc$^0/1-0-' +'-npwcwidthstring/1-lc$^0/1-0-' +'-characters_to_output/1-fun-0-' +'-characters_to_buffer/1-fun-0-' +'-binary_to_latin1/1-lc$^0/1-0-' +tty_read_signal +tgoto_nif +tgetstr_nif +tgetflag_nif +tgetnum_nif +tgetent_nif +tgoto +tgetstr +tgetflag +tgetnum +tgetent +wcswidth +sizeof_wchar +wcwidth +isprint +tty_window_size +tty_encoding +tty_select +setlocale +tty_set +tty_init +tty_create +encode +char_to_latin1 +binary_to_latin1 +is_usascii +to_latin1 +ansi_sgr +ansi +insert_buf +characters_to_buffer +characters_to_output +xnfix +is_wide +not_printable +npwcwidth +next_grapheme +npwcwidthstring +update_geometry +cols +cols_multiline +split_cols_multiline +cols_after_cursor +in_view +right +left +move_cursor +split_cols +last_or_empty +unhandled_request +both +redraw_prompt_pre_deleted +writer_loop +user_drv_writer +reader_loop +user_drv_reader +winch +cont +reader_stop +reader +writer +init_term +standard_io_encoding +primitive +state_name +should_not_have_arrived_here_but_instead_in +'-inlined-loop_state_enter/9-' +'-format_log_single/2-fun-0-' +'-list_timeouts/1-lc$^0/1-0-' +list_timeouts +limit_client_info +terminate_sys_debug +bad_reply_action_from_state_function +do_reply_then_terminate +reply_then_terminate +bad_return_from_callback_mode +state_enter +callback_mode_result +get_callback_mode +parse_timeout_opts_abs +loop_done +loop_timeouts_update +loop_timeouts_cancel +loop_timeouts_register +loop_timeouts_start +loop_timeouts +loop_next_events +loop_state_change +loop_keep_state +loop_state_transition +loop_actions_next_event_bad +loop_actions_next_event +loop_actions_reply +bad_action_from_state_function +state_timeout +pop_callback_module +bad_state_enter_action_from_state_function +push_callback_module +change_callback_module +loop_actions_list +loop_actions +bad_return_from_state_function +repeat_state_and_data +repeat_state +bad_state_enter_return_from_state_function +stop_and_reply +loop_state_callback_result +handle_event_function +loop_state_callback +loop_event +loop_receive_result +t0q +loop_receive +loop_hibernate +wakeup_from_hibernate +event_string +insert_timeout +consume +sys_debug +timeouts +postponed +bad_return_from_init +init_result +params +replies +dirty_timeout +clean_timeout +postpone +'-gr_list/1-inlined-0-' +'-init_local_shell/2-fun-0-' +'-group_opts/1-fun-1-' +'-group_opts/1-fun-0-' +'-gr_list/1-fun-0-' +gr_list +gr_cur_index +gr_cur_pid +gr_del_pid +gr_set_num +gr_set_cur +gr_add_cur +gr_get_info +gr +gr_get_num +gr_new_group +gr_new +handle_req +mktemp +disable_reader +is_file +delete_line +delete_after_cursor +beep +move +move_rel +move_line +delete_chars +insert_over +expand_with_trim +put_expand_no_trim +put_expand +insert_chars_over +insert_chars +putc_raw +putc +redraw_prompt +move_combo +expand_below +below +shell_expand_location +expand_fun +group_opts +list_commands +unknown_group +j +r +h +'?' +switch_cmd +blink +edit_line +jcl +shell_esc +more_chars +activate +new_prompt +ctrl_c +contains_ctrl_g_or_ctrl_c +put_chars_sync +die +enable_reader +chomp +window_size +tty_geometry +get_unicode_state +get_terminal_state +interrupt +switch_loop +ctrl_g +editor_data +editor +handle_signal +open_editor +keep_state +set_unicode_state +keep_state_and_data +reinit +next_state +init_shell +init_local_shell +shell_slogan +init_remote_shell +init_noshell +exit_on_remote_shell_error +handles +init_standard_error +old +next_event +isatty +stdin +state_functions +callback_mode +'tty_sl -c -e' +current_group +whereis_group +start_shell +remsh +initial_shell +oldshell +nouser +noinput +get_user +wait_for_user_p +start_user +relay1 +start_relay +'-inlined-result/4-' +'-receive_response/3-anonymous-0-' +'-reqids_to_list/1-fun-0-' +mcall_map_replies +mcall_abandon +mcall_result +mcall_receive_replies +local_call +mcall_send_requests +mcall_send_request +mcall_local_call +expired +time_left +call_abandon +trim_stack_aux +use_all +nonexisting +call_result +multicast_send_requests +'no global_groups definiton' +illegal_function_call +global_group_not_runnig +not_boolean +'-handle_call/3-inlined-1-' +'-init/1-fun-1-' +'-initial_group_setup/3-fun-0-' +'-initial_group_setup/3-fun-1-' +'-schedule_conf_changed_checks/3-fun-0-' +'-make_group_conf/2-lc$^0/1-0-' +'-disconnect_nodes/2-fun-0-' +'-force_nodedown/2-fun-0-' +force_nodedown +disconnect_nodes +check_exit_ggc +check_exit_where +check_exit_send +not_found_ignored +check_exit_reg +check_exit +safesend_nc +not_own_group +safesend +send_monitor +delete_all +global_group_check_dispatcher +lookup_group_conf +alive_state_change_group_conf +make_group_conf +new_group_conf +fetch_new_group_conf +grp_tuple +'node defined twice' +no_name +config_scan +removing_node_state_of_member_node +node_state +conf_changed_check +handle_erpc_response +schedule_conf_changed_checks +log_sync_error +nodeup_conf_check +continue_handle_info +find_name +registered_names_res +find_name_res +send_res +config_ok +illegal_message +own_group_name +own_group_nodes +synced_nodes +no_contact +other_groups +monitoring +conf_check +gconf +names +names_test +whereis_test +test3844zty +not_agreed +sync_error +agreed +no_conf +'invalid global_groups definition' +initial_group_setup +global_group_check +whereis_name_test +send_test +registered_names_test +ng_add_check +own_nodes +do_start_link +no_epmd +net_sup_dynamic +'-intersect_with/3-fun-0-' +'-merge_with/3-fun-0-' +'-iterator/2-fun-1-' +'-iterator/2-fun-0-' +try_next +is_iterator_valid_1 +is_iterator_valid +error_type_merge_intersect +error_type_two_maps +groups_from_list_2 +groups_from_list_1 +groups_from_list +with_1 +reversed +ordered +filter_1 +to_list_internal +to_list_from_iterator +merge_with_1 +intersect_with_iterate +intersect_with_small_map_first +intersect_with +intersect_combiner_v2 +intersect_combiner_v1 +intersect +'-inlined-get_52/1-' +'-inlined-exsss_next/1-' +'-inlined-exsp_next/1-' +'-inlined-exs1024_next/1-' +'-inlined-exrop_next/1-' +'-exs1024_jump/6-fun-0-' +float2str +make_float +bc64 +normal_fi +format_jumpconst58_value +format_jumcons58_matches +format_jumpconst58 +xorzip_sr +polyjump +splitmix64_next +seed64 +seed58 +seed_nz +seed64_nz +seed58_nz +hash58 +mwc59_seed +mwc59_float +mwc59_value +mwc59_value32 +mwc59 +zero_seed +non_integer_seed +too_many_seed_integers +dummy_seed +dummy_next +dummy_uniform +exrop_jump +exrop_uniform +exrop_next +exrop_seed +exro928_jump_2pow20 +exro928_jump_2pow512 +exro928_jump +exro928ss_uniform +exro928_next_state +exro928_next +exro928ss_next +exro928_seed +exs1024_jump +exs1024_next +exs1024_calc +exs1024_gen1024 +exs1024_seed +exsp_jump +exsplus_jump +exsss_uniform +exsp_uniform +exsss_next +exsp_next +exsss_seed +exsplus_seed +exs64_next +exs64_seed +exsp +exs64 +exs1024s +exs1024 +exrop +exro928ss +dummy +mk_alg +seed_get +seed_put +normal_s +jump +bytes_r +bytes_s +uniform_real_s +uniform_real +uniform_n +uniform_s +exsss +default_seed +seed_s +export_seed_s +rand_seed +export_seed +weak_low_bits +uniform_range +invalid_key +bad_node +ok_pending +nok_pending +already_pending +publish_type +'-merge_opts/2-inlined-0-' +'-monitor_nodes/2-fun-0-' +invalid_option +'-terminate/2-fun-1-' +'-restart_distr/1-fun-0-' +'-split_node/1-fun-0-' +'-setopts_new_1/3-fun-0-' +'-setopts_new_1/3-fun-1-' +'-merge_opts/2-fun-0-' +opts_node +merge_opts +dist_nodelay +inet_dist_listen_options +inet_dist_connect_options +setopts_new_1 +setopts_on_listen +send_owner_request +setopts_new +handle_async_response +return_call +getnode +nformat +fetch +fmt_address +display_info +print_info +restart_ticker +all_atoms +reply_waiting1 +reply_waiting +multi_receive +multi_info +get_nodes_info +get_node_info +net_setuptime +connecttime +set_node +proto_error +register_error +duplicate_name +start_protos_listen +wrap_creation +next_creation +strong_rand_bytes +create_creation +sync_cookie +start_protos_no_listen +start_protos +hidden_argument +dist_listen_argument +epmd_module +childspecs +proto_dist +protocol_childspecs +valid_name_head +validate_hostname +create_hostpart +hostname_not_allowed +create_name +init_node +get_proto_mod +unsupported_address_type +select_mod +setup_check +net_address +setup +spawn_func +bye +aux_ticker1 +aux_ticker +start_aux_ticker +ticker_loop +get_nodes_up_normal +disconnect_ctrlr +do_disconnect +mk_monitor_nodes_error +unknown_options +bad_option_value +check_options +option_value_mismatch +check_opt +restart_distr_do +restart_distr +delete_connection +up_nodedown +up_pending_nodedown +pending_nodedown +delete_ctrlr +delete_owner +get_conn +restarter_exit +ticker_exit +pending_own_exit +dist_ctrlr_exit +conn_own_exit +accept_exit +listen_exit +do_handle_exit +generate_node_name +ensure_node_name +transition_period_end +aux_tick +wait_pending +is_pending +inconsistency +remarked +remark +accept_pending_nok +accept_pending +inserted +registered_send +badcookie +unsupported_protocol +controller +accept_connection +name_type +static +ongoing_change_to +is_auth +change_initiated +tick_change +shorter +longer +not_implemented +no_link +up_pending +do_explicit_connect +dist_auto_connect +do_auto_connect_2 +barred_connection +do_auto_connect_1 +tick +sys_dist +ticker +clean_halt +dist_listen +make_init_opts +nodistribution +name_domain +retry_request_maybe +passive_connect_monitor +hidden_connect_node +connect_node +publish +publish_on_node +ticktime_res +ticktime +get_net_ticktime +new_ticktime +set_net_ticktime +verbose +nodes_info +node_info +nodename +allowed +kernel_apply +'$4' +'-make_node_vsn_list/2-inlined-0-' +'-do_ops/5-inlined-5-' +'-do_ops/5-inlined-2-' +'-delete_lock/2-inlined-0-' +'-register_name/3-fun-0-' +'-check_dupname/2-lc$^0/1-0-' +'-unregister_name/1-fun-0-' +'-re_register_name/3-fun-0-' +'-register_name_external/3-fun-0-' +'-handle_info/2-fun-0-' +'-handle_info/2-fun-1-' +'-delete_node_resources/2-fun-0-' +'-check_replies/3-lc$^0/1-0-' +'-resolved/5-fun-0-' +'-resolved/5-fun-1-' +'-resolved/5-fun-2-' +'-resolved/5-fun-3-' +'-resolved/5-fun-4-' +'-resolved/5-fun-5-' +'-start_resolver/2-fun-0-' +'-do_ops/5-lc$^1/1-1-' +'-do_ops/5-lc$^0/1-0-' +'-do_ops/5-fun-2-' +'-do_ops/5-lc$^3/1-3-' +'-do_ops/5-lc$^4/1-4-' +'-do_ops/5-fun-5-' +'-do_ops/5-lc$^6/1-6-' +'-do_ops/5-fun-7-' +'-sync_others/1-fun-0-' +'-sync_others/1-fun-1-' +'-del_name/2-lc$^1/1-1-' +'-del_name/2-lc$^0/1-0-' +'-init_the_locker_fun/1-fun-0-' +'-exclude_known/2-lc$^0/1-0-' +'-delete_lock/2-fun-0-' +'-pid_locks/1-fun-0-' +'-pid_locks/1-lc$^1/1-1-' +'-gns_volatile_multicast/5-fun-0-' +'-node_list/1-fun-0-' +'-make_node_vsn_list/2-fun-0-' +'-mk_known_list/2-fun-0-' +'-mk_known_list/2-fun-1-' +'-add_to_known/2-fun-0-' +'-send_again/1-fun-0-' +'-start_sync/2-fun-0-' +'-sync_init/2-fun-0-' +'-sync_loop/2-fun-0-' +'-start_the_registrar/0-fun-0-' +allow_tuple_fun +unexpected_message +loop_the_registrar +start_the_registrar +get_own_nodes_with_errors +get_own_nodes +check_sync_nodes +synced +sync_loop +sync_init +start_sync +new_node_name +change_our_node_name +send_again +exsplus +random_sleep +get_names +remove_lost_connection_info +save_lost_connection_info +get_lost_connection_info +mk_known_list +make_node_vsn_list +node_list +node_vsn +is_node_potentially_known +gns_volatile_multicast +gns_volatile_send +inform_connection_loss +removing +handle_nodedown +new_resolver +no_longer_a_pid +handle_nodeup +ref_is_locking +pid_locks +delete_lock +pid_is_locking +unlink_pid +dounlink_ext +dolink_ext +notify_all_name +global_name_conflict +random_notify_name +random_exit_name +minmax +resolve_it +exchange_names +reset_node_state +send_cancel_connect_message +send_cancel_connect +kill_resolver +cancel_locker +split_node +is_node_local +add_node +remove_node2 +remove_node +find_node_tag2 +find_node_tag +the_boss +delete_global_lock +call_fun +wait_cancel_lock +lock_is_set_wait_cancel +lock_is_set_true_received +exclude_known +random_element +update_locker_known +locker_failed +locker_succeeded +lock_rejected +locker_trace +delete_nonode +lock_nodes_safely +locker_lock_id +send_lock_set +select_node +get_locker +get_state_reply +remove_from_known +do_trace +no_fun +him +the_locker_message_wait_cancel +the_locker_message +loop_the_locker +init_the_locker_fun +start_the_locker +delete_global_name +delete_global_name2 +delete_global_name_keep_pid +del_name +extra_info +lock_still_set +insert_global_name +sync_other +global_connect_retries +sync_others +do_ops +rem_lock +remove_lock +handle_del_lock +is_lock_set +is_global_lock_set +ins_lock +insert_lock +can_set_lock +handle_set_lock +ins_name_ext +ins_name +resend_pre_connect +resolver +start_resolver +do_whereis +cancel_resolved_locker +ops +added +add_to_known +lock +resolve +wait_lock +lock_id +restart_connect +pre_connect +his_the_locker +locker +prot_vsn +check_replies +local_lock_check +set_lock_on_nodes +lock_on_known_nodes +set_lock_known +send_high_level_trace +wait_high_level_trace +delete_node_resources +delete_node_resource_info +save_node_resource_info +nodes_changed +high_level_trace +extra_nodedown +registrar_died +locker_died +not_connected +group_configured +trace_message +group_nodeup +group_nodedown +cancel_connect +init_connect_ack +ignore_node +remove_connection +async_disconnect +participant +lost_connection +in_sync +async_del_name +async_del_lock +lock_is_set +init_connect +sync_tag_his +exit_resolver +lock_set +exchange_ops +new_nodes +save_ops +sync_tag_my +resolved +high_level_trace_stop +high_level_trace_start +high_level_trace_get +get_synced +get_protocol_version +get_names_ext +get_known +trans_all_known +register_ext +creation_extension +uniform +seed +conf +invalid_parameter_value +connect_all +no_trace +global_node_resources +global_lost_connections +global_pid_ids +global_names_ext +global_locks +aborted +trans +del_lock +set_lock +unregister_name_external +register_name_external +global_names +registered_names +re_register_name +global_multi_name_action +global_pid_names +check_dupname +registrar +execute_cast +'-handle_cast/2-fun-0-' +'-proxy_user/0-fun-0-' +'-start_nodes_observer/0-fun-0-' +rex_nodes_observer +'-start_nodes_observer/0-fun-1-' +'-do_srv_call/3-fun-0-' +'-eval_everywhere/4-fun-0-' +'-parallel_eval/1-lc$^0/1-0-' +'-cnode_call_group_leader_start/1-fun-0-' +cnode_call_group_leader_start +cnode_call_group_leader_state +cnode_call_group_leader_init +rex_stdout +cnode_call_group_leader_put_chars +cnode_call_group_leader_multi_request +cnode_call_group_leader_request +cnode_call_group_leader_loop +pinfo +build_args +pmap +map_nodes +parallel_eval +no_response +response +nb_yield +async_call +rec_nodes +multi_server_call +rpcmulticallify +multicall +send_nodes +eval_everywhere +rpc_check +rpc_check_t +do_srv_call +signal +exception +rpcify_exception +nodes_observer_loop +start_nodes_observer +proxy_user_flush +proxy_user_loop +rex_proxy_user +proxy_user +set_group_leader +trim_stack +is_arg_error +execute_call +features_reply +features_request +nonexisting_name +sbcast +send_stdout_to_caller +block_call +nodes_observer +'-services/2-fun-0-' +'-rpc/2-fun-0-' +'-hosts/2-fun-0-' +'-resolv/2-fun-0-' +'-host_conf_linux/2-fun-0-' +'-host_conf_freebsd/2-fun-0-' +'-host_conf_bsdos/2-fun-0-' +'-nsswitch_conf/2-fun-0-' +'-protocols/2-fun-0-' +'-netmasks/2-fun-0-' +'-networks/2-fun-0-' +split_mid_comma +split_comma +split_end +split_mid +dig_to_hex +dig_to_dec +separate +ntoa_done +hex_to_int +dec16 +hex +ipv6_addr_done +ipv6_addr_scope +ipv6_addr +ipv4_field +ipv4strict_addr +strip0 +is_dom2 +is_dom_ldh +is_dom1 +port_proto +parse_cs +parse_fd +networks +netmasks +delete_options +noname +services +eafnosupport +'-setopts/2-lc$^0/1-0-' +'-getopts/2-lc$^0/1-0-' +'-getifaddrs/1-fun-0-' +'-getifaddrs/0-fun-0-' +'-getiflist/1-fun-0-' +'-getiflist/0-fun-0-' +'-ifget/2-fun-0-' +'-ifget/2-fun-1-' +'-ifset/2-fun-0-' +'-ifset/2-fun-1-' +'-getif/0-fun-0-' +'-getif/1-fun-0-' +'-getif/1-fun-1-' +'-gethostname/0-fun-0-' +'-bindx/3-lc$^1/1-1-' +'-ii/3-fun-0-' +'-ii/3-lc$^1/1-0-' +'-ii/3-fun-2-' +'-info_lines/3-lc$^0/1-0-' +'-i_line/3-lc$^0/1-0-' +'-h_line/1-lc$^0/1-0-' +'-port_list/1-fun-0-' +ensure_sockaddr +lock_socket +udp_sync_input +tcp_sync_input +tcp_controlling_process +tcp_close +exbadseq +exbadport +port_list +sctp_sockets +udp_sockets +tcp_sockets +fmt_port +enotconn +fmt_addr +fmt_status3 +fmt_status2 +fmt_compat_status_merge +fmt_compat_status +fmt_status +which_packet_type +sent +local_address +foreign_address +upper +hh_field +h_field +h_line +i_line +info_lines +smax +ii +change_bindx_0_port +set_bindx_port +open_setopts +open_opts +open_fd +gethostbyaddr_tm_native +gethostbyaddr_self +gethostbyname_string +gethostbyname_self +gethostbyname_tm_native +formerr +wins +getaddrs_tm +binary2filename +filename2binary +add_opt +sctp_opt_ifaddr +sctp_opt +sctp_opts +sctp_options +gen_udp_module +udp_module_1 +udp_add +udp_opt +gen_tcp_module +tcp_module_1 +list_add +backlog +list_opt +listen_opts +inet_default_listen_options +listen_options +con_add +ifaddr +con_opt +connect_opts +inet_default_connect_options +connect_options +stats +ipv4_mapped_ipv6_address +strict_address +parse_strict_address +ipv6strict_address +parse_ipv6strict_address +ipv4strict_address +parse_ipv4strict_address +ipv6_address +parse_ipv6_address +parse_ipv4_address +getaddrs +getaddr_tm +getll +is_ip_address +is_ipv6_address +is_ipv4_address +pi_replace +states +socket_to_list +gethostbyaddr_tm +nostring +gethostbyname_tm +popf +pushf +withsocket +getif +udp_closed +optuniquify +udp_controlling_process +udp_close +open_bind +udp_opts +translate_ip +getaddr +getserv +bad_encoding +on +'-init/0-inlined-0-' +'-set_hostname/1-fun-0-' +'-load_hosts/2-fun-0-' +'-win32_load1/3-fun-0-' +'-win32_load1/3-fun-1-' +scan_inetrc +parse_inetrc_skip_line +parse_inetrc +inet_warnings +try_get_rc +inetrc +read_inetrc +valid_type +extract_cfg_files1 +extract_cfg_files +read_rc +win32_get_strings +split_line +win32_split_line +win32_load1 +change_key +nt +win32_load_from_registry +load_hosts +load_resolv +set_search_dom +inet_dns_when_nis +add_dns_lookup +host_conf_bsdos +host_conf_freebsd +host_conf_linux +nsswitch_conf +sunos +netbsd +freebsd +'bsd/os' +do_load_resolv +nonames +shortnames +sname +erl_dist_mode +gethostbyname +'-add_hosts/1-fun-0-' +'-res_cache_answer/1-lc$^0/1-0-' +'-res_filter_rrs/2-lc$^0/1-0-' +'-res_lookup_fun/1-lc$^0/1-0-' +'-res_lookup_fun/1-fun-1-' +'-handle_call/3-lc$^2/1-0-' +chars +'-do_add_host/5-lc$^0/1-0-' +'-do_add_host/5-fun-1-' +'-do_add_host/5-lc$^3/1-1-' +'-do_add_host/5-lc$^2/1-2-' +'-do_del_host/3-lc$^0/1-0-' +'-add_ip_bynms/5-fun-0-' +'-del_ip_bynms/4-fun-0-' +'-load_hosts_list/3-lc$^0/1-0-' +'-load_hosts_list/3-lc$^1/1-1-' +'-rc_opt_req/1-lc$^0/1-0-' +'-do_add_rrs/4-lc$^1/1-1-' +'-do_add_rrs/4-lc$^0/1-0-' +'-lookup_cache_data/2-lc$^0/1-0-' +'-match_rr/6-lc$^0/1-0-' +'-match_rr/6-lc$^1/1-1-' +'-lists_subtract/2-fun-0-' +handle_take_socket_type +handle_put_socket_type +lists_nth +lists_keydelete +lists_subtract +lists_delete +delete_oldest +alloc_entry +delete_expired +stop_timer +init_timer +stripdot_1 +stripdot +eq_domains +rfc_4343_lc +tolower +match_rr +lookup_cache_data +times +do_add_rrs +is_reqname +is_res_set +set_socks_methods +rc_reqname +clear_search +clear_ns +replace_search +replace_ns +rc_opt_req +handle_calls +handle_rc_list +ets_clean_map_keys +load_hosts_list_byname +load_hosts_list_byaddr +load_hosts_list +inet_family +del_ip_bynms +add_ip_bynms +do_del_host +do_add_host +handle_update_file +handle_set_file +refresh_timeout +set_resolv_conf_tm +set_hosts_file_tm +load_hosts_file +res_hosts_file_info +res_resolv_conf_info +listreplace +reset_db +inet_sockets +inet_hosts_file_byname +inet_hosts_byname +inet_cache +inet_backend +take_socket_type +put_socket_type +lookup_socket +unregister_socket +nxdomain +ent_gethostbyaddr +res_gethostbyaddr +ptr +gethostbyaddr +cname +resolve_cnames +res_lookup_fun +res_filter_rrs +hostent +aaaa +make_hostent +dns_rec +res_hostent_by_domain +hostent_by_domain +get_searchlist +getbysearch +dots +getbyname +add_rrs +res_cache_answer +del_rr +dns_rr +add_rr +db_get +res_update +res_hosts_file_tm +res_update_hosts +res_resolv_conf_tm +res_update_conf +hostname +noproxy +methods +socks_option +res_check_search +res_check_ns +res_check_list +res_check_option_absfile +visible_string +res_check_option +res_dnssec_ok +res_recurse +resolv_conf_name +nameserver +hosts_file_name +alt_nameserver +res_optname +res_set +res_id +next_id +res_option +get_rc_hosts +get_rc_ns +get_rc_noproxy +res_alt_ns +cache_refresh_interval +res_res_dnssec_ok +res_domain +res_edns +inet_hosts_byaddr +res_hosts_file +res_inet6 +res_lookup +res_ns +res_resolv_conf +res_retry +res_search +res_servfail_retry_timeout +res_timeout +res_udp_payload_size +res_usevc +socks5_server +socks5_port +socks5_noproxy +socks5_methods +cache_size +cache_refresh +get_rc +valid_lookup +dns +nis +nisplus +yp +translate_lookup +add_rc_list +add_rc_bin +add_rc +sctp_module +set_sctp_module +udp_module +set_udp_module +tcp_module +set_tcp_module +set_cache_refresh +set_cache_size +del_socks_noproxy +add_socks_noproxy +del_socks_methods +add_socks_methods +set_socks_port +set_socks_server +inet_hosts_file_byaddr +get_hosts_file +hosts_file +set_hosts_file +resolv_conf +set_resolv_conf +dnssec_ok +set_dnssec_ok +udp_payload_size +set_udp_payload_size +edns +set_edns +usevc +set_usevc +set_inet6 +servfail_retry_timeout +set_servfail_retry_timeout +retry +set_retry +set_timeout +recurse +set_recurse +set_lookup +set_domain +set_hostname +del_search +ins_search +add_search +del_alt_ns +ins_alt_ns +alt_nameservers +add_alt_ns +del_ns +ins +ins_ns +nameservers +listop +add_ns +clear_hosts +del_host +add_host +add_hosts +resolv +add_resolv +badcall +format_child_log_error_single +format_child_log_progress_single +terminate_pid +no_stderror +standard_error_sup +'-start_port/1-fun-0-' +'-do_setopts/1-fun-0-' +'-wrap_characters_to_binary/3-lc$^0/1-0-' +wrap_characters_to_binary +send_port +put_port +io_requests +rows +columns +get_geometry +do_io_request +get_fd_geometry +onlcr +server +start_port +beam_flatten +beam_ssa_recv +beam_types +beam_listing +v3_core +beam_ssa_lint +core_scan +sys_messages +beam_ssa_check +beam_ssa_codegen +beam_ssa_dead +beam_a +beam_call_types +sys_core_prepare +beam_validator +beam_bounds +beam_digraph +beam_ssa_type +beam_ssa_bc_size +core_lint +beam_block +core_pp +beam_ssa_bsm +beam_ssa_throw +beam_ssa_alias +beam_kernel_to_ssa +beam_dict +sys_pre_attributes +core_lib +cerl_trees +sys_core_fold +beam_ssa_opt +v3_kernel +sys_core_fold_lists +beam_ssa_private_append +erl_bifs +beam_ssa_pre_codegen +beam_ssa_share +beam_ssa_bool +rec_env +beam_clean +beam_ssa +sys_core_alias +cerl_clauses +cerl_inline +sys_core_bsm +sys_core_inline +cerl +beam_utils +beam_opcodes +beam_jump +v3_kernel_pp +beam_ssa_pp +beam_trim +core_parse +beam_disasm +beam_z +beam_asm +rejected_ftr +permanent_ftr +until +while +experimental_ftr_2 +ifn +experimental_ftr_1 +unless +approved_ftr_2 +approved_ftr_1 +init_done +maybe_expr +'-init_features/0-inlined-3-' +'-init_features/0-inlined-2-' +'-configurable/0-lc$^0/1-0-' +'-long/1-lc$^0/1-0-' +'-long/1-lc$^1/1-1-' +'-history/2-fun-0-' +'-history/2-fun-1-' +'-nqTeX/1-fun-0-' +'-keyword_fun/2-fun-0-' +'-add_feature_fun/2-fun-0-' +'-remove_feature_fun/2-fun-0-' +'-feature_error/1-fun-0-' +'-feature_error/1-fun-1-' +'-format_error/1-F/1-0-' +'-init_features/0-fun-0-' +'enable-feature' +'disable-feature' +'-init_features/0-fun-1-' +'-init_features/0-fun-2-' +'-init_features/0-fun-3-' +'-init_features/0-fun-4-' +'-init_features/0-fun-5-' +'-collect_features/1-lc$^0/1-0-' +test_features +add_ftr +feature +collect_features +features_in +set_keywords +enabled_features +ensure_init +init_specs +init_features +incorrect_features +feature_error +configurable_features +remove_features_fun +add_features_fun +remove_feature_fun +add_feature_fun +invalid_features +not_configurable +enable +disable +keyword_fun +invalid_feature +adjust +nqTeX +rejected +experimental +approved +history +long +is_configurable +is_valid +feature_specs +'-characters_to_binary_int/3-fun-0-' +'-i_trans/1-fun-0-' +'-i_trans_chk/1-fun-0-' +'-o_trans/1-fun-7-' +'-o_trans/1-fun-8-' +'-o_trans/1-fun-3-' +'-o_trans/1-fun-4-' +'-o_trans/1-fun-1-' +'-o_trans/1-fun-2-' +'-o_trans/1-fun-0-' +'-o_trans/1-fun-9-' +'-o_trans/1-fun-10-' +'-o_trans/1-fun-5-' +'-o_trans/1-fun-6-' +error_type +do_i_utf32_little +do_i_utf32_big +do_i_utf16_little +do_i_utf16_big +do_i_utf8 +do_i_utf32_little_chk +do_i_utf32_big_chk +do_i_utf16_little_chk +do_i_utf16_big_chk +do_i_utf8_chk +do_o_binary2 +do_o_binary +o_trans +i_trans_chk +i_trans +ml_map +fake_stacktrace +do_characters_to_list +prepend_row_to_acc +acc_to_binary +characters_to_nfkc_binary +nfkc +characters_to_nfkc_list +characters_to_nfc_binary +nfc +characters_to_nfkd_binary +nfkd +characters_to_nfkd_list +characters_to_nfd_binary +nfd +characters_to_nfd_list +encoding_to_bom +bom_to_encoding +no_conversion_needed +'-getenv/0-lc$^0/1-0-' +flush_exit +flush_until_down +validate3 +validate2 +validate1 +mk_cmd +get_option +max_size +do_cmd +cmd +extensions +reverse_element +split_path +can_be_full_name +verify_executable +find_executable1 +iterator_1_from +iterator_1 +take_1 +take_any +from_orddict +enter +update_1 +get_1 +is_defined_1 +lookup_1 +fold_1 +is_set +is_subset_2 +is_subset_1 +is_subset +difference_2 +difference_1 +difference +is_disjoint_1 +is_disjoint +intersection_list +intersection_2 +intersection_1 +union_list +balance_revlist_1 +balance_revlist +push +union_2 +union_1 +mk_set +iterator_from +to_list_1 +largest_1 +largest +take_largest1 +take_largest +smallest_1 +smallest +take_smallest1 +take_smallest +delete_1 +delete_any +del_element +from_ordset +balance_list_1 +balance_list +balance +key_exists +insert_1 +is_member_1 +singleton +nonono +'-encode_hex1/2-lbc$^0/2-0-' +'-decode_hex1/1-lbc$^0/2-0-' +decode_hex2 +decode_hex1 +decode_hex +encode_hex2 +encode_hex1 +lowercase +uppercase +encode_hex +insert_replaced +get_opts_replace +splitat +do_insert +do_replace +bin_to_list +no_debug_info +'-md5/1-lc$^0/1-0-' +'-diff_directories/2-fun-0-' +'-beam_files/1-lc$^0/1-0-' +'-strip_fils/2-lc$^0/1-0-' +'-read_all_but_useless_chunks/1-lc$^0/1-0-' +'-read_all_chunks/1-lc$^0/1-0-' +'-scan_beam/4-lc$^0/1-0-' +'-attributes/2-fun-0-' +'-attributes/2-lc$^1/1-0-' +'-anno_from_forms/1-lc$^0/1-0-' +'-try_load_crypto_fun/1-fun-0-' +'-try_load_crypto_fun/1-fun-1-' +alt_lookup_key +try_load_crypto_fun +f_p_s +crypto_key_fun_from_file_1 +crypto_key_fun_from_file +call_crypto_server_1 +beam_lib__crypto_key_server +call_crypto_server +get_crypto_key +start_crypto +restore_typed_record_fields +anno_from_forms +abstract_v2 +abstract_v1 +old_anno_from_term +crypto_one_time +crypto +des_ede3_cbc +decrypt_chunk +mandatory_chunks +md5_chunks +significant_chunks +assert_directory +maybe_uncompress +beam_filename +read_all +bb +extract_atom +extract_atoms +ensure_atoms +symbol +symbols1 +symbols +locals +labeled_locals +labeled_exports +indexed_imports +imports +chunk_name_to_id +compile_info +chunk_to_data +erlang_v1 +debug_info_v1 +atom_chunk +abst_chunk +chunks_to_data +del_chunk +get_data +get_atom_data +scan_beam2 +scan_beam1 +scan_beam +atoms +check_chunks +beam_symbols +allow_missing_chunks +read_chunk_data +read_all_chunks +filter_funtab_1 +filter_funtab +filter_significant_chunks +read_significant_chunks +is_useless_chunk +read_all_but_useless_chunks +build_chunks +strip_file +strip_fils +strip_rel +cmp_lists +cmp_files +wildcard +beam_files +compare_files +restriction +image +symmetric_partition +compare_dirs +diff_only +diff_directories +read_info +build_module +des3_cbc +make_crypto_key +clear_crypto_key_fun +crypto_key_fun +exists +different_chunks +not_a_directory +not_a_beam_file +chunks_different +unknown_chunk +modules_different +missing_backend +key_missing_or_invalid +invalid_chunk +invalid_beam_file +chunk_too_big +strip_release +strip_files +strip +diff_dirs +cmp_dirs +cmp +all_chunks +ignored +cannot_detach_with_standard_io +'-init/1-fun-0-' +'-verify_args/1-lc$^0/1-0-' +'-verify_args/1-lc$^1/1-1-' +'-encode_port_data/1-lbc$^0/2-0-' +'-maybe_listen/1-lc$^0/1-0-' +'-maybe_listen/1-lc$^1/1-1-' +ntoa +'-command_line/2-lc$^0/1-0-' +'-parse_args/1-lc$^0/1-0-' +'-start_peer_channel_handler/0-fun-3-' +'-start_peer_channel_handler/0-lc$^5/1-2-' +'-start_peer_channel_handler/0-fun-4-' +parse_address +'-start_peer_channel_handler/0-lc$^0/1-0-' +'-start_peer_channel_handler/0-fun-1-' +'-start_peer_channel_handler/0-lc$^2/1-1-' +'-handle_peer_alternative/3-fun-0-' +'-do_call/4-fun-0-' +handle_port_alternative +handle_peer_alternative +io_server_loop +loop_connect +tcp_init +io_server +origin_link +relay +peer_detached +start_peer_channel_handler +peer_channel_terminated +loop_supervision +peer_supervision_connect_timeout +peer_sup_connect_channel +peer_channel_connect_timeout +peer_sup_state +channel_connect +peer_supervision +start_orphan_supervision +init_supervision +start_supervision +notify_started +default_erts +unquote +parse_args +maybe_otp_test_suite +find_executable +encode_to_string +command_line +longnames +name_arg +prefer_localhost +maybe_listen +boot_complete +handle_port_binary +decode_port_data +encode_port_data +peer_to_origin +origin_to_peer +forward_request +handle_alternative_data +peer_down +maybe_stop +node_name +boot_failed +wait_boot +make_notify_ref +invalid_arg +not_alive +detached +char_list +exec +verify_args +force_disconnect_node +wait_disconnected +deadline +register_socket +get_node +cover +booting +peer_state +connection +post_process_args +get_state +random_name +'-compact/1-lc$^0/1-0-' +'-substitute_aliases/2-lc$^0/1-0-' +'-substitute_negations/2-lc$^0/1-0-' +'-expand/2-lc$^0/1-0-' +'-split/2-lc$^0/1-0-' +'-split/2-lc$^1/1-1-' +'-to_map/1-fun-0-' +from_map +to_map +negations +aliases +apply_stages +key_uniq_1 +key_uniq +expand_3 +expand_2 +expand_1 +expand_0 +expand +substitute_negations_1 +substitute_aliases_1 +substitute_aliases +get_bool +append_values +get_all_values +lookup_all +property +lait +liat +daeh +snoc +tail +delete_with_rear +delete_with_front +delete_with_r +delete_with +delete_rear +delete_front +delete_r +filtermap_r +filter_r +filter_f +split_r1_to_f2 +split_f1_to_r2 +drop_r +peek_r +get_r +out_r +in_r +is_empty +is_queue +'-set_restart_flag/1-fun-0-' +reply_return +noreply_return +'$no_default_return' +try_callback_call +maybe_notify_mode_change +set_mode +overload_levels_ok +flush_load +kill_if_choked +limit_burst +check_load +reset_restart_flag +set_restart_flag +overload_kill_qlen +overload_kill_mem_size +overload_kill_enable +burst_limit_window_time +burst_limit_max_count +do_check_opts +invalid_olp_levels +invalid_olp_config +check_opts +do_load +apply_after +overload_kill_restart_after +reset_state +mode_ref +last_qlen +last_load_ts +cb_state +burst_win_ts +burst_msg_count +olp_ref +result +restart_failed +get_opts +'$olp_load' +log_failed +try_log +flushed +drop +mode_change +overloaded +handle_load +get_ref +system_logger +sync_mode_qlen +flush_qlen +drop_mode_qlen +burst_limit_enable +get_default_opts +child_spec +no_state +get_pid +'-limit_report/2-lc$^0/1-0-' +'-format_log_multi/2-fun-0-' +'-format_log_state/2-lc$^0/1-0-' +format_log_state +format_client_log +format_client_log_single +format_server_log_single +limit_client_report +dead +client_stacktrace +client_info +catch_result +handle_common_reply +try_terminate +try_handle_call +try_handle_cast +try_handle_info +handle_continue +try_handle_continue +try_dispatch +do_send +create_callback_cache +callback_cache +mc_cancel_timer +mc_recv_tmo +mc_recv +mc_send +multi_call +do_abcast +abcast +'$gen_cast' +cast_msg +do_cast +'$gen_call' +'-inlined-level_to_int/1-' +'-set/3-lc$^0/1-0-' +'-set_module_level/2-lc$^0/1-0-' +'-unset_module_level/1-lc$^0/1-1-' +'-unset_module_level/1-lc$^1/1-0-' +'-get_module_level/0-lc$^0/1-0-' +'$handler_config$' +'$primary_config$' +'$proxy_config$' +table_key +int_to_level +less_or_equal_level +on_match +filter_remote_gl +filter_progress +filter_level +filter_domain +neq +lteq +gteq +not_equal +equal +simple_handler_process_dead +handler_process_name_already_exists +'-adding_handler/1-fun-0-' +'-replay_buffer/1-F/1-0-' +'-do_log/2-fun-0-' +'-display/1-lc$^0/1-0-' +'-display_report/1-fun-0-' +'-display_report/1-fun-1-' +display_report +display_date +display_log +drop_msg +replay_buffer +dropped +buffer_size +update_buffer +rich +no_log_file +allready_have_logfile +'-tty/1-fun-0-' +error_logger_format_depth +error_logger_tty_true +error_logger_tty_false +logfile +which_report_handlers +delete_report_handler +add_report_handler +scan_format +report_to_format +maybe_add_domain +get_report_cb +std_warning +fix_warning_type +fix_warning_tag +maybe_map_warnings +register_handler +stop_error +report_problem +send_shutdown +check_callback +check_system +get_heart_cmd +send_heart_cmd +send_heart_beat +do_cycle_port_program +check_schedulers +validate_options +no_reboot_shutdown +port_terminated +bad_cmd +bad_options +wait_ack +bad_heart_flag +check_start_heart +get_heart_timeouts +port_problem +start_portprogram +wait +cycle +get_options +set_options +clear_callback +get_callback +set_callback +clear_cmd +get_cmd +set_cmd +no_heart +wait_for_init_ack +bad_name +bad_directory +'-try_finish_module_2/5-inlined-0-' +'-start_link/1-fun-0-' +'-init/3-fun-0-' +'-init/3-lc$^1/1-0-' +'-get_user_lib_dirs_1/1-lc$^0/1-0-' +'-handle_call/3-lc$^1/1-1-' +'-handle_call/3-lc$^0/1-0-' +'-choose_bundles/1-lc$^0/1-0-' +'-choose_bundles/1-lc$^1/1-1-' +'-vsn_to_num/1-lc$^0/1-0-' +'-is_numstr/1-fun-0-' +'-cache_path/1-lc$^0/1-0-' +'-exclude/2-lc$^0/1-0-' +'-set_path/5-lc$^0/1-0-' +'-try_archive_subdirs/3-fun-0-' +'-stick_dir/3-fun-1-' +'-stick_dir/3-fun-0-' +'-try_finish_module/6-fun-1-' +'-try_finish_module/6-fun-0-' +on_load_failure +'-try_finish_module_2/5-fun-0-' +'-finish_loading/3-fun-3-' +'-finish_loading/3-fun-2-' +'-finish_loading/3-fun-1-' +'-finish_loading/3-fun-0-' +'-finish_loading_ensure/2-lc$^0/1-0-' +pending_on_load +'-abort_if_pending_on_load/2-lc$^0/1-0-' +sticky_directory +'-abort_if_sticky/2-lc$^0/1-0-' +'-do_finish_loading/2-lc$^0/1-0-' +'-do_finish_loading/2-lc$^1/1-2-' +'-do_finish_loading/2-lc$^2/1-1-' +'-handle_on_load/5-fun-0-' +'-finish_on_load/3-lc$^0/1-0-' +'-finish_on_load_report/2-fun-0-' +finish_on_load_report +finish_on_load_2 +finish_on_load_1 +finish_on_load +handle_pending_on_load_1 +handle_pending_on_load +handle_on_load +do_finish_loading +abort_if_sticky +abort_if_pending_on_load +finish_loading_ensure +with_cache +mod_to_bin +try_finish_module_2 +try_finish_module_1 +try_finish_module +get_mods +sticky +'bad request to code' +priv +do_dir +lookup_name +delete_name_dir +delete_name +replace_name +del_ebin_1 +del_ebin +check_pars +replace_path1 +insert_old_shadowed +del_path1 +try_archive_subdirs +archive_subdirs +do_insert_name +insert_name +insert_dir +init_namedb +code_names +create_namedb +maybe_update +do_add +do_check_path +check_path +split_base +discard_after_hyphen +get_name_from_splitted +get_name +get_arg +add_pa_pz +merge_path1 +merge_path +strip_path +exclude_pa_pz +cache_boot_paths +do_cache_path +cache_path +'-zip/3-lc$^0/1-1-' +'-zip/3-lc$^1/1-0-' +add_loader_path +try_ebin_dirs +'-zip3/4-lc$^0/1-2-' +'-zip3/4-lc$^1/1-1-' +'-zip3/4-lc$^2/1-0-' +choose +'-zipwith/4-lc$^0/1-1-' +'-zipwith/4-lc$^1/1-0-' +split2 +'-zipwith3/5-lc$^0/1-2-' +split1 +'-zipwith3/5-lc$^1/1-1-' +'-zipwith3/5-lc$^2/1-0-' +'-filter/2-lc$^0/1-0-' +is_numstr +is_vsn +vsn_to_num +create_bundle +uniq_2 +choose_bundles +uniq_1 +rufmerge2_2 +rufmerge2_1 +ufmerge2_2 +ufmerge2_1 +rufmergel +ufmergel +ufsplit_2 +ufsplit_1_1 +ufsplit_1 +rfmerge2_2 +rfmerge2_1 +fmerge2_2 +unknown_system_msg +fmerge2_1 +change_code +rfmergel +fmergel +fsplit_2_1 +fsplit_2 +fsplit_1_1 +do_sys_cmd +suspend_loop +fsplit_1 +gen_reply +rukeymerge2_2 +rukeymerge2_1 +ukeymerge2_2 +code_call +split_paths +get_user_lib_dirs_1 +get_user_lib_dirs +ukeymerge2_1 +rukeymerge3_21_3 +rukeymerge3_12_3 +rukeymerge3_2 +rukeymerge3_1 +ukeymerge3_21_3 +ukeymerge3_12_3 +ukeymerge3_2 +ukeymerge3_1 +rukeymergel +ukeymergel +ukeysplit_2 +ukeysplit_1_1 +ukeysplit_1 +rkeymerge2_2 +rkeymerge2_1 +keymerge2_2 +keymerge2_1 +rkeymerge3_21_3 +rkeymerge3_12_3 +rkeymerge3_2 +rkeymerge3_1 +keymerge3_21_3 +keymerge3_12_3 +keymerge3_2 +keymerge3_1 +rkeymergel +keymergel +keysplit_2_1 +keysplit_2 +keysplit_1_1 +keysplit_1 +rumerge2_2 +rumerge2_1 +umerge2_2 +umerge2_1 +rumerge3_21_3 +rumerge3_12_3 +rumerge3_2 +rumerge3_1 +umerge3_21_3 +umerge3_12_3 +umerge3_2 +umerge3_1 +rumergel +umergel +usplit_2_1 +desc +usplit_2 +usplit_1_1 +asc +usplit_1 +rmerge2_2 +rmerge2_1 +merge2_2 +merge2_1 +rmerge3_21_3 +rmerge3_12_3 +rmerge3_2 +rmerge3_1 +merge3_21_3 +merge3_12_3 +merge3_2 +merge3_1 +rmergel +mergel +split_2_1 +split_2 +split_1_1 +split_1 +join_prepend +splitwith_1 +search_1 +dropwhile_1 +takewhile_1 +mapfoldr_1 +mapfoldr +mapfoldl_1 +foreach_1 +filtermap_1 +filtermap +partition_1 +foldr_1 +foldl_1 +flatmap_1 +map_1 +any_1 +all_1 +rumerge3 +umerge3 +rumerge_1 +rumerge +umerge_1 +usort_1 +rmerge_1 +merge_1 +enumerate_1 +enumerate +keymap +rukeymerge_1 +rukeymerge +ukeymerge_1 +ukeymerge +ukeysort_1 +ukeysort +rkeymerge_1 +rkeymerge +keymerge_1 +keymerge +keysort_1 +keystore2 +keyreplace3 +keydelete3 +flatlength +thing_to_list +rmerge +rmerge3 +merge3 +sort_1 +zipwith3 +zipwith +unzip3 +zip3 +pad +sublist_2 +sublist +sum +seq_loop +seq +droplast +suffix +prefix +nthtail_1 +nth_1 +module_not_found +'-format_status/2-inlined-0-' +'-do_unlink/2-fun-0-' +parent_terminated +'-terminate_supervised/4-fun-0-' +'-system_code_change/4-fun-0-' +'-system_get_state/1-lc$^0/1-0-' +'-system_replace_state/2-lc$^0/1-0-' +'-report_error/5-fun-0-' +'-report_error/5-fun-1-' +'-report_error/5-fun-2-' +'-the_handlers/1-lc$^0/1-0-' +'-get_modules/1-lc$^0/1-0-' +'-format_status/2-fun-0-' +items +get_log +stop_handlers +the_handlers +'function not exported' +'module could not be loaded' +fix_reason +no_handle_info +last_message +report_error +gen_event_EXIT +report_terminate +server_call_update +server_call +new_handler +do_swap +server_update +server_notify +swapped +split_and_terminate +s_s_h +server_swap_handler +server_delete_handler +server_add_sup_handler +server_add_handler +print_event +system_replace_state +system_get_state +system_code_change +system_terminate +system_continue +terminate_supervised +do_unlink +terminate_server +handle_event +handle_debug +handle_system_msg +decode_msg +fetch_msg +wake_hib +call1 +which_handlers +swap_sup_handler +swap_handler +delete_handler +sync_notify +add_sup_handler +nolink +'no callback module' +'-terminate/2-lc$^0/1-0-' +'-kill_children/1-fun-0-' +exit_after +set_timer +kill_all_procs_1 +kill_all_procs +kill_children +terminate_child_i +get_child_i +prep_stop +loop_it +start_supervisor +start_the_app +start_it_new +start_it_old +bad_keys +relay_to_group_leader +terminate_loop +main_loop +init_loop +legacy_header +'-get_handler_config/0-lc$^0/1-0-' +'-get_module_level/1-lc$^0/1-0-' +'-print_filters/3-lc$^0/1-0-' +'-print_handlers/2-lc$^0/1-0-' +'-print_custom/3-lc$^0/1-0-' +'-print_module_levels/2-lc$^0/1-0-' +'-reconfigure/0-lc$^0/1-0-' +'-internal_init_logger/0-lc$^0/1-0-' +'-internal_init_logger/0-lc$^1/1-1-' +'-add_handlers/2-fun-0-' +'-get_primary_filters/1-lc$^0/1-0-' +'-get_primary_filters/1-fun-1-' +'-get_proxy_opts/1-lc$^0/1-0-' +proc_meta +log_remote +deatomize +tid +do_log_allowed +log_fun_allowed +do_log +get_logger_env +get_default_handler_filters +standard_io +init_default_config +multiple_proxies +get_proxy_opts +multiple_filters +get_primary_filters +get_primary_filter_default +logger_default_metadata +logger_metadata +get_primary_metadata +get_logger_level +tty +get_logger_type +module_level +check_logger_config +setup_handler +bad_proxy_config +init_kernel_handlers +bad_config +reconfigure +print_module_levels +print_custom +print_handlers +print_filters +i_modules +i_proxy +i_handlers +i_primary +module_levels +get_config +unset_process_metadata +get_process_metadata +update_process_metadata +'$logger_metadata$' +set_process_metadata +lt +gt +level_to_int +eq +compare_levels +get_module_level +unset_application_level +set_application_level +get_proxy_config +get_handler_ids +filter_config +get_handler_config +get_primary_config +update_proxy_config +update_handler_config +update_primary_config +set_proxy_config +set_handler_config +set_primary_config +remove_handler_filter +remove_primary_filter +add_handler_filter +add_primary_filter +printable_unicode_list +string_p1 +string_p +format_term_list +format_otp_report +distribution_not_changed +kernel_safe_sup +global_groups +is_gg_changed +global_groups_added +global_groups_removed +global_groups_changed +do_global_groups_change +is_dist_changed +distribution_changed +do_distribution_change +start_compile_server +start_pg +start_disk_log +boot_server_slaves +get_boot_args +start_boot_server +start_dist_ac +start_distribution +supervision_child_spec +add_handlers +internal_init_logger +'-build_typed_attribute/2-fun-0-' +'-build_typed_attribute/2-fun-1-' +'-attribute_farity_list/1-lc$^0/1-0-' +'-attribute_farity_map/1-lc$^0/1-0-' +'-check_clauses/3-lc$^0/1-0-' +'-first_anno/1-fun-0-' +'-last_anno/1-fun-0-' +'-enc_func/1-fun-2-' +'-enc_func/1-fun-1-' +'-enc_func/1-fun-0-' +'-abstract/3-lc$^0/1-0-' +'-abstract_map_fields/3-lc$^0/1-0-' +'-map_anno/2-fun-0-' +'-fold_anno/3-fun-0-' +'-new_anno/1-fun-0-' +'-anno_to_term/1-fun-0-' +from_term +'-anno_from_term/1-fun-0-' +yeccgoto_typed_record_fields +yeccgoto_typed_exprs +yeccgoto_typed_expr +yeccgoto_typed_attr_val +yeccgoto_type_spec +yeccgoto_type_sigs +yeccgoto_type_sig +yeccgoto_type_guards +yeccgoto_type_guard +yeccgoto_type +yeccgoto_tuple +yeccgoto_try_opt_stacktrace +yeccgoto_try_expr +yeccgoto_try_clauses +yeccgoto_try_clause +yeccgoto_try_catch +yeccgoto_top_types +yeccgoto_top_type +yeccgoto_tail +yeccgoto_strings +yeccgoto_ssa_check_when_clauses +yeccgoto_ssa_check_when_clause +yeccgoto_ssa_check_pats +yeccgoto_ssa_check_pat +yeccgoto_ssa_check_map_key_tuple_elements +yeccgoto_ssa_check_map_key_list +yeccgoto_ssa_check_map_key_elements +yeccgoto_ssa_check_map_key_element +yeccgoto_ssa_check_map_key +yeccgoto_ssa_check_list_lit_ls +yeccgoto_ssa_check_list_lit +yeccgoto_ssa_check_fun_ref +yeccgoto_ssa_check_exprs +yeccgoto_ssa_check_expr +yeccgoto_ssa_check_clause_args_ls +yeccgoto_ssa_check_clause_args +yeccgoto_ssa_check_binary_lit_rest +yeccgoto_ssa_check_binary_lit_bytes_ls +yeccgoto_ssa_check_binary_lit +yeccgoto_ssa_check_args +yeccgoto_ssa_check_anno_clauses +yeccgoto_ssa_check_anno_clause +yeccgoto_ssa_check_anno +yeccgoto_spec_fun +yeccgoto_record_tuple +yeccgoto_record_pat_expr +yeccgoto_record_fields +yeccgoto_record_field +yeccgoto_record_expr +yeccgoto_receive_expr +yeccgoto_prefix_op +yeccgoto_pat_exprs +yeccgoto_pat_expr_max +yeccgoto_pat_expr +yeccgoto_pat_argument_list +yeccgoto_opt_bit_type_list +yeccgoto_opt_bit_size_expr +yeccgoto_mult_op +yeccgoto_maybe_match_exprs +yeccgoto_maybe_match +yeccgoto_maybe_expr +yeccgoto_map_tuple +yeccgoto_map_pat_expr +yeccgoto_map_pair_types +yeccgoto_map_pair_type +yeccgoto_map_key +yeccgoto_map_fields +yeccgoto_map_field_exact +yeccgoto_map_field_assoc +yeccgoto_map_field +yeccgoto_map_expr +yeccgoto_map_comprehension +yeccgoto_list_op +yeccgoto_list_comprehension +yeccgoto_list +yeccgoto_lc_exprs +yeccgoto_lc_expr +yeccgoto_integer_or_var +yeccgoto_if_expr +yeccgoto_if_clauses +yeccgoto_if_clause +yeccgoto_guard +yeccgoto_function_clauses +yeccgoto_function_clause +yeccgoto_function_call +yeccgoto_function +yeccgoto_fun_type +yeccgoto_fun_expr +yeccgoto_fun_clauses +yeccgoto_fun_clause +yeccgoto_form +yeccgoto_field_types +yeccgoto_field_type +yeccgoto_exprs +yeccgoto_expr_remote +yeccgoto_expr_max +yeccgoto_expr +yeccgoto_cr_clauses +yeccgoto_cr_clause +yeccgoto_comp_op +yeccgoto_clause_guard +yeccgoto_clause_body_exprs +yeccgoto_clause_body +yeccgoto_clause_args +yeccgoto_case_expr +yeccgoto_bit_type_list +yeccgoto_bit_type +yeccgoto_bit_size_expr +yeccgoto_bit_expr +yeccgoto_binary_type +yeccgoto_binary_comprehension +yeccgoto_binary +yeccgoto_bin_unit_type +yeccgoto_bin_elements +yeccgoto_bin_element +yeccgoto_bin_base_type +yeccgoto_attribute +yeccgoto_attr_val +yeccgoto_atomic +yeccgoto_atom_or_var +yeccgoto_argument_list +yeccgoto_add_op +yeccpars2_680 +yeccpars2_679 +yeccpars2_678 +yeccpars2_677 +yeccpars2_676 +yeccpars2_674 +yeccpars2_673 +yeccpars2_672 +yeccpars2_671 +yeccpars2_670 +yeccpars2_668 +yeccpars2_667 +yeccpars2_664 +yeccpars2_663 +yeccpars2_662 +yeccpars2_660 +yeccpars2_659 +yeccpars2_658 +yeccpars2_656 +yeccpars2_655 +yeccpars2_654 +yeccpars2_652 +yeccpars2_651 +yeccpars2_650 +yeccpars2_649 +yeccpars2_648 +yeccpars2_647 +yeccpars2_646 +yeccpars2_644 +yeccpars2_642 +yeccpars2_641 +yeccpars2_639 +yeccpars2_637 +yeccpars2_636 +yeccpars2_635 +yeccpars2_634 +yeccpars2_633 +yeccpars2_632 +yeccpars2_630 +yeccpars2_628 +yeccpars2_627 +yeccpars2_625 +yeccpars2_624 +yeccpars2_623 +yeccpars2_622 +yeccpars2_621 +yeccpars2_619 +yeccpars2_618 +yeccpars2_617 +yeccpars2_616 +yeccpars2_615 +yeccpars2_614 +yeccpars2_613 +yeccpars2_610 +yeccpars2_609 +yeccpars2_607 +yeccpars2_606 +yeccpars2_605 +yeccpars2_604 +yeccpars2_603 +yeccpars2_602 +yeccpars2_601 +yeccpars2_600 +yeccpars2_599 +yeccpars2_597 +yeccpars2_595 +yeccpars2_594 +yeccpars2_593 +yeccpars2_592 +yeccpars2_591 +yeccpars2_590 +yeccpars2_589 +yeccpars2_588 +yeccpars2_587 +yeccpars2_586 +yeccpars2_585 +yeccpars2_584 +yeccpars2_580 +yeccpars2_579 +yeccpars2_577 +yeccpars2_576 +yeccpars2_575 +yeccpars2_574 +yeccpars2_573 +yeccpars2_572 +yeccpars2_571 +nonempty_list +yeccpars2_570 +yeccpars2_569 +yeccpars2_568 +yeccpars2_567 +yeccpars2_566 +yeccpars2_565 +yeccpars2_564 +yeccpars2_563 +yeccpars2_562 +yeccpars2_561 +yeccpars2_560 +yeccpars2_559 +yeccpars2_558 +yeccpars2_557 +yeccpars2_556 +yeccpars2_555 +yeccpars2_554 +yeccpars2_553 +yeccpars2_552 +yeccpars2_551 +yeccpars2_550 +yeccpars2_548 +yeccpars2_547 +yeccpars2_546 +yeccpars2_545 +yeccpars2_544 +yeccpars2_543 +yeccpars2_542 +yeccpars2_541 +yeccpars2_540 +yeccpars2_539 +yeccpars2_538 +yeccpars2_537 +yeccpars2_536 +yeccpars2_535 +yeccpars2_534 +yeccpars2_533 +yeccpars2_532 +yeccpars2_531 +yeccpars2_530 +yeccpars2_529 +yeccpars2_cont_528 +yeccpars2_528 +yeccpars2_527 +yeccpars2_526 +yeccpars2_525 +yeccpars2_523 +yeccpars2_522 +yeccpars2_521 +yeccpars2_520 +yeccpars2_519 +yeccpars2_518 +yeccpars2_516 +yeccpars2_515 +yeccpars2_514 +yeccpars2_512 +yeccpars2_511 +yeccpars2_510 +yeccpars2_508 +yeccpars2_507 +yeccpars2_506 +yeccpars2_505 +yeccpars2_504 +yeccpars2_503 +yeccpars2_502 +yeccpars2_500 +yeccpars2_499 +yeccpars2_498 +yeccpars2_497 +yeccpars2_496 +yeccpars2_495 +yeccpars2_494 +yeccpars2_493 +yeccpars2_492 +yeccpars2_491 +yeccpars2_490 +yeccpars2_489 +yeccpars2_488 +yeccpars2_487 +yeccpars2_486 +yeccpars2_485 +yeccpars2_484 +yeccpars2_483 +yeccpars2_481 +yeccpars2_480 +yeccpars2_479 +yeccpars2_477 +yeccpars2_476 +yeccpars2_474 +yeccpars2_473 +yeccpars2_472 +yeccpars2_471 +yeccpars2_470 +yeccpars2_468 +yeccpars2_466 +yeccpars2_465 +yeccpars2_464 +yeccpars2_463 +yeccpars2_462 +yeccpars2_461 +yeccpars2_460 +yeccpars2_459 +yeccpars2_458 +yeccpars2_457 +yeccpars2_456 +yeccpars2_454 +yeccpars2_453 +yeccpars2_452 +yeccpars2_451 +yeccpars2_450 +yeccpars2_449 +yeccpars2_448 +yeccpars2_447 +yeccpars2_446 +yeccpars2_445 +yeccpars2_444 +yeccpars2_443 +yeccpars2_442 +yeccpars2_441 +yeccpars2_439 +yeccpars2_437 +yeccpars2_436 +yeccpars2_435 +yeccpars2_434 +yeccpars2_433 +yeccpars2_432 +yeccpars2_431 +yeccpars2_430 +yeccpars2_429 +yeccpars2_427 +yeccpars2_426 +yeccpars2_425 +yeccpars2_424 +yeccpars2_423 +yeccpars2_422 +yeccpars2_420 +yeccpars2_419 +yeccpars2_417 +yeccpars2_416 +yeccpars2_415 +yeccpars2_413 +yeccpars2_412 +yeccpars2_411 +yeccpars2_410 +yeccpars2_409 +yeccpars2_408 +yeccpars2_407 +yeccpars2_406 +yeccpars2_405 +yeccpars2_404 +yeccpars2_403 +yeccpars2_402 +yeccpars2_400 +yeccpars2_398 +yeccpars2_397 +yeccpars2_395 +yeccpars2_393 +'<=' +yeccpars2_391 +yeccpars2_390 +yeccpars2_389 +yeccpars2_388 +yeccpars2_387 +yeccpars2_386 +yeccpars2_383 +yeccpars2_381 +yeccpars2_380 +yeccpars2_379 +yeccpars2_378 +yeccpars2_377 +yeccpars2_376 +yeccpars2_375 +yeccpars2_373 +yeccpars2_372 +yeccpars2_371 +yeccpars2_369 +yeccpars2_367 +yeccpars2_366 +yeccpars2_365 +yeccpars2_364 +yeccpars2_363 +yeccpars2_362 +yeccpars2_361 +yeccpars2_360 +yeccpars2_359 +yeccpars2_358 +yeccpars2_357 +yeccpars2_356 +yeccpars2_355 +yeccpars2_353 +yeccpars2_352 +yeccpars2_351 +yeccpars2_350 +yeccpars2_349 +yeccpars2_348 +yeccpars2_347 +yeccpars2_346 +yeccpars2_345 +yeccpars2_343 +yeccpars2_341 +yeccpars2_340 +yeccpars2_339 +yeccpars2_338 +yeccpars2_337 +yeccpars2_335 +yeccpars2_333 +yeccpars2_332 +yeccpars2_329 +yeccpars2_328 +yeccpars2_327 +yeccpars2_326 +yeccpars2_325 +yeccpars2_323 +yeccpars2_321 +yeccpars2_320 +yeccpars2_cont_319 +yeccpars2_319 +yeccpars2_317 +yeccpars2_316 +yeccpars2_315 +yeccpars2_314 +yeccpars2_313 +yeccpars2_312 +yeccpars2_310 +yeccpars2_308 +yeccpars2_306 +yeccpars2_304 +yeccpars2_303 +yeccpars2_301 +yeccpars2_299 +yeccpars2_298 +yeccpars2_297 +yeccpars2_296 +yeccpars2_295 +yeccpars2_294 +yeccpars2_292 +yeccpars2_287 +yeccpars2_286 +yeccpars2_284 +yeccpars2_283 +yeccpars2_282 +yeccpars2_281 +yeccpars2_280 +yeccpars2_279 +yeccpars2_278 +'||' +end +'?=' +'<-' +':=' +yeccpars2_277 +yeccpars2_276 +yeccpars2_275 +pass +yeccpars2_274 +yeccpars2_273 +yeccpars2_271 +yeccpars2_270 +yeccpars2_269 +yeccpars2_268 +yeccpars2_267 +yeccpars2_266 +yeccpars2_265 +yeccpars2_264 +yeccpars2_263 +yeccpars2_262 +yeccpars2_261 +yeccpars2_260 +yeccpars2_259 +yeccpars2_257 +yeccpars2_256 +yeccpars2_255 +yeccpars2_253 +yeccpars2_251 +yeccpars2_250 +yeccpars2_249 +yeccpars2_248 +yeccpars2_246 +yeccpars2_245 +yeccpars2_244 +yeccpars2_243 +yeccpars2_242 +yeccpars2_241 +yeccpars2_240 +yeccpars2_239 +yeccpars2_238 +yeccpars2_237 +yeccpars2_235 +yeccpars2_233 +yeccpars2_232 +yeccpars2_231 +yeccpars2_230 +yeccpars2_229 +yeccpars2_228 +yeccpars2_227 +yeccpars2_224 +yeccpars2_223 +yeccpars2_222 +yeccpars2_221 +yeccpars2_220 +yeccpars2_219 +yeccpars2_218 +yeccpars2_217 +yeccpars2_216 +yeccpars2_215 +yeccpars2_214 +yeccpars2_213 +yeccpars2_212 +yeccpars2_211 +yeccpars2_210 +yeccpars2_209 +yeccpars2_208 +yeccpars2_207 +yeccpars2_206 +yeccpars2_205 +yeccpars2_cont_204 +yeccpars2_204 +yeccpars2_203 +yeccpars2_202 +yeccpars2_201 +yeccpars2_200 +yeccpars2_199 +yeccpars2_198 +yeccpars2_197 +yeccpars2_196 +yeccpars2_195 +yeccpars2_194 +yeccpars2_193 +yeccpars2_192 +yeccpars2_191 +yeccpars2_190 +yeccpars2_189 +yeccpars2_188 +yeccpars2_187 +yeccpars2_186 +yeccpars2_185 +yeccpars2_184 +yeccpars2_183 +float_epsilon +yeccpars2_182 +yeccpars2_181 +yeccpars2_180 +local_fun +yeccpars2_179 +external_fun +yeccpars2_178 +yeccpars2_177 +yeccpars2_176 +yeccpars2_175 +yeccpars2_174 +yeccpars2_173 +yeccpars2_172 +yeccpars2_171 +yeccpars2_170 +yeccpars2_169 +yeccpars2_168 +yeccpars2_167 +yeccpars2_166 +yeccpars2_165 +yeccpars2_164 +yeccpars2_163 +yeccpars2_162 +yeccpars2_161 +yeccpars2_160 +yeccpars2_159 +yeccpars2_158 +yeccpars2_157 +yeccpars2_156 +yeccpars2_155 +yeccpars2_154 +yeccpars2_153 +yeccpars2_152 +yeccpars2_151 +yeccpars2_150 +yeccpars2_149 +yeccpars2_cont_148 +yeccpars2_148 +yeccpars2_147 +yeccpars2_146 +yeccpars2_145 +yeccpars2_144 +yeccpars2_143 +yeccpars2_142 +yeccpars2_141 +yeccpars2_140 +yeccpars2_139 +yeccpars2_138 +yeccpars2_137 +yeccpars2_136 +'...' +yeccpars2_135 +yeccpars2_134 +yeccpars2_133 +yeccpars2_132 +yeccpars2_131 +yeccpars2_130 +'%ssa%' +yeccpars2_128 +yeccpars2_127 +yeccpars2_126 +yeccpars2_125 +yeccpars2_124 +yeccpars2_123 +yeccpars2_122 +yeccpars2_121 +yeccpars2_119 +yeccpars2_118 +yeccpars2_117 +yeccpars2_115 +yeccpars2_113 +yeccpars2_112 +yeccpars2_111 +yeccpars2_110 +yeccpars2_109 +yeccpars2_108 +yeccpars2_107 +yeccpars2_105 +yeccpars2_104 +yeccpars2_103 +yeccpars2_102 +yeccpars2_101 +yeccpars2_100 +yeccpars2_99 +yeccpars2_97 +yeccpars2_96 +yeccpars2_95 +yeccpars2_94 +yeccpars2_93 +yeccpars2_92 +yeccpars2_91 +yeccpars2_90 +yeccpars2_87 +yeccpars2_83 +yeccpars2_82 +yeccpars2_80 +yeccpars2_79 +yeccpars2_78 +yeccpars2_76 +yeccpars2_74 +of +yeccpars2_73 +yeccpars2_72 +yeccpars2_71 +after +yeccpars2_69 +yeccpars2_66 +yeccpars2_59 +yeccpars2_58 +yeccpars2_57 +yeccpars2_56 +yeccpars2_55 +yeccpars2_54 +yeccpars2_53 +yeccpars2_52 +yeccpars2_51 +yeccpars2_50 +yeccpars2_49 +yeccpars2_48 +yeccpars2_47 +yeccpars2_46 +yeccpars2_45 +yeccpars2_44 +yeccpars2_43 +yeccpars2_42 +yeccpars2_41 +yeccpars2_40 +yeccpars2_39 +yeccpars2_38 +yeccpars2_37 +yeccpars2_36 +yeccpars2_35 +yeccpars2_34 +yeccpars2_33 +yeccpars2_32 +yeccpars2_31 +yeccpars2_30 +yeccpars2_29 +yeccpars2_28 +begin +yeccpars2_cont_27 +'>>' +yeccpars2_27 +yeccpars2_26 +yeccpars2_25 +yeccpars2_24 +yeccpars2_22 +yeccpars2_21 +yeccpars2_20 +yeccpars2_19 +yeccpars2_18 +yeccpars2_17 +yeccpars2_16 +yeccpars2_15 +yeccpars2_14 +yeccpars2_13 +yeccpars2_12 +yeccpars2_11 +yeccpars2_cont_10 +'<<' +yeccpars2_10 +when +yeccpars2_9 +yeccpars2_8 +yeccpars2_7 +yeccpars2_6 +yeccpars2_5 +yeccpars2_4 +yeccpars2_3 +';' +yeccpars2_2 +yeccpars2_1 +yeccpars2_0 +missing_state_in_action_table +yeccpars2 +write_char +write_string +reserved_symbol +yecctoken2string1 +yecctoken2string +yecctoken_location +yecctoken_to_string +yeccerror +yecctoken_end_location +yecc_end +'$end' +no_func +yeccpars1 +state_is_unknown +missing_in_goto_table +yecc_error_type +yecc_bug +yeccpars0 +return_error +deep_char_list +no_location +parse_and_scan +parse +check_expr +add_anno_check +build_ssa_check_label +modify_anno1 +anno_from_term +new_anno +mapfold_anno +fold_anno +type_preop_prec +'::' +'..' +type_inop_prec +max_prec +func_prec +preop_prec +'=' +inop_prec +tokens_tuple +'|' +',' +tokens_tail +']' +'}' +'{' +'[' +'=>' +abstract_byte +abstract_map_fields +abstract_tuple_list +not_string +abstract_list +enc_func +abstract +loc_lte +find_anno +set_location +end_location +last_anno +first_location +ret_abstr_err +ret_err +build_try +check_clauses +build_fun +build_function +typed +record_fields +record_tuple +farity_list +error_bad_decl +attribute_farity_map +attribute_farity_list +attribute_farity +var_list +build_attribute +abstract2 +type_tag +build_bin_type +build_gen_type +lift_unions +build_constraint +is_subtype +build_compat_constraint +find_arity_from_specs +build_type_spec +typed_record +build_typed_attribute +'(' +')' +'->' +parse_form +std_info +open_file +'$3' +'-add_env/2-inlined-0-' +'-start/1-fun-0-' +'-get_all_env/1-fun-0-' +keystore +'-handle_call/3-lc$^3/1-0-' +'-terminate/2-fun-0-' +'-load/2-fun-0-' +'-unload/2-fun-0-' +'-check_start_cond/4-fun-0-' +'-start_appl/3-fun-0-' +'-prim_parse/2-fun-0-' +'-do_change_apps/3-fun-0-' +'-do_change_apps/3-fun-1-' +'-get_cmd_env/1-fun-0-' +'-add_env/2-fun-0-' +'-do_config_diff/3-fun-0-' +'-conf_param_to_conf/1-fun-0-' +'-config_param_to_list/1-lc$^0/1-0-' +'-check_conf/0-fun-1-' +'-read_fd_until_end_and_close/3-Read/4-0-' +'-read_fd_until_end_and_close/3-fun-1-' +'-read_fd_until_end_and_close/3-GetResult/0-1-' +'-reply_to_requester/3-fun-0-' +default_encoding +read_encoding_from_binary +file_binary_to_list +test_make_apps +test_do_change_appl +test_change_apps +update_permissions +reply_to_requester +info_exited +started_at +info_started +config_error +strip_comment +only_ws +reader_ref +read_fd_until_end_and_close +parse_file +scan_file +read_from_file_descriptor +load_file_descriptor +check_conf_sys +check_conf +config_param_to_list +invalid_file_desc +characters_to_nfc_list +configfd +conf_param_to_conf +do_config_diff +application_not_found +module_not_defined +do_config_change +do_prep_config_change +check_user +del_env +add_env +get_env_key +merge_app_env +change_app_env +merge_env +get_env_i +handle_make_term_error +make_term +conv +get_cmd_env +get_opt +do_change_appl +is_loaded_app +do_change_apps +invalid_name +badstartspec +invalid_options +make_appl_i +parse_term +prim_parse +prim_consult +make_appl +bad_application +get_restart_type +nd +keyreplaceadd +ksd +keysearchdelete +stop_appl +start_appl +init_starter +spawn_starter +check_start_cond +do_load_application +maybe_load_application +'-separate_error_info/1-fun-0-' +'-format_link_reports/4-lc$^0/1-0-' +'-format_exception/5-fun-0-' +'-pp_fun/2-fun-0-' +nl +modifier +chars_limit_opt +part_separator +report_separator +format_tag +pp_fun +write_atom +write_atom_as_latin1 +format_exception +format_rep +format_report +format_link_report +format_link_reports +splitwith +separate_error_info +format_own_report +do_format +badrpc +proc_info +get_my_name +translate_process_info +get_process_info +no_trap +adjacents +visit +max_neighbours +neighbours +get_initial_call +make_neighbour_report +neighbour +make_neighbour_reports1 +linked_info +get_dictionary +clean_dict +cleaned_dict +get_cleaned_dictionary +receive_messages +get_process_messages +get_messages +ancestors +get_ancestors +my_info_1 +my_info +crash_report +trans_init +raw_init_call +raw_initial_call +translate_initial_call +make_dummy_args +await_DOWN +kill_flush_EXIT +flush_EXIT +sync_start_monitor +nack +sync_start +exit_reason +exit_p +init_p_do_apply +wake_up +spawn_mon +init_p +get_loaded +del_cntrl +ac_application_run +notify_cntrl_started +cntrl +shutdown_func +application_terminated +keyreplace +ac_application_not_run +stop_it +not_running +failover +ac_start_application_reply +ac_load_application_reply +ac_change_application_req +application_start_failure +handle_application_started +application_started +loading +start_p_false +zf +ac_load_application_req +not_started +ac_application_stopped +ac_application_unloaded +permissions +ac_start_application_req +persistent +check_distributed +distributed +check_para_value +check_para +check_conf_data +'load error' +enter_loop +'$initial_call' +appl_data +appl +start_phases +'$2' +'$1' +config_change +prep_config_change +change_application_data +control_application +ac_tab +bad_environment_value +ack +':' +badexpr +binary_comprehension +bitlevel_binaries +'-merge_bindings/4-inlined-0-' +'-match_fun/2-inlined-0-' +'-expr/6-RF/20-22-' +'-expr/6-RF/19-21-' +'-expr/6-RF/18-20-' +'-expr/6-RF/17-19-' +'-expr/6-RF/16-18-' +'-expr/6-RF/15-17-' +'-expr/6-RF/14-16-' +'-expr/6-RF/13-15-' +'-expr/6-RF/12-14-' +'-expr/6-RF/11-13-' +'-expr/6-RF/10-12-' +'-expr/6-RF/9-11-' +'-expr/6-RF/8-10-' +'-expr/6-RF/7-9-' +'-expr/6-RF/6-8-' +'-expr/6-RF/5-7-' +'-expr/6-RF/4-6-' +'-expr/6-RF/3-5-' +'-expr/6-RF/2-4-' +'-expr/6-RF/1-3-' +'-expr/6-RF/0-2-' +'-expr/6-fun-0-' +'-expr/6-fun-44-' +'-expr/6-fun-45-' +'-expr/6-fun-22-' +'-expr/6-fun-21-' +'-expr/6-fun-20-' +'-expr/6-fun-19-' +'-expr/6-fun-18-' +'-expr/6-fun-17-' +'-expr/6-fun-16-' +'-expr/6-fun-15-' +'-expr/6-fun-14-' +'-expr/6-fun-13-' +'-expr/6-fun-12-' +'-expr/6-fun-11-' +'-expr/6-fun-10-' +'-expr/6-fun-9-' +'-expr/6-fun-8-' +'-expr/6-fun-7-' +'-expr/6-fun-6-' +'-expr/6-fun-5-' +'-expr/6-fun-4-' +'-expr/6-fun-3-' +'-expr/6-fun-2-' +'-expr/6-fun-1-' +is_anno +'-find_maxline/1-fun-0-' +'-fun_used_bindings/4-fun-0-' +'-local_func/8-fun-0-' +'-eval_lc1/7-fun-1-' +'-eval_lc1/7-fun-0-' +'-eval_bc1/7-fun-1-' +'-eval_bc1/7-fun-0-' +'-eval_mc1/7-fun-1-' +'-eval_mc1/7-fun-0-' +'-eval_generator/7-fun-0-' +'-eval_b_generate/8-fun-0-' +'-eval_b_generate/8-fun-1-' +'-receive_clauses/8-fun-0-' +'-match1/5-fun-0-' +'-match1/5-fun-1-' +'-match_fun/2-fun-0-' +'-add_bindings/2-fun-0-' +'-merge_bindings/4-fun-0-' +'-merge_bindings/4-fun-1-' +'-to_terms/1-lc$^0/1-0-' +'-token_fixup/1-lc$^0/1-0-' +'-reset_token_anno/1-lc$^0/1-0-' +'-reset_expr_anno/1-lc$^0/1-0-' +'-reset_anno/0-fun-0-' +'-normalise/1-fun-1-' +'-normalise/1-fun-0-' +'-ev_expr/1-lc$^0/1-0-' +anno +all_white +eval_str +ev_expr +eval_expr +is_constant_expr +normalise_list +normalise +extended_parse_term +validate_tag +fixup_mfa +fixup_tag +fixup_text +fixup_ast +reset_anno +reset_expr_anno +reset_token_anno +string_fixup +expr_fixup +'Ref' +'Port' +'Fun' +'.' +'#' +unscannable +set_text +token_fixup +tokens_fixup +extended_parse_exprs +anno_to_term +to_term +to_terms +filter_bindings +merge_bindings +add_bindings +del_binding +add_binding +binding +bindings +match_list +match_map +match_tuple +match_fun +match_bits +match1 +string_to_conses +reference +number +expr_guard_test +guard_expr +guard0 +guard1 +match_clause +receive_clauses +case_clauses +illegal_stacktrace_variable +check_stacktrace_vars +if_clauses +eval_op +eval_named_fun +'-inside-an-interpreted-fun-' +eval_fun +ret_expr +map_assoc +map_exact +eval_map_fields +is_generator +eval_filter +eval_m_generate +bin_gen +eval_b_generate +eval_generate +eval_generator +eval_mc1 +eval_mc +eval_bc1 +eval_bc +eval_lc1 +eval_lc +no_env +do_apply +local_func2 +local_func +unhide_calls +f +m +hide_calls +fun_used_bindings +'$erl_eval_max_line' +find_maxline +apply_error +expr_grp +unbound +not_ok +transform_from_evaluator +k +v +else_clause +argument_limit +undef_record +named_fun_data +check_command +failure +success +maybe_match_exprs +empty_fun_used_vars +process_exited +critical +alert +emergency +got_unexpected_message +no_domain +super +remote_gl +'-handle_call/3-inlined-0-' +'-set_module_level/2-fun-0-' +'-unset_module_level/1-fun-0-' +'-handle_call/3-fun-7-' +'-handle_call/3-fun-6-' +removing_handler +'-handle_call/3-fun-3-' +'-handle_call/3-fun-5-' +'-handle_call/3-fun-4-' +handler_not_added +invalid_handler +function_not_exported +'-call_h_async/4-fun-0-' +internal_log_event +add_default_metadata +diffs +logger_process_exited +call_h_reply +call_h_async +changing_config +call_h +illegal_config_change +diff_maps +check_config_change +invalid_formatter +callback_crashed +check_formatter +invalid_filter_default +check_filter_default +invalid_filters +invalid_filter +check_filters +invalid_level +check_level +check_mod +invalid_id +check_id +invalid_primary_config +metadata +check_config +get_type +sanity_check_1 +invalid_config +sanity_check +default_config +keytake +do_remove_filter +do_add_filter +attempting_syncronous_call_to_self +async_req_reply +formatter +already_exist +exist +set_opts +adding_handler +simple +create +proxy +get_default_config +'$logger_cb_process' +invalid_formatter_config +update_formatter_config +update_config +change_config +set_config +unset_module_level +not_a_list_of_modules +set_module_level +add_filter +add_handler +'-do_start/4-fun-0-' +'-maybe_add_read_ahead/2-fun-0-' +cbv +cafu +count_and_find +read_size +cast_binary +cat +do_setopts +check_valid_opts +unfold +substitute_negations +err_func +continuation_location +tokens +invalid_unicode_error +get_chars_apply +get_chars_notempty +get_chars_empty +convert_enc +collect_line +io_request_loop +requests +get_until +std_reply +io_reply +server_loop +maybe_add_read_ahead +valid_enc +expand_encoding +parse_options +invalid_unicode +info_report +bad_combination +shutdown_error +start_error +reached_max_restart_intensity +title +supervisor_report +report_cb +sasl +child_terminated +already_present +n_objects +read_only +'-terminate_dynamic_children/1-inlined-0-' +'-find_child_by_pid/2-inlined-0-' +failed_to_start_child +'-start_children/2-fun-0-' +'-handle_call/3-fun-2-' +'-handle_call/3-fun-0-' +'-handle_call/3-fun-1-' +'-do_auto_shutdown/2-fun-0-' +'-terminate_children/2-fun-0-' +'-terminate_dynamic_children/1-fun-0-' +'-terminate_dynamic_children/1-fun-1-' +'-wait_dynamic_children/5-fun-0-' +'-find_child_by_pid/2-fun-0-' +the +'-set_pid/3-fun-0-' +invalid_module +a +'-validMods/1-fun-0-' +'-add_restart/3-fun-0-' +'-dyn_fold/3-fun-0-' +parse_transform +transformed +be +should +dyn_init +real +dyn_args +dyn_exists +called +dyn_map +transform_error +dyn_fold +mapsets +dyn_store +dyn_erase +dyn_size +single +p +format_child_log_single +format_log_multi +format_log_single +limit_child_report +limit_term +errorContext +limit_report +single_line +encoding +depth +unlimited +chars_limit +get_format_depth +format_log +report_progress +nb_children +mfargs +restart_type +child_type +extract_child +takewhile +add_restart +child_to_spec +invalid_modules +validMods +invalid_shutdown +validShutdown +invalid_significant +validSignificant +invalid_restart_type +validRestartType +invalid_mfa +validFunc +validId +invalid_child_type +validChildType +missing_id +missing_start +'-table/2-inlined-0-' +do_check_childspec +invalid_child_spec +'-file2tab/2-inlined-1-' +'-file2tab/2-inlined-0-' +significant +check_childspec +log_terms +'-tab2file/3-fun-1-' +duplicate_child_name +check_startspec +blog_terms +supname +invalid_auto_shutdown +'-tab2file/3-fun-0-' +'-file2tab/2-fun-1-' +validAutoShutdown +invalid_period +'-file2tab/2-fun-0-' +'-table/2-fun-2-' +validPeriod +invalid_intensity +'-table/2-fun-1-' +'-table/2-fun-0-' +validIntensity +'-table/2-fun-3-' +invalid_strategy +validStrategy +'-table/2-fun-4-' +'-table/2-fun-5-' +do_check_flags +check_flags +'-table/2-fun-6-' +'-table/2-fun-7-' +auto_shutdown +intensity +'-table/2-fun-8-' +'-table/2-lc$^10/1-2-' +period +'-table/2-lc$^9/1-1-' +strategy +'-table/2-fun-11-' +set_flags +init_state +'-qlc_next/2-fun-0-' +'-qlc_prev/2-fun-0-' +children_any1 +children_any +'-qlc_select/1-fun-0-' +'-hform/6-lc$^0/1-0-' +children_fold +children_to_list +re_match +print_re_num +children_map +re_display +remove_child +update_with +re_search +slice +set_pid +get_dynamic_child +do_display_item +find_child_by_pid +do_display_items +do_display +find_dynamic_child +print_number +find_child_and_args +find_child +split_ids +split_child +trailing +del_child +nonl +do_save_child +save_child +line_string +wait_dynamic_children +choice +terminate_dynamic_children +'(c)ontinue (q)uit (p)Digits (k)ill /Regexp -->' +'-basenameb/2-lc$^0/1-0-' +'-unix_splitb/1-lc$^0/1-0-' +'EOT (q)uit (p)Digits (k)ill /Regexp -->' +unlink_flush +'-win32_splitb/1-lc$^3/1-4-' +eot +display_items +'-win32_splitb/1-lc$^1/1-3-' +brutal_kill +'-win32_splitb/1-lc$^0/1-2-' +'-win32_splitb/1-lc$^2/1-1-' +pad_right +do_terminate +terminate_children +'-win32_splitb/1-lc$^4/1-0-' +hform +'-basedir/3-lc$^0/1-0-' +cast +restart_multiple_children +is_reg +try_again +rest_for_one +prinfo2 +prinfo +one_for_one +one_for_all +validate_bin +tabs +mem +i +fail +do_auto_shutdown +listify +validate_char +validate_list +default_option +keydelete +validate +traverse +basedir_os_type +qlc_select +qlc_prev +basedir_join_home +handle_start_child +qlc_next +noappdata +basedir_windows_appdata +basedir_windows +num_of_objects +update_chsp +basedir_darwin +lexemes +is_unique_objects +update_childspec1 +is_sorted_key +table_info +update_childspec +pre_fun +bad_flags +user_data +user_config +invalid_type +post_fun +info_fun +basedir_linux +basedir_from_os +format_fun +key_equality +lookup_fun +author +basedir_name_from_opts +try_again_restart +basedir_os_from_opts +last_prev +first_next +site_data +site_config +count_child +specs +windows +tabfile_info +supervisors +linux +user_log +cannot_create_table +create_tab +user_cache +basedir +load_table +workers +worker +filename_string_to_binary +scan_for_endinfo +md5_and_convert +do_flatten +restarting +major_version +filetab_options +major_os_type +separators +do_start_child_i +child +replace +do_start_child +win32_nativename +nativename +start_children +win32_split +get_header_data +chunk +wrap_chunk +unix_split +bad_start_spec +bchunk +wrap_bchunk +init_dynamic +win32_splitb +start_spec +fix_driveletter +verify_header_mandatory +unix_splitb +rootname2 +maybe_remove_dirsep +join1b +init_children +supervisor_data +simple_one_for_one +count_mandatory +join1 +verify +parse_f2t_opts +bad_size +invalid_object_count +checksum_error +dirjoin1 +dirjoin +fstrip +do_read_and_verify +get_callback_module +check_childspecs2 +read_error +unsupported_file_version +never +any_significant +all_significant +repaired +file2tab +check_childspecs1 +skip_prefix +object_count +md5sum +basename1 +parse_ft_info_options +check_childspecs +count_children +malformed_option +unknown_option +which_children +get_childspec +basenameb +parse_ft_options +terminate_child +delete_child +restart_child +win_basenameb +absname_join +start_child +md5terms +ft_options_to_list +dump_file +eaccess +extended_info +badtab +tab2file +tab2list +match_delete +init_table_sub +end_of_input +init_table_continue +init_table +test_ms +from_ets +to_dets +to_ets +from_dets +do_foldr +transform_from_shell +fun_data +fun2ms +repair_continuation +match_spec_run +select_delete +delete_all_objects +receive_all +only_loaded +'-inlined-behaviour_info/1-' +'-ensure_all_started/3-lc$^0/1-0-' +'-wait_all_enqueued/3-lc$^0/1-0-' +get_appl_name +start_type +get_child +get_master +get_supervisor +get_application_module +get_application +get_pid_all_key +get_all_key +get_pid_key +get_key +get_pid_all_env +get_all_env +get_pid_env +get_env +unset_env +set_env +loaded_applications +which_applications +stop_application +distributed_application +permit_only_loaded_application +permit_application +permit +takeover_application +takeover +start_boot_application +ensure_started +wait_all_enqueued +deadlock +wait_one_enqueued +start_application_request +enqueue_dag_leaves +concurrent_dag_start +start_application +enqueue_or_start_app +is_running +enqueue_or_start +concurrent +temporary +ensure_all_started +unload_application +load_application +load1 +fields +overlapping_contract +no_missing_return +missing_return +no_extra_return +extra_return +no_underspecs +underspecs +overspecs +specdiffs +no_missing_calls +race_conditions +error_handling +unmatched_returns +no_undefined_callbacks +no_behaviours +no_unknown +no_contracts +no_fail_call +no_opaque +no_fun_app +no_improper_lists +no_unused +no_return +func +item +'-removed_fa/4-inlined-0-' +'-pattern_map/4-inlined-0-' +'-pattern_list/4-inlined-0-' +'-pattern_fields/6-inlined-0-' +'-is_gexpr/2-inlined-0-' +'-import/3-inlined-0-' +'-icrt_export/5-inlined-3-' +'-icrt_export/5-inlined-2-' +'-icrt_export/5-inlined-1-' +'-icrt_export/5-inlined-0-' +'-gexpr_list/3-inlined-0-' +'-func_location_warning/3-inlined-0-' +'-func_location_error/3-inlined-0-' +'-fun_clauses1/3-inlined-0-' +'-expr_list/3-inlined-0-' +'-export_type/3-inlined-0-' +'-export/3-inlined-0-' +'-depr_fa/4-inlined-0-' +'-def_fields/3-inlined-0-' +'-check_unused_types_1/2-inlined-1-' +'-check_undefined_types/1-inlined-2-' +'-check_type_2/3-inlined-1-' +'-check_specs_without_function/1-inlined-0-' +'-check_local_opaque_types/1-inlined-0-' +'-check_fields/6-inlined-0-' +'-check_dialyzer_attribute/2-inlined-6-' +'-bool_option/4-fun-0-' +'-value_option/3-fun-0-' +'-value_option/7-fun-0-' +'-format_mfa/1-lc$^0/1-0-' +'-exprs_opt/3-fun-0-' +'-used_vars/2-fun-0-' +'-compiler_options/1-lc$^0/1-0-' +'-start/2-lc$^0/1-0-' +'-start/2-lc$^1/1-1-' +'-pack_errors/1-fun-0-' +'-pack_errors/1-fun-1-' +'-pack_errors/1-fun-2-' +'-pack_warnings/1-lc$^2/1-1-' +'-pack_warnings/1-lc$^1/1-0-' +'-pack_warnings/1-lc$^0/1-2-' +'-includes_qlc_hrl/2-lc$^0/1-0-' +'-set_file/2-lc$^0/1-0-' +'-anno_set_file/2-fun-0-' +'-bif_clashes/2-lc$^0/1-0-' +'-not_deprecated/2-lc$^2/1-2-' +'-not_deprecated/2-lc$^1/1-1-' +'-not_deprecated/2-lc$^0/1-0-' +'-not_deprecated/2-lc$^4/1-4-' +'-not_deprecated/2-lc$^3/1-3-' +'-not_deprecated/2-lc$^5/1-5-' +'-not_deprecated/2-fun-6-' +'-not_removed/2-lc$^2/1-2-' +'-not_removed/2-lc$^1/1-1-' +'-not_removed/2-lc$^0/1-0-' +'-not_removed/2-lc$^4/1-4-' +'-not_removed/2-lc$^3/1-3-' +'-not_removed/2-fun-5-' +'-disallowed_compile_flags/2-lc$^1/1-1-' +'-disallowed_compile_flags/2-lc$^0/1-0-' +'-disallowed_compile_flags/2-lc$^3/1-3-' +'-disallowed_compile_flags/2-lc$^2/1-2-' +bad_filter +'-behaviour_check/2-lc$^0/1-0-' +'-behaviour_check/2-fun-1-' +'-behaviour_check/2-lc$^2/1-1-' +'-behaviour_missing_callbacks/2-fun-0-' +no_elements +'-behaviour_conflicting/2-fun-0-' +'-check_deprecated/2-lc$^2/1-2-' +'-check_deprecated/2-lc$^1/1-1-' +'-check_deprecated/2-lc$^0/1-0-' +'-check_deprecated/2-fun-3-' +'-depr_fa/4-fun-0-' +'-check_removed/2-lc$^2/1-2-' +'-check_removed/2-lc$^1/1-1-' +'-check_removed/2-lc$^0/1-0-' +'-check_removed/2-fun-3-' +'-removed_fa/4-fun-0-' +'-check_imports/2-lc$^1/1-1-' +'-check_imports/2-lc$^0/1-0-' +'-check_imports/2-lc$^3/1-3-' +'-check_imports/2-lc$^2/1-2-' +'-check_unused_functions/2-lc$^0/1-0-' +'-check_unused_functions/2-lc$^2/1-2-' +'-check_unused_functions/2-lc$^1/1-1-' +'-check_undefined_functions/1-fun-0-' +'-check_undefined_types/1-lc$^0/1-0-' +'-check_undefined_types/1-fun-1-' +'-check_undefined_types/1-fun-2-' +'-check_option_functions/4-lc$^2/1-2-' +'-check_option_functions/4-lc$^1/1-1-' +'-check_option_functions/4-lc$^0/1-0-' +'-check_option_functions/4-lc$^3/1-3-' +'-check_option_functions/4-lc$^4/1-4-' +'-check_nifs/2-lc$^1/1-1-' +'-check_nifs/2-lc$^0/1-0-' +'-check_nifs/2-lc$^2/1-2-' +'-nowarn_function/2-lc$^1/1-1-' +'-nowarn_function/2-lc$^0/1-0-' +'-func_location_warning/3-fun-0-' +'-func_location_error/3-fun-0-' +'-check_untyped_records/2-fun-0-' +'-check_untyped_records/2-lc$^1/1-0-' +'-check_untyped_records/2-fun-2-' +'-check_unused_records/2-lc$^0/1-0-' +'-check_unused_records/2-lc$^3/1-3-' +'-check_unused_records/2-lc$^2/1-2-' +'-check_unused_records/2-lc$^1/1-1-' +'-check_unused_records/2-fun-4-' +'-check_unused_records/2-fun-5-' +'-check_unused_records/2-lc$^6/1-5-' +'-check_unused_records/2-fun-7-' +'-check_callback_information/1-fun-0-' +'-check_callback_information/1-fun-1-' +'-export/3-fun-0-' +'-export_type/3-fun-0-' +'-import/3-fun-0-' +'-check_imports/3-fun-0-' +store +'-add_imports/3-fun-0-' +'-clauses/2-fun-0-' +'-pattern/4-fun-0-' +'-pattern_list/4-fun-0-' +map_key +'-pattern_map/4-fun-0-' +'-pattern_bin/4-fun-0-' +'-good_string_size_type/2-fun-0-' +'-expr_bin/4-fun-0-' +'-gexpr/3-fun-3-' +'-gexpr/3-fun-4-' +'-gexpr/3-fun-2-' +'-gexpr_list/3-fun-0-' +'-is_guard_test/1-fun-0-' +'-is_guard_test/2-fun-0-' +'-is_guard_test/3-fun-0-' +'-is_guard_test/3-fun-1-' +'-is_guard_expr/1-fun-0-' +'-is_gexpr/2-fun-0-' +'-is_gexpr_list/2-fun-0-' +'-is_gexpr_fields/4-fun-0-' +'-expr/3-fun-5-' +'-expr/3-fun-4-' +'-expr/3-fun-3-' +'-expr/3-fun-2-' +'-expr_list/3-fun-0-' +'-record_def/4-lc$^0/1-0-' +'-def_fields/3-fun-0-' +'-normalise_fields/1-fun-0-' +'-check_fields/6-fun-0-' +'-pattern_fields/6-fun-0-' +'-pattern_fields/6-fun-1-' +'-init_fields/3-lc$^0/1-0-' +'-type_def/6-fun-0-' +'-warn_redefined_builtin_type/3-lc$^1/1-1-' +'-warn_redefined_builtin_type/3-lc$^0/1-0-' +'-check_type/2-fun-0-' +'-check_type_2/3-fun-5-' +'-check_type_2/3-fun-1-' +'-check_type_2/3-fun-2-' +'-check_type_2/3-fun-3-' +merge_with +'-check_type_2/3-fun-4-' +'-check_type_2/3-fun-0-' +'-check_record_types/5-fun-0-' +'-remove_non_visible/1-lc$^0/1-0-' +'-any_control_characters/1-fun-0-' +constraint +'-check_specs/4-lc$^0/1-0-' +'-check_specs_without_function/1-fun-0-' +'-add_missing_spec_warnings/3-lc$^0/1-0-' +'-add_missing_spec_warnings/3-lc$^2/1-2-' +'-add_missing_spec_warnings/3-lc$^1/1-1-' +'-add_missing_spec_warnings/3-fun-3-' +'-check_unused_types_1/2-lc$^0/1-0-' +'-check_unused_types_1/2-fun-1-' +'-reached_types/1-lc$^1/1-1-' +'-reached_types/1-lc$^0/1-0-' +'-reached_types/1-lc$^2/1-2-' +'-initially_reached_types/1-lc$^0/1-0-' +'-check_local_opaque_types/1-fun-0-' +'-check_dialyzer_attribute/2-lc$^4/1-2-' +'-check_dialyzer_attribute/2-lc$^1/1-4-' +'-check_dialyzer_attribute/2-lc$^0/1-3-' +'-check_dialyzer_attribute/2-lc$^3/1-1-' +'-check_dialyzer_attribute/2-lc$^2/1-0-' +'-check_dialyzer_attribute/2-fun-5-' +'-check_dialyzer_attribute/2-fun-6-' +'-check_dialyzer_attribute/2-fun-7-' +'-icrt_clauses/3-fun-0-' +'-catch_clauses/3-fun-0-' +'-icrt_export/5-fun-0-' +'-icrt_export/5-fun-1-' +'-icrt_export/5-fun-2-' +'-icrt_export/5-fun-3-' +'-icrt_export/5-fun-4-' +'-is_guard_test2_info/1-fun-0-' +'-fun_clauses/3-lc$^0/1-0-' +'-fun_clauses1/3-fun-0-' +'-shadow_vars/4-fun-0-' +'-unused_vars/3-fun-0-' +'-warn_unused_vars/3-fun-0-' +'-warn_unused_vars/3-fun-1-' +'-warn_unused_vars/3-fun-2-' +'-vtupdate/2-fun-0-' +'-vtunsafe/3-lc$^0/1-0-' +'-vtmerge/2-fun-0-' +'-vtmerge/1-fun-0-' +'-vtmerge_pat/3-fun-0-' +matched +'-vtmerge_pat/3-fun-1-' +'-vtnew/2-fun-0-' +'-vtold/2-fun-0-' +'-vt_no_unsafe/1-lc$^0/1-0-' +'-vt_no_unused/1-lc$^0/1-0-' +'-copy_expr/2-fun-0-' +'-feature_keywords/0-fun-0-' +keywords +'-feature_keywords/0-fun-1-' +'-canonicalize_string/1-fun-0-' +'-local_functions/1-lc$^0/1-0-' +'-auto_import_suppressed/1-lc$^0/1-0-' +'-auto_import_suppressed/1-lc$^1/1-1-' +maps_prepend +no_guard_bif_clash +bif_clash_specifically_disabled +is_autoimport_suppressed +no_auto_import +auto_import_suppressed +is_imported_from_erlang +is_imported_function +is_local_function +local_functions +control_type +is_modifier +intersection +check_modifiers_1 +check_modifiers +extract_modifiers +extract_sequence_digits +extract_sequence +extract_sequences +check_format_string +args_length +args_list +arguments +check_format_4 +check_format_3 +no_argument_list +check_format_2a +warn +check_format_2 +foldr +canonicalize_string +check_format_1 +fwrite +is_format_function +format_function +text +configurable +feature_keywords +test_overriden_by_local +old_type_test +obsolete_type +add_removed_warning +obsolete +q +check_qlc_hrl +is_inline_opt +check_nif_inline +check_load_nif +check_remote_function +has_wildcard_field +check_record_info_call +copy_expr +vt_no_unused +vt_no_unsafe +vtold +vtsubtract +vtnew +merge_used +merge_state +merge_annos +vtmerge_pat +vtmerge +vtunsafe +vtupdate +check_old_unused_vars +check_unused_vars +do_expr_var +expr_var +pat_binsize_var +warn_underscore_match_pat_1 +warn_underscore_match_pat +pat_var +fun_clause +fun_clauses1 +fun_clauses +bitstring +bits +bytes +handle_bitstring_gen_pat +comprehension_pattern +handle_generator +is_guard_test2_info +m_generate +generate +b_generate +lc_quals +comprehension_expr +handle_comprehension +dropwhile +icrt_export +stacktrace +taint_stack_var +catch_clause +catch_clauses +icrt_clause +icrt_clauses +try_clauses +is_module_dialyzer_option +is_function_dialyzer_option +check_dialyzer_attribute +check_local_opaque_types +initially_reached_types +reachable +family_to_digraph +rel2fam +reached_types +check_unused_types_1 +check_unused_types +add_missing_spec_warnings +exported +check_functions_without_spec +check_specs_without_function +set_generated +nowarn +bounded_fun +check_specs +any_control_characters +remove_non_visible +latin1_char_list +check_module_name +is_fa +is_fa_list +optional_cbs +callback_decl +spec_decl +obsolete_builtin_type +is_obsolete_builtin_type +is_type +is_default_type +used_type +field_type +check_record_types +seen_multiple +seen_once_union +seen_once +remote_type +ann_type +range +user_type +typed_record_field +check_type_2 +check_type_1 +check_type +no_auto_import_types +typeinfo +type_def +find_field +exist_field +update_fields +ginit_fields +init_fields +pattern_fields +pattern_field +check_field +check_fields +used_record +check_record +exist_record +normalise_fields +def_fields +product +record_def +is_valid_call +warn_invalid_call +is_valid_record +warn_invalid_record +map_fields +check_assoc_fields +record_expr +expr_list +if +fun +catch +old_bif +record_info +else +'named fun' +unused +first_anno +named_fun +mc +maybe_match +maybe +lc +case +bc +try +ssa_check_when +expr +is_gexpr_fields +map_field_exact +map_field_assoc +is_map_fields +is_gexpr_list +comp +arith +op_type +is_gexpr_op +is_gexpr +is_guard_expr +is_guard_test2 +is_guard_test +gexpr_list +bif +guard_bif +record_field +gexpr +type_test +guard_test2 +guard_test +guard_tests +elemtype_check +bittype +bit_size_check +set_bit_type +bit_type +expr_bin +is_bit_size_illegal +pat_bit_size +pat_bit_expr +good_string_size_type +pattern_element_1 +bin_element +pattern_element +pattern_bin +pattern_map +arith_op +is_pattern_expr_1 +partial_eval +is_pattern_expr +check_multi_field_init +pattern_list +var +tuple +bin +record_index +char +cons +op +pattern +head +clause +clauses +function_check_max_args +define_function +call_function +check_on_load +imported +add_imports +is_member +check_callback_information +check_unused_records +check_untyped_records +func_location_error +func_location_warning +nowarn_function +check_nifs +check_option_functions +check_bif_clashes +check_undefined_types +drestriction +from_external +check_undefined_functions +add_element +reached_functions +initially_reached +union +check_unused_functions +inline +check_inlines +check_imports +ignore_predefined_funcs +removed_desc +otp_doc_vsn +generated +removed_fa +removed_cat +check_removed +deprecated_desc +next_version +next_major_release +eventually +deprecated_flag +depr_fa +depr_cat +check_deprecated +behaviour_add_conflict +behaviour_add_conflicts +to_external +family_specification +relation_to_family +converse +family_to_relation +relation +behaviour_conflicting +behaviour_missing_callbacks +callbacks +behaviour_callbacks +all_behaviour_callbacks +behaviour_check +check_behaviour +post_traversal_check +disallowed_compile_flags +not_removed +not_deprecated +bif_clashes +dialyzer +function_state +optional_callbacks +opaque +import +export_type +export +callback +behaviour +behavior +attribute_state +start_state +form +map_anno +anno_set_file +set_file +set_form_file +eval_file_attr +eval_file_attribute +includes_qlc_hrl +pre_scan +forms +location +loc +add_lint_warning +add_warning +add_lint_error +bin_seg_size +add_error +pack_warnings +mapfoldl +pack_errors +return_status +is_warn_enabled +guard +usage +nowarn_format +warn_format +is_element +unused_vars +underscore_match +export_vars +shadow_vars +bif_clash +deprecated_function +'-all_available/2-lc$^0/1-0-' +missing_spec_all +keyword_warning +rootname +'-all_available/2-fun-1-' +redefined_builtin_type +'-all_available/2-F/2-1-' +warn_singleton_typevar +nowarn_singleton_typevar +on_load_not_allowed +'-prepare_loading_3/1-lc$^0/1-0-' +warn_redefined_builtin_type +nowarn_redefined_builtin_type +'-partition_on_load/1-fun-0-' +warn_keywords +nowarn_keywords +'-load_mods/1-fun-0-' +'-load_bins/1-fun-0-' +warn_nif_inline +nowarn_nif_inline +'-do_par_fun/2-lc$^0/1-0-' +'-do_par_fun/2-fun-1-' +warn_removed +nowarn_removed +warn_missing_spec_all +'-do_par_fun_each/3-fun-0-' +nowarn_missing_spec_all +warn_missing_spec +nowarn_missing_spec +warn_untyped_record +nowarn_untyped_record +warn_obsolete_guard +nowarn_obsolete_guard +'-load_code_server_prerequisites/0-lc$^0/1-0-' +warn_deprecated_type +nowarn_deprecated_type +eep48 +debug_info +warn_deprecated_function +nowarn_deprecated_function +'-get_doc/2-fun-0-' +warn_unused_record +'-get_type_docs_from_ast/1-fun-0-' +nowarn_unused_record +warn_bif_clash +'-get_function_docs_from_ast/1-fun-0-' +nowarn_bif_clash +warn_unused_type +spec +'-get_function_docs_from_ast/2-fun-0-' +nowarn_unused_type +warn_unused_function +'-set_primary_archive/4-lc$^0/1-0-' +'-module_status/0-lc$^0/1-0-' +nowarn_unused_function +'-module_status/1-lc$^0/1-0-' +warn_unused_import +nowarn_unused_import +'-modified_modules/0-lc$^0/1-0-' +warn_shadow_vars +nowarn_shadow_vars +warn_export_vars +path_files +modified_modules +do_beam_file_md5 +nowarn_export_vars +beam_file_md5 +warn_export_all +module_changed_on_disk +nowarn_export_all +modified +warn_underscore_match +nowarn_underscore_match +cover_compiled +module_status +warn_unused_vars +nowarn_unused_vars +warning_report +compiler_options +lint +cache_warning +used_vars +code_path_cache +maybe_warn_for_cache +exprs_opt +nthtail +has_ext +filter2 +pseudolocals +get_line +format_where +decorate +build +format_mna +format_mf +search +clash +format_mfa +gen_type_paren_1 +gen_type_paren +get_function_docs_from_ast +signature +utf_bittype_size_or_unit +unsized_binary_not_at_end +unsized_binary_in_bin_gen_pattern +undefined_module +flatmap +get_type_docs_from_ast +typed_literal_string +spec_wrong_arity +no_abstract_code +docs_v1 +redefine_module +raw_abstract_v1 +pmod_unsupported +abstract_code +get_doc_chunk_from_ast +'-del_dir_r/1-fun-0-' +old_abstract_code +'-socket_send/1-fun-0-' +dirname +non_latin1_module_unsupported +'-gen_tcp_send/1-fun-0-' +non_integer_bitsize +missing_chunk +file_reply +no_load_nif +nif_inline +chunks +get_doc_chunk +is_dir +multiple_on_loads +invalid_record +file_request +invalid_call +check_args +erts +illegal_record_info +check_and_call +sources +get_doc +illegal_pattern +illegal_map_key +illegal_map_construction +non_existing +where_is_file +illegal_guard_expr +illegal_expr +which +macro_log +character +illegal_bitsize +'-call/4-fun-0-' +'-send_request/3-fun-0-' +export_all +mode_list +'-receive_response/3-fun-0-' +make_binary +empty_module_name +disallowed_nowarn_bif_clash +'-stop/3-fun-0-' +start_get_mode +file_name_1 +ctrl_chars_in_module_name +do_s +compiler +callback_wrong_arity +'$status' +format_status +blank_module_name +file_name +format_status_header +bittype_unit +do_stick_dirs +fname_join +bad_multi_field_init +wildcard_in_update +nostick +debug_options +path_open_first +maybe_stick_dirs +variable_in_record_def +hibernate_after +spawn_opts +could_not_find_registered_name +load_code_server_prerequisites +unused_var +unused_type +name_to_pid +process_was_not_started_by_proc_lib +unused_record +eval_stream2 +parse_erl_exprs +unused_import +'$ancestors' +get_parent +process_not_registered_globally +eval_stream +good +unused_function +set_encoding +process_not_registered +untyped_record +bad +process_not_registered_via +undefined_type +do_par_recv +consult_stream +sendfile_send +get_proc_name +do_par_fun_each +undefined_record +sendfile_fallback_int +do_par_fun +undefined_on_load +undefined_nif +unregister_name +undefined_callback +sendfile_fallback +do_par +undefined_bittype +undefined_behaviour_callbacks +gen_tcp_send +load_bins +load_mods +register_name +socket_send +undefined_behaviour +verify_prepared +unbound_var +whereis_name +type_syntax +partition +partition_on_load +too_many_arguments +prepare_check_uniq_1 +where +stacktrace_guard +'$inet' +stacktrace_bound +prepare_check_uniq +via +get_value +spec_fun_undefined +singleton_typevar +prepare_loading_3 +chunk_size +redefine_type +prepare_loading_2 +do_for_proc +redefine_spec +change_time +change_group +redefine_record +do_prepare_loading +to_list +partition_load +reqids_to_list +change_owner +redefine_optional_callback +redefine_old_bif_import +change_mode +'$prepared$' +reqids_add +redefine_import +redefine_function +atomic_load +reqids_size +reqids_new +redefine_callback +prepare_ensure +path_open +redefine_builtin_type +ensure_modules_loaded_2 +path_script +redefine_bif_import +flush_responses +usort +obsolete_guard_overridden +path_eval +ensure_modules_loaded_1 +obsolete_guard +collection_result +not_exported_opaque +ensure_modules_loaded +replace_path +missing_spec +missing_qlc_hrl +no_reply +del_paths +del_path +path_consult +consult +add_pathsa +check_response +match_underscore_var_pat +match_underscore_var +add_pathsz +receive_response +no_request +add_paths +invalid_removed +ipread_s32bu_p32bu_2 +wait_response +invalid_deprecated +ipread_s32bu_p32bu_int +add_patha +illegal_guard_local_call +'@wait_response_recv_opt' +do_send_request +add_pathz +illegal_bitsize_local_call +ill_defined_optional_callbacks +ill_defined_behaviour_callbacks +add_path +send_request +copy_opened_int +duplicated_export_type +copy_int +duplicated_export +define_import +call_to_redefined_old_bif +call_to_redefined_bif +nocache +pwrite_int +behaviour_info +is_sticky +put_chars +bad_removed +unstick_mod +calling_self +bad_on_load_arity +stick_mod +pread_int +do_call +unstick_dir +bad_on_load +stick_dir +bad_nowarn_unused_function +init_it2 +init_fail +priv_dir +bad_nowarn_bif_clash +bad_module +compiler_dir +dir +get_chars +bad_inline +monitor_return +lib_dir +start_monitor +bad_export_type +bad_dialyzer_option +root_dir +init_it +bad_dialyzer_attribute +bad_deprecated +ram +extension +umerge +bad_callback +raw_write_file_info +raw_read_file_info +bad_bitsize +do_spawn +do_write_file +attribute +unsafe_var +undefined_field +undefined_behaviour_func +get_mode +all_available +shadowed_var +renamed_type +removed_type +get_object_code +del_dir_r +redefine_field +is_loaded +int_list +future_feature +modp +field_name_is_variable +exported_var +removed +load_binary +deprecated_type +'$handle_undefined_function' +call_undefined_function_handler +deprecated_builtin_type +bittype_mismatch +stub_function +concat +basename +load_abs +sync_ensure_on_load +conflicting_behaviours +value_option +pid2name +terminated +undefined_script +bool_option +load_file +try_decompress +module_md5_1 +module_md5 +get_chunk_1 +get_chunk +raise_undef_exception +mfa +remove_handler_failed +filter_stacktrace +filter +removed_failing_filter +remove_filter +handle_filter_failed +bad_return_value +do_apply_filters +filter_default +apply_filters +handler +log_event +internal_log +removed_failing_handler +do_internal_log +allow +remove_handler +without +call_handlers +handlers +filters +log_allowed +'-do_start_slave/3-fun-1-' +'-do_start_slave/3-fun-0-' +relay_loop +already_started +relay_start +do_start_slave +no_master +do_start +code_change +handle_info +handle_cast +noreply +stopped +handle_call +format_error +erlangrc +start_boot +applications_loaded +pool_master +take_over_monitor +rsh_starter +timer_server +stdlib +load +init_kernel_started +mod +maxP +maxT +shell_docs_ansi +prevent_overlapping_partitions +net_ticktime +net_tickintensity +logger_sasl_compatible +notice +logger_level +included_applications +optional_applications +applications +ddll_server +os_server +rex +net_sup +kernel_sup +fixtable_server +file_server_2 +boot_server +modules +vsn +start_link +modules_loaded +win32reg +uri_string +unicode_util +sys +supervisor_bridge +sofs +shell_docs +shell_default +shell +sets +rand +queue +qlc_pt +qlc +proplists +pool +peer +otp_internal +ordsets +orddict +ms_transform +log_mf_h +io_lib_pretty +io_lib_fread +io_lib_format +gen_statem +gen_fsm +gb_trees +gb_sets +filelib +file_sorter +eval_bits +escript +error_logger_tty_h +error_logger_file_h +erl_tar +erl_pp +erl_posix_msg +erl_internal +erl_features +erl_expand_records +erl_error +erl_compile +erl_bits +erl_abstract_code +epp +edlin_type_suggestion +edlin_expand +edlin_context +edlin +digraph_utils +digraph +dict +dets_v9 +dets_utils +dets_sup +dets_server +dets +calendar +c +beam_lib +base64 +array +argparse +wrap_log_reader +user_sup +user_drv +rpc +raw_file_io_list +raw_file_io_inflate +raw_file_io_delayed +raw_file_io_deflate +raw_file_io_compressed +raw_file_io +ram_file +pg2 +pg +net_adm +logger_sup +logger_std_h +logger_proxy +logger_olp +logger_handler_watcher +logger_h_common +logger_formatter +logger_disk_log_h +local_udp +local_tcp +kernel_config +inet_udp +inet_tcp_dist +inet_tcp +inet_sctp +inet_res +inet_parse +inet_hosts +inet_gethost_native +inet_epmd_socket +inet_epmd_dist +inet_dns +inet_db +inet_config +inet6_udp +inet6_tcp_dist +inet6_tcp +inet6_sctp +group_history +group +global_search +global_group +gen_udp_socket +gen_udp +gen_tcp_socket +gen_tcp +gen_sctp +erpc +erl_signal_handler +erl_reply +erl_epmd +erl_distribution +erl_compile_server +erl_boot_server +dist_util +dist_ac +disk_log_sup +disk_log_server +disk_log_1 +disk_log +application_starter +supervisor +proc_lib +logger_simple_h +logger_config +logger_backend +logger_filters +gen_server +gen_event +gen +file_io_server +file_server +erl_lint +code_server +application_master +application_controller +application +preloaded +noshell +home +progname +net +no_uniconde_traslation +no_function +no_data +not_enough_memory +invalid_parameter +invalid_flags +invalid_data +insufficient_buffer +esystem +esocktype +eservice +eoverflow +enxio +enoname +enodata +enametoolong +emem +efault +efamily +efail +ebadflags +eaddrfamily +can_not_complete +address_not_associated +zone_indices +wwanpp2 +wwanpp +well_known +valid_lifetime +unreachable +unicast_addrs +unchanged +transient +testing +tentative +suffix_origin +speed +software_loopback +service +router_advertisement +register_adapter_suffix +receive_only +reasm_size +prefix_origin +prefixes +preferred_lifetime +preferred +ppp +phys_addr +out_qlen +out_errors +out_discards +out_nucast_pkts +out_ucast_pkts +out_octets +oper_status +operational +on_link_prefix_length +numericserv +numerichost +no_multicast +not_present +non_operational +nofqdn +netbios_over_tcpip_enabled +name_info +namereqd +multicast_addrs +mask +manual +lower_layer_down +link_layer_address +lease_lifetime +last_change +iso88025_tokenring +ipv6_other_stateful_config +ipv6_managed_address_config_supported +ipv6_index +ipv6_enabled +ipv4_enabled +in_unknown_protos +in_errors +in_discards +in_nucast_pkts +in_ucast_pkts +in_octets +internal_oper_status +ieee80216_wman +ieee80211 +idn +friendly_name +fddi +ethernet_csmacd +duplicate +dns_suffix +dns_server_addrs +dns_eligible +disconnected +ddns_enabled +dhcp_v4_enabled +dhcp +description +deprecated +dad_state +bcast_addr +anycast_addrs +admin_status +address_info +divert +'DIVERT' +pfsync +'PFSYNC' +rohc +'ROHC' +wesp +'WESP' +shim6 +'SHIM6' +hip +'HIP' +manet +'MANET' +'mpls-in-ip' +'MPLS-IN-IP' +udplite +'UDPLite' +'mobility-header' +'Mobility-Header' +'rsvp-e2e-ignore' +'RSVP-E2E-IGNORE' +fc +'FC' +'SCTP' +pipe +'PIPE' +sps +'SPS' +iplt +'IPLT' +sscopmce +'SSCOPMCE' +crudp +'CRUDP' +crtp +'CRTP' +fire +'FIRE' +isis +'ISIS' +ptp +'PTP' +sm +'SM' +smp +'SMP' +uti +'UTI' +srp +'SRP' +stp +'STP' +iatp +'IATP' +ddx +'DDX' +l2tp +'L2TP' +pgm +'PGM' +carp +vrrp +'CARP' +'ipx-in-ip' +'IPX-in-IP' +'compaq-peer' +'Compaq-Peer' +snp +'SNP' +ipcomp +'IPComp' +'a/n' +'A/N' +qnx +'QNX' +scps +'SCPS' +aris +'ARIS' +pim +'PIM' +pnni +'PNNI' +ifmp +'IFMP' +gmtp +'GMTP' +encap +'ENCAP' +etherip +'ETHERIP' +'scc-sp' +'SCC-SP' +micp +'MICP' +'IPIP' +'ax.25' +'AX.25' +mtp +'MTP' +larp +'LARP' +'sprite-rpc' +'Sprite-RPC' +ospf +'OSPFIGP' +eigrp +'EIGRP' +tcf +'TCF' +dgp +'DGP' +'nsfnet-igp' +'NSFNET-IGP' +ttp +'TTP' +vines +'VINES' +'secure-vmtp' +'SECURE-VMTP' +vmtp +'VMTP' +'iso-ip' +'ISO-IP' +'wb-expak' +'WB-EXPAK' +'wb-mon' +'WB-MON' +'sun-nd' +'SUN-ND' +'br-sat-mon' +'BR-SAT-MON' +pvp +'PVP' +wsn +'WSN' +cphb +'CPHB' +cpnx +'CPNX' +ipcv +'IPCV' +visa +'VISA' +'sat-mon' +'SAT-MON' +ippc +'IPPC' +rvd +'RVD' +kryptolan +'KRYPTOLAN' +'sat-expak' +'SAT-EXPAK' +cftp +'CFTP' +'ipv6-opts' +'IPV6-OPTS' +'ipv6-nonxt' +'IPV6-NONXT' +'ipv6-icmp' +'IPV6-ICMP' +'SKIP' +tlsp +'TLSP' +mobile +'MOBILE' +narp +'NARP' +swipe +'SWIPE' +'i-nlsp' +'I-NLSP' +ah +'AH' +esp +'ESP' +bna +'BNA' +dsr +'DSR' +gre +'GRE' +rsvp +'RSVP' +idrp +'IDRP' +'ipv6-frag' +'IPV6-FRAG' +'ipv6-route' +'IPV6-ROUTE' +sdrp +'SDRP' +'IPV6' +il +'IL' +'tp++' +'TP++' +'idpr-cmtp' +'IDPR-CMTP' +ddp +'DDP' +xtp +'XTP' +idpr +'IDPR' +'3pc' +'3PC' +dccp +'DCCP' +'merit-inp' +'MERIT-INP' +'mfe-nsp' +'MFE-NSP' +netblt +'NETBLT' +'iso-tp4' +'ISO-TP4' +irtp +'IRTP' +rdp +'RDP' +'leaf-2' +'LEAF-2' +'leaf-1' +'LEAF-1' +'trunk-2' +'TRUNK-2' +'trunk-1' +'TRUNK-1' +'xns-idp' +'XNS-IDP' +prm +'PRM' +hmp +'HMP' +dcn +'DCN-MEAS' +mux +'MUX' +'UDP' +'CHAOS' +xnet +'XNET' +emcon +'EMCON' +argus +'ARGUS' +'PUP' +nvp +'NVP-II' +'bbn-rcc' +'BBN-RCC-MON' +igp +'IGP' +'EGP' +cbt +'CBT' +'TCP' +st2 +'ST2' +ipencap +'IP-ENCAP' +ggp +'GGP' +'IGMP' +'ICMP' +'IP' +sockets +select_write +select_read +eagain +create_accept_socket +zero +write_waits +write_tries +write_pkg +write_fails +write_byte +v6only +void +use_min_mtu +use_ext_recvinfo +user_timeout +usec +update_connect_context +update_accept_context +unknown +unicast_hops +unblock_source +txqlen +tunnel6 +tunnel +transparent +throughput +syncnt +staticarp +spec_dst +sndtimeo +sndlowat +sndbufforce +slen +slave +simplex +set_peer_primary_addr +setfib +sendsrcaddr +sendfile_waits +sendfile_tries +sendfile_pkg_max +sendfile_pkg +sendfile_max +sendfile_fails +sendfile_byte +select_sent +select_failed +sec +rxq_ovfl +rtoinfo +rthdr +router_alert +rights +retopts +reset_streams +renaming +reliability +recvpktinfo +recvorigdstaddr +recvopts +recvif +recvhoplimit +recverr +recvdstaddr +read_tries +read_pkg +read_fails +read_byte +rdm +rcvtimeo +rcvlowat +rcvbufforce +pup +pronet +promisc +primary_addr +ppromisc +portsel +portrange +pointopoint +pkttype +pktinfo +peercred +peer_auth_chunks +peer_addr_params +peek +passcred +partial_delivery_point +outgoing +otherhost +origdstaddr +oobinline +oob +oactive +num_unknown_cmds +num_unexpected_writes +num_unexpected_reads +num_unexpected_connects +num_unexpected_accepts +num_threads +num_general_errors +not_bound +notrailers +nosignal +noopt +nodefrag +noarp +nlen +netrom +multicast_hops +multicast_all +mtu_discover +msfilter +minttl +mincost +metricom +mem_start +mem_end +md5sig +maxseg +maxburst +master +mark +lower_up +lowdelay +local_auth_chunks +localtlk +link2 +link1 +link0 +leave_group +knowsepoch +kernel +keepintvl +keepidle +keepcnt +join_group +i_want_mapped_v4_addr +irq +ipv6 +ipip +ipcomp_level +ip +integer_range +initmsg +infiniband +implink +igmp +ifindex +ieee1394 +ieee802 +icmp6 +icmp +host +hopopts +hoplimit +hmac_ident +hdrincl +hatype +get_peer_addr_info +get_overlapped_result +frelay +freebind +fragment_interleave +fastroute +faith +explicit_eor +events +eui64 +esp_trans_level +esp_network_level +errqueue +eor +egp +eether +echo +dynamic +dying +dup +dstopts +drop_source_membership +dormant +dontfrag +dma +dlci +disable_fragments +delayed_ack_time +default_send_params +data_size +ctrunc +credentials +cork +context +congestion +confirm +completion_status +cmsg_cloexec +checksum +chaos +cantconfig +cancelled +busy_poll +block_source +bindtodevice +base_addr +bad_data +ax25 +automedia +autoclose +auth_level +auth_key +auth_delete_key +auth_chunk +auth_asconf +auth_active_key +authhdr +atm +associnfo +arcnet +appletlk +already +allmulti +alen +add_source_membership +add_socket +addrform +adaption_layer +acc_waits +acc_tries +acc_fails +acc_success +acceptfilter +acceptconn +zerocopy +wstates +write_pkg_max +want +txtime +txstatus +time_exceeded +sourceaddr +socket_level +slist +siftxqlen +sifnetmask +sifmtu +sifdstaddr +sifbrdaddr +sifaddr +send_failure +sender_dry +selected +rstates +remote +reject_route +read_waits +read_pkg_max +probe +port_unreach +policy_fail +pkt_toobig +peer_rwnd +peer_error +partial_delivery +otp_socket_option +origin +onoff +offender +num_writers +num_tstreams +num_tseqpkgs +num_tdgrams +num_sockets +num_readers +num_pudp +num_ptcp +num_psctp +num_pip +number_peer_destinations +num_outstreams +num_dlocal +num_dinet6 +num_dinet +num_cnt_bits +num_acceptors +null +not_neighbour +noroute +nogroup +net_unreach +net_unknown +multiaddr +missing +asocmaxrxt +max_instreams +max_init_timeo +max_attempts +local_rwnd +listening +io_num_threads +io_backend +iov_max +interface +initial +include +in6_sockaddr +in4_sockaddr +how +host_unreach +host_unknown +giftxqlen +gifnetmask +gifname +gifmtu +gifmap +gifindex +gifhwaddr +gifflags +gifdstaddr +gifconf +gifbrdaddr +gifaddr +frag_needed +exclude +eei +dtor +dont +do +dest_unreach +data_io +ctype +counter_wrap +cookie_life +closing +bufsz +boolean +authentication +assoc_id +association +adm_prohibited +address +addr_unreach +adaptation_layer +symlink +device +no_reuse +dont_need +will_need +random +skip_type_check +gc_buffer +out_of_memory +acquired +lock_order_violation +trace_ts +gc_zlib +unknown_error +version_error +buf_error +mem_error +stream_error +stream_end +already_initialized +not_initialized +sub_get +handle_sys_task +handle_incoming_signals +done +erts_dirty_process_signal_handler +send_copy_req +send_copy_reqs +check_send_copy_req +switch_area +not_handled_message +working +idle +msg_loop +nif_not_loaded +ets_info_binary_iter +ets_info_binary_error +sched_wall_time +kernel_refc +find_lac +code_purger +literal_area_collector +set_code_and_literal_cleaner_prio +'@flush_monitor_messages_refopt' +mc_refill +is_map_iter +mc_iterator +get_cpc_opts +mseg_alloc +gcopt +allow_gc +'-inlined-error_with_inherited_info/3-' +ensure_tracer_module_loaded +gc_info +schedulers +receive_allocator +insert_info +instance +insert_instance +mk_res_list +get_alloc_info +process_table +module_table +module_refs +loaded_code +fun_table +external_alloc +export_table +export_list +ets_misc +atom_table +atom_space +aa_mem_data +receive_emd +fix_alloc +au_mem_data +sbcs +mbcs_pool +mbcs +au_mem_current +au_mem_blocks_1 +blocks +au_mem_blocks +acc_blocks_size +ets_alloc +eheap_alloc +binary_alloc +au_mem_acc +au_mem_fix +fix_types +fix_proc +proc +msg_ref +ll_ptimer +hl_ptimer +bif_timer +accessor_bif_timer +get_fix_proc +get_memval +memory_1 +rvrs +processor_node +cput_i2e_tag +cput_i2e_tag_map +cput_i2e +cput_e2i +logical +thread +processor +core +cput_e2i_clvl +internal_cpu_topology +get_cookie +auth +set_cookie +passive_cnct +send_nosuspend +fun_info_1 +disconnect +disconnect_node +crasher +new_stacktrace +prepare_loading_1 +is_alive +garbage_collect_message_area +get_gc_opts +stderr +bad_option +radix +digits_per_small +trim_zeroes +get_sign +combine_pairs +combine +segmentize_1 +segmentize +big_binary_to_int +clean +'no server found' +ebusy +std_error +error_report +file_error +invalid_current_directory +'-prim_read_file_info/3-inlined-0-' +'-prim_list_dir/2-inlined-0-' +'-prim_get_file/2-inlined-0-' +'-open_archive/4-inlined-0-' +'-foldl_archive/3-inlined-0-' +'-start/0-fun-0-' +'-efile_get_mods_par/3-fun-0-' +'-efile_gm_spawn_1/5-fun-0-' +'-prim_get_file/2-fun-0-' +'-prim_list_dir/2-fun-0-' +'-prim_read_file_info/3-fun-0-' +'-open_archive/4-fun-0-' +'-ensure_virtual_dirs/6-fun-0-' +'-ensure_virtual_dirs/6-fun-1-' +'-foldl_archive/3-fun-0-' +'-load_prim_archive/3-fun-0-' +load_prim_archive +real_path +normalize +win32_pathtype +unix_pathtype +pathtype +absname_vr +volumerelative +relative +absolute +ipv4_addr +ipv4_address +ipv4_list +is_prefix +archive_split +no_match +string_match +archive +no_split +name_split +path_join +path_split +to_strs +keyins +keysort +deep_member +send_all +win32 +is_basename +clear_cache +cache_new +foldl_archive +ensure_virtual_dirs +open_archive +cache +apply_archive +prim_get_cwd +archive_read_file_info +prim_read_file_info +archive_list_dir +prim_list_dir +archive_get_file +prim_get_file +primary +prim_set_primary_archive +do_prim_purge_cache +prim_purge_cache +loader_debug +prim_init +port_error +ll_close +ll_open_set_bind +ll_udp_open +ll_tcp_connect +udp_options +tcp_timeout +tcp_options +inet_stop_port +inet_get_cwd +inet_read_link_info +inet_read_file_info +inet_list_dir +inet_send_and_rcv +inet_get_file_from_port1 +inet_get_file_from_port +inet_timeout_handler +inet_exit_port +find_collect +find_loop +connect_master +find_master +bad_return +gm_process +gm_arch_get +gm_get_mods +efile_gm_get_1 +efile_gm_get +efile_gm_spawn_1 +efile_gm_spawn +efile_gm_recv +efile_any_archives +efile_get_mods_par +handle_get_modules +efile_timeout_handler +efile_get_cwd +efile_read_file_info +efile_list_dir +efile_set_primary_archive +emfile +efile_get_file_from_port3 +'prim_load port died' +port_died +efile_get_file_from_port2 +efile_get_file_from_port +handle_timeout +handle_exit +handle_stop +handle_get_cwd +handle_read_link_info +handle_read_file_info +handle_list_dir +handle_purge_archive_cache +handle_set_primary_archive +handle_get_file +bad_state +report +enotdir +enoent +check_file_result +purge_archive_cache +set_primary_archive +get_path +init_ack +noport +efile +start_efile +hosts +start_inet +loader +prim_state +'-filter_fun/0-fun-0-' +'-include_acc/3-fun-0-' +'-get_cd_loop/11-fun-0-' +'-get_cd_loop/11-fun-1-' +'-get_cd_loop/11-fun-2-' +pwrite_binary +pwrite_iolist +skipper +skip_iolist +splitter +split_iolist +local_file_header +local_file_header_from_bin +bad_cd_file_header +cd_file_header +cd_file_header_from_bin +dos_date_time_to_datetime +add_extra_info +cd_file_header_to_file_info +eocd +eocd_and_comment_from_bin +regular +binary_io +set_file_info +prim_file_io +find_eocd_header +seek +bad_eocd +get_end_of_central_dir +get_filename_from_b2 +bad_central_directory +get_file_header +get_cd_loop +get_central_dir +offset_over_z_data_descriptor +unsupported_compression +get_z_all +bad_local_file_header +bad_local_file_offset +get_z_file +get_zip_input +lists_foldl +include_acc +illegal_filter +primzip_file +do_foldl +foldl +primzip +do_open +filter_fun_throw +filter_fun +prim_zip +skip_unicast +skip_multicast +skip_friendly_name +skip_dns_server +skip_anycast +include_wins_info +include_tunnel_bindingorder +include_prefix +include_gateways +include_all_interfaces +include_all_compartments +'-getaddrinfo/2-lc$^0/1-0-' +nif_if_names +nif_if_index2name +nif_if_name2index +nif_get_ip_address_table +nif_get_interface_info +nif_get_if_entry +nif_get_adapters_addresses +nif_getifaddrs +nif_getaddrinfo +nif_getnameinfo +nif_gethostname +if_names +if_index2name +if_name2index +get_ip_address_table +get_if_entry +get_interface_info +no_skips_no_includes +no_skips_all_includes +all_skips_no_includes +all_skips_all_includes +get_adapters_addresses +getaddrinfo +getnameinfo +peek_off +'-supports/2-inlined-0-' +'-init/0-fun-0-' +'-init/0-fun-1-' +'-init/0-fun-2-' +'-init/0-fun-3-' +'-init/0-fun-4-' +'-supports/1-fun-4-' +'-supports/1-fun-3-' +'-supports/1-fun-2-' +'-supports/1-fun-1-' +'-supports/1-fun-0-' +'-supports/2-fun-0-' +'-is_supported/2-fun-4-' +'-is_supported/2-fun-3-' +'-is_supported/2-fun-2-' +'-is_supported/2-fun-1-' +'-is_supported/2-fun-0-' +'-bind/3-lc$^0/1-0-' +'-enc_ioctl_flags/2-fun-0-' +'-merge_sockaddr/2-fun-0-' +'-enc_msg/1-fun-0-' +'-enc_cmsgs/2-lc$^0/1-0-' +level +'-dec_cmsgs/2-lc$^0/1-0-' +nif_cancel +nif_ioctl +nif_peername +nif_sockname +nif_getopt +nif_setopt +nif_shutdown +nif_finalize_close +nif_close +nif_recvmsg +nif_recvfrom +nif_recv +nif_sendfile +nif_sendmsg +nif_sendto +nif_send +nif_accept +nif_listen +nif_connect +nif_bind +nif_open +nif_supports +nif_command +nif_info +p_get +p_put +ioctl_flag +invalid_ioctl_flag +invalid_socket_option +sndctrlbuf +rcvctrlbuf +rcvbuf +iow +controlling_process +otp +enc_sockopt +dec_cmsgs +enc_cmsgs +enc_msg +msg_flag +enc_msg_flags +enc_path +merge_sockaddr +enc_sockaddr +enc_protocol +enc_ioctl_flags +enc_ioctl_request +cancel +sifflags +ioctl_request +ioctl +value_spec +getopt_native +getopt_result +socket_option +setopt_common +setopt_native +finalize_close +recvmsg +improper_list +element_not_binary +invalid_iov +rest_iov +msg +with +ctrl +sendmsg_invalid +iov +sendmsg_result +completion +nth +domain +get_is_supported +p_get_is_supported +is_supported +is_supported_option +fold +supports +protocol +options_table +protocols_table +put_supports_table +msg_flags +ioctl_flags +ioctl_requests +options +protocols +socket_debug +debug_filename +use_registry +registry +unknown_monitor +unknown_socket +'-loop/1-fun-0-' +'-do_which_sockets/2-lc$^0/1-0-' +whoami +user_size +user_which_monitors +user_update +user_take +user_lookup +user_delete +sock_which_monitors +sock_update +sock_take +sock_lookup +mon_size +mon_update +mon_take +mon_lookup +mon_delete +do_cancel_monitor_socket +nosock +mon +msocket +do_monitor_socket +do_which_sockets +sock_size +socket +mk_down_msg +error_msg +mk_log_msg +log_msg +handle_unexpected_msg +handle_monitored_by2 +handle_monitored_by +handle_user_down_cleanup +handle_user_down +bad_request +send_down +handle_send_down +user_sock_delete_update +handle_delete_socket +handle_add_socket +sendfile_deferred_close +'$socket' +which_monitors +number_of_monitors +cancel_monitor +which_sockets +number_of +socket_registry +enqueue_nif +enqueue_input_1 +enqueue_input +bad_memlevel +arg_mem +bad_windowbits +arg_bitsz +bad_eos_behavior +arg_eos_behavior +bad_compression_method +arg_method +bad_compression_strategy +rle +huffman_only +filtered +arg_strategy +bad_compression_level +best_speed +best_compression +arg_level +bad_flush_mode +full +arg_flush +getStash_nif +setStash_nif +clearStash_nif +empty +restore_progress +save_progress +append_iolist +dequeue_next_chunk +dequeue_all_chunks_1 +dequeue_all_chunks +gunzip +gzip +unzip +zip +data_error +uncompress +finish +compress +crc32_nif +getBufSize_nif +getBufSize +setBufSize_nif +setBufSize +inflateEnd_nif +inflateEnd +safeInflate +need_dictionary +finished +yield_inflateChunk +inflateChunk +inflate_opts +inflate_nif +exception_on_need_dict +inflate +inflateReset_nif +inflateReset +inflateGetDictionary_nif +not_supported +inflateGetDictionary +inflateSetDictionary_nif +inflateSetDictionary +inflateInit_nif +cut +inflateInit +deflateEnd_nif +deflateEnd +deflate_nif +zlib_opts +deflate_opts +deflateParams_nif +deflate +deflateParams +deflateReset_nif +deflateReset +deflateSetDictionary_nif +deflateSetDictionary +deflateInit_nif +deflated +deflateInit +set_controller_nif +set_controlling_process +to_posix_seconds +from_posix_seconds +is_path_translatable +decode_path +encode_path +proplist_get_value +reverse_list +altname_nif +get_cwd_nif +set_cwd_nif +get_device_cwd_nif +del_dir_nif +del_file_nif +make_dir_nif +rename_nif +make_soft_link_nif +make_hard_link_nif +read_info_nif +read_link_nif +list_dir_nif +altname +make_symlink +make_link +del_dir +make_dir +set_cwd +get_dcwd +file_info_convert_ctime +file_info_convert_mtime +universal +file_info_convert_atime +throw_on_error +set_time_nif +set_time +set_permissions_nif +set_permissions +set_owner_nif +set_owner +write_file_info_1 +write_file_info +posix +adjust_times +read_handle_info_1 +read_handle_info +read_info_1 +read_link_info +no_translation +gl +list_dir_convert +list_dir_1 +list_dir_all +list_dir +translate_raw_name +read_link_1 +read_link_all +read_link +write_file +read_file_nif +read_file +read_handle_info_nif +delayed_close_nif +get_handle_nif +truncate_nif +allocate_nif +advise_nif +sync_nif +seek_nif +pwrite_nif +pread_nif +write_nif +read_nif +close_nif +file_desc_to_ref_nif +open_nif +read_ahead +fill_fd_option_map +build_fd_data +not_on_controlling_process +get_fd_data +reset_write_position +get_handle +ipread_s32bu_p32bu_nif +ipread_s32bu_p32bu +internal_get_nif_resource +sequential +pwrite_list +pwrite_plain +pwrite +pread_list +pread +position_1 +bof +cur +datasync +sync +allocate +advise +truncate +write_1 +read_line_1 +read_line +read_1 +r_ahead_size +r_buffer +make_fd +file_desc_to_ref +copy_opened +file_descriptor +helper_loop +bound +connecting +accepting +multicast +no_pointtopoint +no_broadcast +down +up +term +ssl +sctp_setadaptation +sctp_assocparams +addr_over +unordered +sctp_assoc_value +sctp_event_subscribe +sackdelay_disable +sackdelay_enable +pmtud_disable +pmtud_enable +hb_demand +hb_disable +hb_enable +sctp_paddrparams +sctp_prim +sctp_setpeerprim +sctp_paddrinfo +eprotonosupport +'-bindx/3-lc$^0/1-0-' +'-type_value_2/2-fun-1-' +'-type_value_2/2-fun-0-' +'-enc_value_2/2-lc$^0/1-1-' +'-enc_value_2/2-lc$^1/1-0-' +ctl_cmd +get_ip6 +get_ip4 +get_ip +get_addr +get_addrs +ip6_loopback +ip6_any +ip6_to_bytes +ip4_loopback +ip4_any +ip4_to_bytes +utf8_to_characters +tree +ktree_keys +ktree_update +ktree_insert +ktree_get +is_defined +ktree_is_defined +ktree_empty +len +rev +build_iflist +build_ifaddrs_opts +build_ifaddrs +encode_ifname +enc_time +dec_status +dec_stats +decode_stats +send_oct +send_max +send_cnt +send_avg +recv_oct +recv_max +recv_dvi +recv_cnt +recv_avg +enc_stats +encode_stats +subs_empty_out_q +dec_subs +decode_subs +enc_subs +encode_subs +encode_ifopt_val +encode_ifopts +decode_ifopts +dec_ifopt +enc_ifopt +mtu +dstaddr +broadaddr +type_ifopt +merge_fields +merge_options +need_template +multi +dec +dec_opt_val +decode_opt_val +enc_opts +encode_opts +once +enc_opt_val +encode_opt_val +enum_name +enum_val +enum_names +enum_vals +borlist +dec_value_tuple +decode +dec_value +flowinfo +scope_id +enc_value_2 +enc_value_tuple +enc_value_1 +enc_value_default +enc_value +family +loopback +uint8 +uint24 +uint16 +sockaddr +sctp_assoc_id +linkaddr +ether +bool8 +binary_or_uint +enum +bitenumlist +type_value_2 +type_value_record +type_value_tuple +type_value_1 +type_value_default +record +type_value +membership +int +uint +mif +opts +type_opt_1 +type_opt +dec_opt +sndbuf +show_econnreset +send_timeout_close +send_timeout +sctp_status +sctp_set_peer_primary_addr +sctp_rtoinfo +sctp_primary_addr +sctp_peer_addr_params +sctp_nodelay +sctp_maxseg +sctp_initmsg +sctp_i_want_mapped_v4_addr +sctp_get_peer_addr_info +sctp_events +sctp_disable_fragments +sctp_delayed_ack_time +sctp_autoclose +sctp_associnfo +sctp_adaptation_layer +reuseport_lb +reuseport +reuseaddr +recvttl +recvtos +recvtclass +recbuf +read_packets +pktoptions +nopush +nodelay +netns +multicast_ttl +multicast_loop +multicast_if +low_watermark +low_msgq_watermark +keepalive +ipv6_v6only +high_watermark +high_msgq_watermark +header +exit_on_close +exclusiveaddruse +drop_membership +dontroute +deliver +delay_send +buffer +bind_to_device +add_membership +enc_opt +is_sockopt_val +attach +detach +unrecv +getservbyport1 +getservbyport +getservbyname1 +getservbyname +gethostname +getstatus +getprotocol +gettype +getindex +ignorefd +getfd +getstat +subscribe +ifset +ifget +getiflist +netmask +broadcast +pointtopoint +getifaddrs_ifget +hwaddr +hwaddr_last +comp_ifaddrs_3 +comp_ifaddrs_2 +comp_ifaddrs_flags +comp_ifaddrs +enotsup +getifaddrs +chgopts +chgopt +getopts +getopt +setopt +socknames +setsockname +sockname +sctp_assoc_change +peernames +setpeername +peername +recvfrom0 +recvfrom +async_recv +recv0 +recv +sendfile_1 +sendfile_maybe_uncork +sendfile_maybe_cork +sctp_default_send_param +sctp_sndrcvinfo +sendmsg +uint32 +do_sendto +sendto +peeloff +listen +async_accept +accept_opts +accept0 +accept +connectx0 +addr_list +connectx +async_connect0 +async_connect +connect0 +bindx_check_addrs +bindx +addr +do_bind +bind +send_pend +close_pend_loop +close_port +linger +shutdown_1 +read_write +drv2protocol +sctp +protocol2drv +seqpacket +dgram +enc_type +inet6 +enc_family +bool +fdopen +prim_inet +arg_reg_alloc +prim_eval +peek_head +copying_read +unlock +try_lock +find_byte_index +wipe +write +read_iovec +read +shutdown_timeout +not_allowed +starting +'-to_string/2-lc$^1/1-1-' +'-to_string/2-lc$^0/1-0-' +'-notify/1-fun-0-' +'-get_pids/2-lc$^0/1-0-' +'-do_boot/2-fun-0-' +'-eval_script/2-fun-1-' +'-eval_script/2-fun-2-' +'-eval_script/2-fun-0-' +'-load_modules/2-lc$^0/1-0-' +'-load_modules/2-lc$^1/1-2-' +'-load_modules/2-lc$^2/1-3-' +'-load_modules/2-lc$^3/1-4-' +'-load_modules/2-lc$^4/1-1-' +prepared +'-prepare_loading_fun/0-fun-0-' +'-patch_path/2-lc$^0/1-0-' +'-patch_dir/2-lc$^0/1-1-' +'-patch_dir/2-lc$^1/1-0-' +'-shutdown_timer/1-fun-0-' +'-run_on_load_handlers/2-fun-0-' +'-run_on_load_handler/2-fun-0-' +standard_error +format +io_lib +'-debug_profile_format_mfas/1-fun-0-' +'-collect_loaded_mfas/0-lc$^1/1-0-' +'-collect_loaded_mfas/0-lc$^0/1-1-' +bad_generator +'-collect_loaded_mfas/2-lc$^0/1-0-' +collect_mfa +collect_mfas +all_loaded +collect_loaded_mfas +sort +debug_profile_format_mfas +snifs +debug_profile_mfas +debug_profile_stop +debug_profile_start +on_load_function_failed +on_load_handler_returned_ok +spawn_monitor +run_on_load_handler +running_on_load_handler +on_load_loop +on_load_handler_init +start_on_load_handler_process +run_on_load +run_on_load_handlers +archive_extension +objfile_extension +set_argument +get_argument1 +to_strings +get_flag_args +get_flag_list +get_flag +update_flag +get_args +flag +check +start_extra_arg +start_arg2 +start_arg +eval_arg +end_args +arg +parse_boot_args +timer +flush_timout +shutdown_time +shutdown_timer +load_module +do_load_module +explain_add_head +otp_release +nofile +explain_ensure_loaded_error +exprs +new_bindings +erl_eval +parse_exprs +erl_parse +erl_anno +dot +erl_scan +start_it +start_em +start_in_kernel +funny_splitwith +funny_split +directory +file_info +read_file_info +patch_dir +patch_path +extract_var +add_var +fix_path +make_path +prepare_loading_fun +load_rest +load_failed +get_modules +load_modules +'unexpected command in bootfile' +kernel_load_completed +primLoad +preLoaded +kernelProcess +eval_script +get_cwd +script +'bootfile format error' +'cannot get bootfile' +not_found +get_boot +pz +pa +path_flags +bootfile +invalid_boot_var_argument +boot_var +get_boot_vars_1 +get_boot_vars +no_or_multiple_bindir_variables +bindir +check_bindir +no_or_multiple_root_variables +root +get_root +es +init__boot__on_load_handler +init_debug_flag +init_debug +path +do_boot +add_to_kernel +set_path +start_prim_loader +kernel_pid +terminate +del +sub +do_unload +logger_server +unload +kill_all_ports +kill_em +get_pids +kill_all_pids +resend +shutdown_loop +shutdown_kernel_pid +get_kernelpid +get_logger +heart +get_heart +prepare_shutdown +global_name_server +global_prepare_shutdown +shutdown_pids +stop_heart +clear_system +do_restart +do_stop +stopping +set_flag +config +stdout +io_request +user +do_handle_msg +new_state +handle_msg +loop +new_kernelpid +garb_boot_loop +foreach +get_file +erl_prim_loader +do_ensure_loaded +progress +boot_loop +crash +halt_string +things_to_string +flatten +join +printable_list +to_string +state +relaxed +strict +code_path_choice +map +b2s +b2a +s +eval +prepare_run_args +profile_boot +stop_1 +is_bytelist +reboot +interactive +embedded +mode +request +wait_until_started +notify_when_started +make_permanent +ensure_loaded +fetch_loaded +get_status +bs2ss +bs2as +set_script_name +absname +filename +get_script_name +script_name +script_id +get_argument +get_plain_arguments +get_arguments +set_configfd +get_configfd +done_in_microseconds +debug +'-start/2-fun-0-' +'-restart/0-fun-0-' +if_loaded +fatal +boot +continue +died +test_progress +do_test_hard_purge +continued +started +do_test_soft_purge +do_test_purge +cpc_make_requests +cpc_request +cpc_sched_kill +cpc_sched_kill_waiting +cpc_list_rm +cpc_handle_down +cpc_reverse +cpc_result +cpc_receive +cpc_kill +cpc_static +check_proc_code +do_finish_after_on_load +do_soft_purge +do_purge +check_requests +soft_purge +purge +change_prio +test_purge +handle_request +wait_for_request +sleep +other +gc +check_io +aux +prim_net +prim_socket +zlib +prim_buffer +prim_tty +'TRACE' +'DELETE' +'PUT' +'POST' +'HEAD' +'GET' +'OPTIONS' +'Proxy-Connection' +'Keep-Alive' +'Cookie' +'X-Forwarded-For' +'Set-Cookie2' +'Set-Cookie' +'Accept-Ranges' +'Last-Modified' +'Expires' +'Etag' +'Content-Type' +'Content-Range' +'Content-Md5' +'Content-Location' +'Content-Length' +'Content-Language' +'Content-Encoding' +'Content-Base' +'Allow' +'Www-Authenticate' +'Warning' +'Vary' +'Server' +'Retry-After' +'Public' +'Proxy-Authenticate' +'Location' +'Age' +'User-Agent' +'Referer' +'Range' +'Proxy-Authorization' +'Max-Forwards' +'If-Unmodified-Since' +'If-Range' +'If-None-Match' +'If-Match' +'If-Modified-Since' +'Host' +'From' +'Authorization' +'Accept-Language' +'Accept-Encoding' +'Accept-Charset' +'Accept' +'Via' +'Upgrade' +'Transfer-Encoding' +'Pragma' +'Date' +'Connection' +'Cache-Control' +process_low +process_normal +process_high +process_max +characters_to_list_trap_4 +characters_to_list_trap_3 +characters_to_list_trap_2 +characters_to_list_trap_1 +characters_to_utf8_trap +md5_trap +ram_file_drv +udp_inet +tcp_inet +sendfile +ttl +tclass +tos +empty_out_q +udp_error +udp_passive +tcp_error +tcp_closed +tcp_passive +inet_reply +inet_async +udp +tcp +unspec +inet +spawn_forker +vanilla +delete_trap +select_trap +replace_trap +count_trap +select_delete_trap +darwin +unix +erts_beamasm +list_to_integer +binary_to_integer +from_keys +unalias +beamfile_module_md5 +beamfile_chunk +prepare_loading +get_creation +abort_pending_connection +ets_raw_next +ets_raw_first +ets_lookup_binary_info +spawn_system_process +counters_info +counters_put +counters_add +counters_get +counters_new +compare_exchange +exchange +add_get +add +atomics +atomics_new +erase_persistent_terms +persistent_term +internal_select_delete +internal_delete_all +is_map_key +map_get +gather_carrier_info +gather_alloc_histograms +map_next +new_connection +get_dflags +iolist_to_iovec +set_signal +fmod +ceil +floor +has_prepared_code_on_load +copy_shared +size_shared +split +purge_module +check_dirty_process_code +is_process_executing_dirty +map_info +fun_info_mfa +take +cmp_term +values +update +remove +merge +keys +is_key +from_list +find +maps +map_size +is_map +inspect +printable_range +binary_to_float +float_to_binary +integer_to_binary +delete_element +insert_element +finish_loading +dt_append_vm_tag_data +dt_prepend_vm_tag_data +dt_restore_tag +dt_spread_tag +dt_get_tag_data +dt_get_tag +dt_put_tag +posixtime_to_universaltime +universaltime_to_posixtime +check_old_code +native_name_encoding +file +is_translatable +internal_normalize_utf8 +internal_native2name +internal_name2native +prim_file +nif_error +decode_unsigned +encode_unsigned +referenced_byte_size +list_to_bin +part +at +longest_common_suffix +longest_common_prefix +matches +compile_pattern +binary_part +finish_after_on_load +call_on_load_function +load_nif +setopts +give_away +dflag_unicode_io +binary_to_existing_atom +binary_to_atom +atom_to_binary +bin_is_7bit +characters_to_list +characters_to_binary +decode_packet +update_element +bitstring_to_list +list_to_bitstring +bit_size +byte_size +tuple_size +is_bitstring +list_to_existing_atom +iolist_to_binary +iolist_size +make_fun +string +is_boolean +get_module_info +warning_map +hibernate +lcnt_clear +lcnt_collect +lcnt_control +dirty +interpreter_size +instructions +dist_ext_to_term +set_internal_state +get_internal_state +flat_size +same +disassemble +keyfind +keysearch +keymember +reverse +lists +internal_run +run +format_error_int +loaded_drivers +try_unload +try_load +erl_ddll +perf_counter +getpid +unsetenv +putenv +getenv +os +match_spec_run_r +match_spec_compile +select_replace +select_reverse +select_count +select +update_counter +slot +safe_fixtable +rename +insert_new +insert +prev +next +member +match_object +last +lookup_element +lookup +is_compiled_ms +delete_object +delete +internal_request_all +match_spec_test +is_record +is_function +is_binary +is_reference +is_port +is_pid +is_number +is_integer +is_float +is_tuple +is_list +is_atom +subtract +append +'!' +is_builtin +raise +is_process_alive +fun_to_list +port_to_list +ref_to_list +system_profile +system_monitor +system_info +system_flag +append_element +make_tuple +read_timer +cancel_timer +send_after +start_timer +pow +atan2 +sqrt +log10 +log2 +log +exp +erfc +erf +atanh +atan +asinh +asin +acosh +acos +tanh +tan +sinh +sin +cosh +cos +math +bump_reductions +resume_process +suspend_process +seq_trace_print +seq_trace_info +seq_trace +trace_delivered +trace_info +trace_pattern +port_get_data +port_set_data +send_copy_request +release_area_switch +erts_literal_area_collector +spawn_request_abandon +no_aux_work_threads +dist_spawn_request +ets_super_user +create_dist_channel +dirty_process_handle_signals +system_check +is_system_process +perf_counter_unit +time_unit +map_hashmap_children +term_type +map_to_tuple_keys +check_process_code +request_system_task +port_connect +port_close +port_control +port_command +port_call +port_info +dist_ctrl_set_opt +dist_ctrl_get_opt +dist_ctrl_get_data_notification +dist_ctrl_get_data +dist_ctrl_input_handler +dist_get_stat +setnode +spawn_opt +whereis +unlink +universaltime_to_localtime +universaltime +tuple_to_list +trunc +tl +time +term_to_iovec +term_to_binary +statistics +split_binary +spawn_link +spawn +setelement +self +round +registered +put +process_info +process_flag +pre_loaded +pid_to_list +open_port +system_time +monotonic_time +now +nodes +monitor_node +function_exported +module_loaded +md5_final +md5_update +md5_init +unique_integer +make_ref +localtime_to_universaltime +localtime +list_to_tuple +list_to_ref +list_to_port +list_to_pid +list_to_float +list_to_binary +list_to_atom +link +length +integer_to_list +hd +phash2 +phash +halt +get_keys +get +fun_info +float_to_list +float +external_size +exit_signal +erase +element +display_string +display +delete_module +date +crc32_combine +crc32 +binary_to_term +binary_to_list +atom_to_list +adler32_combine +adler32 +abs +debug_hash_fixed_number_of_locks +auto +nifs +yield +yes +x86 +xor +write_concurrency +wordsize +warning_msg +warning +wall_clock +waiting +wait_release_literal_area_switch +visible +version +value +unsafe +unload_cancelled +unloaded_only +unloaded +unless_suspending +unit +uniq +unblock_normal +unblock +utf32 +utf16 +utf8 +used +use_stdio +urun +unregister +unicode +ungreedy +undef +explicit_unalias +ucp +ucompile +type +try_clause +trim_all +trim +trap_exit +tracer +trace_status +trace_control_word +traced +trace +tpkt +total_run_queue_lengths_all +total_run_queue_lengths +total_heap_size +total_active_tasks_all +total_active_tasks +total +timestamp +'*' +timeout_value +time_offset +threads +thread_pool_size +this +term_to_binary_trap +tag +table_type +table +system_architecture +system_version +system_limit +system_flag_scheduler_wall_time +system +suspending +suspended +suspend +sunrm +success_only +strict_monotonic_timestamp +strict_monotonic +stream +stop +stderr_to_stdout +status +start +stack_size +ssl_tls +spawned +spawn_service +spawn_request_yield +spawn_request +spawn_reply +spawn_init +spawn_driver +spawn_executable +skip +size +silent +sigquit +sigtstp +sigsegv +sigint +sigstop +sigalrm +sigabrt +sigchld +sigill +sigusr2 +sigusr1 +sigterm +signed +sighup +shutdown +short +set_tcw_fake +set_tcw +set_seq_token +set_on_spawn +set_on_link +set_on_first_spawn +set_on_first_link +set_cpu_topology +set +serial +sequential_trace_token +sequential_tracer +sensitive +send_to_non_existing_process +send +seconds +second +scope +scientific +scheme +schedulers_online +scheduler_wall_time_all +scheduler_wall_time +scheduler_id +scheduler +sbct +save_calls +safe +runtime +running_procs +running_ports +running +runnable_procs +runnable_ports +runnable +run_queue_lengths_all +run_queue_lengths +run_queue +run_process +reuse +return_trace +return_to_trace +return_to +return_from +resume +restart +reset_seq_trace +reset +report_errors +reply_tag +reply_demonitor +reply +rem +reload +registered_name +register +refc +reductions +recent_size +receive +reason +ready_output +ready_input +ready_error +read_concurrency +re_run_trap +re_pattern +re +raw +queue_size +public +ptab_list_continue +protection +protected +profile +proc_sig +procs +process_dump +process_limit +process_display +process_count +processes_used +processes +process +private_append +private +priority +print +prepare_on_load +prepare +position +positive +port_op +port_limit +port_count +ports +port +pid +permanent +pending_reload +pending_purge_lambda +pending_process +pending_driver +pending +pause +'++' +'+' +parent +parallelism +packet_size +packet +owner +overlapped_io +outstanding_system_requests_limit +output +out_exiting +out_exited +out +os_version +os_type +os_pid +orelse +ordered_set +or +opt +open_error +open +on_load +on_heap +old_heap_size +old_heap_block_size +ok +offset +off_heap +nouse_stdio +notsup +notify +notempty_atstart +notempty +noteol +notbol +notalive +not_purged +not_owner +not_pending +not_loaded_by_this_process +not_loaded +not_a_list +not +not_suspended +no_start_optimize +no_network +no_integer +no_float +no_fail +nosuspend +normal_exit +noproc +noeol +nodeup +nodedown_reason +nodedown +node_type +node +noconnection +noconnect +no_auto_capture +nomatch +newline +new_uniq +new_ports +new_processes +new_index +new +never_utf +net_kernel_terminated +net_kernel +'/=' +'=/=' +need_gc +native_addresses +native +namelist +named_table +name +nanosecond +nano_seconds +multiline +multi_scheduling +more +monotonic_timestamp +monotonic +monitors +monitor_nodes +monitor +monitored_by +module_info +module +'--' +'-' +minor_version +minor +min_bin_vheap_size +min_heap_size +min +millisecond +milli_seconds +microstate_accounting +microsecond +micro_seconds +meta_match_spec +meta +merge_trap +messages +message_queue_len +message_queue_data +message +memory_types +memory_internal +memory +md5 +mbuf_size +max_heap_size +maximum +max +match_spec_result +match_spec +match_limit_recursion +match_limit +match +major +magic_ref +machine +'<' +low +long_schedule +long_gc +logger +local +load_failure +load_cancelled +loaded +little +list_to_binary_continue +list +links +linked_in_driver +line_length +line_delimiter +line +lf +'=<' +ldflags +latin1 +last_calls +large_heap +label +known +kill_ports +killed +kill +keypos +iovec +iodata +io +iterator +is_seq_trace +is_constant +invalid +instruction_counts +internal_error +internal +integer +input +initial_call +init +inherit +info_trap +info_msg +info +index +inconsistent +incomplete +include_shared_binaries +inactive +in_exiting +in +ignore +if_clause +id +httph_bin +http_bin +http_error +http_eoh +http_header +http_request +http_response +https +httph +http +high +hide +hidden +heir +heart_port +heap_type +heap_sizes +heap_size +heap_block_size +have_dt_utag +handle +group_leader +grun +'>' +global +getting_unlinked +getting_linked +gather_system_check_result +gather_sched_wall_time_result +gather_microstate_accounting_result +gather_io_bytes +gather_gc_info_result +get_tcw +get_tail +get_size +get_seq_token +get_internal_state_blocked +get_all_trap +generational +'>=' +gc_minor_start +gc_minor_end +gc_max_heap_size +gc_major_start +gc_major_end +garbage_collection_info +garbage_collection +garbage_collecting +garbage_collect +function_clause +functions +function +fullsweep_after +free +format_cpu_topology +format_bs_fail +force +flush_monitor_messages +flush +flags +firstline +first +fd +fcgi +extra +external +extended +exports +exiting +existing_ports +existing_processes +existing +exited +exit_status +exclusive +exception_trace +exception_from +exact_reductions +'ETS-TRANSFER' +ets_info_binary +ets +erts_internal +erts_dflags +erts_debug +erts_code_purger +error_only +error_logger +error_info +error_handler +erl_signal_server +erlang +erl_tracer +erl_stdlib_errors +erl_kernel_errors +erl_init +erl_erts_errors +'==' +'=:=' +eol +eof +ensure_exactly +ensure_at_least +env +endian +enabled +enable_trace +emulator +emu_type +emu_flavor +einval +dynamic_node_name +dupnames +duplicated +duplicate_bag +dsend_continue_trap +driver_options +driver +dotall +dollar_endonly +'$_' +'$$' +dmonitor_node +div +'/' +dist_spawn_init +dist_data +dist_ctrlr +dist_ctrl_put_data +dist_cmd +dist +discard +disabled +disable_trace +dirty_nif_finalizer +dirty_nif_exception +dirty_io +dirty_execution +dirty_cpu_schedulers_online +dirty_cpu +dirty_bif_trap +dirty_bif_result +dirty_bif_exception +dictionary +deterministic +demonitor +delay_trap +default +decimals +decentralized_counters +debug_flags +data +current_stacktrace +current_location +current_function +creation +crlf +cr +cpu_timestamp +cpu +count +counters +copy_literals +copy +control +continue_exit +context_switches +const +connection_id +connection_closed +connected +connect +convert_time_unit +config_h +compressed +complete +compile +compat_rel +compact +commandv +command +code +closed +close +clock_service +clear +check_gc +characters_to_list_int +characters_to_binary_int +'CHANGE' +cflags +cdr +cd +cause +catchlevel +caseless +case_clause +capture +caller_line +caller +call_trace_return +call_time +call_memory +call_error_handler +call_count +busy_port +busy_limits_msgq +busy_limits_port +busy_dist_port +busy +build_type +build_flavor +bsr_unicode +bsr_anycrlf +bsr +bsl +breakpoint +break_ignored +bxor +bor +bnot +bm +blocked_normal +blocked +block_normal +block +binary_to_term_trap +binary_to_list_continue +binary_longest_suffix_trap +binary_longest_prefix_trap +binary_find_trap +binary_copy_trap +binary +bif_return_trap +bif_handle_signals_return +big +band +bag +bad_map_iterator +badtype +badopt +badsig +badrecord +badmatch +badmap +badkey +badfun +badfile +badarity +badarith +badarg +backtrace_depth +backtrace +awaiting_unload +awaiting_load +await_sched_wall_time_modifications +await_result +await_proc_exit +await_port_send_result +await_microstate_accounting_modifications +await_exit +auto_connect +attributes +atom_used +atom +asynchronous +async_dist +async +asn1 +arity +arg0 +args +apply +anycrlf +any +andthen +andalso +and +anchored +amd64 +already_loaded +already_exists +allow_passive_connect +alloc_util_allocators +allocator_sizes +allocator +allocated_areas +allocated +alloc_sizes +alloc_info +all_names +all_but_first +all +alive +alias +active_tasks_all +active_tasks +active +access +ac +absoluteURI +abs_path +abort +abandoned +'EXIT' +'UP' +'DOWN' +none +no +nil +undefined_lambda +undefined_function +nocatch +undefined +exit +error +throw +return +call +normal +timeout +infinity +'' +'$end_of_table' +'nonode@nohost' +'_' +true +false +=end diff --git a/aoc2023/src/day1/input.txt b/aoc2023/src/day1/input.txt new file mode 100644 index 0000000..6efe96c --- /dev/null +++ b/aoc2023/src/day1/input.txt @@ -0,0 +1,1000 @@ +9dlvndqbddghpxc +rtkrbtthree8sixfoureight6 +fdxrqmfxdkstpmcj7lmphgsmqqnmjrtwo3tcbc +onetjcsmgk57nvmkvcvkdtqtsksgpchsfsjzkkmb +six8threepvlxttc85two +8five9ttqst2one2vz +hbrmhsnjeight64dgdnvdbspk7ninetzbvjczqrj +fourtwofivesix5 +3gksfourqf48 +7one1tnqxfvhmjvjzfive +sevenmcjs3lmlmxmcgptwobjggfive6four +seven8five3 +5sfknxsn5sevenfour446 +bxc5two67seven2 +jcsfivefive89seven85 +nine296 +seven5twoeight +1eighttwo8jfnhmfivefivezdsxqxqsjkone +foureight48sbkkvc17zbksgvcbb +lnzgspccsn4cxqqdbkj +qlxrxkpeight48xbgqnlkpkoneseven +z7onetwonec +7cns +pnpfninefive79twoone7 +2hrqpjjjbn +4gmlttgdzrhxbxnnine +4sixfiveone76jctmjsxdh5jrkv +3kvjmhpmglrdgmdnine +four63sevensevenone +jmz1eight4threej1 +four21zxksf9jxdvjmtn337 +msnronenine43three1threefrv +rjfhd6eight4 +78blgveightfiveone7bnsfnrmxsmtwonemrb +sixseven6four6 +mdjphcm9 +xsjmgdgqtwolg1nine45eight +five2six85npdqxgrshdjs4 +jbbnine2ttrktc2hxpxfdxgf +fngvqsgmjfmfslrmone2vtpsstpkhr2jmmxk +f683glvfsdvnsghvrzcdmxnx81 +lqblzgj322kqfsjrbxgcgsct +threeldfnrbstbxqdpxpkbztbp84eight +sevensevenmthprqg9six +qldknljthdjthreeklttd6six +7eightcdqxcftbgbfbnvqfive +gxjzhvkbcjhscdxhjdqxnhsevenxrdrjbcl5fvlvlxjjvb +9sixqnine9jk9six +zjtdbzr6njdgflrmpshxn +rktpknvmjknb7threefourhdxhcdtgtkvone +276lzxhone3two2 +82fivelppqzjq +lchslxtwohslsztgps5pdssctclhdkqtwo +2five8three9dnine8 +68jpnqldjgfnpcmvbxnszhz2252 +q32 +2sixtwo87 +hlmdvlrqlrjdshone3five +fivetwo7 +xsdcktrone29 +eightfour9eighttwoxvhdth9lndg4 +two8jgddjhcj67eight +8nrkrcrqhr21stqtvqn +tvbonepzrrklninexmpxrlkcpgg9qgrkcjt +6two5qjmoneclfhzhkxbntmvmdrc +prhmt4xvlg +3mghfgrhzkj5 +lq2lnrcj1pnlh +sixqhfqrmf8fivenkkcqpgf85lone +tlrlcbhdvd5 +three8seven +thfns325threefpvlntfvrf +twoblkldr2mmrsxpqxcms39seven6 +2mpcvttntg31mkznplfkbcgccsix +2sbs +828jnvjnbgrs1 +fhcglnxzss23bxfnpczvthree2 +7fhghprqvrbx1nxml2one32 +5fivethree7qrsixmcdveight6 +five4seven +1cfcfdzfjphsevenmdvnzh +qhmnleightbhbcntwojjfxpvlxt2spponenine +fivelskzvzsix5xtqkfl1 +2jfgpmdncvpjmqcgvnzpqlstzgfdvfxrlscjkzczsf +rzzplmzsfivetxbhcqnzdq4 +mvrvfour9eightseventhree +7smrdqkrh8qlzc +mpf2fivefivefivepgm +1sixpkrdjlszgdnccnllfsevenksdkvqbxbpbblthqpzqf +six91dxxdhrxcbmqpqm +sevenfour8nine7 +one2hnfvh +55jmqkqgvsgqcrzvmzqhone8twopsrtgmqrj +xnfjxqlrsjmgk68kvpptczxhkxcvrpgctddjklrmhzjgtcjh +seveng6two +1threexrzqcrknhc3 +58qtpqqz58888cmhs +pxvbhmczrvpnjnsrcdrnrjvzzpjnbgbxdseven6 +34two565 +four4six +sqtxsjsix54 +four3xrxmrkn4nrcsmljqrninethreeone +3six4bqddfivejnfrhnqqsgqhj +gtbtrtzp8seveneight3seven4xzdnfrvzgn +vggfdfvlrgvqqvjhkmxfsfbdpqfivexs16 +onegkvdhrfninerndk46nine +5fiveeighthnrlzln +threeqctjkpxjx39six89two2 +99ninecbzck +nxqlhpgnine6pvrrpfjpssix6seven +1dbrzjkckthm5sixsix +fivefmfqcsj19nhnzg +five91eightninecn +7ljnl71eight7mzhzfht +84sevenzrqvkxszdhg66 +jskktpm5mphd1 +boneightfournq6ndnqpdbm97five +5twonine +scqpkxrjtwo8foureight11 +3eight7brgqfivezpgclhfj +zkfrsdgbmczlrzchvfql78ftsdqk8vmqccbn +oneseven3kgdkjzkmq94 +sgtwo59kdmhbndzd +threeone37 +mqxvrhmrpqnltvt9lrpplmttkhdvtln9 +onecxqvr48six2 +pjnx2eight7five +two189one6gbqvllzb35 +psvxjhscstjfkbpxhbbb4zvdjbcdxqrqzqlzp +n18hmhzrqjrpcxztwo +6two46zblgrbmjcqbnxqcnbf +7kxsjdqcmxrvmdtscvxgrnhrmrfour +onedzeight8qfive2 +seven9bkjone2sixqnztq21 +fiveninesixfkzlsn8fivembfjnx4threetwonexb +5zmxtcmzqqdthreetczccnxhkxrbntmfoursixjhhrsdxthree +1four2xpkfgcn +88trnvjtqsmseight8 +pbbpbfgsrst5five +jvgvdseven2two +962sixoneonectfgpknl8nine +rkbnzz1l42eightflb4 +twoxfll2fourbjfjgxfbtk +35fourtwo +lq56ninefour1three +77ztlmqxcxrj745 +nnvqrthreedt2eight6hvrlnpbts +6five6225sixfnzzbh +nine1three +8xgdsdfgcfourlhn +2three3ninelckpddbmdrfournine +89zmvxnlrj7658kjdjchq +pfhbgpb66twogpn7twobpvrbmmrvp +8hgqmztnmhkcr6xrxrbhj +6fivemnfcvvx8 +3mxpvgzq9ninebmlktwo +thzhbsl49seventhree1bdxcrgjq +rlcfour3ffkxxrhb +rkj2eightfive +xqncfnhkcqxqjgbsjhnrgm6 +ninefour52ninefourtworhsix +lpzcmxt97mlkjhlcone +two4qkmqgrpltkrdsctpnsqmbtptklprx6ncfpseven +61shxgxdqqqzngnnzeightkhmgrxprb2sixjx +9eightfour3one6seven +eight4sixqjxdjnzmkfflpfmkf +3bfc71 +14sevenfivezzmt8cpptl +1sgrzdqdndsevenninembzvfive +lxftrbfcqfoneeightrsdxlnp1x2jsgn2 +vlfcjfourmtxbcngpjvkcctvbgkgpvvqpsg1 +116five132seven +eightpvfsfbfzjcdcvh8kbrcz357 +99two +four6six +fzzklmnxvfrhd62xmftbrhgsslrlqv +5six55zbdlgc +62nineone8qcglr1 +sddddseven55fourlpqzbgzfive5 +eighteight17 +nine98 +three9qqxgfpjfkeight81nine2 +twotwosevenvkzzhrpgninecqvf9 +lkhf5onexsrtwo +8hfzvnzrd +9threeninethreeseven +onedpgjzsixxs4cg5jlvzcsbd +fgmfive97 +4fivefourckthree +nine1fivefour +7qlchtvd +tmtmtnxdpsvfour4621four6 +5qfvzh7seven +fourfivebqnpzbg8three +34kd9four5seven8three +kcqcxzmnkdt5twojdggp +4lvbfdpzjsdthreeldvkcbqrspktwo +2nine93foursixnine5 +8tbpjgmxltwojlpbnsvqhsjfcjcfvcrjqppdb5seven +8twodcpglrxcq23sixfour +3sixvczzqsfive +1three45jh54tbdvkj +pdrzqxdtcnbrnine8zvffmrtwo11 +3eight54sksqfxhzcdfour +7hsllsjtxtwo9jhjlhthreekdfssninetcjjrm +9sgmnine1kjmhjthree +nineseven9five +ggdcphlstwoonethreeffgmrseven2xsbsf2 +75ssbccflrrf4lpmptcqjcmfbpklqc +5six2threedvvlxdxsixvxxghpddn8pbnr +tlbjnlxfxvnine4grhj71hnf6 +964eighteight4eight6t +5qbmnsone1fourseventwo +oneseven1five9two +5fdpl37vklxpth672 +4czvrnxtlfiveseven74 +qdgqbsd5fourfive +ddrqjnkbq87six2fourmtghdtvtl7 +zdldjnfxms692rbdfgvtsevenxzfjpnsf +nsqtkbbfhn8threesix3fivefoursix6 +sfxjzhpqqslfourmpph44threetwo +onefive3seven21 +9eight1sevenfive7nine +7twonrthgr73vzb +18onefourhxxm +3xvboneightlb +3ftqct9 +8five55 +4eightmzrlfjqqddffgmfl +74mhzvktwolgpvrvnphc +sixnine694ninetwo +bzpnktvcqleight2 +5oneeight1five2dszthreedncqzmhc +eightfrbmcblrghgmpkrdnh7fournzbvtrzvhchsix +threethreeoneone6kbghfst +4fiveonexfchmclqhqfive +1t3nine +57jclthreefourbtdgsggzh +qpc9fhddthreefive +9eightnine7cgpbbnine8 +88twoxbzjp6fmqlznzgpgdqmmnpmkvctm +threelb9four168qpchgnfn +4onekrlmslkd7five +4jfxtsseven +zsthvnxpf7 +656three +453seven +zxmr55hgnvtjbbqhfsxssjxzshcbkvsbzg1 +pbkffqzrbvxvqjfgkpmp5 +ninesix677lpqpgmc +sixgmb67fzdhnnfk7 +jlgjbltbtwotwoeight9sixninevlngvvj +xdxqdhps9sevenzmzdlnvsix3oneightj +ninetwokpzvvqlgtcfx2 +dqmjchlbj7sevenfive +61eight9kjmxclvdrdmvnthree +8nine6three +3ndpknone +seven4one +8dxljzpk8twoxfmhbqnmqeightdhxvpgxcnine5 +6five3seven +rzgfivenxhpr6gxqflrskhjhvoneonegzbclk +jrvjhkfv7sqnsz86five5skvvmspvjd3 +sevensix3c6llkmsmmssf3 +sevendf73eight74 +7bqbbvmq2krkbhlsh +3dqq55eightcptwo +2bjgfrgrtgnfour +44xznjjvlhzclsix +seven6rtzponeseven +6ghvvkhrzvjzpxlbkonejlmrhq +zgsxthree6 +3crzdvbnhtsgldjvbpsixbjmlxsv3vrzjtv +xcpnbsevengpffknsv84sixsixseven +four898xkqnhspbqmtcs +5twonine +six2ltwosix +cnine22sixeightwost +6lx63two +fbqoneight3five +rbtwone2eight8 +9fivezrsdfkdlqone1nthjvdlmxhqvj +pmmfp8seven +1qmttlsjpxjbsrzmbtlxqzfzvrs968 +fgdonexgvvnine5jsm +rbgmbtwo9fsntcthreesix76 +fbrsxxshseven3gtv +mkxfour66one9n +eightnine1fivecsixlqds2 +lhxnxhfnmlmhxkcxndmnine1kfpb5eight +6eight13rseven6 +hxcfone64ninesevenbgsnrqppqmnnineeightwof +threebjpbtpzgx5mnthreensixoneightz +bpdvfqlzthree2vvcmvzllqfbgjgp +two926sixeightdsvdmnxthreetnqvktdbn +bhntwonefourninejjcmlfphzpseven95 +prqoneightseven1nbcxnqjfourfivecmj2 +stwone1oneninevcrfzpfourfivetwo +ztkknhjr9six8 +twomlvrzm934seveneight +ntnn1bqgbxf13rqdqtcrbpeighttwo +seven58ninemdqonecrkbdblone +foursixthree1oneeightone62 +8385dhgcqjtrsixtwo8 +blpzxstwosevenqbdhkb8sfggkbdhx5rzftqsf +mqbeightwoninefourlgcj9 +njvpkpvjpmvmbsrdgdvx7frrgvnfrmmrfrhqdtwothree8 +rtwonesxxone8tnine +2xqgrqmone73five +5ggzdxvptwonineeightdj +svqhzhzbsmhljxeight7hljd +one81kmnmpmfkseven +9ninefourbvbpljb3nineqxnkgzgj +sixfour7nvdfhnd +24twoseven52 +425vqnhmrpxthreenine3bkjpvs +8fzqqspdp6 +427five9zhbxpbr +1qjnxxkgqhp +eightxzthreelrbgfbvmrpmtgvrfgqmjlshbqv5 +onetwo4 +three194bfivevknbqxv +1mjhplcvheightlnvn7two +rmptjk5seventhreeonesevenkdxfkvdz +threesix8kpmrvgkpsix +fjfbx6eight3fourninesp +six3nhonebtdzppnxkr +xgtltdtwoninesix62szphpcmtv6 +fiveeight9seventhreesevengndgdfv +ninetwosmcbfkvf5hvksvfbr3ssbntlk2 +qjrdlmone7tqrzlvfourvfbvtkjxfpkffdpjnine +sevenfqnsnqt89five5 +16sevenxtdrtmdzrxhneightwot +8ttreight4eight +three9nine3832four +fivesncggngss8qzfvj +twotwo7sgtcgrmdnr545 +6xk7threejmgnqnsevenmczscqxqxfour +twosix4eight +kxm15two844eight +twoeight5sevenfour +five56three +threekdjgcdd6one +clchjoneeightrqgk8bdsdmzm +twog546two6x +5nine4bmhbtbksxreightoneightkg +gjfkbsr1gvtvlnbzqrlfour +one48vpone +eightbcklnvtgvthreeninefivetmgtbjrqnn3 +nkclzcvbbq8nineznbtkntgndnine1xrg +lqpfhmrlmg32xtddcfffdbxbjckvlzghpldfgvhfhdhr +fourpkcppxtmqz5 +dvb6sixvhdrzzjk +btwokhl99nine +73rkgbsqgz7koneonemlhrbtxc +eighthlqqt4onenine +eight61oneightx +ninebbtcjjlqkthreenfvbcc4three946 +ninepqtlffxvclgn7fqdhqbpmkkseveneighttwo +bqzpfxntnkhhfkv98fhrqslfs9four +4ktprrljbthreethreethree3blmddptfour +5fourone +9zhvgleightseven5nbcmscqms2two +6czngsp895 +2threekrxmtfrr2ppfrzqkqgfoureightlf +six8eight6seventxgl +1one9 +3qpmrtzsvgkjxsevengzdkjkbbdltlrjkznbbkmpb +sclxoneeightfoursfbfm4rbxssmgngfxrvcv +fhctmnpxdrfivemndlr3sdp +twoseven9sixlp +962 +tsnsndjtrp27cbtsjdlkrqmtctxvxvnx +5mnine +7fgt6 +three1ninertghhbhbcnjdsknine +two8ninefxcqmxdhtnmcmjvtds6fivebnm +7phdp +2hnszbksg +4ninedcnjbcxnrmoneeight1 +hnsszlsx7414two4 +gmkrn9gcgmffrvbfivethreefive2seven +2bknqdqmrxpfftptwo2vmqffgmzr +dsvf3nv14zklptjnhv +54nchsnpknkx +oneone15 +onefvmxnzp575sixpxnpndqf +6vqrzsbbxg3735 +twojbldk2hfqqzgone5 +onesixlzznvc8nineseven359 +6vjbr7 +nineone32nmkszsthreefpscxcqtwofour +fv1zpqrxvdlzqmeighthhbbbzt +cskvllzszxzk9 +7ninebrlggdzqk7ninelvddrtt1 +2fpttpbq6b7ninefour3five +bsslmmmhfxc6 +lfjkdzdm9eightkbdhrkpcnzcftlggh +rnineninelmbhfour88onevfzhcmneightwofp +one59ktxrdrhc8six9 +86nxnfzzsixgmxxglvfivezmkdvmhjfzone +9threefourfourrbxqpqbtbzxstwo +3pvgtcxrfvthree39bjfivenxvbjone +sixkmngfour3bfive +6threehntsjhjpmqhl345 +fourjcnd49fivexqfbj +ksmszhfive7rrphsxxhgm +zqtdztkhveightninepnctbcgqsb6 +ninemlvzfcljfkeight1tppxrqtdzp2 +twotwoeightnine5frzk3 +lfvqtzbsix3 +four3bsgft28 +sixgksnkrmsix2rbjmfmnfzfiveeight +vrtffvbtcmszfdc2sevenhvpfour8 +twopvgzmthree3 +xqffprzsrjqkcbsevenczlbc5 +4ninefournmvninetwommnrctqjhg +27four +fheightwod4 +38zkgvdpgjzqfivenlr7mdxd +ninexxvninesevenfivedpzfgpbv5 +xjzgznvfsevensixthree3rgfqhkxbfp5vfrjcdncfkjk +2kcbprjfhns68 +bndqgcmnine4qbzfgxmlffive +ffctnxgtwobldqhsix8djfmdnpgmt +fourseven91ninesevenpksgt3 +rninesznvtbq5zqmthzrcntskdthree7 +8eight7 +1hnlnp79 +1three3 +414ninevqrccrf6lmzqmsjc6 +15mpeightxmhxlxjmn +ktdblrmqqxmktvqfour87 +1four121three56 +ldfdgfqkr22nxtsrsntlsevenxxrcclrhtl6five +eightfourthree8pvlkkbmbrfnfr6 +8sixninefiveqcmjhpx +2seveneight85lskjhn7 +31c3 +hpgmpmjmnk4twothree +cqsxgbj23six11 +threesxzmgtvhhheight99xsix +6jlpt6rnsprllqhgbvhtqtjvft217 +22onesevenfour4sevenseven +sbnjszzkdleight6three +3twofourdmrsqqtnzgng1two +ldcvxqbsfqpgql9ngsbhfrmszhgvznnnjhnm5 +1oneseven28seven +nsvhqtfivemjgcdqpbtwo1nine2 +six8dj +zdoneight67fivesevencqlr +xlzrkgjrhmszmkzlkkmrxjdnzrtlzssfpcxkbxvp6jghldhvr9 +8sevenbzbnnx +vzrmcfvc9shkxfblfkf +9twoshzmktntwo5nqp +3fourvpdfs3eightword +three24onesixgdzgkspgsjprjgn7eight +4tz2sixsixqbqfsr4twonine +twoq2eight +rccxnvtqnhdlgzqfzcnrmqtjqonesix732 +seightwo8ninekndqrdtbfp +cgnmrkcjvbgfmpbpjckhfrzrtnine2sevenfivesxhqk +fourxsncktrjtpnine6ccbgpl +1sixone5vkzxnhgdlbsevendtwo +9jbnineppf7 +5foursixlrn5vdgdbvnfhg +fivecrtwo8zbqrvjgpfivenine2 +ktvdhgvone6dbrvj5sqbr5 +bljtwonesixthree7dzdfrgqrkstwo4xvfmtsbpqjgxsgqcpc +sixgg5 +vmrbqdqdrqtwo2onez +onehlgrgndk9ninefsntwo1rnclttm +4tqzjbhdhkm1 +nine1kffxzcrn189 +sbrxr9ninemqb8 +six528mslnf +sdvthree7dfivenine918 +3kvzqqkonepmghblzvljnineone47twonesdf +four9sevenfourjhmjjslqgd8 +3fkfmgqf6fourbldjfvbhr +eighttxpddhsnzrkplzqc1ninezpvqgnhxzftwo +56lsxmkfpghsqptvhmmmzhcmfdeightsix +one72kdfdrtwothree8 +7kpgjhpnthree7 +37j2mtwo +seven4mjponefivesdgncqm2gkklsqvthfeight +mgckktt9six4eightwol +4grzfdm499ninetbt +tzmbtv84b +xvzltd75dhpjckmpdrkgglskqrhd5 +cgnbhmdlj24 +7fivetpbtmone +fivelpmbxvhktzkkonexsxktlzthgbgqkgcj94 +5sixhggcbrft +43five7122tqlkhssczsr +eight1seven3 +fourtwo134fourmzpxspr9 +snxjqnf8ctcnvjknghxpkpbrt2 +4qj2xtwoghknine +1zjfivegtwotqgndnineg +fjmmznxkrml7fiveninelfvkqtrg6 +8xjlqgqj395nineninefive +dx47sixtwothdphj +fivesevenxgsfb235cvgmspdgg6 +fivettfzvfg78dmzzdzcrt +fpnvxp1 +seven24 +1three8oneeight +7xglzsqrtb8fhgthmgdcdtwo +seven8gdtfgd4fivepdq +twosix1qtttvvstmqbrhh +ptwomnjhlzjjkztwo4kdkgxv +89zkvrhmrhdbmfourzdpss +bfdsvnxflgqxgpzkmrptlvmvlkchjxrt67 +9mmhxsevennvvdngznine17twofive +lszmqdmxz87mqbv51 +546sevenninencccndnr4 +nineeightsqgrpkrqlmzrlxm6hxchcjspnx +8twoccdnbfive +1ks98 +twothree6 +twoxsixtqdpp6dcclzgfvkv1 +16one7scvsgvmcdsixjtzszzrxdzzgv +bjxzdsixkvqgjfzbbjnrtn212jplvrj4 +zb2three5cngqfczc1 +5fnine99zxvfourjgmn +one634rteightfoureight1 +76gvcdfourgtbzdlltzsjnxqg +ltmdrkqqnfour9eightpckdvbhlkvxlpdtp +6two5kgncpnzkdsgnpspb +three8vjninekbbnnfrdstprcmklrgpkfpmbs +ckvvqjqzbpfhf52fivefivefour +7ngxpdqptksix +ftp2eight +8lnmpbqldqstwo +threetwo153644 +914 +plxjdxghsix17 +sevenonesevennine4three2seven +7bvdgpghzhpeight512vxbnfqjctb +xqptzkfive4xqbjzpqfkfspqv5kgqbdtfive +bmltkhjsckhrc7two8nzdpkjjpnfive +nnhppfvlhcmnmrjxhrbtzdflseventwojfprxmfn7 +fournfdtjtsbthree54fpzsq +ninenineone5two +8694twomgxxzfxr6 +sixeight75seventhreerpchfour8 +llv5 +skxcbfffgc6sixone +3lhjbzbsg4lsfgpkmcz7vjxzbrshbseven +4onecjlkpqdljd3five5 +eighttwo2mvdtvqpnonetvphxsk8 +15195one +kdx9nine6qrnqrjxq59 +twolhjmbh4fivetwo6pdzbnzt +pbvfour7 +tgxrsbk2 +hfournineone58sixthree9 +hmftwonesix5dhthkcnzqseventhreenineeightnine +9jmmjclsnsdhhj +hljjvctthreefourxsdlvsgtqj1335seven +172 +2gbfpjff +five5sevengvddnphnine +sixeightfourssptsqlhzxonetfg2hkmrcpfzcz +94csjjgl42three +4bkxxv6 +pgdgoneqmhxfpnfqkrbkjeightbmjjlrnsc5 +nineninetwo55fvsxspzt +32jqffghbqvfmjtjone78 +93eightfour6eight9eight1 +768jrdmfxgxpntx8nhpljjdx +eight33zpvpggklseven4lcqsixthree +fourgrmone4 +bcknine9qsevenrjhjeight +5onevqm +578mmqhhljtwo39mfnpmfqthree +fivecmts43eightfdphfivejsx +8vkqvl +8oneone27fourseventwo +jfsixfivethree3cmjtvkzhqkcksmljxxzbjd +three6sixpdvtrnrtffltrs +threeltvvfkcdqjtwo89two8j +5sixeightfivesixjjmknrgd1qpsbpjrffjl +eightrmgfkckxxxsvfclhtgcjthree3 +rnfbp8eightjv35eight +2rrssqrfkvmq +dcmghdmg6threetzsdx +qzhfivefivejvbtncm2 +gcspvjnsevenqhmkngfivesix15jtpk +bkmlmh5six1sixone2hgtlsix +8rmjshdhm681vc +sixtx32 +7fourtwo6 +xgrcxeightsevenzgmcllfjqn7 +553fivethreefour8nine +one4mxbmct +three6ninetwofour +1bbbxqhhlmj651eightkfdqdgvh9three +4414 +mnxsixone92 +61six8 +eight8mrcpfive1 +crsvmfivezbkzkqsix7mxjdgtsqbfvdbnlqtfiveoneightgj +4dmzznftdbqj +seven25 +fhlhpvphqvh8one1ffkq +mboneighteightonefive1ninenineninetwonine +82fiveonexc5 +97qbhvbqnmxtlpczsx +nhgzzjkx5 +hgxlrk9 +8twonine9fivetdxmjqppxr +onethree99sevenfourkzvd2 +sdqjfvbndzcthree1ftoneightkm +5rcllqcxt +threejdntvhsixsckfpndjzkeightsix3nlgpsvsfhk +94fctwoxmczbkz +4eight35tbqjxglldsevenxmthmmlhsix +three125 +3njtlmxtbr4541ninedz7 +9ptzpzqrjmxlrmbfbpn9ss4sqcprfmcqg +8dpmkdtvjxzjbddn7pvkxzskddrhcsjvthree7 +xxshbfcmf3cfdkeight +six9ninefour472 +fourrvxfmjzd4five +1fivesix +twonine3six9 +nine8onethreethree +foureighttwotwo7onethree +9prtlnjptoneninefiveninefive +cljqxpthqzdxpmmbvpjljjxhlhsql8kztpthreesevenoneights +9sixtwonetfh +kscmxpcqlthrmthcdhplpnqlq2 +fiveqjfvkmnineeightninefourtwo1 +one5sixeightfxkshmninethreeeight +4nine4 +27 +ggtz73sixkgsjrtcxkb1 +qvxsgvrpbxqcgpb2fzmcvknkr99seven +6eight8ksgdlxj638fivetcgb +mmvc3fourrvbztjchbmqtxtgfrrqphninefive1 +3qzbzxsevenfivegrvtbckqcj +eighttwokzpgl2hrvqlhkthreenine4 +8twoeighteightxtsbrseven +nine5mghp7vpnvtpx2c +hkxkmx5qnpjhtdfjfsix2xqqplvm5gmvjm +69cgvzhvgjvl8 +threeblzj6three +3bxpmnfbtpk5hcgqkbkqblznxgsdvklmtmqjxsxdcgqvmsprxrrnfchfbnd +1fbrrcjgzzllmcbdrgmrcfsevenh +58onezbp +1bqfkmkk46cctvmstvhvrtwoone +mmeightwo9sbjvleightdsevenseven +9gdsqgflkvonetwo +3lgpmxdgjtzx3two5foursixeightwomb +dbkbeightfive9eighthxngnrbmp +2cpkxggtrdsrh +zsgcdcrlhlqdpone9eight17sixbbtzpmdf +5rskkplgsbl9qqzfrzh67four4 +nine856threezgbhrzjcfour +kqnnine87lflxddvtfb9lfjdknvgl8 +fsgtwo8zxvnfour7xxfnmqpzhzone4 +ddd9sixnsrpqmvvjh2xghxhm +836 +nxglt36ljcbvgc16hxcbtqjz +nine19fourhnvh7fgqklf11 +jkvsphrpmhbnfl2nhcflhsbks4 +7nine2dsgkmrzlrzptfpk672 +6vtmztrjdrbk +4vgsshzzsrtwo +ninexfjcxdcnxs7seventhree2 +hsvvqcqp97twommjjlclbtdjbxkveightwos +threedlcvvseven3 +366xqfbhzfmqknine7 +jzrqqfouronehhrmkg4one5 +8xcbccrp141kmcsrdlgcdzpcb1nine +59rdrphcgk +fivetwoqmlk22eightfive +qnsphtvfourtwojljxnvgrkk3slv6four +13dfbnfnpsevennqtjthreethree6 +4dtncvsix34oneeighthpfouroneightv +xdhqninefive88nine +6hnnl8nineonehm7four +sevenfournine8five2six +vnczlzjqdtmdgsgxch94one3knlxjvqtrjlsx2 +twoeight14kkzrsqmgkhjb +jhqrzxrhskngj9ninenjcnbdtjhjtdh +2grrlxnlvthreernfghspmc +two8hjbsevenfive5threenpgtnkftp +d8sixfive1five7 +sixthree9 +sixspqf2gptcsrvlln9 +seven8nine +nqeightwo7svvjqs75qgp3hpvn +qrsixxffsdvvrf74five3 +5threeskqgcgprrjmcxksixtwo969 +bdbtlvlseven13fh +2two1eightfour7jqdd +three8ninefournffzbnbhkpjqh32 +sixqzmhnjttdnine41sevenpcxqkvr +fivenine2fourseven2 +sixjjhrjbmvvngqd3three7ninekpneight +11lttrkpcljbbrmponeightbb +frxgkvgrjtsix84 +76eightonesix8fivenlfhkfgp +fourpqlrklpnfljvpfkdklkgrjp1ninevfour +1six75tr1 +cjdvxhmjvstninejccxrqhb1qkpmnzx8xfpp +8sixfourone6pzlnczvlsmmp +eightrkl37jqlvjjsbrtqsix6 +onesmrjvmrtlppm69857seven +4rgsktnbone8sjxjzbrplnmfvkknpxqv +tfteightwonsdffone8sixxdpeightseven +639one2two +smk55 +6cjbckhbtmkcgrvmp3 +rdnf9 +1jjkdspeighthteight37 +1gh3dcmhx4sixnphphhbpninevbqhs +vpstbqtdmbvk9jstvtgzrdl +91seventwo +7sdpflkxfzfivethreenine +gvgcrpphhbzghtbcv6 +vvnine5ddgzroneone +5four6684one +dmspptjjtwocr2one +sixftzx6fdsfv +5six8twotccbsdnpxg32tsix +mfkdbdfournktdmgqnt4vqkzbzonekdqhbcmfgfiveone +nine2476 +8rxd2eightninefourmd +eight1hqfcqs4cpvpsqjfhptwo6six +5z +bqcj948nine6xmgnxmxnn +two1lzdv65bhllvrc +sevenvjkl3ninespltvdszvnfvzpcvrctphvp49 +4mzjxftf5eight +fivehbrxcbgjhhxpzfn5lllsknk7six +6n5ttwo166 +fqdfhc3 +6cph +lzqqvnlkjv3sevenbdssvckmdm +bbdpgpfsevenvzsix87 +754sznxkfb4npmjbv4one +twothree984dsxsninefour +kmpjgh71jhfrjgrpbd2d7 +27tgptfvcjnk2 +onefive497cdcktxcjfivezdrdhczbp +79176threeseven1 +csseven1rmlbcpct +1lzlz4tsngmgh +zvxshddzg2eightpxkzfnvdfzeightseven +ninesixnine93seven8 +1twofiveeightmfour +six3cmbbbxbqr74flchvgjbr45 +7nine31two9dvsghkrjj +five5four +seveneightthreefourseventrgxdqclq2 +5dfgddsevenldmzckmvxjmk92fourdcpfgcrpd +ninekbhrflzmgp3lqgxgszmzvndr47zcllcfg +sqsixonefivekfvbfh66p +bssrkdrrgsftlqjdz19 +bqcbhfive6 +jt3fivemdrnrvngsb1seven5 +svdninesbj11eight +2phltdc +1469sevenvksvlthqskfkx9 +7fcfivefourdbbvtnjbrc +6seven4 +lrmfqtjkzfive69eight8 +zmngmr9ninenineninesh +qrxvdxgtfour7one6 +eightmjpkgdtrp52shpcrtb +54k7fournine +7fdbshl6874 +jfjvrhccqrc1fourcrg96 +1sevenncqhkgtzmtncmxhflmfsxfsmsmqh +79fourjmxfdbqnrsr +sjthree6tcbp3x +qvrzmdzfnpkkdcvone2lttcbzhhddbnlnhxgsblhtlvdcpnzjvvqszrthree +ninedfxcz63two515 +48sevenvgznbsxzhfgzq19 +dxjbtzvtfn3five3 +five1gxfcfppffg74 +78ncrnhmv766nine +two7qmgeightjhddgnineone +jhttksbpbhzmgglfour7 +bloneight3ckvpkxtwozzxr1onethree +mhmppdtvfonecrjzlktlnkpzdbqtvtwo4 +179tjchxninethreesix +dpcfnsftnjbhlpcjrc8pbnnhtlrjzmmjk +ninebn16one2crfour +mfivesix8nine1zgpqpr +eight44fourfivegfive +2qhsltnzsfivervftmdm1hthcml +sjoneightvrxctb9sixhkhmfivejm +7threehdctsfqflggzkhpn +seightfourkhpkprrcl6six +fourkdff7 +57seven3four1r1gcjtckvn +gmfdzgv7fivesix4nvlq3 +thp7 +xd5plhtvtgxmgkmhlr5nine +7fourdf +pnkjgdctpm2221four8pvnhxdtrvs +hngtq27nineninesixeight +2fivejpfbsqtx1fourseven +19jpjsbljgz +ninethree5twoeighttwoqponefive +gklmbcj5mstwo8 +phbeightwo31jjzltcqzhklm26 +jtslpzsxh43 +drk7 +5dxcsvgqkmz +jnrgv9 +nsttntwo6 +6qbfrlcfmmnqpmbbtqgdsjqndqfive +2mgdjlpdsixfive6 +sevenfivesix6 +3nrfvb13onebsrclqnflppzchtp21 +dmpgdvfive7 +lpvqjzhvjoneghqxnvsixjxflzqj4 +onegqzxvnnfnlcffour2 +nsglbskbzd2drjzqhnq +nine8seven +rfspthhjbh92rseven1 +nine2ctjnb +gzkgvtxjt8twoonefour +tplxnlr8bfjklthree +jqrxrtdvmj8fournmj +6gxvglbcqkdsdcsl +pzjk9ccbmkzmtsf +qdzpknfhbsixczkrqbpfour76sevensbvltnjccjllng +six1zrhqxzfivetwo +xjhmfkvjgxtbgszmpd54jbsscgrninethree +cndbtlq22 +fouronesevenzrrv7mhsvjtwokqbfvvrs5 +twoonefive59phkxdbndgch5seven +8twoninethreeckdkd5 +9four6jfxnfgjvcrszrpsrkhh +993psn4qdldmfnqsix4 +42tzxknj +vvzpl8six +8vpchdjxczsvjjqljnmpdeightone2seven +fivenine51sixcdb +dfkkvsone5kjzvqqc +8seven8pxtrdrkqcqhdklgsixzxtjmtblzzcc +ddvzsqnxd9xscsix4rvpsix +75nsvxf9one88 +38ninetmmqx2 +sxjqgrdthree2vhpgrcdtqeight +63kthndjc +qgbdkfm56two6fourthree5 +five79 +jpb2seven7one7 +four5sbgbpzkjjkjhsvgksgjvfrsbpbdzgd2 +xlxpsixninextzlpbn6 +jzbvzlflf8twoeight +4vjtr6eightninenjtvt +3twonine3vmrgkjzkpfoursixtbcktpn +six1fourbfhxlntrqfxxztmj4 +jrbhfourfour6jspsxkn2eight5four +pcvjmdlnf15cfghpszt9 +4lxktgpvvq1sevenone9 +twosixhllhbxkbd2three +veightwo3eightvrhseven89onelxvhqxkhm +2sixfkdpcjcgcbgfzlbgblj +457jtmdfdjcnine +three64 +pqgjfseven4sevenoneslgeight +91vcptwo1twonineone +seven63fourzjpdmk1 +8fivetwofrbtm6f9five +sevenchrtbctkgpnine65fourbhpqnchhlz6 +rkdqrbtdbj9bt41hklvlrbrcpx +1three1gmdeighteightqbgsevenhljbpzbdtt +srkbbkfcznine6nine6 +8kmzbjzsxtgr9drtbdl +24six412smjfxscst +9cktpshfdr5djvrngchrh176 +2mjknvteightmvsdgt8seventhree3mzfk +vhldtk27two +6three2ninepqnine +2fourzbtqnclrtpsix2six94 +six6five +one2eightppzmczmgsixnine +15qljk7vchkfcfhkhmbjlkcfour +99four +dhrgkkbrnczkdt3n +89211sevenhnbjbrxtk +663rrbpnrknine911nine +2ntffsix9 +4mdpcrvqfoursixqeight +jbjjqkfive3jqnqhvkmtbddrdqxseven +2gvrgdsxptwovfkpgdlmlhz34 +rqfrx82 +tworzlxeight66eight1five +md1jgknfftttjbjz +tctqctkone37cmpbslgpzh3 +3sixsixfpxg +seven6bld42brzxr +6two4seven9zpgb5 +nine13 +d68 +3lxvsgksbbtwo52eight3three8 +bpltlnlzc8 +seven2five1threedmkg +hpkvhlkhknhjpq9tgpmnndgtlqjx1vkdkvtqhtwodrbr +fourfivesxgpxhdvts7four5 +7frgrjkkrb1 +2threettvptwobjhmxvpsvmljtvnpkpsvr +9fivelxtcbbn9xgtwohmmhnfhcknc +fourqztfvd6gkhxnstjjxnbl69hzkghsjrd +pspgqcjfcqdgq6xsgxrls +threesix6lrfkmvjdfivetwo9 +kdjgpj54 +oneeightsevenfive1 +one4onefournine64 +45hhcpntsthreezl9hjdnnine +17ninenineninegczplbj81 +31threetwosevencphdv +5eightvsrzjmdbtqhhqtjfjrhllhbgzgzjzvdhddstxpp4 +pgghlbtsevenqxxjbnd14onetwo +3ljgmcxnqgxcrfourfourtworjtwo +eightseventhree59 +3nhsccljtzszftnqtfour5 +threefourthreeone3five +3pzgzjv7tz +qxgntksdr45tvnxfcjdnn +5seven9threejdzrzdfcpgbnhrrmfkkskg2two +38bjnlcjbeightfivefourqvtbvjsb9nine +nmxqtzlpfngzlsnl9 +9eight8five3two1gsknxznbf9 +518jkqmprjlqcpdthreefive16 +6lzjznblrj3three +f7blbxznlvgk +37jtlrvlzhzronehn +kpckhlcsbeight6 +8dfptmfourtwoeightfoursixonefive +ninecdrxlgdkm7nineseventwotbbcgninekbxssd +rrhkgmnsbxbhb2ccnncrbstjfbmnlbxsxbkr +cflrvjtdsevenfivefive3sevensixeightseven +41ninenrznrcpdqhxfglb +gffivesixtqbbmzllvbnjnk2fivesix +eight311seven +52mpqbgktxhs359btkzqdfzvtrzmltxt +onegxnk2rvnmdcmqvqvgkml34 +gfzeightwoeightrbvknvpt7 +1ct2 +zctqtxtgseven66zhslvvdninetwo +54sixbfn8mxfkthf5 +9974seven9dclxbmfive +onefour6mjtssrxjjsleight2foureight +818sixsmmzsvbpl9two +rjqnpzlp83qxlj +sxqztv22 +8tsvhfszvj +one5mninefour68 +three7threeone +sevencnq2jdjvmlh5mqnnnrsqgppkfxjfjsevendrq +8zmxbvgschsqxbk5lltxpseventhreevrhsvdkk +seven2ngbqlxkjl27eighttjprz +ccfskxtnqpqninevczrltkg18hmgjmqt +npgtv4nine5lnqvglvdrxvqmc +kvg4zrtpxnknbone +threeeight1tsdcthree5zxrshttlsmseven9 +35448284 +6fiveqplkfftsj +pldmrjhzhfiverlgntcckbqzjgth4gfddcrz +6fivesix2 +eightksz6m6pneightnvpvvx +1fourbqxtmbvzsfnrxqmvlbfzvdthree +two43sixthree5one +cqf2 +twoltseven8three64 +6fourprlhcc +fgqoneightsevenqthreebksixgdqt93dm +xjczd3sixseven5 +kfzgshnxqnptrckbrt2 +fourrrdcl624 +kvhfqspcpsxndjqlonesixthree24kdmqvone +8eightfivetwo +onesevenseven5fourlrkkqtfkrmdlsmd +jffvtzkbjnkdtvfsfthree431lrpgmtv +bbvsptrzbone4tfnpgrfourvsix +4seventhreekmxsz335eight +eightbrcv5 +two2eightbppsplzgcfournine5seven +fourthree5kcdhqzeighteightkbzszgv8nine +rgxrddnnbv7rkt +8ffmvpcsvfoureightqpnzzjksgchnine9jlgjqb +two9tfvjqsgqsixnine +bzn4two +sqlfeighteight6hjddxzcone2 +3fivekmfnqlctddfivelcthnine +twodn8 +one5six913lbrcc +foureightmppchbgz8lqbzqbjztwo7cksqxns +zvhzgfpkhkone93nine
\ No newline at end of file diff --git a/aoc2023/src/day10/input.txt b/aoc2023/src/day10/input.txt new file mode 100644 index 0000000..230e945 --- /dev/null +++ b/aoc2023/src/day10/input.txt @@ -0,0 +1,140 @@ +.F-7F-..|-F-|F---7J7FLF-7F|FJ-LJ.7--F7-|77.|7J.FFLF7-FJ7.J-7-|.J.7.F7L7..FF.|F--F--|J-FFJFL7F7-LJFF-.7F|7.FF|7FF7FL7L--F--77-7F7.7.-F-J.JFLF +FF-.F|-FLJJ.77F|F|-J77|---.7JLJLFJF-|7.F-7-F7.FFJLJ|.LF7-.|L7.J7LJ.L7FLFF7J|.F|.LJ-|.|.L7F.LFJ.||||FF|FLL--|L-J7--J|J7L||FJ-JLJL-JJ.L7J-L|7J +.|.FF7-LJ|.FJF-77|FJ|||-L|-L-FJ7F-|-LF-L7|FJL7J-F7FFF7FJ.J-.LJ.F|J7.LJ.|L.||L7JF|.7J7.7.|L-FJ7LL-JJ7FJ7.LL7J7LFJFLF--F|JF|-|.-JJJ7L7-||7F--- +FF-F7JF|FFF..L-|-|JF-JF7LJ7.F7--JLJ..LFFJ||F-J|F777L|-7J-7|7|7.FJ-77..LL--7|7F7F|-J|77.FL-7FL-JJ|7JL-L-|7F|7JJLF77L|-7|.FJ-L7|J.LL-FF7F-77|J +F|...FFJLLJFFLJ|JJJ|.LL77-L7LJJ.|L|-|-FL7LJL7JF7JL|.|7||.LF|-|FJJF|F7FJ.FJ|LF||F7.-FFJ-LJ|FJ.L---J.|L.L77-JJ|7|||--L7|J-.F7|.F7F7|FJ|F|J-F.. +--F-L|J..L.F77.L7--JL.L|L7F|J..FJFF-J7|FL-7FJF77JF7J..JJ-FJL-JF|.FFJLJLFF-F-F||||7L|LFFJF-7.7FL|.LL7|FFJL7JFF7F|L|-JJJ|.FL-L777L-.7L7FF7.|7| +F7J.|.L|7.J7|FL.|.|.L|7|J--7-7-L.F|J|F77|FJL-JL7-||L77LLF-J-|-F..FL7.F-LJ7FF7||||F77JLJLL.J7.L-JFF.LJL7-|L|FL-FJF77|.FF-LJ.||J.FF7|FLLJL7.FJ +FJ|F|FFLJ7L-L77L|-FF.|LJF7-L-77.7-|-FJL7FJF7F-7L7||7L|...|-LLL|7FF.LFFF.LF7|LJLJLJ|-7|.|7..J----F77.JF-JL--7JLFJFLJF-7J.L77FF.L-J|LJJ.F|JFJ| +J.L--77|.|7|L|7|J7|.FF|7||7-|||7|-J|L-7LJFJLJFL-J|L-7|-F-7.F7JFFF-7--7-F-J|L-7F7F-JFJL-FJ--J7FJ.J||J|F|7LFJ||-L--7-7JJ.F-7-7.FJ.L|J|||J.F7J7 +|F.F|.7-|JLF7|.J7-77JF7F777.LJ|7L..F|FL-7L7F7F7.FJF-J-7|J|-||J.FJFJ7F7JL-7L77||LJF-7..F|J.|.F.F7FFF.-F77.7F-F77-F77L|77..L-7-.L-7L-LLLJLLJL7 +F7FL77|FLFL|LF7|J-|FFJLJL---77LF7LF7F7F-JFJ|LJL7L7L7JJFJ-JFF--7L7|FFJ|7-LL7|FJL7FJFJ7-F7..F7F-J|F7J7J||J--7L|L7FJL77F-|F7|FF-7-|J|L|7|-JJ|FL +F-JJL--|7|.L7-J|LLF7L--7F---J-||F||LJ||F-JFJF--JFJFJ77F77F7L7FJFJL7L7|F7F7||L7FJL7L7F7||J7||L7FJ|L7F7||77||-L7|L-7L-7JLJL7JJJ.|J||||FJ7--FF7 +F7..7JLL7FL.|-JJJL|L77|||77||7F-7FJF7LJL-7|FJF7FJFJJF7LF-JL-J|FJF-JFJLJ||LJ|J||F7|FJ|LJ|.L|L-J|L|FJ|||L7LFF-7||F7|F-J77LF7JJL|7.|JJ-.F-.|.FJ +7---F7|.FJJF7777.|L7L7FJ|F7-F7|FJL-JL-7F-J||L||L7L--J|7L----7||FJ|FJF--JL-7L-JLJ|||7L-7L7.|F--JFJ|FJ||FJ-FL7||LJLJL-7L7L||JFFF77|JJ.LJ7FL-|J +|F-7F--7FF7|J|FL.F|L7|L7||L7|||L7F7F7FJL7L||FJL7|F7F7|F----7||||F-JFJF-7F7L--7F-J|L7F7L7|FJL7F7|FJL7LJL77LFJLJF7F7F-JF77||7F7||7LL.-LJFFJF7| +J7F-J7.F|J7JFJLJ7LF7||FJ||FJ||L7||||||F7|FJLJF-J||LJLJL---7LJLJ|L7FJJL7||L---JL-7L7||L-JLJF7||LJL7FJF--J77|F--JLJ|||FJL7||FJ||L7.FFJ.-J--L-7 +.L|JF77LJF-.JF-JLFJ|||L7|||FJ|FJ||LJ|||LJL7F-JF7|L7-FJ|F77|F7F-JFJL-7FJ|L-----7FJFJLJF7F-7|LJ|F--JL7L-7F7FJL---7|LJFJF7||||FJ|FJ.|7FL..|7|L| +--L-F.J|.--J-J7F7L7LJL-JLJ||FJL7|L-7LJL7F7||LFJ|L7|F7|FJL7|||L7||F--JL7L-7F7F-JL7L-7FJLJFJ|F-JL-7F-JF-J||L7F--7L--7L7||LJLJL-J|F--777F-7-FFJ +||L7-7JF7L-JF|F7F-JF7F-7F7LJL7||L7|L--7||LJ|FJFJJ|||L7L7FJLJ|FJFJL7JF7|F-J||L7F7L--J|F7|L-JL-7F-JL-7|FFJL-JL-7L---JFLJL7F-----J|F-J7--FLJLL7 +.LJL.LJL|-L-F7||L7FJLJF||L--7L7|FJF7F7|LJF-J|FJ|FJ|L7L7|L7F7||FJF-JFJLJL-7|L7LJL---7LJL--77F-JL7J.FJL7L--7F7FJ-F-7F7F7FJ|F7F7F-JL7L|-7J.--LL +7JFJ77FF|-JL|||L7LJF7F7||F--JFJ||F||||L-7L7FJ|F7L7|L|FJ|FJ|||LJFJ|FJF----JL7L7F-7F7|F----JFJF--JJFJF-JF7FJ|LJF7|FJ||||L7||LJ||F--J7L-.||.F-J +|LJ-L-J7JJJ.||L7L--JLJ|||L--7|FJ|FJ|||F7|FJL7||L7|L7|L7||FJ|L-7|F7L7|F-7F7FJFJL7LJLJL----7L7L7F7FJFJF7||L7L7L||||FJ||L7|LJF-J|L-7F-7|FFJLJ|| +|F-FLL7|...FJ|7L---7F-JLJF--J||FJL7LJ||LJ|F7|||FJL7||FJ|LJFJF7|LJL7|||FJ||L7L-7L7F7F7F---JL|FJ|||FJFJ|||JL7L7||||L7LJFJ|F-JF7|F-J|FJ----.F-- +7JFL77J.-F-L7|F7F7FJ|F-77L--7LJ|F-JF-JL-7||||LJ|F-J||L7L-7L-J|L-7FJ|LJL7||FJF7L7LJLJ||JF7F7|L7|LJL7|FJ||F-JFJ|||L7|F7L-JL--JLJL--J|JJ|7J.J|| +F-|F|F-7L|-FJLJLJLJFJ|FJF7F7|F-JL-7|JF77|||||F-JL-7||FJF7|F--JJFJL7L7F-J|||FJ|FJJF--JL-JLJ|L7|L-7FJ|L7||L-7L7|||FJLJL7F--7F7F7F---J77L-.--7J +|--J-J7LFF-L------7|7|L7||||||F7LFJL7||FJLJ||L-7F7||||J|||L7F--JF-JFJ|F-J|||FLJF7L7F--7F--JFJ|F-JL7|FJ||F7L7||LJL7LF7|L-7||LJ|L----777L7LFJ. +.FLJLLF-F-7F---7F7|L7L7||||||LJL7L-7|||L--7||F-J|LJLJ|FJ||FJL--7|F7|FJL7FJ|L-7L||7LJF-JL-7FJFJ|F7FJ|L-JLJ|FJLJF7FJFJLJF-JLJF-JF7F--J-|JF-L-J +|-J.-7.LL7|L--7LJ||FJ.|LJLJ|L--7L--JLJL7F7|LJL7FL---7||FJ|L-7F-JLJLJL7FJ|L|F-JFJ|F-7|F7F-JL7|.||LJFL--7F7|L7F7|LJJL-7FJ7F7FL--J|L---7JF|FJLJ +F7---F-F7||F7FJF7LJL-7L---7|FF7L----7F7LJLJF7FJF7LF-JLJ|7|F-JL-7F----JL7L-J|F7L7|L7|LJ|L-7FJL7||F-7F7J|||L-J|LJF7.F-JL--JL7F--7|F7F-J-JL-.L| +L7.|.|.|LJLJ|L-J|F7F7L---7||FJ|F-7F7LJL7F-7|||FJL7L-7F-JFJL-7F7||F7|F7FJF--J||FJ|FJ|F-JF-J|F-J||L7LJL7LJL7F7L-7|L7L-7F7F7FJ|F-JLJLJLL|7L7|F7 +LJ7L-7FL7F-7|F--J|LJ|F--7LJ|L7|L7||L7LFJL7LJLJL-7|F-JL7LL7F-J|LJLJL7|LJFJ.F7||L7|L7|L-7L-7||F7||FJF--J|F7LJ|F-J|FJF7||LJLJ.||F7F7F7-F-7-L-JJ +--77L-F-J|FJLJF7FJF-J|F-JF7L7||FJLJFJFJF7L7F7F-7||L-7FJF7||FFJF7F--J|F7L7FJ|||FJ|FJ|F7|F-J|||LJ|L7|F7F7||F7|L7FJ|FJ||L-7F-7|LJLJ|||.|FJF|FJ| +J|.F--|F7|L--7|LJFL--JL--JL7|||L7F7L7L7|L-J||L7|||F7||FJ|||FJFJLJF7-LJ|FJL7|||L7|L7||||L-7||L-7L7||||||||||L7||FJL7||F-J|FJ|F--7LJL-JL-77..F +LF-.LFLJ||F-7LJLF7JF7F7F---JLJL7LJ|FJFJL7F7||FJ||LJ|||L7|||L7|F7FJ|F7FJ|F7|LJL7|L7|||||F-J||F7|FJ|||LJ||LJL-J|||F7||||F7|L-JL7-|F-7F7F-JJ-FJ +.F-7-7.LLJL7|||FJL-JLJ|L------7|7FJL7L-7|||||L7||F-J||J||||-|||||FJ|||FJ||L--7||FJ||||||F7|||||||||L-7|L-7F-7LJLJLJLJLJLJF7F7L7|L7||||-J..77 +FLF|7LFJ-|F|L7FJF7F7F7|7F7F7JFJL7L-7L-7||||||FJLJ|F7|L7|||L-J|||||FJ|||FJL7F7|LJ|FJ|||||||||||||FJL7FJ|F-JL7L7F-7F--7F7F7|LJL-J|FJLJLJ.L77JF +F7FL|.||.LFJFJL-JLJLJ|L-JLJL7L-7L-7L-7||||LJ|L7F-J|LJFJ||L-7FJ||||L7|||L-7LJ||FFJ|7LJ|||||||||||L7J|L7LJF--JF||FJ|F7LJLJ||F7F7FJL-7.J.L.|L77 +LF.LJ-|-F-L7|F7F7JF7J|F7F-7FJF7L7FJF-JLJ||-FJFJ|F7|F-JFJ|F7|L7||||FJ|||F-JF-JL7L7|F7-||||||||LJ|FJFJFJF7L---7||L7LJL--7FJLJ|||L---JJ-JLFF|L- +FF7.F.|.F7J||||||FJL-J|LJFJL-JL-JL7L---7LJFJFJFLJ||L7FJFJ|||FJ||||L7|||L-7|F7FJFJLJL7||||LJ|L-7|L7L7L7|L----JLJJL-----JL7F7LJL7F-7JL-J.FJJ-J +FL|-JJ7F||FJLJLJ|L-7F7L7FJF----7F7L----JF-JFJF7F-J|L|L7L7|LJL7|LJL7||||F7|LJ|L7|F-7FJ||||F-JF-J|FJ||FJ|F---------------7|||F-7LJFJF-J|.F|FF| +FJLFJ|F-JLJF---7|F-J|L7|L7|F7F7LJL-----7|F7|FJ|L-7L7|FJ|||F--JL-7FJ|||||LJF-JFJ||F|L7||||L7FJF-J|F-JL7||F--------------JLJLJF|F7L77F-7JJ|-LF +L.L|F-L7F-7|F--JLJF-JLLJLLJ|LJL--7JF---JLJLJL7L--JFJ|L-7||L-7F7FJL7|||LJF-JF7L7|L7|FJLJ||F|L7L-7|L7F-JLJL--------------7F-7F-J||FJJL-J|7|7F| +.F--|LFLJ-||L-7F-7|F7F7FF--JF7F-7L-JF7LF7JF-7L---7|FJF7|||F-J|||JFJ||L-7L-7||FJ|FJLJF-7||FJFJF-JL7LJ7F7|FF7F7F-7F7F----J|FJL--JLJ|LJ7.7FLJ-7 +LLL-J7L7L-LJF-J|FJ||LJL7|F--JLJFJF--JL7|L7|FJF---J|L-JLJLJ|F7||L7L7|L7FJF-J|||7|L---JFJ||L7L7|F-7|F--JL7FJLJ|L7LJ|L-----JL7-|77F-7-JFF-7-F7- +|L|-JL|7|L|.L--JL7|L7F7|LJF---7L7L7F--J|FJ|L7L---7|F7F---7LJ||L7L7|L7|||L-7|||FJF---7|.LJ-|FJ|L7||L---7|L--7L-JF7L-------7L-7F7L7L7JLL-J--JJ +7|F7|FJ77-F------J|LLJ|L--JF-7|J|FJL---JL-JFJFF7FJLJLJF7FJLFJ|F|FJL7||L7F-J|||L7L--7LJF7F-JL7L-JLJF---JL--7L---JL-------7L--J|||L7L7FLL|7LFJ +7-FJLJ.F77L7F7F-7FJF--JF--7|FJL-J|F--7F---7L--J||F7F7FJ|L-7|FJFJL7FJ|L7|L7FJLJJL7F7L--J|L-7FJF7F7FJF--7F-7L---7F7F-7F-7FJF7F7||7FJFJ-.F-L7|7 +L|||.|-LL-|LJ||FJ|FL---JF-J||F7F7|L-7|L--7|F7F7|||||LJ-L7FJLJ-L7FJL7|FJ||||LF7F-J||F7F7|F-JL7|||LJFJFFJL7L-7F7LJ|L7||JLJFJLJLJL-JFJF|-L|FJJJ +77|7-J-|FFL7FJ|L7L7|F---JF7|LJ||||F-J|F-7|||LJLJ|||L7JF7||F----J|F7LJL7|FJL7|LJF7|||||||L---J||L-7|F7L7FJF-J||F7L-JLJF7FJF-7F7F--JLJ|FFF-L|J +LF7|F-7F-JFFL-JJ|FJFJF7F7|LJF-J|LJL-7|L7|||L---7||L7L7||LJL-7F-7LJL7F-J|L7FJ|F7|||||||||JF7LFJL7FLJ|L7LJFJF7|LJ|F7F7FJLJFJ.LJLJF77JL-7-F7.|. +.LL-JJ.FJ7LLL-|LLJ-L-JLJ||F7L-7|F---JL-JLJ|F7F7||L7L7LJL--7FJ|-L7F-JL-7L7LJ7||LJ||||||||FJL7|F-JF-7L7|F7L-JLJF-J|LJLJF--JF7F7F7|L7.||JLL7-L7 +JF|J.L7|.7-LLF-7F7FF7F--J||L-7LJL--7LF7F7JLJLJLJL-J-|F----JL7|F-JL---7L7L--7||F-J|||LJLJL-7|||F7L7|FJ||L--7F-JF-JF---JF7FJ||||||FJ7|JFF7-J.7 +.LJJFLLL---|-L7LJ|FJ|L--7||F7L-----JFJLJL------7F7F7LJF---7FJ||F7F7F7L7L7F7||||F7|LJF-----JLJLJL-J|L7|L--7LJF7L7FJF-7-|||FJ|||||L7F7-|--J-F- +|J.F|-JJJLF77FL-7|L7|F--J|LJL-7F7F-7|F--7F7F7F7LJLJL--JF--J|FJ|||||||FJF||LJ||||||F-JF----7F--7F-7L-JL7F7L--JL-JL7|FJFJLJL-JLJLJFJ||FL.|.-7L +|7FJLF7L|F.L|7F7|L7|||F--JF---J||L7LJL77LJLJLJL7F-7F---JF7FJ|FJ||||||L7FJL7FJ|||LJL7FJF--7||F-J|LL---7||L---7F7F7LJL7L7F7F---7F7L-JL7J7FF7|J +JJ-LF|-77.FF7FJ|L7LJ|LJF-7L-7F7|L-JF-7L-------7|L7||F7F7||L-JL7|||LJ|FJL7FJ|FJLJJF-J|FJF7LJ|L-7|F----JLJF--7LJLJ|F--JFJ|LJF7-LJL----J7L-FJ7J +|-L-J.L|LJF||L7L7L-7L7FJFJF7LJ||F--JLL--------JL-J|LJLJLJL-7|L|||L77||JFJL7LJF---JF-JL7|L7FJF-J||F-7F7F-JF7L---7|L-7FJFJFFJ|F------7|F.|JLJ7 +L.LL7J-JFFFJ|-L7|F7L7|L7|FJL-7LJL--7L|F7F7JF--7F7FL7F-7F--7L-7LJL7L7||7L7FJ|-L7F-7L7F-J|FJL7L-7|LJ-LJ||F-JL----JL-7LJFJ-FJFJ|F--7F7|-J7F--J- +|-F-||7F--JFJF-JLJL7||F||L--7L7F7F7L7FJ||L7|F-J||F7LJJLJF7L--JF7||FJ||7FJL-7.LLJJL7|L--J|F-JF-J|F7F7FJ|L-7F------7|F7L-7|FJFJL7J||LJ|7FJ|.LJ +.JJ7LFLL7F7|JL--7F7LJL-JL-7-L7LJLJL-J|FJ|FJ|L--JLJL7F7F-JL----J|FJL7LJ-L7F-J7.LL-JLJF---JL7.L--J|LJ|L-JF7||F7F---JLJL7FJ||||F7L7|L7LL-J.JF|J +|--7|.L.LJ|L-7F7LJL---7F7FJF7L-------JL-JL-JF------J||L7F------JL-7|J|LL|L-7-|F--FF-JF--7FJF---7L-7|F7FJLJ||LJF7F---7LJFJL-J||FJL7|||||F.FFF +F.||-|7.F7L-7LJL7F7F7|LJ||-|L---7F7F7F7F---7L7F7F7LFJL-JL-----7J|.||L|7L|F7|-JJJ.LL--JF7LJLL--7L-7|||||F--JL7FJLJF--JF-JF-7FJLJJFJ|J77-7FL7J +LJ-FFJJ.||F7L--7LJ|||F--JL7L7F-7LJLJ|||L-7LL-J|LJL7|F--7F-----J-L7LJ7-|JLJ||.LJ|F|LFF7||F77F-7L-7||LJLJ|F--7LJF-7L---JF7L7|L--7-L7|-FL---L-J +7F-J|7.FJLJL-7FJF7LJLJF7F7L7LJFJF7F7LJ|F7L----JF-7LJL-7|L------7LFJ|.-JJLLLJ7L-7-F--JLJLJL-JFJF7|LJF--7|L-7|F7L7L-----J|FJL7F7L7.LJ7-7J|F|.L +.|L|F-7L----7|L-JL7F7FJLJL7L7FL7|LJL-7|||F7F-7FJFJF-7FJL--7F---JFL7-7.F--|-JJFL.LL--7F-----7L-JLJF-JFFJ|F-JLJ|FJ|F-7F7-LJF7LJL7L77J|J7-77|.| +L.|J|FJFF---J|F--7LJ|L7LF7L7|F7LJF7F7||||||L7|L7L7L7|L---7LJF--7F7J7FFJ7F7|J.|.|JLF7LJ7F7F7L7F7F7|F-7L-JL---7LJF7L7LJL--7|L--7|FJ-.F-JJFJF-J +|.7|L7JFJF7F7LJF7L--JFJFJL-J|||F-JLJLJ||||L7||FJFJFJ|F7F-JF7L-7LJ|J7FF-J7|L--L77F-JL---JLJL-J|LJLJL7L7F-----JJFJL-JF-7F7LJF--JLJL|7|.FF--J-| +J.LLJF7L-JLJL-7|L7F7FJFJF--7LJLJF--7F7LJLJ7LJ|L7L-J.LJ|L-7|L7FJF-J-7LJ-JL|L--77FL7F7F---7F7F7|F-7F7L7|L-----7FJF7F7|7LJL-7L---77F7LL-F7J7.F7 +L.|L-|L7F7JF--J|FJ||L7L7|F-JF7F-JF7LJL77F77F7L-JF--7F7L--JL7LJFJ||-L-J7.F-.|--7FFJ||L7F-J|||||L7LJL-J||F----J|FJLJLJF---7L----JF-7JLJLJ.FFLJ +JF|FLL7|||FJF-7|L7||FJLLJ|F7|||F-JL---JFJL-JL7F-JF7|||F77JF|F7L-77-F7L-FF.FF7.--|FJL-JL7FJ||||FL--7F7L-JF7F7||L----7|F--JF--7-F7-L-.7--7J7JJ +LL|FF7||||L7|FJL7|||L7F7FLJ||||L7F---7.|F----JL7FJ|||LJL7FFJ|L--J7-|J7LL-.LJ--..LJF----J|F||||F---J|L--7|LJL-JF----J|L---JF-JFJL77LFJ-||J|J7 +|LLFJLJLJL-J|L7FJ||L7||L---J||L7||F--JFJL----7FJL7LJL7F7L7L7L7F7F7J.FFFJL-JJ|LJ-L|L-7F7FJFJ|LJL----J-F7LJF----JF--7||F----J.FJF7L-7J.FF|-L-J +|7.L-7F--7F-JFJL7LJ-LJL-7F--J|FJLJL---JF7F7F-J|F-JF-7||L-J-L7||LJ|J-FJ|7F|..F7JJLLF-J|LJ7L-JF----7F7FJL--JF----JF7L-JL---7-FJFJ|F-J|LJ7LJJ.L +.FLLL||F-JL-7L-7L-7F-7F7LJF--J|F7F-----JLJLJF-JL-7L7|||LF7F-JLJF-JFF7JLL7|F-7J|||LL--JF-7F7.L-7F7LJLJF-7F-JF--7FJ|F7F7F-7L-JFJJLJ.|7|||.F-7| +F-.L.LJL7F7FJF-JF7|L7LJL7FJF--J|||F------7F7|F--7L-JLJL7|LJF7F-J|7L||F7JL77.LLF--J|LFLL7|||F-7LJL----JLLJF-JF7LJFJ|LJLJ|L-7FJ7.F7FF-F7|F-F|J +L|.|7|FFJ|||JL7FJ||-L--7|L-J.F7||LJF7F7F-J|||L-7L7F7F-7LJF7||L--77J|LJ|-F7F-FFLJ|-F-7F-JLJLJFJF7F7F---7F-JF-J|F7L-JF7F---7|L-7FJ|FF7|L7-7FJ7 +.|.-7-F|FJ|L77LJJ||F---JL----JLJL--JLJLJF7|||F-J.LJLJ7|F-JLJ|F-7L77L-7|.LLJF-77JFFL7|L-7F7F7L-JLJ|L--7|L--JF-J|L-7.|LJF7FJL--JL7L-JLJFJF7.J7 +L7.|-F-J|FJFJJ-LLLJL7F7F7F---------7F-7FJLJLJL---7F7F7LJF--7||FJFJF--JL7L|7|FJF7FF-JL-7LJLJL----7|LF7||F---JF7|F-JFJF-JLJF7|F7||F----JF|JF7| +.J-.L|F7||FJJ|7-|.J|LJLJLJF-----7F-JL7||F7F7F7F-7LJLJL--JF-J||L7|7L-7F-J-FFJ|FJL7L---7|7F7F77F--JL-JLJLJF7F7||||F7L7|F7LFJL7|L7||F-----77LL| +-J.JJLJLJLJ7.|FFJ7-F------JF---7|L---JLJ|LJLJ|L7|F-----7FJF7LJLLJ-LFJL7J-FL7LJF-JF---JL-JLJ|FJF7F-7F----JLJLJLJLJ|FJLJL7L7FJ|FJ|||F-7F-J7.JJ +LFL7L||JL|.FJJ7J.7.L-------JF--JL------7L---7L7||L----7LJFJL7F7-|LFJF7L7F7FJF7|F-JF-------7|L-JLJFJ|F-----7F-7F--J|F--7L-JL-JL-JLJL7LJ|L--|. +F-L7.LJ7LJL|JL7FFJ7LLF7LF---JF7F7F----7L----JJLJL7F7F7L--JF-J||F-7L-J|FJ|||FJLJL--JF------JL----7L-JL----7LJFJL--7|L-7|F7F7F7F7F--7L7L7-LFL- +|.||.FF7.F-L-F7F7F-F-J|FJF--7|LJLJF--7L---7F-7LF7LJ||L7F--JF-J||FJF7FJL7|||L---7F7LL7F-7F7F---7FJFF-7F7F7L-7L7F-7LJF-J|||||||||L-7L-J.L7J.|7 +FJF|JF|JFL-J-|||L7-L-7LJFJF7LJF7F7L-7L----J|FJFJL7F|L7|L--7|F7||L-JLJF7LJLJF7F-J||7LLJFJ|||F-7||F7L7||LJL--JFJL7L--JF7LJLJLJ||L7FJF7J7||FF.- +|L-||-J7JL7LL|LJFJF77L7FJFJL--JLJL--JF7F---JL-JF7L7|FJL7F7|LJ||L-----JL7F--JLJ|FJL7J.FJFJLJL7LJLJL-JLJF7F--7|F7L----JL7F7F7JLJFJ|F||-J|-7J-J +FFLJ77.77-JJJ|F7L7||F7||FJF7F--------JLJF------JL-JLJF7LJ|L7FJ|F7F7F7F7||F---7FJF-JF7L-JF--7L7F7F7F-7FJLJF7||||F---7F7LJ||L--7L-JFJL7.|.J||| +L-77L-7|-J..-LJL7|||||LJL-JLJF----7F7F7FJF----77F--7L|L-7|FJL7||||LJ||LJLJF7FJL7|FL|L--7L-7|FJ|||||LLJFF-JLJLJ|L7F7|||F7LJF--JF--JF-J.|..FL7 +|L---|J.L.77-FF7|||LJ|FF7F-7FL7F-7LJ|||L-JF--7L7|F7|FJF-J||F7|||LJF-JL-7F-JLJF-JL7-L--7L--JLJFJLJLJF7F7L---7F7L-J||LJ|||F7L---JF-7L7F7--7.L| +F-J--JJ-L|L|-FJLJ|L-7|FJ||FJF7LJFJF7LJL-7FJF-JFJ||LJL7|F7LJ||||L7FJFF--JL-7F7L7F-JF-7-L7F---7|F7F7FJLJL77F-J|L7F-JL-7LJ||L7F7F-J|L-J||JL-7.| +J|.FJJL.LJ-J.L--7L--J|L7|||FJL77L-JL---7LJ7|F7L-JL7LFJLJL-7||||FJ|F7L-7F--J||FJL-7L7|F7LJF7FJ||LJLJF7F7L-JF7L7||F---JF7||7LJ|L------J|77L|-- +LF7FF7-7FF7L-J.LL7F-7L7|||||F7L-------7L--7LJL-7F-JFJF7F--J||||L7LJ|F7|L7F7|||F--JFJLJL7FJ|L-JL7F-7|||L7F-JL-JLJL---7||LJF7|L7F------JJ-F--7 +.L-7L7-L-||7|F7F-J|7L7LJLJ|LJL-7F7F7F7L7F7L77F-JL7FJFJLJF7FJ||L-JF-J|||FJ|||||L--7L---7|L7|F7F7LJFJ|LJ7LJF--7F------J||F-JL-7|L----7F|J-JFF| +FFLJJ|L|-F-7-||L7FJF7L---7L7F7LLJLJLJL7LJL7L7L-7FJL7L7F7|LJFJL-7FJ7FJLJ|||||||F-7|LF7FJL7|||||L7|L-JF----JF7|L-------JLJF-7FJ|F-7F7L-777L-FJ +F--J-L-F-JFJ-|L7|L7|L----JFJ||F7.F7F-7L--7L-JF7||F-JFJ|||F-JF-7|L-7L--7L7|LJ||L7LJFJ|L7FJ||||L7|F7F7L-----J|L7F7F-7F-7F7L7|L7|L7LJL7FJ.L-L-F +|-L|||F|F7L7.L7|L-JL-7F7F7L-JLJL-JLJL|F--JF7L||LJL7FJJ|LJ|F7|FJ|F-JF7-L7|L7FJL7L7FJFJ-||FJLJ||||||||F7FF---J-LJLJF|L7||L7||FJL7L-7L||LJ7F7J| +|.|L-7FLJ|FJF-J|F7LF7LJLJL---7F7F---7LJF7FJ|FJL7F-J|F7L-7||||L7|L-7|L-7|L7||FFJFJL7||FJLJF--JFJLJ||||L-JF--------7L-JLJ7|||L-7|F-J.LJ--F||LL +|-FJLF---JL-JF-J||FJ||F7F---7LJLJ7F-JF7||L7|L7FJL-7LJL-7|LJLJFJ|F-J|F-JL7||L7L7L7FJL7L7F-JF77L7F-J||L---JF-------JF-7F-7LJL--JLJJ.FJ-F-JLF-J +|-L.FL-7F-7F7L7L||L7|FJ|L7F7||F7F7L-7|LJL-JL7|L7F7L7F7FJ|F---JF|L7J||F7FJ||FJ-L7|L7FJFJL-7|L7FJL7FJ|F----JF7F7F7F7L7LJFJFF7F7F7|F----7JJLLJ. +|7|FF-L||JLJL7|FJ|FJ||FJFJ||L-JLJL7FJ|F-----J|FJ||FJ|LJFJL7F7F-JFJFJ||||FJ||F7FJ|FJL-JF--J|FJL7FJL7|L-----JLJ||LJL-JF7L--JLJLJL-7JJ-F|...JLF +J-7-|JFLJF7F7||L7|L7||L7L-JL-----7|L-J|F---7FJL7|LJFJF7|F-J||L-7L-JFJ|||L7||||L7||F--7L-7FJL--J|F7||F-7F7F7F-J|F----JL----7F----J-|.J-|..||. +J.L-LJ-LFJLJLJL7||FJ||FJF7F7F-7F7|L-7FJ|F--JL-7|L-7|-|||L7FJL7||F--JFJLJFJ|LJ|FJ|LJF7|F-JL--7F7|||||L7LJLJLJF7|L-77F77F7F7LJ-F7-F77FL7J-LJ-- +LF.|LJ|LL-----7|||L7|||FJLJ|L7LJLJF7LJ-|L-7F--JL-7|L-JLJFJL-7L-JL7F7|F--JF|F-JL7|F7|||L--7F7|||||LJ|7L7F-77FJLJF7L-JL-JLJL---JL7||JFJ|-|-|.J +F|--.JJLLF----JLJL-JLJ|L--7|-L7F-7|L7F7L7FJL--7F7LJF----JF-7L--7FJ|||L-77FJL-77||||||L7F-J||LJ|LJF-JF7LJFJFJF7FJ|F7F----7F7F7F7||L7LF7F||F-| +LJFL-|L7.L--7F-7F7F7F7|F7FJ|F7LJ-LJFJ|L7|L7F--J|L--JF---7L7|F7FJL7|LJF-JFJF--JFJ||||L7|L7FJ|F7L-7|F7|L7FL-JFJLJLLJLJJF-7LJLJLJ|LJFJ-.J7LL7L- +|.|J-7-J-F--J|FJ|LJLJ||||L7LJL-7F7FJ7L7||FJL--7|F7F7|F--J-||||L7FJL7FJF7L7|JF7L7||||FJ|FJL7|||F7|||||FJF7F7L7F--7F7F7|FJFF---7L-7||L-FL--|7J +LFJ.||..FL---JL7|F---JLJ||L---7||LJF7FJ||L-7F7|LJ||||L7F7FJ||L7|L7FJL7|L7|L7|L7||||||FJ|F7||||||||||||FJ||L7LJF-J|||LJL--JF--J-LLJJ7FFJ-FF-7 +FJFFF-F77LF---7LJL----7FJF7F--JLJF-JLJ-|L-7|||L7FJ|LJFJ|||FJL7||FJ|F-JL7|L7|L7LJ||LJ||F||||||LJ|||||||L7LJFJF7L--J||F-----J.F77F7|LF7F-7LJ|| +LF|7-L|L-7L--7L7F7F---JL-JLJF-7F7L-7F--JF-J|||FJL7L7FJFJ|||F-J||L7|L7F-J|FJ|FJF7||F-JL7LJ|||L7FJ|||||L7L-7L7||S7F7LJL-------JL-J|FFF-JFJ|-7| +LJJ|J|L7FJ-F7L7||||F7F7F---7|FJ||F7|L7F7L-7|||L7||FJL-J-LJ|L-7||FJ|FJ|F-JL7|L-J|||L7F-J|FJ|L7|L7|||||.L7FJFJ||||||F7F-7F--------JF7L7FJJ||LL +F|L|LF-JL--J|7||||LJLJLJF--J||FJ|||L7||L7FJ|||FJFJL----7F-JF-JLJL7||FJL-7FJ|F7FJ|L7||JF-JFJFJL7|||||L7.|L7L7|||||LJ|L7|L---------JL-J|--.||| +-|JJFJF--7F7L-JLJL------JF7FJ||FJ||FJ||||L7|||L7L-7F7F7|L-7L--7F7LJ|L7F7LJFJ||L7L7||L7L7FJ7|F7|||||L7L7L7L7|||||L7FJFJL----------7F7FJFF7J77 +LJ.LL-JF-J||F7F-7F------7|LJFJ|L7|||||L7|FJ|||FJF-J|LJ||F7|F-7LJ|F-JFJ||F7|FJ|FJFJ|L7L7|L-7LJ|||||L7L7|FJFJ|||||FJL7L-----------7LJ|L--7J.77 +FF|7LF7L7FJLJ||FJ|F-----JL77L7|FJ|||FJFJ|L7||||FJF7L-7LJ|LJL7|F7||F7L-JLJ||L7|L7L-JFL7||F7L-7|||||FJFJ|L7|FJ|||LJF-JF-------7F-7L-7|F--JL|L- +FL|JFJL7LJ-F-J|L-JL7F7F7F7|F-J|L-J|||FJF|FJLJ||L7||F7|F7L-7FJLJ||LJL7F7F-JL-JL7L7FF--J|LJL7FJ||||||FL7L7||L7|||F7L-7L------7|L7L-7|LJ7-J7|.| +LFL7L-7L---JF7|F7F-J|||||LJL-7|F--J||L-7||F--J|FJ|LJLJ|L--JL--7|L7F-J|||F--7F7|FJFJF7FJLF7||FJ|||||F-JFJLJ-|||LJ|F-JF7F----JL7L7-LJJ.F-J|JF- +FJ|L|LL7F7F7||||LJF7|||||F---J|L--7|L7FJ|||F-7|L7L-7F-JF7F7F7FJ|FJL7FJ|LJF7LJ|LJ7|FJ|L-7||||L7|LJ|||F7L-7F-J||F-J|F7||L-----7L-J-JJ|-7|J|J|J +J7|LFJFJ|LJLJ||L7FJLJ||LJL-7F7L--7|L7|L7||||-|L7L7FJL-7|||||LJFJ|-FJL7L7FJ|F7L--7LJFJF7LJ||L7||F-J|LJL7FJL-7|LJF-J|||L7F7F-7L---7J.L7||7|-77 +FJJF77L7|F---J|FJL7F7||F---J||F7FJ|FJ|FJLJLJFJFJFJL7FFJ||||L-7L7L7|F7|FJL7|||F--JF7|FJL7FJ|FJLJL-7L-7FJL-7FJL-7L-7|||FJ||L7L----J77-J7|L|J.7 +F-FJL|-||L7F-7|L--J|LJ||F7F7|LJLJ-||JLJF7FF7|FJ||F7L7L7|||L7FJFJFJ||||L7FJLJ|L-7FJLJL-7|L7|L7F---JF-J|F7FJ|F7FJ|FJ||||FJL7L--7F77J|FFFJ7|7.| +L7JL|L-LJ7||FJ|F---JF7||||||L--7F7|L--7|L-JLJL-7LJ|FJFJ|LJL|L7L7L7||||FJL--7|F-JL-7F7FJL-J|FJL-7F7L-7LJLJFJ||L7FJFJ||LJ|-L7F7LJL7-F|--LJJLF- +-|||.LLL7F||L-JL--7FJ||LJLJL7F7LJ||F7FJL7F-7F-7L-7LJFJFJJF-JFJ|L-JLJ|||F-7FJ|L7FF-J||L---7||LF-J||F7L7F7-|FJL-JL7L7|L--7F-J|L7F-J-|LJ.LJ7.|| +LL7L-J|-7-LJ|-F---J|FJL--7F-J||F7||||L7FJ|.||FJF-JF-JFJF-JF7L----7F-J||L7|L7L7L7L7FJL7F7FJLJFJF7|||L7LJL7|L--7F-JFJL-7FJL-7|FJ|JJ.L-7|J.7-F| +.|LFL7JF-JL|7FL----JL7F--JL7FJLJ||LJ|FJL7|FJ||FJF-JF7L7L-7||F7F7FJL-7|L-J|FJFJFJFJ|F-J|||F7J|FJ|||L7L7F-JL7F7|L-7|F7L||J7FLJ|FJ--|7LFJ.J|FJJ +FF77-J7FJFL7-L.F-----J|F7F-JL7F7|L7FJ|7FJ|L7||L7L7FJL7|F-J|||||||F--J|-F7LJFJFJJ|FJ|F7||LJL7LJFJ|L7|FJL-7FJ||L7FJLJL7||FL|.LLJJ-J|F7L|FJ7JL7 +|JFJ-F7JFFF7.LLL--7F-7|||L7F7LJ||FJL7L7L7|FJ|L7|FJ|F-J||F7|||LJ||L7F7L7|L-7L7L-7||FJ||||F-7L-7|FJLLJ|F--JL7||FJ|F7F7|||JJL7|L-|-77L77|7-F7.| +7-L7.FFJL-|L-FLLJ|||-LJ|L-J|L7FJLJFLL7|LLJL7|FJ|L7||F7||||||L-7||FJ|L7LJF7L7|F7||||FJ||LJ7|F-JLJ-LF-JL777||||L7||||LJLJJ7-LLJF7LJL|J7LF-|7.7 +|.JJF|J.L-JJF-7..FLJ77FJF7FJL|L--777.|L7JL-LJL7L7LJLJ||LJ|||F-J||L7||L7FJ|FJ||||LJ||FJL7-FJL-7.L--L7F-JJ-FJ|L7|||LJJL|.LF7.F|J|7J.J7|JL-F-JJ +|7|F7J-F--7-JL|--|JJF-JFJ||F-JF--J||-|FJ.J7J.FL-JF-7FJL-7|||L-7||FLJF-JL7|||||||F7||L7FJFJF-7L7-7LL||LF|||FJ-LJ|L7JFF7J.LJ-|7-F-.7J7..F7LF77 +LJ|.LJF-7.J7.|||F|-FL-7L7||L-7L-7JFLFLJJ7F|7F|FF7L7LJF7FJLJ|F7|LJF--JF7FJLJFJ||LJ|||-||FJFJ-|FJ.|77LJ7-F-LJL-.LL-JFJ.|JL.|7LJ.JL-LJ|F.F7JL7J +L7|7.FL.F7LF-LJJJ|..L-L-J|L7FJF-JF77.L|JFJ.FF--J|FJF7||L--7LJ|L7LL-7FJ|L--7L7||F-JLJJLJL7||L||7.LF-JFLLF7.LLJ-7L7LJ-L7-7F-77|FJ.LJ7|.7||F-F. +F7J|-LLJF-7L-||7F7-7F-JFLL-JL7L--J|7|-|LFLJ-L--7LJFJ||L--7L-7|FJF--J|FJF7FJJ|||L77-LFL-LLJJ-LJJ77.FL|.F77F||LL7LJ7J|F|JL--J-F7--7FJ.L|F-7FJ7 +FL7|L|.F7JF-.LFL|LJFL|-FJJ|LLL7F-7L-7|LF77||LL-|F7|FJL7F7|F-J||F|F-7||FJ||JL||L7L7J7|L.L|7.L||LFFJ7-777||LJF7|LJF--7---F|7L7LJ7|LJ-F.LL7J7L| +L.F|-L--F-|JFF7F|--7.L--..J.LFJL7L-7|7FJJL|-7J.LJ||L7FJ|LJ|F-JL7LJFJ|||FJ|JFLJJ|FJ-J7FF---|F77.FJFL.LF-LJ-LFJL-7-7FF7J7|L-.LJLF--|.-.|JL7F7L +.-J|||FFJ-JFFJ.LJLL-JFL|LFJ7J|F7L7LLJFJJJ-|.7.-7FJ|FJ|-L7FJL7F7L-7|FJ|||FJ.7||LLJJJJ|L7LLJL-JJ.JFJ7J.L|7J.FL|.7J.F7LJ.JL777.|F.LFLJJF-7F|LLJ +7F-L|-7L|JLF|7JF|.F|.L7FJJ.FFLJ|FJFJ.LJ.7|F-J-JFL7|L7L7L||F-J|L7FJ||-||LJJ..77|-J-.-FLJ7F-7F|7||7-L.FJLJF7J.J.LJ|L|7J-|F.F-FLJ||.|J.7.F-L.|| +||7JL-JJL7.F.-.FLF-|-7L7J||-|J-LJ-L-F.|FJ-|-|LLJ.LJJL-J-LJ|F-JFJ|F|||LJ-LJ--JLF-FF7L|J|7|F|LFJL7|F|-|-F-JJ..|.|..FL-.L-.FF--7L|-F7.L|.-J7LL7 +7.77.FL-JJFFJ7.77JLL.F7L7FF7-7.LJ.FF77F-J||.||.F|J7F||JFJLLJ-LL7L7LJ-L.FJ77.|.JLLL-JJF--|F|-L-FF7LJ.|||LLF-77-L7--7LFF-7.|L7|-----7.J-FF7|-| +.LLLF|F77F-JLF7-J-|LF.F-F|J|L7-JJ-J-J-7-7-7|JJ-|7-J-LF7L|-J|7|FL-JLJJ|7FJF7LJ.L-7.L7-L|FJJJ-|7|L|-J-J-77LL.F-7-|7LF.7JL-F7|-|LJ..F|7-F7LF7FF +FJ|L7JLJ-L...L|J..J7L7|FJL7--7|..||||FL--7L7.L-||.JJFJJ|F-LJ7|JJ||LF7L7JJ|L|.|.LFJLL7.-|JJ|FF-|||FL-JFJ|F7-|-J--|7LFJ77F|JL7L7LF-|FJ7J|.|FJ- +J.FJ|LLJLL-|-.LL-L-|LJ-LL-L-JLL-.-JJL7-7J|LJJ7.-|JJ--L-J.FLJ-|L7--.-J-L--JLLFJL-FJ.|J.LJJLLLJ-J-L7-LL7JL-|JLJ-LLLJ-LJ|JFF7J..-7J-LJ..7.FFJJJ
\ No newline at end of file diff --git a/aoc2023/src/day11/input.txt b/aoc2023/src/day11/input.txt new file mode 100644 index 0000000..c86cc92 --- /dev/null +++ b/aoc2023/src/day11/input.txt @@ -0,0 +1,140 @@ +..............#..........................#.....................#.....#...................#..................................#............... +.............................#.........................................................................................#..........#......... +#......................#.................................................#.....................#...........#................................ +......#..............................#........................................#............................................................. +................................#...........#.........#.............................................................#.....#..........#...... +..................#...................................................#...................#................................................. +............................#............................................................................................................... +........#.....#...............................................................................#...............#............................. +#...................................#.....#.........................................#.....................................................#. +..........................................................................#........................#..............#........#........#....... +.....#.....#.............#.......................#.......................................................................................... +..............................#.............................#....................#......#................................................... +............................................................................................................................................ +.......................................#....................................#........................................#...................... +.......#................................................#..............#............................#....................................... +................#.................................................#.........................................#............................... +.....................#.........................#.....................................#...................................................... +...............................................................................................#..................................#......... +.#......................................................................................................................#................... +........#................................................................................................................................... +...............................#...........#.............#...............................#...........#...................................#.. +.............#.....#.............................................#.....#......................................#............................. +............................................................................................................................................ +.......................#...........#.................#..............................#....................................#.................. +...............................................................................#.....................................................#...... +..#......#.............................#............................#..................................#........................#........... +.............................#..........................#......#...........#................................................................ +....................#.........................#..................................................#.......................................... +......#............................................................................................................#........................ +...........................................................................................................#................#............... +#..............#...................#.............................................#........................................................#. +.........................................#.........................................................#........................................ +.....................#............................................#.....................#................................................... +.................................................#......#................................................................................... +.........................................................................................................#..............#.......#........... +...............................#..................................................................................#...................#..... +..........................#.........................#...........#..............#..........#..................#.............................. +..........................................#.............................#................................................................... +............#......#................................................................................#....................................... +................................................................................................................#.....#....................# +...#.........................#................#...............................................................................#............. +......................#..................................#.............................#...................#................................ +.......................................................................#.....#.................#............................................ +.......#..................#.........................#....................................................................................#.. +..........................................................................................#....................#............................ +........................................#........................#.....................................................#.................... +...................#.....................................................#.......#.............................................#............ +..............................#.................#........................................................................................... +..#..................................................#......#................#.............................................#.........#.....# +...........#..................................................................................#.....................#....................... +.....................................................................................................#...........................#.......... +................#......................#........................................................................#........................... +............................................................................................................................................ +.......#..............#............#............................#......#................#.....................................#............. +............................................#........#.........................................#............................................ +..............................#..............................................................................#.......................#...... +............................................................................................................................................ +....................#............................................................#..............................................#........... +......................................#..............................................................#...................................#.. +..........#.....................#.......................................#..............#.................................................... +............................................................................................................................................ +....#.....................#..................#......#.......#.................#...........................................#................. +....................................#.........................................................#....................#.............#.......... +....................................................................................................#....................................... +.................................................................#........................................#................................. +..................#...................................................................................................#..................... +.........................................................................#......................#........................................... +#......................................................#...........................#............................#.........#................. +...........................#............#..........................................................................................#........ +..................................................................#......................#.................................................. +................#................................#...........................#.............................................................. +........#.....................................................................................................................#............. +...................................#........................................................................................................ +.......................#.....#................................................................................#............................. +.#...........#...........................................#.................#....................#........................................... +..........................................................................................#............#................#................... +..........................#..........#...................................................................................................... +.....#...............................................................................#.....................#.....................#.......... +............................................................................................................................................ +..........#............#................................#.....................#..................................#.......................... +...............#...................#.........................#....................................#..................................#...... +............................................................................................................................................ +...........................................................................................................................................# +...#.....................................................................................................#.................................. +......................#.............................#..........................#..............................#............................. +..........................................#...................#..........#..........................#...............#....................... +..............................#.....................................................................................................#....... +.........................................................#................................#................................................. +...............................................#............................................................................................ +..........#...........................#..............#..........................#.........................#...................#............. +#.....................................................................................#..................................................... +.....#............................................................#..........................#.................#............................ +...........................#.......#..............#.................................................................#....................... +.......................................................................................................#.................................... +........#..........#.....................#..................#......................#......................................#...............#. +.............#.........................................................#.................................................................... +................................................................#........................................................................... +.....#.................#.................................................................#......................#.....#..........#.......... +................................#......#.............#.........................................#.....#...................................... +...........................................................................#.........................................................#...... +..........#................#................................................................................................................ +.................................................#..............................#..........................................#................ +.....................................................................................#.................#.........#.......................... +.......................................................................#....................................#............................#.. +...............#......#....................................#................................................................................ +.........#...............................#..........#..........................................................................#............ +...............................................................#.................#.........#.....#......................#................... +............................#.....#......................................................................................................... +......#..........................................#.......#...........................................................................#...... +..............#...................................................#........................................#......#......................... +.............................................................................#.............................................................. +.....................................#................................#................................................#.................... +..........#..................#..............................#.............................#................................................. +....#.....................................................................#......#............................................#............. +......................#.................................#..............................................#.................................... +.............#.............................................................................................................................. +..........................................#......#...............................................#..........#............................... +.........................#......#.......................................................#...............................................#... +...........................................................#.................................#...................#.......................... +...#...............#..................#..............#....................#...........................................#..................... +.....................................................................#...........#..........................................#......#........ +..............................#...............#.................................................#......#.................................... +........#.....#............................................................................................................................. +#........................................................#.............................#.......................................#.......#.... +....................#..................................................#.................................................................... +..........................................#......................#.......................................................................... +.........................#...........................#.............................................#............#.........#................. +.....................................................................................................................#..............#....... +..........#...................................#............................................................#..................#............. +.....#..........#...................#........................................#.............................................................. +.....................................................................#.........................#.......#.................................... +......................#......#.............................................................................................................. +.#......#................................................................................................................................... +.................................#....................................................#...........#......................#...............#.. +.................#..................................#.........#.........#...........................................................#....... +..............................................#..................................#.......................................................... +...........................#..........................................................................#.........#........................... +..........................................#................................................................................................. +.....................................#...........#..................#.........................................................#............. +..................#....................................#.............................#...........#........#.............#...................
\ No newline at end of file diff --git a/aoc2023/src/day13/input.txt b/aoc2023/src/day13/input.txt new file mode 100644 index 0000000..3113249 --- /dev/null +++ b/aoc2023/src/day13/input.txt @@ -0,0 +1,1379 @@ +##..#..#......# +.........#..#.. +.####.#.######. +#....#.###..### +..##..#.#.##.#. +######...#..#.. +#.##.#.#.#..#.# +#....#..######. +.#..#...#.##.#. +#....#....##... +.#..#.#..####.. +......#.######. +##..##.#.####.# + +.#...##.. +..##.#.## +.#.###... +###..#.## +##.#.#### +..#.#..## +.###...## +.#...#.## +#####.#.. +...#..### +###.##.## +####...## +####..### +###.##.## +...#..### + +#####...####.#. +##..###..#..#.# +...#.###.....#. +...#.###.....#. +##..###..#..#.# +#####...####.#. +##....####..... +#..##.....#..#. +#..##.....#..#. +##....####..... +#####...######. +##..###..#..#.# +...#.###.....#. + +#..##...# +#..#..### +#..#..### +#..##...# +.##..#.#. +.....###. +#..#.##.# +...#..### +.##.#..## +.##.#.#.# +#####.#.. + +######.#.#.#... +.#..#.#.##...#. +...#....#.#.#.. +#.##.#.#.....#. +.......##.#.### +#######.##.#..# +......##...##.. +#.##.#....#.#.. +#.##.#....#.#.. + +#...#..##.. +.##..###### +....###..## +.#..#..##.. +.####.####. +###.##....# +.#..##...## +###.#..##.. +#.#.#...... +.####...... +....#.####. +..##..#..#. +..#.#.####. +..#.#.####. +..##..#..#. + +#...#.#.##.#.#... +###.#..#..#..#.## +#...##.####.##... +#.....#.##.#..... +...#####..#####.. +##..#.######.#..# +###.##.#..#.##.## +...#..#.##.#..#.. +....#........#... +#..##.#.##.#.##.. +#................ + +...##.###.# +...##.###.# +##..#....#. +##.....#.## +#.##..#.#.# +..##...#.#. +...#####..# + +.##.##.#.##.. +#..#.#.#..... +####.###..#.# +####.####.### +#..#.#####.## +#..#.#....### +#..#.#....### +#..#.#####.## +####.####.### +####..##..#.# +#..#.#.#..... +.##.##.#.##.. +.....##.#.#.. +####..#.#.##. +#####.#...### +#####.#...#.. +#..#...####.# + +#..#.#...#...##.. +...#...#..#..##.. +#..####.#.#.####. +..#####..#.##..## +..#...####.##...# +.#.#########....# +.#.#########....# + +#..#...#.#.#...#. +#.####...###.#.#. +#.....##...##.#.# +##.##....#....#.. +#.....##....#.... +..##.##.#...#..#. +..##.##.#...#..#. +#.....##....#.... +##.##....#....#.. +#.....##...##.#.# +#.####...###.#.#. +#..#...#.###...#. +......#.#..##.... +......#.#..##.... +#..#...#.###...#. +#.####...###.#.#. +#.....##...##.#.# + +....#.. +#.##... +#.###.. +#...##. +.##..## +.##..## +#...##. +#.###.. +#.##... + +##.##.#.. +..#..#..# +...#####. +..#....## +##.##.##. +##.##.##. +..#...### +...#####. +..#..#..# + +...####.....##### +.#......#.####..# +.#########.##.... +####..#####.##### +..######..#...##. +#.##..##.#....##. +....##....##..... +#........#.#..... +....##.....#..... +...#..#.......##. +#.######.##...... +.##....##.###.##. +...####...#..#..# + +.#...###..###...# +##..##.#....##..# +.#.#.########.#.# +.######.##.###### +.##.#...##...#.## +.#...########...# +.#.#...#..#...#.# +#..#....##....#.. +#..####.##.####.. +#.##..##..##..##. +..#...#.##.#...#. +#..#..........#.. +#..#..........#.. + +....#..###....# +#..#..#..#....# +#..##.....####. +.##..#..#..##.. +####.###..####. +###.#.##.#.##.# +.##..#..##....# +#####.###..##.. +####..#...#..#. +#..#....#..##.. +#..####..##..## +......#.##.##.# +.##...######### +.........#.##.# +.##..######..## +#..####..#....# +.##.####..#..#. + +#..#.##...#.##. +###.##.##.#...# +##.########.#.# +.#.#.##.#...### +.#.#....####... +.#.#....####... +.#.#.##.#...### +##.########.#.# +###.#..##.#...# +#..#.##...#.##. +#..#.##...#.##. + +.##..####..##.. +####..##..##### +.#.#.####.#.#.. +..##..##..##... +#....#####...## +####.#..#.##### +##..........### +#.#.#....#.#.## +#...##..##...## +.##.##..##.##.. +..##..##..##... +....#.##.#..... +###.######.#### + +########..#.##.#. +######..######.## +#.##.#.#.###.###. +#....#.#.####.### +#....##..#..###.. +......##.##..###. +..##..#..#.###..# +..##..#.#.##...#. +##..######..##..# +##..######...#..# +..##..#.#.##...#. +..##..#..#.###..# +......##.##..###. +#....##..#..###.. +#....#.#.####.### +#.##.#.#.###.###. +######..######.## + +#.####..##..# +#.#.#........ +.#.###...#..# +#...#..##.... +...#.#.###..# +#..####.#.... +#####.#..#..# +.##..####.... +.....#...#..# +##.#...#.#### +.....###..... +###..##.#.... +.#..##.#.#### +#...#..#..##. +##...#....... +.#...#....... +#...#..#..##. + +...#..##. +..#.#.#.# +######.## +#####.### +..####... +######..# +######..# +..####... +#####.### +######.## +..#.#.#.# +...#..##. +#..###.## +####..##. +...#.#..# +...###.#. +..##.##.# + +.####.....#.# +........#.### +##..##...##.# +..##...####.. +..##...####.. +##..##...##.# +........#.### +.####.....#.# +######.##.#.. +.#..#.####.#. +##..####.##.# +#.##.##..#... +##..########. +##..##.##.#.# +.####....#.#. +.....#.#.#.#. +.#..#....#.## + +#..########..## +#............## +#.##########.## +.#.#.####.#.#.. +##.#......#.### +.#.###..#.#.#.. +###.######.#### +#.##.####.##.## +##.##....##.### +#.#.#.##.#.#.## +#.##......##.## + +.#......#..####.# +#.#.#####.#.###.. +##..##.#..#...##. +.##.#..###...#..# +.##.#..###...#..# +##..##.#..#...##. +#.#.#####.#.###.. +.#......#..####.# +#..##.#.##..#.#.. +#..##.#.##..#.#.. +.#.....##..####.# +#.#.#####.#.###.. +##..##.#..#...##. + +.#....#......#. +..#.##.######.# +...#.#..#..#..# +##..#.###..#.#. +##............. +##..#.########. +..#.##..####..# +..#.##..####..# +##..#.########. +##............. +##..#.###..#.#. + +####.## +###..## +#.##### +##..#.. +#...... +####.## +#.#.... +..###.. +..##### +#.#.... +####.## +#...... +##..#.. +#.##### +###..## +####.## +#####.. + +###.##..... +##.##..#..# +##.##.....# +###.##..... +#####...#.. +..######### +########.## +##.###...## +..#..#..#.# +..##...##.. +...####.#.# + +#.##...#....# +##....##....# +##..##..#..#. +##..##..#..#. +##.....#....# +#.##...#....# +.##.....####. +#####..#.##.# +#.####.#.##.# +.#.##.#.#..#. +#...#.#..##.. +###..##.####. +.#####....... + +#..##.# +#.###.. +#.###.. +#..##.# +.##.##. +...#... +#..###. +#..##.. +#..#..# +#..#..# +#..##.. +#..###. +.#.#... + +.###.## +.##.### +##..... +##..#.. +.##.### +.###.## +#...### + +..##..#.##. +.#..#.....# +.#..#.##.#. +######.#### +..##....... +..##....... +######.#### +.#..#.##.#. +.#..#.....# +..##..#.##. +#........#. +########..# +##..##..##. + +..######.....#... +...........##.##. +.#.####.#....#### +.#..##..#.####..# +####..#####...... +###########.#.##. +.#..##..#..###..# +###.##.###...#### +#..####..##.##### + +###.#####..##.. +...........##.. +.#.##...#..##.. +.#...##.##....# +.....#.###.##.# +..#####..#....# +##..###..##..## +####.##...#..#. +.#.##..##.#..#. +.####...##.##.# +...#.##..###### +..#..##..###### +..#..###..####. +..#..###..####. +..#..##..###### +.#.#.##..###### +.####...##.##.# + +..##.##..#..... +..##.##..#..... +.##...##.##...# +.....##..##.##. +#####.####..##. +.#......#.##..# +....##..###.##. + +#..#### +##.##.. +..#.#.. +..#.#.# +..#...# +.....#. +.#.#... +.#.#... +.....#. +..#...# +..#.#.# + +#.###.# +#####.# +.##..#. +.##..#. +#####.# +#.###.# +...#### +.#.##.# +......# + +#.##..##.####.# +..######..##..# +###....###..### +...####...##... +#........####.. +###.######..### +##.####.##..##. +##..##..######. +.#......#.##.#. +#.#....#.####.# +##......######. +..#....#..##..# +###.##.######## +.#......#.##.#. +.#......#....#. + +.##........#. +...#.##.##..# +.#..###..#### +...#.....#### +.#....##..### +#..#...#.#... +#.#...#.##.#. +#.#...#.##.#. +#..#...#.#... +##....##..### +...#.....#### +.#..###..#### +...#.##.##..# +.##........#. +.##........#. +...#.##.##..# +.#..###..#### + +....##....### +.########.... +##.#..#..#### +#...##...##.. +#........#.## +###.##.####.. +..##..##..### +..#....#..... +#..####..#### +##.####.##.## +##..##..##.## + +########.#.#.##.# +###..####.##....# +##....##...##..## +#......#.######## +#.####.##.##.##.# +#......##.#.#.... +#......##....##.. +.######.##....... +##....####.#.##.# +#..##..#.###....# +...##...#....##.. +.######....###### +##.##.##.#...##.. +#..##..#.#.##..## +.#....#.##...##.. + +###.#...####...#. +#..#.##..##..##.# +.##...##....##... +#####......#...## +#####......#...## +.##...##....##... +#..#.##..##..##.# + +####..#.##.#. +.#..##.####.# +#..#.#.####.# +#..#.#.####.# +.#..##.####.# +####..#.##.#. +.###.#.####.# +##....#...... +####.#..##..# +##..#...##... +...##.#....#. +##.########## +###.####..### + +#..######..#... +.###....###..## +.#.####.#.#..## +.###.##.###..## +..###..###..### +.#...##...#..## +###.#..#.###... +#.#.#..#.#.##.. +#..######..##.. +...#.##.#...### +..#......#..... + +......##.#. +##.#..#.... +##.#..#.... +......##.#. +#.#.#.##.#. +..#.#.###.# +#####..##.. +##.###.#..# +..#.##...#. + +##......###.### +##......###.### +#.##..##.##..#. +.##....##.###.# +..........#.#.# +..######...#..# +##.####.##...#. +..#....#..##..# +.###..###..##.# +.#......#.##.#. +.#......#.##..# +.#.####.#..#..# +###.##.######.. +##..##..#.#.... +.##.##.##...##. + +.#....#.#..#. +...##....##.. +##.##.##....# +#.#..#.#.##.# +.######..##.. +###..####..## +##.##.###..## +..#..#..#..#. +.#.####.#..#. +.#....#...... +#..##..##..## +.#....#..##.. +###..###....# + +##.##.##.###....# +.######.####....# +#......##.##.#..# +..#..#..##.##..## +.#....#..#.#.##.# +#..##..#..####### +..#..#...##.#..#. +...##.....####### +#.####.#.#.##..## +##....#######..## +.######..##.#..#. +.##..##..#..#..#. +###..####...#..#. +.#.##.#..#.#....# +.######.#.###..## +.........####..## +##.##.##......... + +....##.##.#.#..## +####.##.###.####. +#..##..#.####..## +.##....##.#.##.## +#..#...#.#.##.... +.##......##..#.## +#..#.##...#.#.#.. + +....##.## +....##.## +....#.... +..###.#.. +##.#.#### +....#.#.. +..#...... +###....#. +#...#.#.# + +.....##...###.#.# +.##.#.##.....#... +.##.#.##.....#... +.....##...###.#.# +#.######...###... +..#.#....#.##.#.# +##########.#..#.# +..#..#....###..#. +...##.#.##..###.. +#####.#.......##. +..#..#.#.#...##.# +..#..#.#.#...##.# +#####.#...#...##. +...##.#.##..###.. +..#..#....###..#. + +.#.##.#.....#.... +#.#..#.#.#.##.#.# +###..####......## +#.####.#..#..#..# +..#..#..###..###. +..####.....##.... +##....####....### + +##..#.##......# +..#.##.#.##.### +#..#......#.### +.##.##.#.....#. +#.#..##.##.##.# +#.#..##.##.##.# +.##.##.#.....#. +#..#......#.### +#.#.##.#.##.### +##..#.##......# +#....###.##.#.. +#....###.##.#.. +##..#.##......# +#.#.##.#.##.### +#..#......#.### + +..##.#...#.## +.#.##.#..#... +#..##..##..## +#......###... +...........## +.#.##.#.###.. +#.#..#.###... +.#.##.#.##.## +##....##.#### +.#.##.#....## +##.##.##..#.. +#.####.#.#### +#.####.#.#.## +.#....#.##.## +..#..#..##.## +#..##..##.... +#......#.#.## + +..#..###..... +.##.#.#...#.# +..######.#.#. +...#####.#.#. +.##.#.#...#.# +..#..###..... +#..#######... +.#..#.#...... +..####.#..#.. +...#..##.#### +.####.......# +#...#.##..#.# +...####.##.## +...####.##.## +#...#.##..#.# + +...###. +.#..### +.#..### +...###. +..#.#.. +.###..# +..#.#.# +.#.#.#. +.###..# +.###..# +.#.#.#. +#.#.#.# +.###..# +..#.#.. +...###. + +..######..... +##########..# +...####...... +#.######.#..# +#..#..#..#..# +#.##.###.#..# +##..##..##..# +##.####.##..# +##.####.##### +#.#.##.#.#..# +.#..##..#.##. +#...##...#### +..######..... +##.####.##..# +..........##. + +##.##.###.#...... +#..##..#.#..####. +#......###.#....# +#########.##....# +...##.....####### +#..##..#..#...... +#......####.#..#. +#..##..#..#...... +.##..##.#..#.##.# +..#..#...#.##..## +...##....#####.## +##########.#....# +##.##.#####..##.. +#.####.######..## +###..#######.##.# +#......#..#.#..#. +..#..#......####. + +.#..##.##..###. +.#.###.##..###. +#...#...#####.. +...##.####...## +....#.#####.#.# +##.#..#.###.#.. +.#.##.####..##. +##.#...##.##.#. +....######.#### +....#.#.##..### +..##...#......# +#####...####.## +#####...####.## +..##...#......# +....#.#.##..### +....######.#### +##.#...##.##.#. + +#..##.### +.##.....# +.##.##..# +###..#### +#####.#.# +......#.# +#..##.#.. +#..##.#.. +......#.# +#####.#.# +###..#### +.##.##..# +.##.....# +#..##.### +#..###### + +..#.#.#..#.#. +..#.#.#..#.#. +#...#.#..#.#. +.###.#..#..#. +.#.#..#.#.#.. +#.....#...### +##.##.#####.. +##.##.#####.. +#.....#...### +.#.##.#.#.#.. +.###.#..#..#. + +####...#.#. +####...#.#. +#..#..#..## +.....#..### +#..#.#..### +.........#. +.....###.## +######.#... +#..##.###.# +.........#. +..#..#.#.#. +#######.##. +####.#..#.# + +#..###. +#..###. +.....## +##.#... +#.#.#.. +.###.#. +#.##.## +##..##. +..###.# +...###. +.#.###. + +############...## +##..####..##.#... +##..####..##.##.. +.####..####..#.## +..##....##..##.#. +.####..####.#..#. +..............##. +#..........#.##.# +##############.#. +.#..#..#..#.#.#.# +............#.#.# +..##....##..###.. +#....##....#.###. +##############.## +.#..#..#..#.#...# + +.##......#.#### +....###..###.## +.....######.... +....#..##.##... +######....#.### +#..###.##....#. +########.#.###. +#..#####.#..### +.##..#...####.. +.##....##..#### +#...##.##.###.. +.##...#..###### +#..#.#.#.#.#... +.##...#..#....# +.##...#..#....# + +##.#.##.#.### +.#.##..##.#.# +#.#..##..#.#. +###.#..#####. +#.#.#..#.#.#. +##.######.### +#.##....##.#. +#.##....##.#. +##.######.### + +###..#####.## +###..#####.## +.....###..### +...##..###... +##.#.##.##.## +..##.....#.## +#.###........ +#...##...##.# +#.####.##.#.. +#.#..###.#### +.#.#.#####... +#.##.##.##... +####...####.. +#####....#### +.#.##.##.#... +.##.##..##... +.#.#...##.#.. + +.###..### +.#.#....# +.#..##..# +.#......# +...#..#.. +##..##..# +####..### +##.#..#.# +#.##..##. +#.##..##. +##.#..#.# +####..### +##..##..# + +###...#.... +...##.#.#.# +..######### +..##....#.# +..#######.# +..#....##.. +..#....###. +..#######.# +..##....#.# + +####......#...### +#.#..#..##..#..#. +##.##..####..##.# +..###...##...###. +.######....###### +..#####....#####. +#.###...##...###. +.#......##......# +...#..######..#.. +...#..######..#.. +.#......##......# + +...#..#.### +##.####.... +...##..#### +###...#.... +..#..#...## +##..#.##... +...##...##. +.......#### +####..###.# +.....#.#..# +##....#.... +#######.### +##.####.### + +#.#..#... +..##..#.. +..##..#.. +#.#..#... +.####.... +##..#.### +...##.... +...#...## +..#..#### +.#.##...# +....#.... + +..#####.....##. +#.##..#....##.. +........####..# +......#.###..## +....###....##.# +....###....##.# +......#.###..## +........####..# +#.##..#....##.. +..#####.....##. +.##.#..#.#.#.## +.##.#....#.#.## +..#####.....##. + +.#.#.#.## +.#.###.## +.##...#.. +##.##.##. +##.#..#.. +..#..#.#. +##.#.#.## +##.#.#.## +..#..#.#. + +..#.##### +##...#..# +##.###..# +######..# +##...#..# +..#.##### +.#.#..... +#.....##. +...#.#### +####.#### +##....... +#..#.#..# +...##.##. +#.#.##..# +###...... +....##### +..##..##. + +...##...# +...###### +...##.... +###..#.## +##.#.#.## +.#...#.#. +..#.#.### +.....##.. +###.#.... +##.#.#.#. +##.#.#.#. + +....#.....#.. +#..##.#....#. +##........... +..##.##...##. +.###..#..###. +##.########.# +##..###....## +###.##..#.##. +###.##..#.##. +##..###....## +##.########.# +.###.....###. +..##.##...##. +##........... +#..##.#....#. +....#.....#.. +....#.....#.. + +..##.#.#. +#####.#.. +#...####. +##.###... +##....#.# +##.#.#... +...#####. +##..#...# +.....###. +###..##.# +###.#.### +###.#.### +###..##.# + +..#.### +.....#. +..#...# +..#..## +####.## +###.#.# +###.#.. +####.## +..#..## +..#...# +.....#. + +.###.#.#.##.#.. +#.####..##..#.# +#.####..##..#.# +.###.#.#.#..#.. +....#...#..##.# +..####.##.#...# +##..#.#..#..##. +###..#...#..... +###..#...#..... + +#...#.....##. +#.###.#..#### +..###.######. +.#..####..##. +.#..####..##. +..###.######. +#.###.#..#### +#.........##. +.##.##.###... +#.##..#####.. +##..######..# +###.#...#.... +.#.#.######## +###......###. +....######.#. +.###.##.##.#. +.###.##.##.#. + +#..#..#....#..# +..###.#.##.#.## +##.###......### +##...########.. +.....#......... +#...###....###. +#...###....###. + +.#..#....#..#.. +#....#..#####.. +.####.###..##.. +#....#####.##.. +..##.......#.## +.......#.##..## +##..###..###... +.###....#.#.#.. +.#..#...##..... +#....#..##.#### +##..###.####.## +..##..#...#.#.. +.........#..### + +.####.. +#...#.# +..##..# +#..###. +#..###. +#.##..# +#...#.# +.####.. +..##.## +..##... +#....#. +#.#..#. +#.#..#. + +#####...#..## +#.###...#..## +.#####.#.#... +.##.##..##### +....##.###... +..#.#.###.### +.##....##..## +##..#.###.### +##...###.#... +.#.##.#.#..## +.#.#...#.#### +#....#...#... +...##..##..## + +.....#.#..... +....##....... +#..#.#.##.... +#####.##..... +#....####.##. +#..####...##. +#..###.#..##. +....##..##### +#####.###.... +....#.###.... +####.#...#..# +#######...... +....#.##.#### +.##....#.#..# +....###.##..# + +##.####......##.# +....#.###.#...##. +....#.###.#...##. +##.####......##.# +.##..#.##...#.### +.#.#.#...#...#... +#.##.#..##.#.#.#. +#.##.#.###.#.#.#. +.#.#.#...#...#... + +#####..####..#### +...###..##..###.. +..##..........##. +##.#..##..##..#.# +##....#.##.#....# +##.#.#..###.#.#.# +..#.###....###.#. +..##..........##. +..###...##...###. +....#.##..##.#... +.....#......#.... + +.####..#..#..## +..##...#..#.... +......###...### +......##.##..#. +#....#.#.#.#... +######.###...## +.####.#.#..##.# +.......#.#..#.. +.......#.#..#.. +.####.#.#..##.# +######.###...## +#....#.#.#.#... +......##.##.##. + +#.#..##.#.#.. +.#..##..#..## +.#..##..#..## +#.#..##.#.#.. +..#..#...#.#. +.#...#.#.###. +#.#####.#.##. +#...#...#.#.. +#...#...#.#.. +#.#####.#.##. +.#...#.#.###. +..#..#...#.#. +#.#..##.#.##. + +#..##......##..#. +#..##......##..#. +.#.#.#.##.#.#.#.# +#..#.######.#..## +.#..##.##.##..#.# +#...#..##..#...#. +#.############.#. +#..##.#..#.##..## +#..###....###..## +##.#...##..##.### +.##.##....##.##.. + +..###.#.##.#.###. +.##.##..##..##.## +.##.##..##..##.## +..###.#.##.#.###. +.##..#.####.#..## +###.##..##..##.## +###.#.#.##.#.#.## +.#..............# +#...###.##.###.#. +###...#....#...## +.##..#..##..#..## +..#..##....##..#. +..#.#.######.#.#. +###..##.##.##..## +..#..#.#..#.#..#. + +###.##.## +##..##..# +#.######. +#.######. +##..##..# +###.##.## +.###..### +#.#....#. +..#.##.## + +....#.##..# +......#.##. +#.####.#..# +#.####.#..# +......#.##. +....#.##..# +.#.##.#..#. +.##..##.... +#....##.##. + +.##...##.#. +.#.##...##. +#..#####.## +#..#####.## +.#.##...##. +.##...##.#. +.#..###...# +###.##.##.# +#...##.#.## +#...##.#.## +.##.##.##.# +.#..###...# +.##...##.#. + +.##...##. +.##...##. +##..###.# +##.#.#..# +.....#... +#..#.##.# +........# +..##.###. +..##.###. +........# +#..#.##.# +.#...#... +##.#.#..# +##..###.# +.##...##. + +####..#..##.##.## +....#.##......... +....#...#.######. +.....##..##....## +.....####........ +####..#...##..##. +....###.##.#..#.# +#####.....##..##. +.##.....#...##... +.##.##.#..######. +#..#####..#.##.#. +#..######.##..##. +..#.#.#.#.######. +.##...#..##.##.## +####..####.####.# + +#...#.# +#..#.## +##..### +##..##. +#..#.## +#...#.# +.#....# +#..##.# +...#.#. +###...# +##..### +.#####. +.#####. +##..### +###...# + +##.##..##.##.#..# +.##..##..#..##..# +#############...# +....#..#........# +#..##..##..#.##.. +#..#....#..###### +#....##....###.## +###.####.#####..# +.#..####..#.#.### +##..#..#..###..#. +..##.##.##...##.# +.##..##..##.....# +...............#. +...............#. +.##..##..##.....# +..##.##.##...##.# +##..#..#..###..#. + +#.####### +##.#...## +#..##..## +#..#.##.. +##.##..## +###.##### +###.##### +##.##..## +#..#.##.. +#..##..## +##.#...## +#.####### +..#.#.#.. +#...#.##. +.#.#..#.. +.#.##..## +#.#..#### + +.......#.#...#### +....#..#....#.##. +..##...#...###### +##.#....#.##.#### +##..##...#####..# +.##...#####.##### +.####..##.#...##. +#..#..#####..#..# +#..#..#####..#..# +.####..##.#...##. +.##...#####.##### +##..###..#####..# +##.#....#.##.#### +..##...#...###### +....#..#....#.##.
\ No newline at end of file diff --git a/aoc2023/src/day15/input.txt b/aoc2023/src/day15/input.txt new file mode 100644 index 0000000..86b345f --- /dev/null +++ b/aoc2023/src/day15/input.txt @@ -0,0 +1 @@ +fnln-,bkxf-,spfc=9,ds-,trzx-,dtck-,xs-,bg=4,fgmpc=5,xmxf=1,cl=9,md-,ct=2,ftz=5,xhd-,vkqx-,hxd=6,mlcn=6,ctdbt=6,txpsv-,nkx=3,jfz-,fzm=3,rvcd=4,nfgp=3,jjd=7,nzq=6,zv=5,lh-,nfgp-,gcbtgm=7,zj=6,sxlh=3,vsj=8,cjb-,tslfp=5,vc-,kpn=7,qpm=5,jgmnxd-,xp-,kmm-,xb=4,tv-,bmnlf=7,cb-,vbmk=5,dvz-,ssd=6,sb-,mldgtn-,mtx-,kz-,nzq-,dnkf-,sn-,js-,bpq-,vc-,fzm=9,xqv-,gqsr=2,jzxp=5,bc-,lxg=5,sv-,gflrmd=9,ncjb-,fm=9,lln=1,ql=9,tj=2,pbmldc-,fkzq=7,vkh=3,tn=4,fdl-,frgf=1,vf-,fpg=4,xzt-,jf-,pjfk=5,rvcd-,rv=6,zrs-,qnd=1,vqzhc-,xrb=8,lvx-,dfz-,xstdx=6,sf=4,hsb=3,sqjgc-,xtl=7,zthrd=8,mldgtn-,rc-,kpz-,tpnmp=6,bzj=7,gmrrx-,bszd-,mjz-,bzj=8,ztk=9,dtv-,qgm=4,ssd=3,xc=8,hvglb-,xf-,qhvz-,vqc-,ktj=1,ppq-,zxt-,rnsbt-,qpx-,nj-,vhl-,rknz-,zngsp-,vhl-,fjh-,vrzjf=7,gkn=6,tfd=4,bgg=1,fgmpc=9,lpd-,pbmldc=4,jm=2,vlv=4,shn-,vps=8,ljsvc-,rfdrk=3,vkqx=7,gftx=9,nzq-,cq=1,ckb=6,zsx-,qpf-,cggz-,bzj=9,lfg=6,tfd-,xdfz=8,ghbr-,dsdm=8,nj=4,jf-,fnln=7,fzm=7,fkzq=7,xcq=8,fkzq-,dm-,bfz=2,lqf=4,sfp-,kpqvtc=2,fkzq-,vth-,zn-,xhs-,vsj-,psfnx=4,xbx=1,xgk=9,snpgsm-,psg=3,shn=6,qxkrd-,pxvxlh-,xbx-,gt-,ksn-,dzn=7,gp=7,mp=8,jtz=3,ph=2,jxj=8,pg=5,txkh=6,drls=6,zthrd=9,gqsr-,dtv-,mktlhp=9,bszd=5,snpgsm=5,qz=6,sh=6,lqt-,mktlhp-,mgt-,mvmqfm=5,bc-,lpd=6,zn=3,nhsvv=3,vdf-,znjg-,phsl=7,tnb=4,qlf=9,txpsv-,pxvxlh=6,lqfv=7,lffv=5,djmlb=7,pxn-,hdxvhr=8,vbz=1,vqc=1,xrb-,bj=1,bzpv=5,tdl-,xc=2,cnr-,ss=6,mf=2,sv=2,mp-,zpc-,rqg-,xtsd-,hlg=6,xdfz=9,nl-,kfp-,cr-,qxkrd-,vpxv=9,mtx=1,drls=9,jzxp-,xqfrg-,js=3,ql=8,xp-,kpz=8,zj=9,jxj-,gf-,gcbtgm-,cmpc=4,tr=4,px=6,pvv=9,tpnmp-,jhhqj=5,mmn=3,qpf=5,vnk=9,cnn-,xgr-,mmsz=4,lvs-,cv=3,cq-,bfz=8,ct=7,kr=6,gk-,zdtz=1,vqzhc=3,xzt-,vqt=4,dphx-,kmr-,fkzq-,lk=8,dvz=6,ghbr=6,hm=6,zm-,sn-,jgmnxd-,vkz-,ps-,vpxv-,gpg=4,bmnlf=9,pjfk=3,ndmt=7,zk-,zthrd=5,fgmpc=8,rgh=7,bx-,ctp=2,nl=7,rtj=6,grlkl=9,zf=8,lg=4,zngsp-,rsn=5,drls=9,lxmkfx=7,sbt-,bx-,lln-,dm=6,fnv-,qpf-,tq-,qv=9,cfnbp-,pxvxlh-,tr-,nh-,clg-,xjpbxm-,zs-,trzx=8,bgh-,cmbv=1,vq=6,lcr=9,scbjp-,sjb=2,gmrrx=6,mg=5,znjg=4,zn=9,grlkl=7,xmxf-,smtd-,vkh-,spsx=9,qpf-,bgg-,smtd-,ntg=6,qpf-,vtp-,nlcrm=8,cvc-,frgf=8,blfx-,vbz-,tcs-,bqpp-,fjh=5,rtj=5,vr=6,kjrc=1,nzq-,qpf-,vqc-,kmr-,hj=8,fnh-,scbpb-,gxg=9,kf=6,xhs-,zdl=9,sscn=9,dzt-,rl=9,gr=6,tv-,jmthd=9,gn-,bzj=4,pv=9,pcnzf-,jxj-,sxlh-,lxg=3,rpn-,vr=9,rl-,tslfp=5,pgd=2,xmxf-,mjz=9,drls-,hrbj=7,rr-,lxg-,grlkl=3,jsv=1,sr=6,dv-,scbjp=1,pkg-,mgt=9,hsb=3,ccs-,xdfz-,cqq-,nbtq=2,ljsvc-,rpn=8,msbfzl=5,kz=7,cnr=4,hz-,ctf-,tgqp=9,tfd-,sqd=7,rb-,qf-,srp-,fkzq-,pfjml=6,rnsbt-,dmp-,zngsp-,cfnbp-,kpqvtc-,gftx-,lvs-,zpc-,kpz=2,pxvxlh-,spm-,rt-,ftz-,lvs=2,zsx=2,sjb=4,lxmkfx=7,bqpp-,hb=7,xzl-,ckb=7,hsb-,cvc-,ksn=7,mktlhp=5,jhl=6,snpgsm-,mm-,xstdx=2,rm-,rqx-,ld=4,zv=6,fx-,sbx=2,blfx=8,fmkjj-,km-,cmbv=8,vz=9,lg=4,fpg=4,kpfr-,dmp=4,xxj-,jhl=2,km-,vx-,sh=8,xqv=3,kfp=3,zdm=3,tdl-,ddxn-,gzrz=9,xqv=8,kqh=2,rlrlql-,lpd=1,vr=1,ggm-,dkz=3,jx=2,trzx-,sjb-,rh=8,dbsf=4,jhhqj=8,jzxp-,bkxf-,thnmq=7,mktlhp-,jtz=7,sh-,plt-,rfdrk-,hj=4,dk-,zjvd=9,jsv-,vkn-,jc-,zk-,mmsz-,lcr-,dkz-,px-,pcnzf-,jtz-,pzd-,kqh-,ts-,znb-,dzn-,qgm-,drls=9,bmnlf=3,thnmq-,bpq-,zxt=9,lg=6,rknz=8,bzj-,vsh-,lq-,rm-,ql-,cs=1,dzt-,hfrdk=4,kmm=9,lhks=9,jsv=5,zxt=9,kc=4,rm=8,hvglb-,bzpv-,drs=1,tgqp-,trg=4,dp-,zmlr-,pvv-,lfg=2,rqg-,nh=5,mkj=5,cct=1,lxmkfx-,txpx=2,vps=5,dzn=3,dph-,kv=1,vth=6,gftx-,lztd=3,hb=8,qpx=2,fjg-,plp-,vnhfc=3,zv-,xt=1,bgkjq-,pbk=9,hj-,sv-,kpz=5,fnh-,zpc=3,zj=8,pxvxlh-,qgm=6,gct=5,tdl=5,xtl=2,lg=7,trzx=9,hvglb=3,ss=6,vpxv-,gh-,js=1,jf=1,rqx-,pg-,nqcj-,zzx-,mf-,zlcmgc=3,lxg=8,rpgj-,vhl=6,phsl=8,dtck-,rxv=2,qpf=7,nh-,ccs-,mf=3,xrm=4,pljg=1,rnsbt=5,nnn=2,snpgsm=5,qxkrd=5,xgk-,trg-,phsl-,bzj=5,ckb=4,cqbvs=5,xgk=8,ck=7,dbffb-,tj=2,dm-,fjg-,zdm=8,jc=9,rqg=3,qhvz-,cmpc-,dzn=4,xrb=2,kfp=2,vbz-,xhs-,dnkf=3,chpn-,sl-,kftx=5,rsn=5,ps=9,jm-,pbk-,vq-,qpf=4,rfdrk-,rsn=9,nqcj=7,vsh=7,npm=7,qxkrd-,hpl=1,rnsbt-,pxn-,zsx-,lpd=5,fgmpc-,vkqx-,vth-,pm-,mgt=5,cct=3,bb-,hzlzn=2,gkn-,mjz-,kx=8,qcnnzx-,kmr=7,lfl-,jhhqj-,lqfv-,gkn=5,pfjml-,lhks=4,bzj-,tnp-,nj=1,xhs-,rtj=9,rlrlql-,qcm=3,mph-,fx-,jm-,xtl-,xdfz-,msbfzl-,ckb=7,hj-,cqr=5,scbpb=2,tslfp=1,kmm-,cv=4,zpc-,qfb-,rlrlql-,trzx-,sf-,ccs-,fsz=2,dv=8,thncf=4,bmnlf-,qgm=8,plvd-,dm-,pjfk=4,gr=6,qv=7,khx=3,vs=7,dtck=9,xbx-,xstdx=8,km=6,hgp-,kf-,xf=1,vnhfc=6,xgr=1,pbk-,sl=2,jmthd=8,sbt=6,mkj=8,vnk=3,bgkjq=8,bg=2,xbx=6,mmsz-,rnxt=1,shn-,ss=3,kpqvtc-,dfz-,qxj=9,mktlhp=4,jzxp=1,hm-,vx-,bzj=1,vnhfc-,vrc=7,bgkjq=8,gp-,vq-,lh-,tnfx=4,ntg-,dd=5,znb-,vtp=4,vgln-,hz=1,lk=1,mktlhp-,vz=3,vpk-,bbsk=4,qlf=1,hgp=5,xjpbxm-,qcm=8,tz=4,lqf=2,bz=3,jfjbj=9,lfl=6,cqq=8,xzt=4,xb-,rlrlql=9,cqbvs=8,dzt-,blfx=9,rqx=5,xfn=6,px=3,chpn=7,js-,lg-,ctf=1,qcnnzx-,hsb-,xnmq=1,hpl=1,pg-,gr-,fkzq=2,rfdrk=7,tnp-,gbsp-,nq=4,vttk=1,lrpx=5,xrm=3,crb-,nglvx=5,md=2,px=6,pljg-,sjb=3,kpjqgm=9,xrm=6,slzd=6,xc-,sxlh=6,mtx-,xc-,nbtq-,plvd=2,hb-,znfd=7,ghbr=1,gkn=3,gct-,cqq-,znb=5,jsv-,txpsv=6,dk-,dbh=7,lmlx=6,lcr-,bfz=4,xhs-,cjb-,tkpb-,dkms=4,sh-,fkzq=3,kqh=8,dv=9,lrpx-,vnhfc-,bqpp-,pcnzf-,km=1,ssmflk-,pnp-,rsn-,cqbvs=5,fr-,kfp-,npm-,vbz-,jm=9,pgd-,trzx=6,hsb=6,qrn=3,lln=8,zl=6,qpf=8,djmlb=6,zj-,qhvz=1,kz-,bzpv-,bq=8,frgf=7,blfx-,tnp=9,lqf=3,zrs=5,lc=2,scb=6,dzfqlb=3,kmqjt=1,trg=1,fzm-,bgg-,gzrz-,sv-,qz-,zlcmgc=4,qcm=1,xhd=7,zmlr-,fnv-,xdfz=9,fx-,xfn=7,zdm-,fr=7,tfd=1,njvd=4,vnk=2,xbx=8,xp=3,zbgdxg-,lxmkfx-,pbmldc-,znfd-,znb-,xh=5,ccf-,lxmkfx-,tgqp=6,ng=6,kz=9,hlg=2,mmsz=9,vdf=1,vkh=9,cvc-,sfp=7,ckb=6,gxg=9,cggz=2,clg=8,zn=6,ctf=6,zdtz=1,ddxn=6,nhsvv-,plvd-,sbx-,ncjb-,lc-,pvv-,vpxv=3,mhh-,qgm=6,vbmk=8,rb-,gxx=7,pt-,qpx-,gcbtgm-,xf=4,xfn=1,tv-,mmn-,zrs=6,zm=7,pxvxlh=5,xc-,dbsf-,scbpb=3,smtd-,fsz-,znjg=3,rfdrk-,ccs=9,mgt=5,mjjk-,vsh-,sv=8,cgp-,gf=1,pg=5,mph-,ctp=3,vblpd=7,gbsp-,gf=3,nbtq-,vjsg-,jsv-,lqfv-,np=4,xh-,tq-,xs-,vk-,hb-,mmn-,vbz-,kpjqgm=5,dkz-,rzjkqp-,tvm=3,dz-,kftx-,khn-,nj=2,cnn=3,cl-,sf-,vc-,zmlr=3,lxmkfx=3,blfx=9,vbmk=6,tpnmp-,sqjgc=5,rz=2,bszd=6,kkc=9,dnkf-,lmlx=7,ddxn-,bhfh-,gflrmd-,xb-,mmn=2,jfjbj=1,zm-,sqd=4,kl-,dfz=4,ktj=5,lxmkfx=2,qxkrd-,dp=6,hl-,lqfv-,kx-,vbz=5,qf-,sv-,kpqvtc-,vhx-,ps=1,fr-,vbmk-,bnhz-,tj-,rlrlql=2,np=4,vs-,vbmk-,pmz=3,pbk-,zxt-,ck-,xf=2,jtsdd=7,ng=1,gn-,qfb=5,mf=4,xb-,rc=7,jjd-,xv=6,gzrz-,cqq=5,dzt-,scb-,plvd-,vqbp-,mvmqfm=3,pr=1,nj-,pvv=8,xtsd-,gbsp-,hnf-,fdfc=3,zzd-,kftx-,pbk=3,lrpx-,hbmt=4,mktlhp=2,ld=4,sf=4,rxv=1,kkcd=9,dph=7,ssmflk-,vnhfc=1,hrbj-,ljsvc=6,rt-,xf=5,tq-,npm=1,kkcd-,spm=7,ljsvc=4,lpd-,nh-,cnr-,xmxf-,cxq=6,mjz-,hpl-,lh-,grlkl=7,pv=9,pqf=1,zsx=7,vbz-,vgln-,dvz-,zl=6,js-,rqx=8,hdxvhr-,pkg-,tzjln=1,nhsvv=7,ggm=5,zz-,kmm-,zngsp=5,gqsr-,cnn=8,vrc=3,zxt-,txpx-,jmthd=9,gbsp-,gn-,zrq-,ss=5,xjpbxm-,ssmflk-,sr-,kl-,gp=9,mhh=7,bpqv-,mvmqfm=6,vr-,kmqjt=4,xnmq-,hvglb=5,qpf-,xb=5,jgmnxd-,sfp-,sscn=8,pcnzf=4,rr=7,gqsr=4,xs-,ql-,pxn=6,jf-,ckb=6,ps=7,bzpv-,qcm=5,gf-,vk=8,hlg-,kjrc=4,dnkf-,kjrc-,qgm=7,pt-,mmn-,dphx-,dsg=8,brp=5,lq=6,kpqvtc=8,xhs=1,tz=1,rm-,qht-,jhl=3,mr=1,tj=4,pnp-,zngsp-,lcr=5,fr=9,vgln-,bz=1,nfgp-,xzt=1,xzbz-,cqzt-,vblpd=9,mg=6,dd-,xtl-,mf=7,qln-,qxj-,mgpp=7,cb=7,zf-,pkbv=2,fgmpc=4,lc-,dmp-,zxt=1,db-,hrbj-,vnk-,smtd=1,cjb-,dtt-,zlcmgc=1,kkcd=9,xh=3,sqjgc-,td=9,npm-,cqbvs-,hj-,sf=2,zf-,mph=7,zcjvl=4,dkms-,rgh=6,zzx=4,hm=4,tz-,vr-,vf-,cqq-,bgh=1,sn-,vbz-,sxlh=3,xtl-,lqt-,kd-,mg-,vf-,lg=5,fnh-,gbsp-,ksn-,mlcn-,vqzhc=8,gzrz=6,lcr=3,qxj=1,hpl-,dphx=5,js-,fm=5,vgslz-,vf=5,ns=2,qcm-,ds-,pr-,vqfz-,hl-,mnphn-,ctp-,qht-,dv-,kd=1,lrpx=9,bpq=1,qgm=9,ckb=6,zf-,vps=5,gbkt=3,zk=4,lztd-,tpnmp=9,rr=9,rpgj=5,dbffb-,mvmqfm-,fzm=8,bpq=9,lxmkfx-,sf-,br-,jxj=1,snpgsm=2,bj-,fsz-,vjsg-,gxx=4,hbmt=1,gflrmd-,rtj-,zl-,snpgsm=7,ppq-,vrzjf-,dv-,njvd-,sxlh=1,xgr-,tv=8,kmqjt=2,cfnbp-,xxj=1,zngsp=5,cqr=1,jc=9,gr-,qxkrd-,xzbz=9,xnmq=1,zcjvl=1,vjsg=4,fx=2,srp=2,kpfr-,bbsk-,xqfrg-,tvm=1,pqf-,fdl-,ss=5,bnlpjk=6,dphx=6,vbz=4,grlkl=7,gxx=1,lrpx=3,drls-,dph=8,vs=4,sbt=3,jpc=5,pbmldc=8,ddxn-,br=3,qln-,rvcd-,dmp=5,dhh=5,fjh-,sn=6,txpx=2,ctdbt=1,rzjkqp=7,bzpv-,gt=6,sb=8,qht=9,kpz=2,hvglb=8,mr=3,fq=5,jm=5,rzjkqp-,ndmt=6,bzj-,lg-,ks=1,npm-,vqbp=4,lcr-,km=9,tv=6,thncf=6,bxx-,vq-,rpn=6,dz=2,tcs-,mr-,kd-,spfc=8,npm=7,hrbj=1,cggz-,jjd=7,drs=6,vr-,rfdrk=4,kc-,pkbv-,zmlr=1,lqt-,hsb=1,xb=5,pljg=5,bq-,gxx=5,vrzjf=9,xhs-,xk-,vdf-,lg=6,xrb-,vc-,pbmldc=5,js=5,ld=4,sbt=4,gftx-,kpz-,khx=1,mr=9,lztd=7,xqv=8,cb-,sbx=6,qpf-,vgln-,xcq=9,jf=4,zs=2,cv-,vqc-,vgln=3,bmnlf-,nsxz-,vttk-,jx=1,tnfx=9,zv-,fdfc-,rc-,lhks=4,zlcmgc-,grfxxs-,hrbj=4,vqt=8,ts=5,hd-,tq=8,bg-,mf-,pcnzf-,sh-,trzx-,xb=4,rc=8,bzj-,pkg=8,hlg=5,qcnnzx-,ck-,mjz-,vth-,mgt-,cct=1,bkxf=8,rpn=1,mg-,fjg=3,vlv-,zngsp=8,ksn-,hnf-,dbh=7,pxn=5,hsb=8,mq-,jsv=7,ccf=1,ts=8,kz-,xgr=5,xbx=5,sqd-,fpg=8,lvs=5,smtd-,zs=3,dsdm-,nrc-,jtz=8,jxj=3,sv=3,mlcn=9,psfnx-,kpqvtc=9,rsn=4,zdl-,lztd=4,vnk=2,dmp-,sscn-,zj-,dd-,zdl-,smtd-,tj=3,ggm=6,ff=2,zzd-,pfjml=7,chpn-,mjjk=4,spm=7,sfp=6,xbx-,dbffb-,sh=9,hnf-,pmz-,rzjkqp-,hb=8,bj-,hgp-,txkh-,znjg=2,vqfz-,vgln=2,zzd-,crb-,vqt=3,ssmflk-,bqpp=4,xt-,dbffb-,bhfh-,hsb-,rvcd-,sbt-,txpx-,jtz-,cb-,dp-,mvmqfm=3,ddxn-,msbfzl-,xgk-,jpc=5,phsl-,dbffb-,zcjvl=4,tvm-,pv=2,sfp-,nnn-,jmthd=2,qcnnzx=3,xnmq-,tgqp-,fzm=3,jpc=2,cnn-,jhhqj-,mvmqfm-,rtj-,km-,lk=6,slzd-,chpn-,xb-,tpnmp=9,vkz-,lqt-,vf-,gbsp-,cmpc-,xc-,pkg=5,tz-,dzt-,mvmqfm-,dvz-,lhks-,npd=6,lfg=7,bgh-,vqbp=5,grlkl-,lvx=4,mgpp=1,znb=6,zf=4,lfl-,cr=2,dbffb=3,jzxp=2,mhh=2,gftx=7,lfg-,gkn-,xb=5,djmlb-,qln=8,zmlr-,dkz=6,grlkl-,rt-,zcjvl-,vblpd-,lztd-,lfg=2,gxg=6,bj=8,zs=9,ssd-,lcr-,tqx-,ncjb-,kmr-,trg=4,kmm-,cjk-,tq=7,qqp-,scbpb=1,rc-,xzt=1,ftz-,sjb=2,rknz=4,gbsp=4,qrn=3,dhh-,mph=1,pjfk-,grfxxs-,xfn=3,bq=6,kd=3,vjzt-,vgln-,rv-,lcr-,blfx=4,gzrz-,kmm-,hj=8,pvv-,khn-,jfz-,gr-,gr-,dhh=9,ps=3,vblpd=9,sqd=3,hz=7,mp-,lxg=1,bnlpjk=3,jjd-,txpx=7,fx=9,nkx-,bg-,rvcd=4,sr=6,qz=3,vdf=9,ld-,nsxz=1,zdtz-,dzn-,hb-,vjzt-,nfgp-,cmbv=6,pljg-,sqd=1,ssd-,fzm-,qv=8,tn-,cct=8,cnn=2,vkh-,zl=8,xcq-,ppq-,scb=5,pbk=6,jmrz-,xgr-,kpjqgm-,nglvx=5,qht-,fnln-,cl-,kkc=9,kpfr-,xtl=9,dsg-,xrb-,zdm-,mmn=5,tz-,gh-,vkn-,vkqx-,gkn-,qxkrd=7,rt=7,rh=3,bc-,nzq-,mtx=8,jc-,kfp-,dkms-,thnmq-,jhhqj=6,vhx=2,lqfv-,kc-,vqzhc-,bzj-,fmkjj=5,ql-,fdfc-,kftx-,ktj-,bgh=2,cqzt-,rtj=2,vkh=2,dfz=6,xstdx=9,npd-,hf=8,jhhqj=1,snpgsm-,xrb-,hm=5,bx=1,ql=2,djmlb=7,xcq=6,xbx=4,kl=9,dk-,sh=7,ctf-,sqjgc-,thnmq=7,lhks=9,xdfz-,tk-,pt-,vgslz=7,dtv=5,sbt=9,kv=1,drs=3,db=8,lqf=6,xhd-,qln-,ckb=2,kpn-,qvlzn-,fb-,xcq=3,vqc=2,ct=4,dtck=5,vgslz=9,shn-,rv-,cr=3,tpnmp=1,cct-,zj=8,bnhz=4,psfnx-,nnn=8,kl=8,ps=5,ng=6,cnr-,snpgsm-,dnkf=9,znb-,bgkjq=1,pjfk-,pl=9,dtt-,sqd-,hgp=7,gs-,qrn=8,dvz=4,kftx=7,ggqq-,cl-,cr=9,jsv-,vjzt-,pxvxlh-,kqh=1,tqx-,lvx=9,mf-,rpn=2,bpq=4,km=4,vnk=6,cqzt=9,bxx=8,tn-,pgd=8,dp=7,thncf=8,zdtz-,vgslz=5,cnr=7,nkx-,hdxvhr=6,tj=6,xnmq-,qf=4,lq-,vnk=7,rpn=4,zd=8,rxv-,lln-,sbt=6,mhh-,rz=5,dtt=9,gxx=7,pnp=2,lqt-,xdfz=7,lhks-,gflrmd=8,kpqvtc=3,tj-,pvv-,xcq-,xfn-,kpjqgm-,kc=6,zngsp=1,vpxv-,xfn=1,qqp-,tj=2,xrb-,zsx=4,lfl-,vqc-,nq=9,lrpx=7,rpn-,phsl=7,chpn-,vq=6,dd-,ff=1,lztd-,lq-,vx-,lg=3,jmthd=7,vnhfc-,jgmnxd=6,fpg=3,xs-,ggqq-,msbfzl=7,znjg-,xt=8,xzt=9,ff=3,mmn-,dmp=7,hrbj-,vth-,dkz-,nsxz-,bnhz-,bq=2,hm-,dm=7,trzx-,xmxf=1,npm=7,qqp-,fnv-,bzpv-,hnf-,ztk=4,hz-,bx-,srp=4,sqd-,zk=5,gbsp-,fsz-,vlv=6,hpl=5,jgmnxd-,rtj=9,lh-,qhvz-,vkn-,blfx=6,sc-,rqx-,tslfp=6,zdm-,fsz-,mm=5,lc=5,ghm=6,ktj-,kl=6,dph=6,ztk-,cb=2,kz-,psfnx-,mq=4,vqc-,dph=9,zj-,js-,znb-,vqbp=9,dx=2,dtck-,gt-,br=6,zrq-,bqpp=5,ckb=6,ng=9,zdm-,jc-,lvs-,ql=9,zf-,sc=2,dph=9,bz-,vbz-,khn=6,kmr-,drs=7,kx-,vlv-,pljg=6,vpxv=6,fsz=5,vqbp-,tcs=5,qz=9,xp=2,xp=7,kx-,ssd-,bz-,vs=5,mgpp=8,rnsbt=1,hdxvhr=4,rz=9,nq-,ktj-,pv-,cmpc=5,psfnx-,pqf=9,tv=4,jpc-,jfjbj-,vps=6,bszd-,jx-,xhs=2,cfnbp-,cb=6,nfgp=8,mg-,fjh-,mtx-,vrc-,cr-,njvd-,lffv-,qqp=4,cr-,js-,jx-,pgd=9,qg-,vsj-,bnhz-,sjb=1,nglvx-,fkzq=9,qhvz-,nlcrm-,kmm=2,jzxp=2,zrs-,mtx=9,hnf-,lk=5,nq=2,rpgj=1,tkpb=7,zzx=7,pnp-,rgh=1,qhvz-,zpc=1,pmz-,nhsvv=5,zqr=6,cggz-,lhks=3,bpq-,tfd=7,jm=4,kpjqgm=9,qxj=8,pv=8,pmz=2,jf=2,gxx-,jf-,mktlhp=1,lrpx=2,lqf-,scbjp=3,fdl=7,khn-,ddxn=7,dzn=6,chpn=5,vpxv-,kl=8,sqd-,vnk=9,vbz-,cqzt=9,lc=4,nhsvv=7,ph-,bz-,xzt=7,cqr=8,spfc=3,vsh=9,bbsk-,khn=1,bl-,lffv=3,pl=8,zdl=7,qg=2,vkz-,qht=9,xhd-,blfx=5,vbmk=5,npd-,zv-,bpqv=2,tvm=6,xqv-,zv=8,dbffb-,trg-,cqbvs=2,vqbp=4,kpfr-,ql-,cggz-,kpfr-,sbt-,plp=2,fsz=3,ct=1,zcjvl=6,rpgj-,nfgp-,zqr=4,zn-,mq-,ps=8,rtj=4,kpqvtc-,ndmt=3,plvd-,xv-,rt-,fb-,psg=8,sxlh-,nhsvv=4,pkbv-,vrzjf=7,dzn=7,mmn-,jfjbj-,vnkmzj=6,dp-,rh-,cv-,dzn-,lg-,rpgj=1,dph-,ctdbt=3,cfnbp-,gxx=8,hj=3,xnmq=4,lc=5,bb=9,zdl-,zzd=9,hzlzn=9,dz=9,rz=9,bzj-,xb=4,lrpx-,vlv-,dph=1,cqbvs-,ghm-,pcnzf=2,vr-,cct-,mph=2,nsxz-,ssd=2,hfrdk-,psfnx=9,rc-,pbk-,znb-,zmlr=1,dk-,dkz=3,rqg=3,mv-,zv=9,sscn-,bszd=1,xhs-,dzt-,mgpp=3,dnkf=6,tnfx=9,drs-,spfc=3,dbsf-,sr-,lfg-,bg=2,gbkt=7,jxj-,tv-,fjh=9,fdfc=5,gs-,vbz=1,dbsf=9,zdtz=6,fgmpc=2,njvd-,hfrdk-,sh=8,scbjp-,zn-,msbfzl-,px-,spfc=6,vdf=2,vc-,vlv=2,cqq-,vhx=1,hl=3,vkqx-,fx=7,gct-,vrc-,hpl=8,zm=1,ktj-,xmxf-,rqg=7,zm=8,cqq-,zlcmgc-,kkcd-,dtt-,jmrz-,gf-,xzl-,pcnzf-,tslfp-,pxn=2,ccs=5,lmlx-,cct-,vgln=4,xt=3,gxg-,vq-,dz-,vqc-,bgh=6,zbgdxg-,ctdbt-,mg=6,fb=1,xbx=1,xv=2,lvs-,kd=9,slzd=2,xb=3,mvmqfm-,kv-,jfz-,jc=8,mgpp-,shn-,kpn-,scb=9,txpx=5,zf-,vhx-,rnxt-,pxn-,mg-,gftx=6,fsz-,xnmq-,bz=4,nfgp-,gkn=7,bnhz-,qpm=1,vhl=5,pm=1,spm-,xfn=8,xf=9,vqbp-,trg=1,pkg-,lrpx=4,mf=7,rpn=7,vqbp-,vdf=8,zz=5,tslfp-,dz=1,fjg-,cb-,zqr=3,clg-,js=2,xjpbxm-,fnln=4,pgd=7,hzlzn=6,qrn=4,khn-,psfnx=7,grfxxs=8,lvx=4,spm-,zl=6,grfxxs-,trg=1,lmlx=2,rsn-,rb-,cnn-,zdl=1,mmn=8,rr-,scbjp-,zk=2,xrm-,lc-,pkbv-,ss-,qhvz-,fq-,bnlpjk-,kkc=8,fpg=7,tgqp-,jzxp=8,rm=2,plvd-,lfg=5,jmrz=9,vk=7,spsx=2,spfc=5,plp-,cfnbp=6,jzxp-,fjh=3,xjpbxm=4,br-,nrc-,sn=3,rc-,lfl-,plt-,np=5,bgg-,xf=4,vlv-,vrc=5,cct=5,vps-,xzl=9,nnn-,pvv=9,dmp-,sf-,hm-,vtp=7,cqr=7,kv-,rnsbt-,qcm-,dvz=1,dbffb-,dbh=4,bzj=9,ctdbt-,tnp-,ksn-,dmp-,qz-,lxg=6,dtck=9,lvx-,bfz=6,xgk=7,qpm-,ggqq=2,grfxxs=3,msbfzl=1,xqfrg-,nlcrm=5,hzlzn-,rfdrk-,xhs=8,xnmq-,pbk=9,jsv=9,zk=8,dtck-,jtz=2,nhsvv=6,ddxn-,ks-,tcs=1,jsv-,xb=1,ff=1,scbjp-,mjz=7,pbmldc-,tcs-,xhs-,plt=8,zs-,xbx=6,bxx-,qcnnzx-,dkz-,dvz=2,rh=4,mhh=7,djmlb=7,bnlpjk=8,jgmnxd=9,pzd-,lffv=2,xqfrg-,cb-,tzjln-,bfz=1,fnh=8,xf-,cqbvs-,lqfv-,ld-,jtz-,nj=8,cjk-,dsdm=9,thnmq=2,ck=8,bpqv=4,rgh-,mf-,sqjgc=8,rzjkqp-,dvmm=8,zthrd=2,mtx-,cqzt=6,gct-,spfc=7,trzx-,hlg-,rqx-,lffv=5,vf-,bqpp-,nhsvv=8,kpfr=2,dfz-,cnn-,gkn-,hb=2,vnk-,px=2,hxd-,zthrd-,xv-,jzxp-,vkn=7,cxq-,ccf-,xfn-,lxmkfx=5,pljg-,lqfv=5,rfdrk=9,khn=5,cnr-,vr=9,kd-,ssd=5,mmsz=7,fnh-,mf=8,lvs=3,vgslz-,pfjml=7,dtck=8,dph-,gk=4,ntg-,lpd=2,fnv=1,mnphn-,xzbz=1,zd=8,gf=1,tr-,lpd=9,vjzt-,ss=7,qnd-,db=2,vz-,lxg-,khn=3,vkqx-,fjg-,zrs-,tnp-,rc=9,fdfc=4,tqx=1,scbjp-,nbtq=6,kmqjt-,jc=9,txpx-,pr-,vps-,zv-,vnhfc-,jmthd-,blfx=1,vqt=4,spfc-,tzjln-,cfnbp-,zf-,ndmt=4,xqfrg=2,cmbv=4,mtx-,ktj=5,nh=1,mm=6,xv=5,ng-,bfz=2,zj-,pt=6,njvd-,qcnnzx-,qgm=8,fjh-,zqr=9,tn-,zz-,mvmqfm=9,gt=3,vgslz=4,px-,fnh=7,njvd=8,jtsdd=2,rzjkqp-,np-,ph=5,zqr=6,cb=6,sxlh-,pfjml=2,dmp-,lxmkfx=2,kpqvtc=4,mvmqfm=1,rknz=8,zcjvl-,tq=1,nnn-,vc-,zdl-,ndmt-,dtt-,mf=4,qcnnzx-,zzx-,pkg=6,xfn-,rnsbt=8,rgh-,vp=2,vpk=1,zz=2,mkj-,mr-,lln-,dm-,cfnbp-,sbx=9,dsdm=1,kpqvtc-,zzx-,bqpp=9,lqf-,cqr-,mlcn-,spm=1,dhh=6,js=4,pg=1,vbmk=3,vqc-,ftz=4,zxt-,zz-,xtl=6,pr=9,cnr=8,rqx=4,bszd=3,rl=6,phl=4,dvmm=2,drs-,bnhz=4,cggz=7,nhsvv-,cnr-,bgg=4,tr=1,pjfk=8,fq-,kmm=2,jjd=9,dbsf-,sxlh-,xzt-,mjjk-,pfjml=8,lmlx-,xtsd-,ftz-,nq-,kd=3,tk=2,vth-,nrc=4,vqbp-,grfxxs=1,ssmflk-,mmsz=6,lh-,td=2,vc-,qht=1,ccs=3,fpg-,ff-,ppq=2,cl-,ff=9,gk=1,zzd-,mv-,pqf-,vq-,vtp=1,thncf-,gt=7,ksn-,bnhz=8,xmxf-,ktj-,cnr-,ctdbt-,cggz-,vps=8,ff=1,jhhqj-,hd-,dphx=3,zk-,bg-,pkg-,gh-,nl=4,dtv=1,ph=5,xk=4,sbt-,sjb=4,tslfp-,kftx-,gxg-,mjz=9,bzpv-,dvmm-,zlcmgc-,mvmqfm-,jmrz-,sf=3,zz=4,vsh-,kfp=9,cggz=4,pm=4,nlcrm-,pg=9,xhd-,spsx=9,xmxf=8,bbsk-,pr-,qhvz-,vqfz=7,dp=5,ndmt-,nlcrm-,mgt=8,gflrmd-,vkn-,jsv-,qrn=7,gk-,rc=9,qvlzn=2,xtsd-,xzl=8,vdf-,fb-,mr-,vrc=2,qpx-,bmnlf-,scbjp-,vpk=5,vjsg=3,rvcd=7,tk=2,xstdx=9,tcs-,zqr-,kpfr-,rz-,vgln-,dvmm-,lqfv=8,bszd=3,nglvx=9,lq=5,dnkf-,sfp=3,pxn-,blfx=6,zzd-,sbx-,dfz-,fq=2,qqp-,rtj-,sb-,nbtq=2,bb-,zpc=6,tfd-,zl-,scb=4,nfgp-,kftx-,zn=8,rh=3,fzm-,qvlzn=3,ctp-,qrn-,ztk-,pmz-,rh-,vpxv-,lvx-,cq-,jmrz=8,sqd=2,kftx-,ppq=7,dvz=3,vblpd-,jgmnxd-,gxx=6,vnk=5,ntg-,sjb=3,dkms=3,bgh-,zsx-,xrm=8,pkbv=7,vttk=7,lxg=5,jm=9,vqbp-,kfp-,hzlzn=5,hl=4,trg=9,lq=7,ksn-,mmsz=5,px=2,lcr=4,td-,hfrdk-,rnsbt-,qln=3,dvmm=6,gftx=6,ppq-,xbx=8,pvv=8,xcq-,tzjln-,tdl=8,vf=9,sxlh=9,bgh=5,bqpp-,zxt-,xs=5,kmm-,ps=5,ctdbt-,hd=4,md=7,xzl=5,jfz-,tzjln=9,gpg=5,lmlx=2,phsl=2,jx=3,lfl=4,kpfr-,db=9,fdl-,rm=3,bqpp=7,mp-,xv-,bpq-,pg=1,nlcrm-,xk-,mq-,lk=7,hrbj=1,hj=1,ss=8,hnf-,xqfrg-,tnfx=9,znb=8,kl-,lqf-,dsdm-,khn-,cct=4,bzj-,spsx-,lc=6,jfz=4,plp-,fb=1,bgkjq=2,pvv-,br-,cfnbp=5,sqjgc-,sv=5,mmsz-,dd-,lrpx=5,mgt-,hdxvhr=1,dsg=6,zz-,gkn-,fjg=7,px=4,lfg=7,jfjbj-,ghbr=4,ftz=1,lffv-,pjfk-,spfc-,mlcn-,vth-,qxkrd-,ctdbt-,qpx=5,gqsr-,sscn=7,ghbr-,vqbp=8,bgg-,zf=2,qxj=8,bpqv=6,hlg-,tn-,lfl-,bzj-,tk=4,ql-,gxx=6,gqsr-,mtx=1,rqg=7,zzx-,lcr-,bx=7,nl-,msbfzl-,bhfh-,sxlh=7,nsxz=8,bgg-,pfjml=4,pv-,qv-,kx=4,dp=5,gxg-,qpx=9,mjz=5,zxt-,tv=4,kx-,xtsd=7,txpx=4,hdxvhr=7,pzd=2,vqc=4,xjpbxm=3,dm-,rvcd-,ps-,hbmt=9,nsxz=5,cct-,xhs=3,cqr-,fm=3,pzd=5,qxkrd-,rz=8,pgd-,txpx-,xk-,hnf=7,hlg-,lcr-,nqcj=9,pgd-,spm=3,zk=5,jxj=9,vth-,srp-,sbx-,cs=1,vpk-,srp=7,sqjgc=7,ks=1,dvmm-,zqr=6,gbkt=5,rl=1,phl-,mg=9,rm=2,dsdm-,rz=2,pgd-,gf-,bxx-,nq=3,vtp=6,sbt=9,kpqvtc-,qcm-,td-,bnhz=3,rknz=6,mjjk=6,qf=9,thncf=5,bb-,vjsg-,cnn=6,jxj=6,vkn-,gbsp=3,kpfr=1,lqfv=6,kv-,gt=1,fq=4,kl=4,rtj-,vth-,pfjml-,hbmt-,vr=1,xmxf-,sc=1,cgp-,jx=1,chpn-,xcq-,vttk-,vpk=1,mnphn-,mtx-,gxx=1,cgp=2,qvlzn=4,sr-,ct-,rh=3,rzjkqp=2,ld=9,pljg=6,vlv-,rgh-,spfc-,jm=8,fkzq=4,xmxf-,gp-,chpn=8,xtl-,cggz-,xnmq=3,rnxt=1,znb-,nfgp-,ts-,bqpp-,fnln=3,pljg=5,hz-,kfp=4,cq-,bgkjq=9,vs-,zngsp=7,jsv=3,dbsf-,kx=4,ph-,xb-,dsg=6,sn-,jmrz=4,dzt=7,mnphn-,vk-,kkc-,kpn-,vblpd=6,vqbp-,dmp=6,hsb=1,zlcmgc-,vbmk-,dp-,tk=3,drs=8,pl=4,sbx-,jhl=9,rknz=5,qcm-,mp=8,vqfz=9,ctdbt-,qp=2,vsh=8,nkx=8,qxkrd=6,bpqv=9,cxq=3,nbtq=1,sxlh=4,fnv=5,vnkmzj-,gpg-,nh=8,zd=1,rzjkqp=6,qpx-,bzj=2,fkzq-,lxg-,bb-,lffv-,xs=3,rzjkqp-,bpqv-,bz=3,zn=5,br-,zthrd=5,kc=2,ss=2,kf-,bb-,bz=6,hb-,dtck=4,sxlh=9,mmsz-,znb-,mhh=3,nhsvv-,ntg=1,bqpp=2,thncf-,tnfx=8,nglvx=1,bzj=3,gcbtgm-,cmbv-,ctp-,pg-,zpc-,rpn=1,gn-,ncjb=8,kmr=3,tz-,bnhz-,dvz=2,mvmqfm=5,jc-,plt=6,cl=8,vc-,qgm=2,ss=5,jc-,cggz=4,chpn-,qln-,nh=8,pljg-,km-,pgd=7,tqx-,xhd=2,gmrrx=3,bhfh=6,bx=3,msbfzl=2,rm=6,qcnnzx=9,xgk=6,gct=4,kpjqgm-,jx-,tgqp=4,sv=2,xf-,ks=9,pzd=6,zrs=3,md-,thnmq-,zzd-,xnmq=3,rc=2,kmm=9,rz-,jc-,rsn-,dphx-,bqpp=7,vs=2,kkc-,sqd-,tdl=9,zbgdxg-,qgm-,gmrrx=7,cb=4,bx-,lvx=8,slzd=1,fzm=5,cs-,xs=5,xxj-,xhd-,qcm=2,xxj=6,vz=8,cqzt=2,fdfc-,vx=6,rpn-,gxx-,nhsvv=6,mktlhp-,vjzt=4,lztd=7,zs=7,mv=2,nlcrm-,tkpb=9,sxlh-,pv-,qxj-,xcq=8,xgk-,scbpb=3,dk=9,mjjk=3,lztd-,njvd=8,znjg=5,lxmkfx=5,snpgsm-,ph-,pr=1,rpgj=4,nzq=2,kc=2,rsn-,dzfqlb=6,gf-,qcm=1,tcs-,mm=2,fjh=6,vp=6,sl-,kfp=4,tslfp=9,hl=1,fzm-,lmlx=2,bnhz-,sfp-,pcnzf-,gct-,jc-,xk-,zpc=2,jxj=6,tzjln-,bqpp=5,pjfk-,cct=5,qgm=8,sxlh=7,lhks-,mmn-,rpn-,vp-,qnd=9,mjz=2,td-,gct=6,sfp-,cb-,tnb-,zf-,chpn-,pkg-,gs-,mmn=2,mnphn=9,pxvxlh-,fm-,vdf=2,vnhfc-,njvd=1,npd-,cl-,vhx-,kz-,hl=8,bpqv=7,ks-,pl=6,txkh-,mjz-,bl=1,cqzt-,bbsk=7,ghm=3,tpj=4,tv=2,qf=7,tpj=7,ztk-,mq=2,jtz-,vkn=4,cs-,xdfz-,ccf-,lxg=9,ctdbt=1,trzx-,bnhz=6,gf-,kjrc-,vr=1,msbfzl=2,vblpd=6,qxj=7,cjk-,nj=4,cjk-,sjb-,ng=4,rnsbt=4,rtj-,frgf-,tqx-,sbx=9,kmqjt=8,rfdrk=8,ctdbt=5,mldgtn=8,rfdrk=7,pnp-,phsl=3,vc-,hz-,rzjkqp=9,njvd-,qqp=7,pjfk=1,sscn=2,pkbv-,lfl-,vp=5,kr=4,ccf-,plp=8,lpd=5,mph-,rh=6,zl-,lc=2,jhhqj=5,xf=6,snpgsm-,lq-,sxlh=6,vsj-,trg=1,cl=1,vjsg-,gp-,tn-,mlcn=8,gmrrx=5,qfb-,fx-,tzjln-,tfd=2,bg-,bkxf-,qpm=3,npd-,ssmflk-,fpg-,rknz-,zngsp=1,nlcrm=4,pt-,vkz-,mq=7,mldgtn=2,gr=7,fr-,xzt-,mkj-,jmrz=5,lxmkfx-,pxvxlh=3,vbz-,nq-,sbt=8,rtj=8,ktj=3,bpq-,mq-,lqf=9,vp=7,vz=1,bb-,ndmt=4,vdf=7,mr-,fnh-,rzjkqp=7,sxlh-,bszd=1,vgslz=5,zd=2,tpnmp=6,fr=2,bgg-,lk=1,qpf-,bpq-,xt-,ps=7,pxvxlh=1,fkzq=7,mgpp-,cqzt=6,bbsk-,clg=7,ztk-,bl-,vjzt=4,tk-,plvd-,jsv-,zd=7,dm-,gxg=8,lxg=2,bgkjq-,np=4,frgf-,lh-,ssmflk-,bc-,vjsg=9,rfdrk-,jx-,pbk=7,npm=5,kjrc-,jfz=8,bz-,bfz=3,ld=6,hj=4,msbfzl=4,clg=2,vhx-,vq=1,hb=4,mmsz-,sbx-,xnmq-,cqbvs=8,hgp=5,qlf-,nfgp-,ztk=8,vnkmzj-,cmbv=9,jjd-,rz-,bl-,jfjbj=7,hxd-,tfd=6,sh-,frgf-,ctp-,sjb=7,vsh=6,br=7,vz=9,px-,lrpx-,fzm=3,tslfp=9,znfd=5,bpqv=2,mktlhp=2,hm=9,znfd-,xgk-,xdfz=7,gxx=8,vpxv=3,qfb-,qnd=1,gpg=1,txpx=4,zmlr=4,zk-,plt=5,dx-,qfb-,vqbp=2,hzlzn=3,bfz-,mgpp-,xf=1,fgmpc-,rl=9,fjg-,qpf-,tslfp-,qvlzn=3,gbsp-,scbjp=1,mktlhp-,jhl-,fdl-,jmrz=1,rc=8,dmp-,clg=2,xtl-,cqbvs-,qfb=9,lpd-,kmr=3,xh-,lh=4,spfc-,cnr=1,lqfv-,scb=7,kd-,rqx-,tpnmp=5,pjfk-,qz-,gf=7,tz=9,kjrc=5,td-,bl=3,dmp-,ccs=9,rzjkqp=5,npm-,kpn-,pljg=6,dsg-,bg-,mhh-,mvmqfm=4,xzl-,plp=7,tk=6,zn=7,njvd=6,lqfv=7,rzjkqp-,kmqjt=5,cv-,mf=7,gxx=3,pxvxlh=4,nbtq-,vqzhc=7,bpqv=2,sl=6,ccf=5,slzd-,ssmflk-,sf=3,vhx=8,mmsz-,chpn-,fzm=2,xtsd-,tvm=1,zk=9,hm=2,cv=1,lq=2,dzfqlb-,kmm-,rxv=5,txpsv-,nrc=7,ps-,gflrmd-,tv=6,gs=6,znfd-,kc=3,zzx=8,vc-,tvm-,rtj-,kqh-,dsg=9,fx=3,hm-,rsn-,lpd=1,zjvd-,nq=6,hgp=3,vqbp=5,jzxp=5,pxn-,js=4,zthrd=3,nj=3,znb-,ncjb-,kc-,kmr=6,lcr-,vs-,kpfr=3,jgmnxd=9,bhfh-,rv=4,ks=3,hf=9,bgg=4,fsz-,hf-,np-,zzd=8,pgd=6,kmqjt-,znb-,fb-,qlf-,zj=1,pvv-,nzq-,ng-,lmlx-,zdm=4,hvglb=9,nhsvv-,kjrc=4,hvglb=1,ctp-,qlf-,lfg-,jhhqj-,txpsv-,bxx=3,ppq=2,vhx=7,scb-,lq-,sscn=9,pljg-,gxg=2,cv=7,zm=6,hdxvhr=4,hpl-,mkj=5,zl=7,zcjvl-,xp=3,bszd-,lxmkfx=5,rgh=7,lztd-,xv=1,cjb-,rqx-,gflrmd=5,lqfv=1,fdfc=4,vblpd=6,tslfp=5,rnsbt-,tpnmp-,cmbv=6,cq=5,gk=2,zdtz=8,lhks=2,gr=2,cxq-,xzbz=7,bpqv-,cmbv=3,cqq-,bgg=2,znb=3,vkn=7,gxx-,pv-,vf=7,gbsp-,qp=6,grfxxs=2,vqc=6,lh-,msbfzl-,dfz-,fgmpc-,kmqjt=3,qrn-,pfjml-,pm-,qpf-,qg=8,vlv=4,cq=6,lq=1,tnfx=2,cgp-,lq-,vgln=7,bgh=3,ggm-,jtsdd=1,xk=2,rqx=5,zv-,mhh=2,bpq=6,fdfc=6,lmlx=7,hdxvhr=5,jgmnxd-,lvx-,vrzjf-,dtck=5,ph-,rqg=5,gf=9,nqcj-,vqzhc-,bj-,fjg-,qln-,jpc-,vnk=1,sbt-,qf=8,qrn=8,gpg-,nglvx-,dbsf-,hz=1,jfjbj-,hbmt=1,sqd=1,cl=7,bzj-,jtz-,vblpd=7,znfd=1,gpg-,drs=3,gn=7,mvmqfm-,cr=3,tpj-,ck=3,qp-,zrs-,tpj-,gcbtgm-,zv=8,lfg=8,jxj-,ftz-,zz-,fdfc-,plvd=9,spm-,fkzq-,xcq-,sqd=4,dph-,rsn=9,vjzt-,xt-,dsdm=4,qlf=3,qht=2,js-,sv-,slzd=9,spsx-,zk=1,rv-,jxj-,scb-,db-,ff=2,cq=9,nh-,fzm=1,cs-,rzjkqp=4,vx-,qp-,spm=9,tnb-,bgg-,phsl=2,lg=5,gmrrx=3,pfjml=1,psfnx-,dbsf=3,jmrz-,lztd-,vrzjf-,vkqx=8,mv-,sqd-,hrbj=8,tgqp-,sbt=6,lhks=2,vp-,mv=6,snpgsm=9,xf=3,tnb-,hl=5,vqbp=7,zd=1,fm-,hbmt=7,scb=1,txpsv=3,jf=6,rc=3,vs=7,qpx=1,sf=3,zbgdxg-,xv=7,xv-,hgp=3,nfgp-,qht=8,vblpd-,ql=9,kmr-,rtj=2,lpd-,rfdrk-,rxv=5,sbx-,rfdrk-,pgd=8,kpjqgm-,vjsg-,cgp-,fnln-,dvz=3,pbk-,mvmqfm-,lmlx-,ndmt=2,trzx=7,tnfx-,xgr-,zlcmgc=5,plvd=8,gs=5,sv=2,dk=9,vnkmzj-,vkn=3,xbx=9,kl-,psfnx=8,ppq-,vq=3,xzl-,mldgtn-,plvd=7,gcbtgm=1,sscn-,drs-,bnhz=2,lhks-,sf-,pbk-,sxlh=3,vkn=2,vqfz=9,gct=1,cmbv-,qgm=5,lg=6,tnp=6,jsv=7,mmn-,xnmq=3,vx-,fkzq=1,vqbp-,gbsp-,txpx=9,jtz-,hdxvhr=8,xk=4,xxj=3,vrc-,fjh-,pxn-,gbsp=8,hl=5,jm-,zn-,chpn-,nbtq=7,kqh-,chpn-,nnn-,hfrdk-,mp-,bgh-,ns-,vsj=3,fgmpc=1,kd-,dtck-,nh=4,frgf=3,cq-,pt-,vttk-,px-,smtd=7,ctf=8,zn=4,kl-,jjd=4,bzj=7,cnn-,mtx-,pzd=1,ssmflk=4,jgmnxd-,ccf=4,jmthd-,vnhfc=7,srp-,qxj=7,chpn-,nh=2,kkcd-,dm-,mmsz=4,fnln-,lq=6,kkc=1,bq-,nl=3,mmn-,jfz-,zf=4,sl=3,sqd=7,dtt=3,ql-,jmthd-,ndmt-,vqc=2,jjd=2,jpc=4,vrc=9,kpn-,gs-,mjz-,ftz=7,bq=5,cv-,xv=2,mktlhp=9,cmbv-,mtx=6,ggqq=7,fq-,rknz=3,xxj-,zngsp=3,rsn=5,xrb=3,vrc-,fb-,phsl-,plp-,pl=9,cr-,vpxv-,lk=4,khx-,rpgj=2,kd=7,md-,dvz-,rl-,dkz=9,fsz=8,vq-,pm-,xf=7,tv-,tk-,dz-,qqp-,bg=7,xb-,nfgp=9,ng=7,kfp=2,mp-,vbz-,lxg=5,xqv=1,npd-,pvv-,xzl-,slzd-,dmp-,jzxp-,dphx-,txpsv=7,mldgtn-,ql=2,xgk-,mv=7,rl=7,kjrc=6,rl-,jfz-,ctdbt-,tdl-,fq=6,lcr=6,hzlzn-,qpx-,nbtq-,td-,mr=8,zngsp=4,vps-,ssmflk-,djmlb=9,pxn=7,cqq-,nlcrm-,rt-,vgln=9,gn=2,nsxz-,cfnbp=2,xrb=8,ts-,bfz-,lh=1
\ No newline at end of file diff --git a/aoc2023/src/day16/input.txt b/aoc2023/src/day16/input.txt new file mode 100644 index 0000000..1778ec0 --- /dev/null +++ b/aoc2023/src/day16/input.txt @@ -0,0 +1,110 @@ +\..../.....-...|........\.|...........-..........-......|....././..........\..|............................... +.../..|.......-............\...........-\|...............\.....|......-...........................-./.......|. +......../.-.-....\...\-.......................................|..........-.......\.....-.........|......|..... +....\........./..............|.............-..|.|.\.|.-......\........./..................|..........\........ +...|/.|..........................-........................|............|-..|...../\................./.../..... +...|.|.......\...................|/..........\\....|....................-..................|.................. +..................\-|..........|.\......|........\.....\...........................-..............\.....\..... +........./.-./..............................-..........|......|................/.............-......./...|./.. +....-...\..........-......\...............-/.....................\.........-\.........|..........|.....|...... +./............\......./..-......................../.|.-.|........................./.|......|...\.......-.-.... +...........././.............|..........-....../..............-.....\.-......-.............................-..\ +......................\.|.\..................-./.....\....|......................|..\...|..................... +...|.-...|.............../..//....-\...-.-...........|......-....\.|-.............\....-.|.............\...... +......|.....\-....\.............|../..|......\....--................/....|..../|../.....-........../.......... +.............|.........-.../.|....................\........................................................... +....\...\.-..-.....|.|...........-........./..../..........-.-....|....-..............-....|........|....../.. +..........|..............\..|........../..........................|.....|\.-...........-......\....../........ +...../.......|..../........-........|./\..\..\.\././.\.............--.......-..................\./......-..... +....................//...-..........-.............|................/............./.\....../...........-....... +.\-...|-/.......-........-...-...............\../...........................\/.....\...........\........|..... +.............................\-......|......\../......-..........|...........|.........-.....\..|......-...... +./................/........-.......|..\..../|............................|...........|.-.|.................... +.\.....|...............-\............|.................|...././.-...\..........|...........-...|...-.....\.... +.......-..../.........\|.....................|....../..|/./|..........|.......|-.......\\./......-............ +.....................\|......../-.............\...|...........................\.....\.\....................... +...|\.././...................|..................-.../\.-............\.-.........../............../.....\...... +.......\..................\..|../...........................\....\....\..../...\..\\./.-....................|. +...............|./...\..........|...|....\........./......\...\.............\.\-......|......-...-........|..| +.........-...........................-...-............\...\.\.................................-....|./........ +.-.|............-.....................-.................\..../......\....\....\....................|.......-.. +.....\.|......|..../................|......|.....-...\|../................./...................//............. +.|.........\..../......-........-............--...................../........|.......\.....\..........-....... +../.....|.|............-.................|\.....|....||...-..-....|/......................|.|-..-..........||. +...-............|.-.............-.....................\.|.............\.\............\...|........|...../.\... +\...........................\.|................................................/.|......-.......\........../.. +...................|....|.......|.-.............-..-\...-...............................|..................../ +/...../.....\............../...........|..|./...-.../...............................\........../|.........\... +..-.......|.........../.......|......../.......\.............../..........-|.................................. +...\.\........\............|......................\........|...\.............................................. +../..........--........|....-..............\..\.............\...................-........./...../..-.......... +..................|.................../\..-..|..................\....././..|......-.................../....... +-...\.............\..-..-.................../...|.|.........|../|./............/...../............../......... +.|\............................-....................|......./..............................|..-|...|.\........ +-........../...-....-.......................|...\........|.......\................../......................... +........................................................././.|..|.........\................/|........\........ +-.....\.........................|...........|..||..|......................................\...\....../.......| +....\...|........\.........................//...........|........-.........\..........\-.....\................ +....|........|.........../........../....\........|......-../..............|...............|.........../...... +......\................-...........|.................\...../........|................-........................ +...............|......|...\............\............/.../.......-.-../............................\......|.... +............-........-..../.......................\..-./.....\...................................-\.....|..... +...|...../......\...........\......\...\......./...........-../..|......................../...|............... +...........................-...../....-.....//................../..........-.......|.................|..-..... +................-...\.............\.../.../.\../...|.........-.\...../.................\.............../\...\. +.....-..................../......................................-...-............/...........|...-..........| +.........-..........\.\................-..\............................|...................-........./........ +...............-....../.....\...|.........\.../\.......-......|............\-.................|...-..........\ +.....\/......../../|......\......|.....--............|....../........-.../....-...-........................... +..../....\....|.............../..|........./............-.........................................../......... +.........../.................|....-..........................................................................\ +...-.....-./....................\..../.\\.................-.....-....|..\.....-....|.......................... +.....-..\..........|....|...........|.|....................................\.......-.../.../-.-........-.../.. +............../......./...-.......-..|.......-|..........\..............-.-....|..............\............... +-........../.........|.......................\....-........../.........\.................../.............-.... +.......-....\.....\..................\..../-.//.....-\..........|........................../....|.....\....... +..-./............./|..|........|...\\.........\...|......|.....\.........../.\......................\........\ +...../|.......\............../....................|.............-...........|......|....../.........../....-.. +.............-...-...|..\-.........................................|.......-.........|.........\.............. +......|......|............/.........................|.............\.............../....................|..-... +../../|\......|..//....../......................................................./-...................../..... +.....-........-................-.............|.-./..............|...-...../......................../..../..... +...........\......|.............|....|.|.........../........|....................\.\......./..\.\..|.......... +.\................/....................-..............................|...........\....\.......-....../.../... +...............|................-.....................................-..................\...............\.... +..........|\..................../............................./...............-.....-....-..|................\ +.................\.\...........................................-../......\.....-...............|...\.......... +..|....\............................................./.........|...-\.........-...\..|..........\............. +..................................|...........-....-./-.\.-..................-............................./.. +....................................\-.....\\...../..................-............-........../........-....\.. +...........\......./...../|\..../-....|........|.|-.....-....|.....||.....|...........\..........\....|.-..... +...\..........\./..............-........................././..........\././...-...........-............-...../ +\........\.....-..............................\................../.............-........................\..\.. +.........../.\...............-.\...-.....\............\....\......--.....\...................................\ +............\...............\.........\\....\....|......\.......-.................|...|....\.....\...\........ +.....|.....-............../............-............../.............../...................-......\...........- +..........................-...|......\.....\.......\........-................./..........-......../.../...-/.. +../........|....\........|..../...........|...-..|..........\............\..../........-................|.\... +..........-............./........................................-.......\.|/......./.................\.../.-. +......................\.........................../.../...../../.......|...................|............|..... +..............\..........-/........|/................................\...........................-............ +........\....\....../.......|.-........\........-..\.................................|.....\-................. +........\......|.\.................-..-.../.............\..................|.../.-.............-/............. +.|/.............-.\.........................|...|./........-...........\../...............\./.......-......\.. +..................-....|.....................-........|/.................\.........../..-.............../..\.. +......-......-.........../......................-......./...../.../.|........\.../....../............\.....|.. +...|../..................-.................\.....................\............-...........|.....|.|.........-| +..............................-...........|..-/.................|................................../.......... +.../......../.............-./.............|...../......./...|...........\..............-..........-....|..-./. +/..\...|...........|...........................|/................../......./......................\.....\..... +..|.........-........|..|......-...................\.........|...........................-.................... +../...-.....-.............../...|\...\.......|.................|.\.........-...................-\.........-./. +../..............................|.......|..............\...\......................\..........|............... +............/....|../....../.............-............................./......./.................\............ +/.....\...../.........../.............../...-.../\.....|.....|............|....|..........\.....\..../........ +....\....-/.........................|............-...........\........\...\.....\\................\........-/. +.....................-..-\...............././...........................\....-./......|..............\..-..... +................./........|.......-.-....................\.-.||...-.......\./.|./.....|...-.../......./....... +........-..-...../.......\.........................\.....././.\.../..|...../.................................. +.............|...............--.........../.|\/.....\.........................|..|.....................-...... +..........-...|.......\/...................|....../.-...-...|....................\..../.-...../..../..-.......
\ No newline at end of file diff --git a/aoc2023/src/day17/input.txt b/aoc2023/src/day17/input.txt new file mode 100644 index 0000000..04d0721 --- /dev/null +++ b/aoc2023/src/day17/input.txt @@ -0,0 +1,141 @@ +111143231245512453233532231135242346643223434366453543664553534426223663625563233556655232522464453223446255523366641115221525545241115541324 +431121345255453245532513346436354562424226665435625542452543534236556535432235356366222264336444256255334564563564226352335454152333342425531 +211555234333213145543413562433332533444634432342622623343343455746676435745474465524463464332524462636562533446346254251543254415111115352424 +341511535443122253134546264233423566232562433526456565542774357646735536654673474477533643232255236632236625425666662645545552141115242422515 +341111243411143233254353542425566625642433362644332467546476655667755374563574564666444577323426235362444224643634223545235541134121215423153 +531254335432123321511666236453536252626542365563233477476436375343677375447543535337476464737335222455333555262365434346341345121543421555545 +352535514521514111243342542545234362225656644366655563365373766737565463557476566764463743673533232534423432654354532444434614515232111523231 +534444213321253145553225546453244552566243427573456456543553566474735356663557433377547454546773337365265654362565366242546625513555231514252 +323313551435534512622225362562263434433225636635664736767633535463645434646666633445555455344676663776363645426625355443264235342154354541551 +313344353445542136265245463656643456254675743474744556363764667356336334435764645543447755363434777747562523535253545462232443334115422245343 +411545355323353632256366354543644422255357345374367446347554465766367637555443653555375756736537575763375343236242446526465226534224412555332 +533131433141412662643523326542423234474465776365555735754776645376734774677646654667473753373634447774446536352326333564334433362123135411531 +512414542555163643526524526245525623733466554345447435364657576457576376563367444354735757756765547755635545232536536433564236626315454145425 +222144425355524633235543562342566454344764575745367646565574575636547773457356646456657637437547666745757773472565443652346664466335313555551 +425225555322663532264234233335563664747574765576347743444637647676737567333767356736363333744734647436646746476523664454633653546545122514442 +433432345135556643645433433353363575647663645376464776466577573557373364773353335555374554433464633534445576673653325425446624523422432115313 +331554441535436542646663554246654555367643355653745635636355676647567487764456667645455574637564434547453345476356634245324255236624234322155 +412551332642256525656556644673435575337544534765547457535765745875846744677848864748453556456475334367766655534547433255523464263563352324545 +443534155643554356242335334673736746664536333346353556577644664845484655676855576588488476647745635435535753465654355645265546422335564424541 +325113645335432555665355233555675344354467477467666744857886746774544874557756677867665777554343734443655754353756656432453432656526442431243 +435351452355523445664565747636637443475667333666457866648755647865645478687666547687547448455776553463657435344656637472443446523245236631254 +412143553424345325232454645555356743366537373758877467577647678654487674848784877787468644447756553677573465574353736576542332442522366564144 +431363252452364445356544557475337767655336557686768756474568654665465464884556855744876886546758447344734334637754557774553226363256242242651 +554256445333463534225356746736736743336763377746888675584476754588545785578747858657577787754874858864355637365443444365474546636352256656323 +425454462356554263636434334444466455765534574648745458464655777887654744458644875776467657545757755464375636667554445537457232633344456335351 +322453463334656455234546433475533746373377467777858787845857478676767845586566768464584884875677444488543533447537536376643424666645653654426 +432326546526255522353556547373665657473456445577748547665675868677547547785865454645454554774845748574876563377757437467553465624365666252336 +553526552222562635473565556657553364657548886884887656456865855666787554686645654858555566768654648745854464677634735446546732553642463664265 +664326265443345443746744735336634755665574447844755544578487644586454874856778477455686458576478578547554484667445666574665353445232224622335 +236532234245355276756476464355554554458887564887776455877644448447886868476548867546888764476866776558545547574453545467364757744326636223642 +632462455662552665443463346747745775658756746854568758745668675885889865596789855788675844755468675857556885843566367733464537666322366344223 +266666434363243576375767356665666877464755765578746575486748669688797696588866786698768646566485868545858886667435664777734463342523665555235 +443556525665656734577633335664448556655454678484454777545656666779696855688567966656964658877444685858567566545447466467443774467266252546652 +624455255224344733376335533753476658646544876564465586875955788776686876776867985856986576866568765548476654745754674775433435367623356456444 +262555462622446474437456377453868684444668468464476655987967866795876695585957798678969855857886488747765845586764675544766563666356435634332 +665624325625734563547365736536784556858567746767459867695988595777767769865658796865788965789678867667866557578674565534645577447432435556524 +333523334637534573776476636576557488766777764446687995988678876956786678875775556987997957898658565656667557575548444354657655335367544525324 +456466363423657475573575435664578688587455448765669969578697785989658879886787878568857799889578874487556756544556443334633446546536443652664 +222244452574756367757776634686545577855644575756668896567598879867997957659885755779787658957586658876446588645487856454536434636745444545545 +232636356457556536556365668745444488466474574987976697975796699686796855588666956768955895958675868455454458767755755376733663633374544556332 +332332622576377345736534646747554866678866788995569677878555787567775875779596796566579977885676656586446765845854744577365444454343372523366 +555664262474645377674577674647867577478684688557896658796655557657577765775656667969779597586797679965585456677454664556665646757366673426233 +356255527734373436547644678865777848585857997655679875687575776559878678858588867877856678657789789868858554664844468646634734744447367636636 +552366365773455644547347758554786677468775568778877797978995878598699565857955898857969565997667878757554646688678786867367546447363537255433 +234653475644663446373734847876648467867886788586887579567587799999866977967976866766799575567556897979657666685654448547664746376435346465542 +252443375445565446367565867885578575654575966679888956889877897698678786876967769856955595897679599865976488848485865647735437666446344436434 +243525237374773653566366744564464668675869676798668978579668697966669789967787689668989669967785588576658588654658478886653675446657763525423 +562444777554463656777574486488654468576556956965987679867969676669986697889777667866868559769957958968686745774765777755575354754635335676536 +264352744565456657667484888447847467598998779789689696779679766996889786776689888878996777588978666887977978585445584446655336663435446574336 +463534645476375645554684778858555786676885996565697889699888899766678879678998899799887896956567777585869788585685647484757343657653773563665 +432465634665435774545666885858845649887698657968779889688769778768696698686869888977969768555995578977568967465456666555784577674443567347654 +242537757554573534676885677655767659695959757675998797988778888678799667799866896879686987675557878578887699478448447774787663353534367754553 +524667356567664767788788786864867869567798856688887886998887976986998886686668767699776989677585877675977659745685675557555653563563733554246 +532356647776353655754665854564646466686577777586598677698878676969777768866697689778788897669979897577868888984565784456765466355374543736764 +353546744764545745656756586777658658697565657989587766697669768667797768668968778798869989666758756995866965667844757477467833575363475573665 +442363475553366336665585574875754767958869656955766897687769989798869789778887686787686676968967586798766967684684745655757855634753733757752 +663437377653673574868444644474888676596699778559668686678686966786679878697997667998668668679678775566688577957447548475848855753337766577654 +245676667643445744476584585486889868856958677757876786686678679686978889886998888999768868796876597559998755655765588557465675655453656434644 +623664534334746636755767677464487956975558566697767697896988988986888777988897867888887969667768658555778858798767857588765444464637377577456 +524435763477353755875846887578787556979997766576796978767969777889977779899788987687978888689776897659786666856748548645756774746364367376634 +252436533765577358467857485675499965699779976868778779896779686779787987877779796678799678678799677596566778799678664684774444556767456547463 +425573537536465645667877564778768875796687778666777866678866888788777997889889889698977679979667875765578958585784474754466784455733343567735 +464333643643774675646874764777889966956967776676876886799688979878878778878789889986887997868689965998667998898957544586884784556635746634644 +467634766367575447675444786885857898689798675679979967666789787898898779879998789996988787997866879557586768558865648756677648655653544434374 +343746456733555668756758766647798687656987598967767769799669777877779899879877997887788976797777786786686766555655656558576555537543536634463 +263736676335556377774776475777798578965889979797877679967769989798889889987997789799998866789986877778878665966865757677884784553474773577764 +436645433455747776854766587748677575858967897999889678767678779989877889979988889997876876767987687678559995869785556756658784533445456534364 +457333367374443446568888867558968899899755558786887989669778779799789777789789877797786878778769899759866986568874778856465478635343345547556 +653357365735437544784775777648977566996787598779866797796688878798979898888979997778969666688778767767968675685577484857666844654735677553374 +454465553543537354546566487886759755777886869789896779676678877997997979878787978898769888779699678677788756997994554564684577435566665665735 +645535635654537444576458775888989557678676898899899898879778777789998888888977799999876678677779969957869757677687688584466575575557463464574 +633446673336665785786556488457569967799656676688968667697989989999998988788999877898996869789799978989768599766594875486774675764367566653437 +365763544374353687774557856867888579757898686969676796986689878797978997979877977999799987889766778769957988885866744454548487444537747767446 +333636755475457746774775664885768689998686877878978686686998999898899898989888977798768997778786769665986876885655876855777745646444453543776 +257347366566556755557468747484878859559855958778679799887889887788997889779777777788977698668899997569799999896694654866676457747663766657374 +554664657744433558785576687586858965859676988969678669886988889998798779998998788898786688897788767697957657558568566856664764845635356777743 +437633353637643445485457545565887558959759869766978967769977997997797798898879888977777798877668879696986885979575658888674584733534445447645 +336773576566535576644748576564988895569965579877899669988897888788798979797979977997979687769689677585858655985875545766888476856753753775643 +447375436754766447678756554674875656886886797769889788989967878998987877797878888989798769897678795698885689978868887845785867854575334643545 +533774774334356485744844667888778799675896759697877967979877898888989779897787899796896869887878898896679879895846474568577556875467653377434 +526636647656677568754477458676456866878885686668989676699978797889989979777797888789689887999898765668796877998956878884644777453766767665573 +345776437655574577556784475666467865969688769689967879888899898787979977987989787869968767788798958965676985977558887786764565334636477577473 +462757555367744435776477675765555899756777555889787899796876786789979777799889999696968778897788975596967795797586768684467474533464663474556 +345335634367663334474446748788558686895898855886668998998877799988977999887787778696789977998687999799569767555576845465465587544735477547753 +352747473367547538454567786546446657585759898569988897798777688798687998988998969877688876686969789765886558558776665847888845556554375745442 +525653575563555774887556547555749798556987599756797867867689696667867966889689666776786689697968958698665787755764558846666855575573747534345 +326455665753733645448778877747875897567979969887898786977796667699978788696867677769979676996787658598765877957588784457484655764635365737434 +532467433765464655746576865775654596585859789697688867896988996977778898788669689878989769996769668658678679877544854467444775477564333674625 +335554544454457654447885484444866987787685589987766897996999779767969767678887676699997786677685669976768778997556877487444743767346766557456 +266536345774333444487446686656585797768599588595599776878699669999678767879886989896988777767965756768698777544665754856565457554453756356643 +342464363736646775655856546787754867795697769679858888796987869768899868797687697688878796789895765557688688985446585777584467466735366644363 +523237467646754656468466848574555667758689797896579777988779889977689668778896667696797676667785685755986597446645664545687753465567453354335 +323327756536477335755748475656576547887995887876985968976869696887779786776968996997867687879755599699567657755468776866885345435457655334225 +465352366554666376467456666544455546795667757799755996999978667976979767898877678768888758985566989859967794845764466677657453363336553674426 +555533553546357444765675856588657557878975766698966577867797677999988677666767968786787775798789997676876774564485686564547464355336356456634 +653433475335664753473446858774765764677666859687678977599767969767797969796977878998788799568865956576659644565846455864883376645435553556424 +565624333374353367374378478655648748848595599966858998869589999997986786677787987969558898667876766679797576857877576788664777573454645755524 +243444333564746346366668646545674655784777777596558976769676598668789667999889879766877787867797657978894768877458688756477776644647454654652 +323463545665546577475645558786854468657757569879597766865559566996799678799877666898856695986577997898647684875678677855454775654547364424426 +444345546665673463753634768476874774848587769865579789687878579978877559996587865859858789976885557859466565567686888557474764574774566345235 +463425647566774574744333678886747686865457799567576858589676667856577976986668978996686799577977886677544648876855645547444577633464636553523 +525644666573444644576675468484675575784565795957567577578956797786787796869877557895769667588675596744747766568788564546563666667763666225253 +434232334334645346434743378448585848667846577675678568857556598869978967698795766555887989895656586784848574867846777433673543643643345636354 +536245546237555656364544635858554588856888685777969769765876857989857999778897756695765797865577585676877858667674464376646773636576723344236 +563432433237543453765335674454676568784657684785679757868567556875775895977656667977959855575979944776757767668868556665477773367647645655455 +345662256237647446335653655474847777777457855878575955988896666669879768598869889768857697696556455457585858777745474363376763373677455666452 +236454255236363665663365567376855855468585857577666775857999657659868999786755866568579898667756458558654648847578447446356744353365436332433 +236656544552467767567677567448876458465585754786588555756756796978557899579678886778787886777445766574578586476464377437556375345344545245426 +662325463226374566436333654547585676688868454444785599797776865969998677956976597586658865956686866776584577484553367473533563564746536336443 +645354345344537355546665737533754846786764888785557644675696956878965869566966978688779976776866567854756646786873676654337473445524622236626 +233264254235366666736346437575764477565768544667785545578799879958588586787879788669995878745846576785646778646655574347764645533625345535563 +432433242246235746473543477553563665775475774755874587665558965695658699586897695998868747444878848474546545784334377573356763473236426645266 +243532622522636755753437535657447776765475565645845684687588454765579856966696756574665577485786546848546585774336373636476643336442355233566 +424366665443243666567346434354557355888674468846456668847655454648844584447647747545884765768788475648857654773677576566637647654653266642645 +355566553355543667644766357475663334576684855756856557474768868686854785488845464657775755684775878866867574456477457355345767654443322524456 +252226355555353432774774553656764464764766745687577646548754448444648855656476668476765857676478568588685475446655746336375532535436262246655 +124465325536222534633336746764356663557877585584548488677874547445477547864878867577864565556567445544564676546443567455743324244266455364265 +444646453636346242245546654333667346776464746865665867844474866746647865554675844644775465548557754474556375345735665646364353323526625624235 +412366252635624522466346354375765373635554864778855885678875757885648677787758444554675487467557768856743453437365564667776246434655322223525 +155662534242554334526573346673376775437747347484686774778445745547688488858484846876546748684767564753677657367475756735363326425522532252354 +111522322233565252443476336555573575463347454766857665787786477486485455577564475876657687767758584655535533636353747434645522266562523335624 +542422536235454325532645676434563747567556555574458874646877684645545674855674568675844866465685676443356746355677555555666633655263646665442 +211224626424363426643222663657775566775366634363464577678645547647756688757557454788857466767766573445336567467663545634344363446256343542532 +524353365435226556556322567464746534674443466757337368478575456847447776487687768855745786663475737763753364433366577364223462546556234245115 +351231443465264363362336352643774674346454366777533445747664448478677857785488484766644654674764373357565474433475733244565424353322356533151 +554223355636366655362352555655373675564737667663367637476378475656775876558465484467733734736556746773634646373557532336625245362343245314352 +415315224565323443623244633253477545773643635677437734464354663476745457476448456747555563574755374344343366743744432254533234544233652442452 +155321252324634365262226535534446766435373535475553354733776334766573455373756333733573667436757467643766753335642442322554323423224452212311 +554231145244425252354633334356244765663464645674467736446536735636374435547767747353673645457676564473344375654424643234566252323463342424331 +145124531215355646265623243325355765435544464565637674665536435365374465373674364755336673456445565567547775765322264364462642335223541214445 +245544533254142563235523522653435334444477535443567574737475663654776577746444777346766467745333753447653577332363336365532325543231234334451 +251214311244114545554462446423624626676363375354453335776637374775465676343453547674544736356577777464764476336235452444566243644313151353524 +251353112524455635524245344436546325534376365643536356555677555675344355745373347466346575334347466467665642344265334364324562252124525455152 +454211332313421263343625436544345634543275377555633667545444553367537367674333374344744754673653556564665546434666555266442463652431455221541 +115242354251513424524244565345324542344352356476443353667354646467467637463545337377445445357757536673532523352342633456335464421222514545231 +234551552324343221533222663526446236435634463664377555475474346673535434445744753657775466665644563245222634266653436345463353354354144115325 +325412113545232114263462446356336532466543425623356673677337363765363633556375433575757664356773345344465345555625252465465324322523535532422 +533444522324551243515564322652262342524325235554667764445446656633535736363765574763563335776423624463325533625243355442245443123534323312511 +334123531454531311142443565534562563644542436563665634765457377675756443636777543663643633363324553544365344443234345365224343523341515544422 +425513541335541443232314324425223643632666545263242622235765443475754557635364446664563322663626426463256624543536634556155552222222255121512 +443141524454451431355221565364643463663664635262463364522342652467643777543675336434624463452333536354565653344664465611411152424331223125543
\ No newline at end of file diff --git a/aoc2023/src/day18/input.txt b/aoc2023/src/day18/input.txt new file mode 100644 index 0000000..0e3c331 --- /dev/null +++ b/aoc2023/src/day18/input.txt @@ -0,0 +1,676 @@ +L 7 (#1dc5f0) +U 6 (#4497e3) +L 3 (#3b21c0) +U 3 (#3d8523) +L 9 (#58e7b2) +U 8 (#35d213) +L 10 (#329390) +D 3 (#1302b3) +R 7 (#07f802) +D 8 (#38fbd3) +L 7 (#6d0e72) +D 6 (#2c2493) +L 5 (#38b7d0) +U 6 (#2ab7b3) +L 2 (#0ce560) +U 6 (#2ab7b1) +L 2 (#2f6940) +U 2 (#2a5a83) +L 3 (#477150) +D 11 (#0baea3) +L 4 (#3899c0) +D 3 (#34a803) +L 5 (#55c0d0) +U 9 (#328483) +L 2 (#460290) +U 5 (#48cfd3) +L 4 (#1e3150) +U 5 (#3b7ea3) +L 7 (#2c0a10) +U 11 (#51d803) +L 4 (#39fe80) +U 3 (#51d801) +R 10 (#2938e0) +U 2 (#1c17f3) +R 4 (#0df9a0) +U 3 (#579691) +L 8 (#354a50) +U 4 (#3d0131) +L 6 (#1029b0) +U 7 (#0c19b3) +L 3 (#5f48c0) +U 2 (#0c19b1) +L 4 (#15ff10) +D 9 (#0f08b1) +L 5 (#1c8160) +U 9 (#573b71) +L 6 (#2d58e0) +U 3 (#479121) +L 4 (#1c7bb0) +U 8 (#34d583) +L 10 (#416f10) +D 5 (#34d581) +L 7 (#59af90) +U 5 (#24a821) +L 9 (#196ca2) +U 6 (#1f89d3) +L 4 (#6b4812) +U 2 (#1f89d1) +L 6 (#32e5a2) +U 8 (#5eb4c1) +R 7 (#5bffe0) +U 10 (#3f8051) +R 8 (#29ac30) +U 4 (#495a21) +R 7 (#3b4e10) +U 2 (#52d3a1) +R 7 (#1e27d0) +U 4 (#09ad83) +R 8 (#385530) +U 4 (#218943) +R 3 (#0d8de0) +U 3 (#218941) +R 3 (#3ac220) +U 12 (#09ad81) +R 3 (#08aa80) +U 5 (#33c7b3) +R 2 (#37a350) +U 3 (#6808c3) +R 11 (#355310) +U 3 (#6808c1) +R 3 (#14fbe0) +U 6 (#47b293) +R 6 (#28ab80) +U 3 (#37d873) +R 4 (#607702) +U 2 (#3d77a3) +R 4 (#18a432) +U 3 (#26ee23) +R 10 (#0ba7e0) +U 3 (#0b2863) +R 7 (#604a60) +U 7 (#477053) +R 2 (#0a1210) +U 4 (#2f7e63) +R 9 (#0316e0) +D 5 (#1372d3) +R 10 (#382a30) +D 3 (#2da293) +R 3 (#100920) +D 7 (#5267e3) +R 2 (#66c240) +D 4 (#1c94a3) +L 5 (#2d7770) +U 5 (#2c0061) +L 7 (#4181c2) +D 5 (#1f97c1) +L 3 (#4181c0) +D 4 (#2b79b1) +R 9 (#1bcaf0) +D 4 (#04de93) +R 2 (#010a22) +D 4 (#599823) +R 3 (#010a20) +U 6 (#189b23) +R 4 (#38f770) +U 9 (#452e51) +R 3 (#2551f0) +U 6 (#333c81) +R 6 (#0554d0) +U 5 (#411e13) +L 4 (#487840) +U 10 (#411e11) +R 4 (#2c69e0) +U 7 (#13c311) +L 6 (#164330) +U 4 (#7449a1) +R 10 (#467570) +U 5 (#47fcc1) +R 2 (#13e090) +U 5 (#2e45a3) +R 4 (#0f97a0) +U 9 (#129b03) +R 3 (#46c520) +D 9 (#11dcf3) +R 4 (#0d0e42) +D 4 (#05ca31) +R 4 (#56d742) +D 2 (#05ca33) +R 6 (#1e5ae2) +D 3 (#56bbb3) +R 9 (#1ce6b2) +D 5 (#039d83) +R 2 (#3f1c90) +D 4 (#198063) +L 11 (#3cf8a0) +D 7 (#198061) +L 3 (#2311e0) +D 4 (#401ab3) +L 7 (#46c522) +D 5 (#2d4703) +R 6 (#0f97a2) +D 7 (#053643) +R 6 (#603110) +D 12 (#2ab333) +R 2 (#25d970) +D 3 (#1956d3) +R 5 (#528eb0) +D 2 (#3a55e3) +R 5 (#1aa8d0) +U 5 (#29e981) +L 5 (#133d80) +U 8 (#559581) +R 5 (#133d82) +U 4 (#298e61) +R 3 (#0ed762) +D 5 (#481221) +R 4 (#0ed760) +D 9 (#3a5a61) +R 4 (#265580) +D 3 (#241031) +R 3 (#2bacb0) +D 10 (#4e8481) +R 4 (#4f2bc0) +D 10 (#47fcc3) +L 3 (#15d6f0) +D 9 (#6a0e71) +L 5 (#3cc390) +D 4 (#2fa353) +L 4 (#272140) +U 5 (#029653) +L 3 (#428820) +U 8 (#23f923) +L 4 (#036c82) +D 4 (#3315f3) +L 7 (#663ce2) +D 2 (#09be53) +L 8 (#075c00) +D 5 (#552f63) +L 5 (#662630) +D 2 (#3e3fb1) +L 9 (#543310) +D 5 (#2b6db3) +R 8 (#06d960) +D 2 (#2b6db1) +R 3 (#570160) +D 6 (#441a91) +R 6 (#2f24e2) +D 11 (#2ca451) +R 7 (#5700c0) +D 5 (#36e6f1) +R 3 (#5700c2) +D 8 (#374141) +R 5 (#2b1072) +U 11 (#489e23) +R 5 (#456682) +D 4 (#522e63) +R 3 (#127202) +D 7 (#65dc21) +R 8 (#489d40) +D 3 (#686b21) +L 4 (#107ca2) +D 7 (#2271a3) +R 4 (#148da2) +D 3 (#34bf71) +R 2 (#70b522) +D 9 (#34bf73) +R 8 (#49a172) +D 6 (#2271a1) +R 3 (#138232) +U 4 (#3e4511) +R 4 (#0bb2b0) +U 8 (#2958d1) +R 5 (#1df330) +U 3 (#23af43) +L 5 (#4bbaa0) +U 7 (#23af41) +L 4 (#125270) +U 9 (#41ec91) +R 2 (#222ff0) +U 5 (#2936d1) +R 8 (#2e2310) +D 5 (#2e05a1) +R 3 (#0ae0c0) +D 11 (#074021) +R 7 (#52f6e0) +U 2 (#074023) +R 3 (#590720) +U 6 (#469f01) +R 3 (#34f792) +U 7 (#002dd1) +R 4 (#409522) +D 3 (#002dd3) +R 6 (#149f72) +D 5 (#1cc8f1) +R 5 (#095222) +D 7 (#3eab71) +R 3 (#236082) +D 11 (#3b3d71) +R 2 (#6e2530) +D 3 (#0887f1) +L 6 (#1795d0) +U 7 (#21f2d3) +L 6 (#194240) +D 7 (#2e0d03) +L 3 (#605a50) +D 4 (#257243) +L 8 (#0a5380) +D 7 (#2b70c3) +L 4 (#428fd0) +D 8 (#5b1513) +L 6 (#1bf3f0) +D 3 (#341241) +L 3 (#1f7ea0) +D 8 (#2eda01) +R 6 (#527980) +D 7 (#62ec43) +R 10 (#156e00) +D 5 (#53ce33) +R 4 (#3a5f20) +D 3 (#2f3bb3) +R 6 (#5dacd0) +U 4 (#47f0e1) +R 6 (#538c70) +U 4 (#32a283) +R 8 (#27c140) +D 9 (#198283) +R 6 (#1b5ba0) +U 9 (#15de53) +R 4 (#037d60) +U 7 (#373ac3) +R 7 (#282640) +U 7 (#33c993) +R 6 (#2f6bc0) +U 4 (#236a23) +R 5 (#4977b0) +D 4 (#076301) +R 6 (#56dc60) +U 3 (#30afb1) +R 2 (#720272) +U 8 (#2b0fc1) +R 7 (#19ac60) +U 7 (#07ff61) +R 3 (#585610) +U 2 (#4969b1) +R 7 (#56dc62) +U 5 (#029821) +R 9 (#60a4e0) +U 8 (#1688a3) +L 4 (#19a5b0) +U 3 (#20db03) +L 7 (#1a7950) +U 6 (#1ab903) +L 8 (#463660) +U 2 (#449963) +L 3 (#11ec80) +D 4 (#206da3) +L 8 (#1057b0) +D 6 (#17ffa1) +L 8 (#6cda70) +D 4 (#26df51) +L 3 (#001d70) +U 9 (#3e42f1) +L 5 (#55e962) +U 5 (#138341) +L 6 (#0c3e52) +U 9 (#4ae8f1) +R 8 (#0ad032) +U 7 (#14e3b1) +R 4 (#5a3b70) +D 7 (#1dad81) +R 11 (#3d8e92) +U 6 (#441b61) +L 6 (#20de92) +U 10 (#55efb1) +L 6 (#1d72c2) +U 10 (#1469a1) +L 6 (#21f4b0) +U 4 (#49b921) +L 2 (#560f10) +U 10 (#49b923) +L 3 (#03dc20) +D 6 (#249e01) +L 7 (#6859d0) +D 4 (#0947e1) +L 3 (#5d3fd2) +D 11 (#2c3801) +L 6 (#26cab2) +D 4 (#1f5b51) +R 13 (#0fcc92) +D 3 (#638131) +L 7 (#404362) +D 2 (#6cc863) +L 6 (#1d8d62) +D 4 (#161423) +L 6 (#595612) +U 7 (#09d071) +L 4 (#10a5d0) +U 4 (#633011) +L 8 (#3cddf0) +U 3 (#3a8471) +L 7 (#407050) +U 7 (#00b9a1) +L 3 (#2537e0) +U 2 (#00b9a3) +L 5 (#3a9220) +U 5 (#212a31) +L 7 (#572a62) +U 5 (#0b0ea3) +L 4 (#52f702) +U 6 (#0b0ea1) +R 6 (#077262) +U 9 (#116db1) +R 7 (#688352) +U 8 (#37c5e3) +R 7 (#23b522) +U 3 (#37c5e1) +R 6 (#4a4aa2) +U 9 (#57bf21) +R 4 (#60ae60) +U 3 (#06dc81) +R 3 (#47d900) +D 4 (#587561) +R 6 (#2940e0) +D 8 (#1268d1) +R 5 (#0ec482) +D 6 (#38b6c1) +R 6 (#59c532) +D 8 (#2e4421) +R 6 (#0b8022) +U 5 (#410a61) +R 2 (#7409d0) +U 6 (#28e351) +R 8 (#15d2e0) +D 4 (#12ab01) +R 5 (#100f80) +D 6 (#44c953) +R 4 (#33eef0) +U 6 (#23c7d3) +R 5 (#4696e0) +U 4 (#222123) +R 9 (#26d070) +U 9 (#4cec13) +R 2 (#560af2) +U 6 (#5099a3) +L 11 (#4b4b52) +U 4 (#10b4e3) +L 8 (#40e6b0) +U 6 (#1c6173) +L 5 (#2e31e0) +D 6 (#3d8c01) +L 7 (#1cc6f0) +U 9 (#083731) +L 4 (#463da0) +U 8 (#1cb711) +R 8 (#0b4110) +U 8 (#2252b3) +R 10 (#60b900) +U 7 (#2252b1) +R 8 (#0ce680) +U 5 (#467f81) +R 9 (#0ad0b2) +U 2 (#359203) +R 9 (#67bc02) +U 9 (#359201) +R 4 (#0653e2) +D 3 (#281ca1) +R 9 (#1b8ee0) +D 6 (#0b3861) +L 8 (#336f02) +D 3 (#3201f1) +L 4 (#4a85a2) +D 7 (#111eb1) +L 9 (#1c9c90) +D 7 (#145011) +L 11 (#083be0) +D 2 (#516321) +L 6 (#083be2) +D 9 (#20bb21) +R 5 (#3d8030) +D 6 (#404031) +R 8 (#642420) +U 4 (#56cf61) +R 7 (#55c610) +D 4 (#20d1e1) +R 9 (#1b5e10) +D 9 (#1e85d1) +R 9 (#361f10) +D 3 (#3d69f1) +R 9 (#16da12) +D 6 (#2d6471) +R 5 (#5d9642) +D 3 (#4656f1) +R 6 (#44b540) +D 8 (#2b6131) +R 7 (#2ce630) +D 7 (#2b6133) +R 3 (#61b2a0) +D 4 (#4c2661) +R 4 (#3b7372) +D 8 (#01ed73) +R 5 (#4c3962) +D 3 (#01ed71) +R 4 (#4ba142) +U 9 (#4377f1) +R 3 (#1deb32) +U 6 (#3f3323) +R 3 (#22b722) +U 7 (#37bc13) +R 3 (#1918d2) +U 4 (#13c8b3) +R 5 (#1918d0) +D 12 (#3e4d83) +R 3 (#22b720) +D 5 (#0cefe3) +R 5 (#2bf9f2) +D 9 (#3122d3) +R 8 (#41a3e2) +D 10 (#3122d1) +R 8 (#0b6e02) +U 7 (#266641) +L 4 (#5a1cc2) +U 5 (#060d11) +R 4 (#32ff32) +U 7 (#446c91) +R 5 (#319c82) +D 3 (#446c93) +R 7 (#1bf562) +D 2 (#44af13) +R 6 (#6f3132) +D 6 (#312433) +L 5 (#489da0) +D 5 (#53a343) +L 8 (#489da2) +D 3 (#5a6673) +R 7 (#0f0f92) +D 6 (#01b8b3) +L 3 (#3c6b12) +D 5 (#725613) +L 10 (#114b12) +D 4 (#14ace3) +L 8 (#30d292) +D 9 (#1ebac3) +L 6 (#3c4292) +D 7 (#39e2a3) +L 2 (#1f3882) +D 4 (#658381) +L 3 (#0b0252) +D 8 (#699e71) +L 10 (#2b4ae2) +D 2 (#1ac903) +L 5 (#60cef2) +D 4 (#515ea3) +L 5 (#4d3790) +D 6 (#354183) +L 4 (#398170) +U 3 (#7163a3) +L 10 (#398172) +U 7 (#0608f3) +L 8 (#4d3792) +D 4 (#06c7a3) +L 7 (#5819c2) +D 5 (#17c3f1) +L 3 (#0c8892) +D 5 (#67f951) +R 6 (#3ff470) +D 12 (#397601) +R 6 (#3ff472) +D 4 (#4f6451) +L 9 (#665a22) +D 2 (#1705c1) +L 3 (#14df92) +D 7 (#4b40a1) +L 4 (#1fa1f2) +D 5 (#3b7231) +L 10 (#063e12) +D 7 (#2a8fb1) +L 4 (#6b71e2) +U 4 (#218101) +L 4 (#2e2f52) +U 4 (#221411) +L 5 (#200732) +U 5 (#0ac7e1) +L 9 (#50af62) +D 9 (#4b7c81) +L 3 (#50af60) +D 4 (#2b9d31) +L 13 (#4766d2) +D 5 (#25ef21) +R 3 (#119862) +D 2 (#517a31) +R 4 (#3e6072) +D 10 (#21cfa1) +R 6 (#4437f2) +U 12 (#30f031) +R 4 (#036652) +D 7 (#453c91) +R 5 (#05ea22) +D 10 (#2da1e1) +R 2 (#4da5a2) +D 2 (#2da1e3) +R 6 (#2bffc2) +D 9 (#453c93) +R 9 (#4ed2d2) +D 3 (#141b71) +R 9 (#3ecad2) +D 5 (#234873) +L 11 (#3c4982) +D 3 (#2ed113) +L 7 (#3c4980) +D 7 (#4a6553) +L 8 (#49bf02) +D 8 (#337011) +L 9 (#2eb772) +D 3 (#690ec1) +L 2 (#25f0a2) +D 7 (#62eeb3) +L 6 (#1ae012) +D 7 (#34e643) +R 6 (#382a72) +D 7 (#281183) +L 11 (#271932) +D 4 (#470d23) +L 9 (#4ca812) +D 4 (#6f1ea1) +L 7 (#4702f2) +D 8 (#34e641) +L 4 (#155c42) +D 10 (#62eeb1) +L 7 (#3a2422) +D 4 (#3f7ca3) +L 9 (#39b860) +U 4 (#5cf1c3) +L 13 (#39b862) +U 4 (#4751f3) +L 4 (#322dd2) +U 4 (#539531) +L 5 (#4171a2) +U 5 (#539533) +R 9 (#075042) +D 5 (#1e57d3) +R 7 (#5cc952) +U 5 (#0ac0d3) +R 6 (#1af522) +U 9 (#374273) +L 4 (#2992f2) +U 2 (#299893) +L 4 (#267bc2) +U 10 (#47af63) +L 3 (#282402) +U 4 (#06a063) +L 5 (#5cce72) +U 9 (#47fba3) +L 3 (#1168e2) +U 10 (#3b1071) +L 4 (#178c22) +U 3 (#42b971) +L 5 (#178c20) +U 8 (#1dca41) +R 9 (#442912) +U 8 (#5b9241) +L 3 (#1da682) +U 7 (#31ff23) +L 10 (#3cd732) +U 5 (#33bab3) +L 5 (#159fb2) +U 4 (#2e5d93) +L 7 (#5f9702) +U 4 (#5566e3) +L 4 (#0ba292) +U 8 (#07f963) +L 3 (#410a02) +U 3 (#6ace93) +L 5 (#0913a2) +U 2 (#21a553) +L 10 (#3d71a2) +D 6 (#25ff63) +L 5 (#5285b2) +D 8 (#3cfc73) +L 3 (#13aba2) +D 7 (#24a793) +L 4 (#29e4c2) +D 12 (#1dc4b3) +L 5 (#3cb102) +D 8 (#5b8433) +L 5 (#3cb100) +D 7 (#22d9f3) +L 7 (#6db9c2) +D 6 (#4cd683) +L 6 (#083f42) +U 11 (#09bbc3) +L 5 (#609002) +D 7 (#12b603) +L 7 (#041be2) +D 8 (#4f3823) +L 5 (#5a3412) +U 7 (#14de13) +L 6 (#036ee2) +U 5 (#442823) +L 7 (#6c5502) +U 3 (#2edcc3) +L 9 (#3b6b72) +U 8 (#321e73) +R 7 (#48e5a2) +U 6 (#2fbec3) +L 12 (#44ed12) +U 6 (#0c1893) +R 12 (#61a8e0) +U 4 (#073043) +R 4 (#0d47c0) +D 6 (#469b63) +R 2 (#047ae0) +D 10 (#39b7d3) +R 3 (#2492d0) +U 8 (#2026f3) +R 3 (#73fb40) +U 2 (#201333) +R 3 (#372f72) +U 2 (#2c6143) +R 10 (#615ea2) +U 4 (#355653) +R 7 (#3876d2) +U 9 (#080463) +L 8 (#3af4b2) +U 10 (#6840e3) +L 3 (#5472d2) +U 9 (#005683)
\ No newline at end of file diff --git a/aoc2023/src/day19/input.txt b/aoc2023/src/day19/input.txt new file mode 100644 index 0000000..8fb7e78 --- /dev/null +++ b/aoc2023/src/day19/input.txt @@ -0,0 +1,766 @@ +xhs{m>3771:A,a>2552:R,A} +smp{a<3732:R,m>1999:R,x<925:R,R} +zkk{m<2240:R,a>3345:R,R} +nqz{x<2056:R,a<3165:R,m>1748:A,vx} +mm{x>486:A,m>3523:R,A} +bg{s>3338:A,kgm} +qf{x>537:gqx,bqz} +lv{s<2341:sc,s>2505:rtm,xqj} +bv{a>2574:rvm,ncd} +ssz{a<729:A,m<3390:ld,m<3772:A,R} +gm{a>3900:A,m>2508:R,x>744:R,A} +ts{m<642:R,m<843:gmm,s<325:gf,A} +rtm{x<2920:A,m>3132:R,R} +qgz{x>2082:hvx,a<1490:A,s<3742:R,kks} +kpf{m<2390:cm,ft} +ghn{a>2066:A,s<3291:R,a>2028:A,R} +mkx{s<975:R,s<1112:A,m>756:A,R} +tg{x<3668:A,x<3835:A,ftz} +chj{x>733:R,a>3064:R,qs} +ndl{x>2773:R,x<2370:R,R} +dsq{s>838:A,s>496:A,m<2191:R,R} +jl{m>1219:A,R} +chh{x<973:R,A} +fxv{x<2543:R,m>3368:A,s<3567:R,R} +qvl{m>1648:A,R} +fpb{a>1367:R,x>2441:R,a<1220:A,R} +tph{a<2677:tss,R} +cnc{s>1274:A,a<3947:R,A} +cz{m>2865:R,a<3514:rm,s>687:xsr,A} +zzq{x>76:A,A} +vp{x<162:A,R} +bth{x<1859:zmq,a>2455:hq,mb} +rm{x<1253:A,R} +ndq{s<390:R,x<2982:A,m>3468:R,R} +vdh{x>2464:bx,m>3276:fj,ffs} +bjc{a>3069:R,R} +sqk{m>3029:R,s>130:R,sln} +xl{x<2157:A,R} +xrs{s>3440:qgz,a<1479:qsv,xt} +dnt{x<538:qc,m<1343:jqh,x>645:fm,jvb} +pms{a>2603:R,A} +lf{x>390:A,s>1617:A,A} +dvm{s>1052:R,R} +mnc{x>2703:R,A} +rxt{a<595:A,R} +pb{s<3737:ngp,x>3125:A,dbk} +zr{a<2605:R,x<422:R,A} +pd{s>1915:xhs,zpl} +vm{a>2377:R,R} +in{x<1629:dv,nfq} +xdt{s<1791:fpb,chl} +gg{s<393:fd,x<2091:dg,tz} +xsr{s>1167:R,m>2006:A,a<3531:A,R} +qs{x<719:R,x>726:R,s>2919:A,R} +kgm{m>2140:R,s<3253:R,m>1246:A,A} +gvv{s<3124:flg,m>3004:jxl,x>2411:vf,hfg} +nv{m<3088:A,a>1588:R,x>3499:A,R} +lx{s<3277:R,a>2880:R,A} +cls{m>3314:gt,kpv} +ct{a>3320:R,a>3189:A,s<2328:R,R} +bqz{m<1572:rjv,x<437:R,s>1572:mzn,td} +qm{a<1975:A,s>623:R,A} +zx{m<3520:R,s>1981:R,a<2633:A,R} +hbk{a<1441:A,x<2151:R,x>2450:A,A} +zp{a>2928:A,R} +njc{x>225:R,a>3543:A,a>3524:A,A} +dt{s<467:R,a>3868:R,x<1448:A,R} +qlj{a<1744:A,s>1375:A,R} +ln{x<546:dk,x<1088:jm,s>996:sdr,grf} +zxc{x>1220:R,a<1570:R,a<1721:R,A} +hqv{x<1168:A,a<3325:cs,zkk} +cfx{m<1777:R,A} +tb{a>3324:A,a<3310:R,R} +fx{a>2975:R,x>2219:R,A} +rnm{m<3699:A,a>1555:R,R} +zpl{a>2213:R,m<3703:A,R} +zvm{s<3648:R,x>2112:R,s>3879:A,A} +gkt{x>1247:A,m>2344:A,m<1950:R,R} +qfz{x<37:A,A} +dq{a<2482:A,A} +gpj{m>2417:A,m>1980:A,tq} +khx{s>3504:R,a>633:A,s<3211:R,A} +kh{m>629:A,A} +zg{a<2645:mg,s<259:sqk,x<2942:gg,md} +sxj{m<1304:xlx,lh} +lh{m<1742:bb,x<2813:rh,m>2090:qhd,bv} +jxg{a>3806:A,R} +sg{a<3432:nn,m<1550:pp,m<3113:ps,js} +pck{m<1755:dmv,s>3255:hb,s>2954:lfz,ns} +xqj{x>2860:A,A} +hm{a<3006:R,A} +bbv{a>3355:rf,s<1113:hqv,m>1976:qzk,zxk} +rpd{s<3371:R,A} +jzc{s>1320:A,s>1117:R,s>948:R,R} +mjp{m<3107:db,x<3329:lsq,x>3386:jgq,R} +chl{x>3157:A,m>2688:zq,tf} +ffq{x<2660:hbk,s<2231:cvs,A} +pv{x>662:bc,m>2737:fn,scz} +rf{x>1195:A,x<1012:R,hp} +mg{s<320:mnc,ndq} +md{s<368:ks,a<2900:A,a>2968:A,hxd} +rb{s<976:R,A} +cvv{s<1568:R,s>2041:A,a>2529:R,R} +hvx{s>3628:A,m>1706:R,m>1033:R,R} +fhg{m>3499:R,a>2802:nm,R} +cm{a>793:gnt,s<342:vg,dl} +mzt{m<1547:R,A} +cf{s>3282:A,R} +vr{m>1574:zzp,cfl} +vbd{x<446:R,m<2633:R,A} +mdz{a>2230:A,A} +dck{s<2674:R,m>1804:A,m>1642:A,A} +dk{x>356:A,R} +sxr{m>1197:vq,qzn} +sl{a>3532:R,A} +rhf{x<592:A,m<3490:A,A} +hp{a<3393:A,a<3436:R,x<1078:A,R} +sln{m>2771:A,R} +hq{m>3351:A,x>1966:A,m<2756:R,R} +bm{m<2254:R,hpt} +vt{m<3667:R,x<1031:A,A} +dv{a<2349:npz,a>3297:tck,x<703:gq,lm} +ddj{m<1813:mfd,A} +fln{s>2720:A,R} +xft{a<198:A,a<267:R,m>3094:A,A} +xdr{s<2440:R,m<1370:jcs,a<1346:rrl,R} +hxc{s>3518:A,a>1208:R,x>3051:R,R} +bc{a>3542:zb,s>1446:sr,a<3492:pjm,cz} +lfz{a>3921:A,m>2651:A,s>3077:qj,A} +qmk{m>2209:A,R} +bt{m>3699:R,x<2709:R,m>3441:A,A} +cfn{x<203:R,x<238:R,x>260:R,R} +hbb{m>3171:R,R} +xz{a<1217:A,m<3348:R,R} +tz{a<2930:A,A} +cvj{x>3663:A,R} +kb{x<812:A,x<882:R,m>1354:R,R} +fgc{a<3044:A,m<3797:A,a>3181:R,A} +gz{a>2501:R,x>662:R,A} +gs{m>2349:pbh,xc} +cxt{m<648:A,R} +qr{s>3439:A,s<3200:A,s>3359:R,R} +mvk{x<310:A,A} +rfx{a<3471:pb,jrp} +df{a>2425:R,a>2173:A,m<2169:A,A} +lkv{x<1956:R,m>2601:jvg,zvm} +fgv{a>3335:R,a>2798:hck,pqd} +tn{a>3644:R,m>3271:R,R} +vhl{m>3441:pd,lt} +lg{x>214:xjz,jmz} +dkl{m>979:R,x>271:R,a<2808:A,R} +pdp{s>2793:R,A} +jjf{a>3211:R,A} +tv{s<2116:sx,xsq} +gnt{m>1411:R,x<2631:A,x>3267:A,R} +lnj{a>2864:R,A} +jd{x<275:cfn,s>860:jzc,mvk} +zzd{x<1338:A,a<3957:R,A} +xlx{m<789:jqs,dpd} +hql{s<2258:cb,x>815:knq,x>758:vlq,chj} +qsv{m<2600:A,cg} +bb{a>2571:rth,m>1465:A,x<3017:R,cp} +dz{a>2559:gs,qf} +ps{s>3207:R,gkt} +mf{x<611:R,A} +gp{m>2489:zdd,x>227:R,gnc} +hv{a<3335:R,a<3515:A,R} +klr{x<295:A,m>520:R,m>218:A,A} +zq{x>2372:A,R} +zf{a>1674:R,cn} +lm{x<1313:hgj,txn} +npz{s>1686:rt,kt} +qdh{a<2898:R,x>2218:R,A} +pz{x<2285:A,A} +hdf{m<2720:A,A} +bmc{x>3617:rcl,hsb} +zh{s<1038:A,a>2811:R,R} +zfz{x>2711:R,A} +sgr{a>3615:R,m>1350:jjj,a<3585:A,A} +qvk{s>2967:R,m>3342:A,A} +pqd{s<99:A,s<208:A,x<2116:R,R} +tbd{x>3755:A,a>441:R,A} +nn{x>1301:fln,pdp} +hxd{m>3170:R,m<2811:R,x<3367:R,R} +fk{x>3114:nsg,dmq} +vzf{x>2720:ms,s>481:mhr,s<294:fgv,nqz} +lnn{s<2149:R,x>3515:tbd,a<342:xft,zcz} +tss{s>3258:A,A} +sh{a>1883:qm,m>3431:A,chx} +qj{a<3876:A,x>836:R,R} +vl{s<2783:R,m<1099:R,x<1473:A,A} +bkt{a>3162:A,s>3117:A,x>215:A,A} +jh{x>101:R,s<1379:A,s<1659:R,R} +zcp{s<611:ff,qkd} +cr{s>772:kr,m<1018:lxl,vzf} +ms{s>407:zt,x>3417:R,chq} +jm{s<1028:A,R} +bn{m<3021:vzz,m<3604:qvk,x<271:fgc,R} +ngl{s>3536:sbr,s>3350:qdh,A} +zsf{m>1545:A,x>1434:R,a<3918:R,A} +ggp{s>585:R,R} +kr{m<1070:vfc,zp} +kks{a>1629:R,a<1563:R,a<1592:A,R} +btt{a>801:A,R} +jsj{s>3393:A,x<3185:R,A} +zgx{m<855:xl,A} +gt{x<259:R,A} +gqx{x<621:A,a<2443:hx,gz} +gnk{a<2992:R,R} +vc{m>2396:xx,cl} +hhp{m>1027:sgr,ph} +chr{x<2230:R,x<2596:R,R} +qkd{x>797:A,x<297:A,s<793:R,A} +zsv{x>3189:A,s>3280:pz,x<2182:A,jxg} +bmz{x>286:A,R} +rcl{s<3551:R,a>1235:R,A} +sxl{a<1497:R,x>1555:A,R} +xmv{x<2697:shm,m<2582:bl,st} +fd{a<2818:R,R} +jgq{x<3411:R,R} +zj{a<2947:A,R} +mgb{x>2219:A,s>580:A,R} +jjs{m>2508:pj,smp} +mfd{s>3169:R,x>3872:R,R} +kpn{a<3544:R,a>3555:R,R} +lq{m>3447:A,A} +bfq{s>1868:A,qpt} +hlc{m>3423:rnm,a<1561:A,nv} +zn{x<915:A,m<570:A,a>3454:A,A} +zmq{a>2577:A,s<2162:R,a<2036:R,R} +sqz{s<1195:A,R} +jsd{m<1634:vs,R} +dmq{m<1655:A,A} +nhl{a<2744:A,A} +mkm{s<482:A,s>608:A,R} +rc{m>234:A,x>2208:R,m>97:R,A} +zz{a>3346:vlc,a<2753:qqc,s>276:fx,rc} +js{a>3452:R,m<3619:A,R} +tj{a>1494:R,m<658:R,R} +qhd{s<2443:mdz,znr} +shv{m<2846:A,x>2878:A,A} +ttn{a>3182:R,a>3140:R,x<475:R,R} +ngp{x>3141:A,A} +pcn{x<1006:R,s>520:A,A} +ngq{m<1256:R,s>1251:R,a>658:R,R} +fkd{a<3655:dd,a<3774:cfx,s>2066:qmk,fk} +qzk{a>3335:R,R} +dx{m<2588:zcp,a<2083:sh,x<601:rrd,fh} +qc{x<432:zh,s>956:R,A} +fm{s<642:R,m>2905:lq,dcp} +rr{s>2991:xmv,ths} +dcp{a>2785:A,s<1372:R,x>674:R,A} +bf{s<3336:A,a<1863:A,R} +glx{x>2156:R,nq} +rxv{s<984:A,R} +plp{s>2690:A,a>3040:R,x<1194:A,R} +zdd{x<411:A,s<2583:A,s<3374:R,R} +sbp{x>2442:R,m>802:A,a<1990:A,A} +rzc{m>1519:R,a>2789:A,R} +hgj{x>992:kbh,a>2782:hql,mdb} +gc{m>3015:A,a<3333:A,x<1181:R,A} +xh{a>3215:A,x<3863:qtm,lnj} +jdx{a>296:hz,s>2019:A,a<185:R,R} +ftz{a<2615:A,A} +sr{a>3503:A,m<3116:R,vt} +bz{m<1363:A,a<3918:R,x>347:A,A} +lxl{m>375:ts,x>2633:ssr,zz} +rpl{a<3086:zg,km} +rcc{a<3086:lx,x<186:A,x<206:jjf,bkt} +xjz{s>2664:dkl,m>1134:rzc,a<2824:klr,R} +kf{m>2364:jp,clb} +chs{s>2600:qd,R} +td{a>2469:A,a>2389:A,x>480:A,R} +st{m<3511:R,x<3456:R,s>3602:cvj,rpd} +hmq{a>2111:A,x>1851:R,A} +xc{x<505:zr,pl} +th{x<582:pm,lk} +sn{m<2549:R,s>2203:R,dlr} +chx{m>3054:A,a<1763:R,A} +kk{m>3497:A,a<1434:A,R} +xj{a>2832:lkb,s<3601:A,s>3811:rbp,rfg} +ncd{a<2175:R,R} +dmv{x>1035:A,m<796:R,x>598:jl,bz} +zdz{s>3645:R,x>2044:R,a<2560:R,xv} +bj{x>1208:R,x<1157:R,m>1150:A,R} +sbr{m<3368:R,R} +kx{x<3147:vdh,jvl} +kv{m>3555:bmz,x>265:sl,A} +qd{x>1553:A,a>2834:A,s<3385:A,R} +cxs{s>1563:cxt,x>2102:A,bs} +lt{s<1846:A,x<3520:R,x>3795:R,nkk} +sv{m>3685:R,a>2243:R,R} +ft{a<963:rxt,x>2779:A,x<2244:A,lzv} +rl{a<1094:rr,s>2736:bbb,s>1976:rhb,fr} +jn{x<583:ttn,s<1225:A,A} +jxl{a<2453:rxj,a>2766:ngl,zfp} +cvs{m>285:R,A} +jqh{a<2775:dvm,gbn} +dg{a<2815:A,R} +jvl{x>3689:xh,x<3456:mjp,znq} +gnc{x<140:R,x<171:A,R} +fkh{a<3335:R,A} +vrm{m>937:A,m<448:R,R} +scz{m<2202:qk,gp} +gvq{s<123:A,m<3059:A,a<3441:A,A} +mdb{m>1624:gpj,hf} +xsc{x<1257:bbn,x<1486:A,sxl} +dp{m<1786:A,a<3541:R,A} +sf{m>773:xdr,ffq} +dlr{x<2407:R,s>1899:R,x<2587:R,R} +rk{x>2534:A,A} +rn{s<2830:A,hbb} +jvg{s>3506:A,m>2651:A,m>2621:A,R} +hfg{m>2738:zdz,a>2232:lkv,fvs} +lzv{s<480:A,A} +tqf{m>2290:ssz,xb} +vmf{m<1433:qhx,m>2129:jcz,a<970:xk,dck} +gv{m>563:R,x>1087:bd,m<346:R,vz} +fvs{s>3483:A,a<1973:bf,x>1995:ghn,hmq} +tqk{m<963:R,a>2859:R,A} +rx{x<977:nnk,bqr} +rvm{x>3305:A,m<1917:R,R} +clb{x>1123:R,chh} +pm{s>967:A,vbd} +zcz{a<501:R,R} +fsz{a>2745:R,R} +nfq{s<1487:jbm,a>1745:jjb,rl} +hdh{m>3509:A,s<1411:R,m<3227:A,A} +dgv{m>2115:A,A} +ccf{x>582:sxr,s>2966:qr,s<2421:btt,vmf} +kbh{x<1100:hgk,m>2034:smc,bj} +dd{m<2080:ct,s>2201:rk,hv} +ff{s>381:R,x<841:R,R} +gtx{s<890:A,m<3503:A,x>2000:A,R} +bx{m<3245:R,m>3522:zfz,x<2768:tc,R} +cbz{s<800:kpf,vr} +hjj{a<1141:R,s<3290:R,A} +nnk{s<496:vls,a<1328:nt,m<2251:R,gtr} +mhr{m>1624:R,m<1228:R,m>1458:ggp,mgb} +grb{s>2354:A,s>824:R,s<393:R,A} +vzz{m>2291:R,m<1985:A,A} +dc{s<2446:A,s>2870:A,s>2640:A,R} +cb{s>956:kb,A} +bkv{s<917:bm,jn} +cmn{a<1575:A,s>2325:A,s<2132:pzh,A} +vq{x>1200:R,m<1709:A,A} +xx{s<2987:R,s>3641:A,m<3099:gnk,A} +skj{x<2732:pgx,x>2863:pqn,a>2109:R,A} +qk{x<433:R,x<540:grb,s>2612:dp,mf} +nb{a<3379:dgv,x>433:xqb,mzt} +skd{s>85:R,a>3825:R,s>57:bsr,vj} +bsr{a<3615:R,A} +bqr{m<2638:A,kk} +gmm{s<271:R,R} +ssr{m>170:mkm,A} +xr{x>1412:R,R} +dpd{s>2570:rz,a<2463:ndl,m<1077:tqk,fsz} +cg{x>2240:R,s>3092:A,s<2882:R,A} +zt{s>605:R,m<1978:R,x<3468:A,A} +gbn{a>2840:A,x>606:R,A} +sk{s>627:A,R} +xv{s<3310:A,x<1827:R,R} +jvb{m>2641:rhf,x<598:dsq,x>615:R,nr} +dbk{a<3270:R,s<3854:A,R} +ld{x>1033:A,s<1042:A,A} +hz{s>2156:A,R} +hgm{a>3479:zsv,a>3293:jsd,bg} +sd{s<1388:R,m<220:A,a<3336:A,R} +ks{x<3304:R,A} +cp{x<3510:A,s>2786:A,R} +mc{x<138:tx,m<1731:lg,nd} +grf{a<3910:dt,zzd} +tm{m>2653:A,R} +znm{x>3272:R,tj} +qtm{a<2683:A,m<3283:R,A} +cpj{x>523:A,m>2682:A,m<2527:R,A} +vx{x>2368:A,A} +kp{x>444:R,x<233:R,A} +vlq{a>3107:tm,s>3354:A,m<2037:R,R} +mzn{m>2863:R,A} +zb{s>1752:R,x>1070:zgf,sk} +pqn{m<2758:A,R} +lsq{m<3507:A,s<957:R,R} +krr{a<3740:R,R} +czn{a>3163:R,m<1999:R,a<3012:A,R} +nkk{s<2070:R,R} +nrt{s<1315:A,x<2219:R,A} +ds{a<1180:hjj,m<1480:hxc,pf} +xb{x<928:R,s<680:dpt,ngq} +mj{a<2118:R,R} +kpv{x>329:A,A} +dpt{x<1220:R,R} +vls{a<1332:A,a>1469:A,R} +cs{x>1439:R,s>709:A,R} +tl{a>1243:jsj,ds} +xbt{x>1513:A,fz} +hpt{m<2917:R,m<3336:R,R} +fr{m<1904:hdc,xdt} +dsl{x<891:R,a<3061:A,A} +ph{m>522:A,A} +tck{a>3652:zdg,a<3466:vvc,m<1552:gl,pv} +lk{x>628:A,x<605:R,x>614:R,A} +nj{s>2734:A,R} +khd{a>2723:hm,x<1375:lxg,a<2580:A,zx} +vvc{x<813:nb,s<1759:bbv,a<3401:kf,sg} +fh{m<3059:R,sv} +rt{m<2548:ccf,bqs} +dtv{s>2651:njc,kpn} +db{s>1037:R,s>793:A,x<3290:A,A} +rfg{x>2488:R,A} +rxj{a>2073:fxv,A} +zgf{a<3590:R,R} +lxg{a<2574:R,m>3113:A,a>2644:R,A} +pp{x<1117:zn,a<3445:A,R} +hk{a<3058:A,R} +cps{x>673:gv,a<3514:lf,dtv} +bl{m<1269:A,s>3432:A,s>3277:A,cml} +rhb{m<2194:sf,zjt} +rth{s<2408:R,m>1515:A,R} +vs{x>2539:A,A} +znq{m>3125:R,A} +hzc{m>1851:mv,x>716:qg,jx} +tzb{m>3238:tg,xxd} +jxd{a<2457:A,A} +cn{s<3324:A,A} +qqc{x<2085:R,m<164:A,m>259:A,R} +rbp{m>2847:A,m<2787:A,R} +jjj{x>876:A,a<3595:A,R} +smc{s<1533:R,a>2843:plp,x<1198:R,pms} +ckf{s>1717:A,s<1570:R,R} +kl{a<2275:A,A} +fl{s>2371:tzb,vhl} +rz{a<2450:R,s>3365:A,R} +rjv{s<1810:A,m>758:A,s>2893:R,R} +hx{x<671:A,a>2389:R,x>691:R,R} +jp{s<2734:gc,s>3506:A,R} +bnt{m>837:A,m>433:R,m>254:R,R} +hgk{a<2704:A,a>3062:A,nxg} +txn{m>2615:ktj,tv} +pgx{a>1994:R,x>2611:R,A} +xxd{m>2723:A,s<2919:zvg,m>2567:R,vm} +gtr{s>886:A,a<1457:R,R} +jcz{s>2754:R,a>1065:R,a<523:A,A} +chq{x<3072:A,x<3293:R,R} +clz{s<3150:fkd,s>3490:rfx,hgm} +hck{x>2194:R,s>122:A,A} +vd{m>1534:jjs,a>3770:kmt,cj} +qzn{x>1103:R,s<2513:A,A} +pj{m>3377:A,A} +tc{a>3418:R,R} +kt{a<1141:tqf,s>1093:hzc,a<1584:rx,dx} +gf{a<3431:A,A} +jx{s<1412:vrm,s>1565:A,dm} +vrl{x>386:xz,R} +mz{a<2492:A,A} +mkg{s>1805:vc,a>3085:bkv,a<2882:dnt,th} +ns{a>3913:R,bdr} +kq{s<2373:A,bt} +jcs{s>2567:R,s<2521:A,R} +jbm{a<2334:cbz,m<2533:cr,s<516:rpl,kx} +pjm{m<2956:A,pcn} +nt{a>1236:A,m<2027:A,R} +rbf{s<846:R,m>2754:hdh,x<73:qfz,jh} +hf{s<2598:cvv,A} +cl{s>3154:hk,a<2910:dc,m>1368:czn,ccj} +rh{s>2442:jxd,s<2047:ckf,s>2249:df,A} +vj{s<31:R,a<3675:R,a<3727:R,A} +qhx{a<1403:R,s<2780:A,R} +hsb{s<3410:R,a<1336:A,A} +vfc{x<2652:kh,s>1086:bjc,m>636:R,A} +cd{s<1248:R,a>2984:R,A} +nhf{a<3351:bk,gvq} +jmz{x>176:R,a>2694:bnt,a>2565:R,vp} +cfl{a>1330:sbp,s<1255:mkx,m<858:R,pqm} +lkb{a<2993:R,m<2845:R,A} +jjb{a>3094:clz,m<2393:sxj,x<3056:gvv,fl} +rrd{a<2231:A,m>3181:kl,x>325:R,dkj} +fj{m>3651:R,gtx} +hdc{x>2461:znm,s>1764:bfq,s>1606:zgx,cxs} +kmt{x<1020:xjj,s<2087:xr,A} +cj{m<730:txd,x>819:A,kp} +xqb{s<1587:rb,a<3436:R,vpg} +xq{a<3606:R,x<329:R,R} +tq{s<2112:A,s<3362:R,A} +zzp{x>2975:sqz,m<2520:R,R} +pqm{m<1122:A,s<1390:R,a>875:R,A} +jq{x<3451:R,cf} +xjj{s>2372:R,x<668:A,s>1023:R,R} +tfq{s>3172:R,m>1532:R,A} +bqs{x>919:xsc,vrl} +thp{a<2602:R,m<2928:R,x<247:A,A} +dkj{x>141:A,m<2971:R,A} +pzx{x>2642:A,a<3478:A,R} +ths{x<2809:sn,a>725:qvl,m<1362:jdx,lnn} +qg{a>1868:mj,m>836:A,zxc} +tx{s>1835:tph,m<2098:px,rbf} +vf{a<2428:skj,m<2736:pg,x>2633:shv,xj} +km{s>209:zqs,a>3504:skd,x<2757:glx,nhf} +kj{s<3287:nj,thp} +cml{m<1837:A,s<3096:R,a>494:A,R} +rlc{m>474:R,m>251:A,x>2484:A,A} +txd{s>2156:R,A} +gl{a>3563:hhp,cps} +ccj{m>569:A,s<2508:A,R} +pf{m>3126:A,x>3194:R,R} +pbh{m>3239:mm,cpj} +zjt{a>1394:cmn,lv} +drm{a>1592:A,R} +bdr{a<3869:R,m>2643:A,x>1082:A,A} +jqs{s>2614:rlc,dq} +mv{x<623:R,qlj} +nr{m<2107:R,R} +zdg{a<3847:vd,s>2594:pck,ln} +xk{s<2671:A,m>1780:R,A} +px{s<685:zzq,s<1444:A,a<2772:R,A} +znr{m>2244:R,a>2352:A,x<3509:A,R} +bk{s>79:R,x<3271:R,A} +ktj{x<1421:khd,m<3145:xbt,x>1493:chs,zj} +hb{s>3741:R,s>3440:A,gm} +ffs{s<1003:A,m>2845:cd,x>2032:nrt,hdf} +dl{x<3044:R,m>1590:A,m<588:A,A} +vg{m<1260:A,s<201:A,a>302:A,A} +zfp{s>3617:chr,R} +qpt{x<2038:R,s<1806:R,x>2275:R,R} +jrp{m<1617:krr,s<3809:A,A} +zqs{s>394:pzx,tn} +knq{x>908:R,x<872:R,dsl} +bbb{x<2800:xrs,a>1484:jpt,x>3526:vrp,tl} +fz{s<1941:R,R} +nm{a>2984:A,m>3291:A,A} +rrl{s>2543:A,a>1195:A,a>1143:R,R} +jpt{a>1614:zf,m<2537:jq,hlc} +mb{s>2480:A,a>2039:R,A} +flg{x<2119:bth,m<3180:mz,a>2238:fhg,kq} +qlg{a>3593:R,A} +nd{s<1985:jd,a<2754:kj,x<224:rcc,bn} +nsg{x>3601:R,R} +pg{a>2794:A,m>2531:A,tk} +vpg{a<3448:A,x>601:A,m>2200:A,R} +qq{a<3599:qlg,xq} +mjq{m>906:A,R} +tk{s<3534:R,A} +tf{x<2430:A,m<2307:A,x<2765:R,A} +bd{m>361:R,a>3529:A,R} +xsq{a>2809:vl,a<2624:tfq,m<1412:mjq,nhl} +bs{m<1209:R,x<1880:A,A} +fn{a<3588:kv,a<3614:qq,s<1821:cls,rn} +xt{m<2535:A,drm} +pzh{x>3042:R,x>2454:A,R} +sx{x<1429:bvs,rxv} +vz{x<933:R,A} +nq{m<3063:R,A} +dm{m>867:R,A} +sdr{s>1536:zsf,cnc} +bvs{x<1372:A,x<1409:R,m>1611:A,R} +zxk{m>1166:tb,m>571:fkh,sd} +nxg{x>1061:R,x<1037:R,x>1045:R,R} +gq{x<350:mc,a<2674:dz,mkg} +vrp{x<3760:bmc,ddj} +bbn{x>1096:A,m<3379:A,s>2981:R,A} +sc{s>2125:R,A} +vlc{s<330:R,x>2068:R,R} +pl{s>2521:R,x<590:R,R} +shm{m<1775:R,a<392:R,khx} +zvg{s>2600:A,R} + +{x=864,m=2222,a=195,s=384} +{x=901,m=448,a=737,s=1768} +{x=2926,m=108,a=66,s=710} +{x=447,m=2075,a=739,s=2} +{x=597,m=681,a=975,s=28} +{x=2159,m=1819,a=2019,s=618} +{x=384,m=15,a=1695,s=142} +{x=76,m=739,a=729,s=42} +{x=1070,m=3064,a=2917,s=2856} +{x=1584,m=1118,a=1134,s=1906} +{x=23,m=7,a=309,s=260} +{x=987,m=52,a=513,s=2353} +{x=2128,m=133,a=1707,s=2272} +{x=1721,m=9,a=10,s=2757} +{x=56,m=1928,a=2447,s=651} +{x=358,m=1514,a=208,s=2003} +{x=991,m=160,a=1850,s=29} +{x=135,m=900,a=257,s=1885} +{x=1594,m=1262,a=292,s=773} +{x=958,m=762,a=1835,s=129} +{x=204,m=851,a=781,s=51} +{x=393,m=77,a=65,s=1317} +{x=102,m=2858,a=694,s=133} +{x=1558,m=357,a=508,s=289} +{x=185,m=111,a=305,s=2389} +{x=877,m=2013,a=2980,s=2509} +{x=2494,m=1224,a=54,s=939} +{x=336,m=1421,a=2434,s=2183} +{x=375,m=713,a=2313,s=459} +{x=2899,m=54,a=334,s=1951} +{x=452,m=585,a=16,s=531} +{x=220,m=566,a=192,s=346} +{x=1556,m=1173,a=7,s=611} +{x=793,m=1179,a=549,s=16} +{x=2730,m=545,a=888,s=2861} +{x=8,m=136,a=1607,s=40} +{x=641,m=2099,a=2295,s=745} +{x=2342,m=100,a=1010,s=1306} +{x=3432,m=432,a=658,s=645} +{x=121,m=1563,a=1172,s=1807} +{x=60,m=1124,a=859,s=595} +{x=39,m=2653,a=1212,s=295} +{x=1810,m=2143,a=250,s=899} +{x=1049,m=1680,a=2472,s=66} +{x=1305,m=645,a=1311,s=18} +{x=32,m=1575,a=933,s=88} +{x=2066,m=2204,a=2147,s=48} +{x=806,m=263,a=862,s=406} +{x=1218,m=142,a=2380,s=2080} +{x=199,m=1608,a=815,s=504} +{x=1355,m=844,a=312,s=186} +{x=409,m=1271,a=2737,s=620} +{x=652,m=409,a=315,s=1051} +{x=2044,m=149,a=2045,s=3394} +{x=1787,m=496,a=142,s=313} +{x=70,m=78,a=953,s=872} +{x=1072,m=1733,a=541,s=115} +{x=254,m=302,a=1483,s=1537} +{x=239,m=1242,a=929,s=15} +{x=517,m=932,a=1899,s=844} +{x=2926,m=364,a=595,s=1294} +{x=1358,m=68,a=34,s=1728} +{x=2065,m=312,a=3623,s=181} +{x=414,m=451,a=876,s=80} +{x=1689,m=843,a=139,s=245} +{x=1136,m=289,a=2256,s=2537} +{x=99,m=1094,a=980,s=382} +{x=1610,m=751,a=456,s=143} +{x=717,m=113,a=530,s=502} +{x=2050,m=1025,a=431,s=48} +{x=3411,m=87,a=306,s=2865} +{x=1894,m=19,a=46,s=3399} +{x=574,m=1848,a=599,s=1924} +{x=3,m=1021,a=26,s=1166} +{x=776,m=1882,a=1946,s=453} +{x=1170,m=381,a=957,s=601} +{x=1703,m=200,a=298,s=1246} +{x=117,m=43,a=286,s=1131} +{x=2642,m=18,a=552,s=8} +{x=333,m=458,a=518,s=1260} +{x=2391,m=794,a=1032,s=1156} +{x=1439,m=629,a=1737,s=268} +{x=70,m=465,a=603,s=1399} +{x=312,m=648,a=875,s=785} +{x=3106,m=348,a=45,s=198} +{x=2991,m=18,a=1424,s=436} +{x=397,m=1490,a=520,s=53} +{x=553,m=232,a=2916,s=781} +{x=1404,m=738,a=925,s=513} +{x=757,m=619,a=442,s=43} +{x=1747,m=924,a=11,s=430} +{x=3644,m=201,a=693,s=33} +{x=336,m=141,a=1473,s=2008} +{x=1723,m=1595,a=91,s=282} +{x=768,m=426,a=895,s=573} +{x=312,m=604,a=12,s=361} +{x=2900,m=23,a=748,s=578} +{x=1100,m=116,a=2804,s=2407} +{x=121,m=94,a=937,s=514} +{x=61,m=2592,a=1518,s=855} +{x=356,m=64,a=1167,s=732} +{x=1538,m=702,a=444,s=524} +{x=1071,m=230,a=1273,s=954} +{x=1538,m=1389,a=963,s=681} +{x=3560,m=407,a=606,s=1015} +{x=276,m=534,a=14,s=2920} +{x=122,m=1529,a=3159,s=302} +{x=764,m=529,a=1535,s=1743} +{x=1015,m=491,a=1323,s=1241} +{x=831,m=1667,a=2553,s=146} +{x=841,m=203,a=2621,s=696} +{x=1586,m=403,a=1308,s=1892} +{x=2119,m=47,a=446,s=124} +{x=2321,m=2184,a=309,s=735} +{x=44,m=99,a=2037,s=1730} +{x=917,m=192,a=31,s=1104} +{x=1135,m=2330,a=2073,s=1651} +{x=1149,m=907,a=51,s=79} +{x=299,m=330,a=2588,s=1829} +{x=203,m=1847,a=205,s=696} +{x=418,m=498,a=1030,s=307} +{x=1560,m=1398,a=54,s=723} +{x=1232,m=39,a=216,s=648} +{x=1449,m=527,a=2553,s=39} +{x=2579,m=154,a=208,s=1099} +{x=213,m=1557,a=2636,s=202} +{x=1787,m=1475,a=1407,s=1761} +{x=1057,m=33,a=29,s=1488} +{x=46,m=2348,a=2573,s=1457} +{x=2080,m=352,a=247,s=97} +{x=166,m=10,a=938,s=1203} +{x=375,m=3545,a=21,s=2507} +{x=1525,m=1748,a=63,s=511} +{x=4,m=712,a=1182,s=2085} +{x=460,m=996,a=1,s=2354} +{x=538,m=1452,a=1066,s=2980} +{x=328,m=488,a=2291,s=1542} +{x=787,m=2124,a=649,s=281} +{x=890,m=17,a=1812,s=99} +{x=950,m=308,a=67,s=87} +{x=792,m=500,a=64,s=546} +{x=194,m=524,a=849,s=1060} +{x=24,m=492,a=1727,s=1628} +{x=3080,m=427,a=11,s=300} +{x=910,m=2320,a=2178,s=225} +{x=100,m=586,a=2247,s=1402} +{x=1277,m=400,a=1053,s=11} +{x=442,m=450,a=1063,s=1664} +{x=1360,m=658,a=1705,s=306} +{x=60,m=1215,a=1012,s=2971} +{x=37,m=973,a=1351,s=2900} +{x=755,m=1798,a=41,s=1999} +{x=456,m=565,a=13,s=18} +{x=1068,m=108,a=1261,s=216} +{x=179,m=559,a=1871,s=1357} +{x=760,m=1634,a=1753,s=502} +{x=33,m=466,a=1114,s=112} +{x=443,m=1297,a=280,s=1777} +{x=2608,m=1971,a=651,s=2930} +{x=244,m=1227,a=1578,s=15} +{x=1063,m=635,a=2276,s=331} +{x=321,m=1326,a=2474,s=359} +{x=1412,m=186,a=2378,s=750} +{x=1007,m=463,a=211,s=520} +{x=2193,m=158,a=1966,s=952} +{x=1047,m=348,a=37,s=88} +{x=3034,m=1692,a=248,s=1957} +{x=508,m=1601,a=213,s=712} +{x=640,m=386,a=1410,s=2062} +{x=683,m=855,a=503,s=3485} +{x=574,m=28,a=978,s=287} +{x=4,m=1189,a=20,s=330} +{x=1716,m=1734,a=166,s=547} +{x=903,m=1023,a=220,s=2002} +{x=2105,m=2151,a=753,s=216} +{x=357,m=1260,a=242,s=32} +{x=382,m=1261,a=3644,s=2198} +{x=451,m=1290,a=1901,s=446} +{x=510,m=391,a=1064,s=1313} +{x=1279,m=40,a=1825,s=946} +{x=21,m=1879,a=1728,s=429} +{x=50,m=183,a=1799,s=895} +{x=2200,m=2092,a=827,s=1450} +{x=230,m=1800,a=1178,s=1276} +{x=747,m=1987,a=838,s=1589} +{x=2113,m=613,a=727,s=26} +{x=34,m=305,a=1750,s=1402} +{x=394,m=3102,a=229,s=339} +{x=247,m=1734,a=102,s=847} +{x=819,m=1651,a=3293,s=1663} +{x=459,m=2156,a=175,s=296} +{x=1194,m=2195,a=324,s=297} +{x=510,m=47,a=9,s=1406} +{x=478,m=18,a=114,s=643} +{x=278,m=2041,a=185,s=237} +{x=2208,m=263,a=252,s=70} +{x=22,m=956,a=1030,s=240} +{x=164,m=466,a=3598,s=1158} +{x=2901,m=267,a=108,s=455} +{x=569,m=1421,a=1176,s=1237}
\ No newline at end of file diff --git a/aoc2023/src/day2/input.txt b/aoc2023/src/day2/input.txt new file mode 100644 index 0000000..34a6672 --- /dev/null +++ b/aoc2023/src/day2/input.txt @@ -0,0 +1,100 @@ +Game 1: 1 green, 4 blue; 1 blue, 2 green, 1 red; 1 red, 1 green, 2 blue; 1 green, 1 red; 1 green; 1 green, 1 blue, 1 red +Game 2: 2 blue, 2 red, 6 green; 1 red, 6 green, 7 blue; 10 green, 8 blue, 1 red; 2 green, 18 blue, 2 red; 14 blue, 3 green, 1 red; 8 green, 1 red, 9 blue +Game 3: 6 green, 5 blue, 9 red; 4 blue, 1 green, 13 red; 9 green, 14 red, 1 blue +Game 4: 14 green, 3 blue, 16 red; 20 red; 4 green, 2 red, 1 blue; 10 blue, 11 green, 18 red; 3 red, 3 blue, 6 green; 2 green, 18 red, 9 blue +Game 5: 5 green, 4 blue; 1 red, 3 blue, 2 green; 4 green, 2 red, 15 blue; 11 blue, 8 green, 4 red; 4 red, 3 green; 4 red, 3 green, 7 blue +Game 6: 6 blue, 10 green; 2 red, 6 green, 2 blue; 4 red, 4 blue, 1 green; 2 blue, 7 green, 2 red +Game 7: 14 green, 3 red, 2 blue; 5 blue, 3 green, 2 red; 1 green, 3 blue +Game 8: 7 red; 3 blue, 9 red, 1 green; 5 green, 5 blue, 7 red; 1 red, 2 blue +Game 9: 3 green, 4 blue, 1 red; 3 blue, 12 green, 18 red; 7 green, 9 red, 8 blue; 2 blue, 10 red, 12 green; 4 blue, 1 red, 1 green; 4 blue, 6 green, 6 red +Game 10: 2 blue, 4 green, 2 red; 7 green, 4 red; 5 red, 8 green +Game 11: 1 blue, 10 green, 15 red; 1 blue, 2 green, 2 red; 5 green, 10 blue, 8 red; 13 red, 7 blue; 1 red, 9 green, 4 blue; 9 blue, 9 red, 8 green +Game 12: 1 green, 10 red, 3 blue; 14 red, 1 green, 4 blue; 6 red, 3 green, 12 blue; 13 blue, 1 green, 18 red; 4 green, 14 red, 7 blue +Game 13: 1 red, 3 green; 2 green, 1 red, 5 blue; 1 blue; 1 green, 7 blue, 1 red; 1 red, 2 green, 7 blue +Game 14: 7 blue, 9 red, 1 green; 8 red, 2 blue; 11 red, 18 blue, 4 green; 2 blue, 3 green, 1 red; 1 green, 8 red, 9 blue; 2 blue, 8 red, 1 green +Game 15: 8 blue, 3 green, 15 red; 13 red, 10 blue; 2 red +Game 16: 1 green, 1 red; 1 blue, 2 green, 2 red; 1 blue, 4 red, 1 green; 3 green; 2 blue, 3 green, 4 red +Game 17: 1 green, 3 red, 14 blue; 1 red, 2 blue, 2 green; 3 red +Game 18: 1 red, 2 green, 8 blue; 2 blue, 14 red; 4 blue, 2 red, 2 green; 6 red +Game 19: 2 red, 11 blue, 18 green; 3 red, 6 green, 3 blue; 7 green, 1 red, 10 blue +Game 20: 10 red, 1 blue, 4 green; 4 green, 3 blue; 10 green, 13 red, 4 blue; 2 red, 7 green; 4 red, 3 blue, 5 green; 13 red, 1 green, 4 blue +Game 21: 20 red, 4 green, 5 blue; 10 red, 11 green, 4 blue; 1 red, 8 blue, 14 green; 11 green, 8 blue, 15 red; 8 blue, 2 green, 13 red +Game 22: 2 red, 11 blue, 4 green; 1 blue, 3 red, 6 green; 6 green, 1 red, 1 blue; 4 green, 7 blue, 3 red; 11 blue, 6 green, 4 red +Game 23: 6 green, 3 red, 1 blue; 17 green, 11 red; 1 red, 2 blue, 13 green; 13 green, 19 red +Game 24: 1 blue; 12 red, 1 blue; 1 red; 12 red, 1 green, 1 blue; 11 red, 1 blue; 12 red, 1 green +Game 25: 12 blue, 6 red, 3 green; 8 green, 14 blue; 11 green, 5 blue, 6 red; 4 red, 12 blue, 8 green +Game 26: 15 red, 13 green, 9 blue; 9 blue, 8 green, 7 red; 2 green, 6 red, 3 blue; 1 blue, 7 red, 3 green; 13 blue, 4 green, 18 red +Game 27: 9 blue, 5 red; 15 red, 12 blue, 3 green; 12 red, 12 blue, 1 green +Game 28: 18 red, 4 green; 4 green, 6 red; 1 blue, 6 green, 19 red; 9 green, 17 red; 4 green, 5 blue, 18 red +Game 29: 7 green, 6 red, 6 blue; 6 blue, 19 red, 4 green; 4 green, 4 blue, 13 red; 5 blue, 15 red, 10 green; 2 green, 6 blue, 5 red; 8 red, 10 green, 6 blue +Game 30: 1 green, 13 red, 12 blue; 1 red, 2 blue; 11 blue, 1 red, 1 green +Game 31: 8 green, 18 blue, 17 red; 4 red, 8 green, 6 blue; 9 blue, 7 green; 3 green, 1 blue, 12 red; 5 red, 10 blue, 11 green +Game 32: 17 red, 17 green, 7 blue; 18 red, 16 green; 1 blue +Game 33: 16 blue, 3 red; 9 blue, 1 red, 2 green; 3 green, 7 blue; 1 green, 4 red; 3 green, 1 red, 8 blue; 5 blue +Game 34: 5 blue, 8 red, 1 green; 9 red, 10 blue, 7 green; 1 green, 14 blue; 8 blue, 4 red, 10 green; 15 blue, 8 green, 7 red; 2 red, 6 green, 3 blue +Game 35: 13 red, 9 blue; 7 blue, 16 red, 10 green; 4 red, 6 blue; 3 blue, 12 green, 7 red; 8 blue, 6 red; 10 blue, 3 green, 2 red +Game 36: 1 blue, 9 red, 2 green; 11 red, 3 blue, 2 green; 2 green, 6 red; 8 green, 11 red, 3 blue; 4 green, 7 blue, 11 red; 9 green, 8 red, 2 blue +Game 37: 8 green, 3 blue, 4 red; 14 blue, 10 green, 3 red; 19 green, 2 blue, 7 red +Game 38: 2 green, 3 red, 3 blue; 3 green, 9 red; 13 blue, 8 red; 6 red, 5 green, 13 blue +Game 39: 8 red, 5 blue; 4 green, 5 blue, 3 red; 18 red, 2 green, 6 blue; 2 green, 5 blue, 17 red; 1 green, 2 red; 5 green, 6 blue +Game 40: 12 red, 4 blue, 1 green; 11 green, 20 blue, 4 red; 10 blue, 4 red +Game 41: 2 green, 2 blue; 2 red, 2 green; 2 green, 2 blue, 10 red +Game 42: 6 green, 3 blue; 2 red, 2 green, 1 blue; 3 blue, 5 green, 6 red; 6 red; 1 blue, 6 green, 12 red +Game 43: 1 blue, 4 green; 1 blue; 2 blue, 8 red, 2 green; 2 blue, 1 red, 4 green; 1 blue, 4 red, 4 green; 4 green, 7 red +Game 44: 8 green, 9 red; 1 red, 2 blue, 13 green; 4 blue, 8 green, 17 red; 13 red, 13 green; 1 red, 9 green; 19 red, 3 green, 3 blue +Game 45: 10 blue, 2 red, 1 green; 6 green, 5 red, 8 blue; 3 blue, 1 red; 4 green, 10 blue, 4 red +Game 46: 3 red, 8 blue; 6 blue, 7 green, 6 red; 6 green, 1 blue, 7 red; 8 red, 1 green, 5 blue; 9 red, 12 blue, 10 green; 7 green, 5 red, 1 blue +Game 47: 5 red; 2 blue, 2 green, 5 red; 3 green, 7 red; 14 red, 3 green, 2 blue +Game 48: 7 blue, 12 green, 2 red; 11 green, 10 blue, 1 red; 1 red, 13 blue, 2 green; 14 green, 2 red, 9 blue; 2 red, 12 green, 3 blue; 2 red, 7 blue +Game 49: 4 green, 5 blue; 9 blue; 10 blue, 5 green, 2 red; 10 blue, 2 red, 2 green; 1 red, 1 green, 4 blue; 2 blue +Game 50: 2 red, 2 blue, 7 green; 7 red, 9 green, 3 blue; 5 red, 10 green +Game 51: 15 red, 9 blue, 4 green; 5 red, 2 blue, 15 green; 4 blue, 3 green, 20 red; 12 green, 1 red, 10 blue; 10 green, 5 blue, 13 red; 9 red, 10 green, 11 blue +Game 52: 3 blue, 12 green, 1 red; 6 green; 1 red, 8 green; 1 blue, 1 green, 1 red +Game 53: 10 green, 7 red, 12 blue; 9 blue, 6 green, 2 red; 8 green, 5 blue, 5 red; 7 blue, 16 green, 11 red; 6 red, 8 blue, 13 green +Game 54: 10 green, 6 blue, 3 red; 6 green, 2 red, 8 blue; 9 blue, 11 green, 2 red; 10 green, 1 blue, 3 red +Game 55: 4 blue, 1 red; 3 red, 7 blue; 12 red, 4 green, 8 blue; 3 green, 5 blue, 1 red; 13 blue, 12 red, 1 green +Game 56: 12 blue, 15 green; 1 green, 7 red, 11 blue; 5 green, 9 blue, 1 red; 8 red, 5 green, 6 blue +Game 57: 4 green, 11 blue, 18 red; 14 blue, 14 red, 16 green; 7 red, 15 green, 3 blue; 18 red, 20 green, 8 blue; 12 blue, 9 red, 16 green +Game 58: 10 blue, 9 green, 8 red; 13 green, 6 blue, 8 red; 8 green, 4 red; 4 blue, 1 red, 18 green; 7 red, 10 green, 10 blue; 15 blue, 10 green, 3 red +Game 59: 17 green, 2 blue, 2 red; 2 blue, 1 red, 8 green; 14 green, 1 red, 1 blue; 15 green, 3 blue, 2 red; 2 blue, 8 green, 1 red; 1 blue, 1 red, 8 green +Game 60: 1 green, 1 blue, 1 red; 4 blue, 3 red, 2 green; 13 green; 2 blue, 2 red, 8 green; 4 red, 12 green, 4 blue; 4 green, 4 blue, 4 red +Game 61: 3 blue, 7 red; 5 blue, 8 red, 1 green; 1 blue, 8 red; 10 blue, 2 red, 1 green; 1 green, 5 blue, 2 red +Game 62: 10 red, 2 green; 8 blue, 7 red, 2 green; 4 green, 2 blue, 10 red +Game 63: 1 green, 3 blue, 5 red; 6 green, 5 blue, 2 red; 3 blue, 7 red +Game 64: 6 red, 20 blue; 4 red, 3 blue, 2 green; 3 green, 19 blue, 6 red; 2 green, 6 blue, 3 red; 13 blue, 5 green, 5 red +Game 65: 6 red, 9 blue, 20 green; 6 red, 16 green, 4 blue; 12 red, 6 green, 5 blue +Game 66: 2 blue, 5 red, 4 green; 13 blue, 2 green; 1 green, 6 blue +Game 67: 4 green, 5 blue, 2 red; 1 red, 14 blue, 6 green; 1 green, 14 red, 5 blue; 18 red, 16 blue; 15 blue, 8 red, 18 green; 1 green, 18 red, 6 blue +Game 68: 1 blue, 9 red, 7 green; 7 red, 1 blue, 6 green; 5 green, 1 blue, 8 red +Game 69: 12 green, 3 blue, 4 red; 9 green, 8 red, 7 blue; 4 blue, 5 red, 10 green; 4 red, 5 green, 7 blue; 9 green, 4 red, 2 blue; 3 green, 13 blue, 1 red +Game 70: 9 red, 1 green, 8 blue; 11 green, 13 blue, 12 red; 3 blue, 5 green, 8 red; 1 red, 14 blue +Game 71: 10 blue; 2 green, 8 blue, 9 red; 5 red, 1 blue +Game 72: 3 green, 5 blue, 5 red; 1 blue, 1 red, 2 green; 4 red, 4 blue, 1 green; 5 blue, 4 red, 1 green; 6 blue, 3 green, 5 red; 5 blue, 1 red, 4 green +Game 73: 3 red, 1 green, 1 blue; 7 green, 2 red, 1 blue; 2 green, 1 blue, 3 red; 1 red, 4 green, 1 blue; 3 red, 5 green +Game 74: 5 blue, 1 red, 4 green; 3 red, 2 green; 4 red, 6 blue; 2 red, 2 blue; 1 green, 4 red, 8 blue; 5 blue, 4 red +Game 75: 3 red, 5 blue, 3 green; 9 green, 6 blue, 7 red; 2 green, 3 red, 12 blue; 14 green, 4 blue, 10 red +Game 76: 1 blue, 7 red, 1 green; 6 red, 1 blue, 2 green; 4 red, 2 green; 3 red, 1 blue; 16 red, 1 green +Game 77: 3 red, 10 blue, 1 green; 4 red, 7 blue, 3 green; 7 blue, 6 green, 7 red; 5 green, 15 blue, 7 red; 12 green, 5 red +Game 78: 6 red, 10 blue, 15 green; 6 green, 11 red, 4 blue; 6 blue, 8 red; 4 blue, 7 red, 2 green; 11 green, 7 red, 11 blue; 3 blue, 14 green, 6 red +Game 79: 14 red, 6 green, 4 blue; 13 red, 6 blue; 6 red, 13 green, 4 blue +Game 80: 8 red, 2 blue, 8 green; 6 red, 10 green, 4 blue; 3 red, 9 green; 2 green, 8 blue, 7 red; 7 blue, 3 red, 11 green; 1 red, 12 green, 8 blue +Game 81: 9 red, 4 blue, 11 green; 1 blue, 4 red, 2 green; 5 red; 3 blue, 2 red, 2 green; 14 red, 12 green +Game 82: 5 green; 2 blue; 2 red; 1 blue, 2 red, 11 green; 8 green, 2 red, 1 blue +Game 83: 3 green, 7 red, 6 blue; 7 red, 7 green, 11 blue; 7 blue, 13 green, 7 red; 12 blue, 10 red, 2 green; 1 green, 11 red, 7 blue; 12 blue, 9 red, 9 green +Game 84: 5 blue, 1 green; 16 green, 4 blue, 8 red; 7 red, 5 blue, 16 green +Game 85: 9 green, 20 blue, 7 red; 19 blue, 14 red, 2 green; 10 green, 2 red, 10 blue +Game 86: 1 green, 3 red, 5 blue; 9 red, 2 blue, 6 green; 8 green, 14 red, 3 blue; 18 green, 2 blue, 7 red; 2 blue, 10 red, 14 green; 17 green, 4 blue, 12 red +Game 87: 4 green, 8 red, 13 blue; 7 red, 13 blue, 4 green; 1 green, 8 blue +Game 88: 9 blue, 11 red; 5 green, 7 blue, 12 red; 10 red, 2 green, 1 blue; 2 blue, 5 red, 5 green; 7 red, 6 green, 9 blue; 1 green, 10 red, 5 blue +Game 89: 7 red, 2 green, 1 blue; 1 blue, 2 green; 6 red, 1 green; 7 red, 1 blue; 3 green, 3 red +Game 90: 8 blue, 2 red, 3 green; 9 green, 4 blue, 3 red; 7 green, 11 blue, 2 red; 13 green, 12 blue, 8 red; 10 blue, 2 green; 5 green, 1 red, 9 blue +Game 91: 2 red, 2 green, 4 blue; 5 blue, 2 red, 16 green; 11 green; 3 blue, 2 red, 8 green; 4 green, 3 blue +Game 92: 8 red, 12 blue, 3 green; 11 red, 10 blue, 6 green; 14 red, 8 green, 14 blue +Game 93: 3 green, 2 red, 3 blue; 3 green, 3 red, 1 blue; 2 blue, 16 red, 3 green; 2 green; 5 green, 2 blue, 2 red +Game 94: 5 red, 2 green; 9 red, 3 blue; 2 green, 2 blue, 5 red; 3 blue, 8 red, 2 green; 8 red, 1 blue, 1 green +Game 95: 3 blue, 4 green, 7 red; 7 red, 1 green, 15 blue; 6 blue, 2 green, 7 red +Game 96: 2 blue, 1 red, 6 green; 7 blue, 8 green; 1 red, 7 green; 2 green, 14 blue, 1 red; 3 blue, 1 red, 7 green; 4 blue, 11 green +Game 97: 2 red, 9 blue, 8 green; 3 green, 5 blue; 6 green, 1 red, 9 blue; 2 red, 13 green, 1 blue; 2 green, 2 red, 2 blue +Game 98: 2 blue, 1 green, 1 red; 4 blue, 5 red, 1 green; 4 blue, 3 red, 2 green +Game 99: 17 red, 2 blue, 4 green; 4 green, 8 red, 6 blue; 5 red +Game 100: 6 red, 4 green; 3 red, 2 blue, 9 green; 1 blue, 5 green, 14 red; 1 blue, 2 red, 2 green; 9 red, 1 blue, 14 green; 2 blue, 11 green, 8 red
\ No newline at end of file diff --git a/aoc2023/src/day20/input.txt b/aoc2023/src/day20/input.txt new file mode 100644 index 0000000..6949a60 --- /dev/null +++ b/aoc2023/src/day20/input.txt @@ -0,0 +1,58 @@ +%hb -> mj +%mx -> mt, xz +%xh -> qc +%tg -> cq +%kp -> xz, nj +%mj -> jj, lv +%cq -> jm +%mt -> sj, xz +&jj -> hb, lz, rk, xv, vj, vh, lv +%rm -> bz, xq +%hx -> bz +%xv -> lz +%xx -> kp, xz +%pt -> vx +&xz -> bq, gr, sj, rv, zf +%vx -> gf, cv +%xb -> xz, bq +%xk -> gf, rd +%lv -> zk +&rk -> gh +%kn -> gf, tz +&gh -> rx +%sj -> vp +%jm -> vm, bz +%rr -> rv, xz +%tz -> rz +%gg -> kn +&cd -> gh +%qc -> kh, bz +%kb -> gf +%vp -> xz, xx +%fb -> bz, tg +%rd -> cp +%qn -> vh, jj +%xr -> jj +%tp -> rm, bz +%cp -> gg +&bz -> qx, cq, xh, fb, tg +%qq -> pt, gf +%xq -> bz, hx +%gx -> jj, qv +%bq -> rr +%cv -> gf, kb +%zk -> jj, xv +&zf -> gh +&qx -> gh +%vh -> gx +%qv -> xr, jj +%lz -> qn +broadcaster -> fb, xk, gr, vj +%nj -> xz +%gr -> xz, xb +%kh -> tp, bz +%vm -> bz, xh +%rz -> qq, gf +&gf -> tz, cd, rd, xk, pt, cp, gg +%rv -> mx +%vj -> hb, jj
\ No newline at end of file diff --git a/aoc2023/src/day3/input.txt b/aoc2023/src/day3/input.txt new file mode 100644 index 0000000..1903642 --- /dev/null +++ b/aoc2023/src/day3/input.txt @@ -0,0 +1,140 @@ +............830..743.......59..955.......663..........................................367...........895....899...............826...220...... +.......284.....*............*.....$...+.....*...377..................*.......419.............488...*.......*...................*..-....939.. +....%.........976..679.461.7..........350..33.........$.380...$...151.897..........295..#......*....105.....418.............481........&.... +...992.....#......=...../........701................508...*..578........................259...331.................795..945........79........ +.........868........................*.............................17*..........348................441*852........*.....-...........@.....922 +....................*200............311..63................452.......323.#778.*....674....................680......696...372.....*.......... +.......266.......209......589.....=......*...365.........7.*...233.............755....*......644...272........697..*....*.....682..225...... +..836..........................949....607..........&....*..899...*....679.527.........331..........$....788../.....43....89................. +........367.....328.&......%...............680...69..717.......60.......*.*............................*..........................728...264. +........*.........*..119.253.......................................626....129...274............97...679.......752........*.......*....*.*... +........360......471........../.........573-.702.............866...@...........*......772....../........259....*.........430....136.742.543. +.........................../.852...............*...775...............643....455....../...........832....*.....41..535....................... +.............-..........340.................103....*..........$...51*..................74................438......%...776...+.23*..663...... +.15.......806...............990.....................427....924............530.........=..............................*....968.....=....480.. +......#..............@914...*..............*........................%......*................................/.....406.................*..... +....201.........79........592............70.894.....247..513+....367..$299.698......199................-.....223....../.........563....783.. +......................448........489................*.................................*....440...889...715..........351.....39.............. +.138....../766...........*.......................152.........................377....599.......*...*...........................@............. +....%.820.......10*43.670..$87....100*244..@706..........668..319#...........................831.736....@............./..693.....321%....... +......=...930#..................@...................493....*............152......569.................=.914....764.....9.-................... +378$...............&.....854..505.........%........&.....124......12........117.....*591..979..76..133..........+............/..........883. +...............602.141.....*...............770.....................*.........*................../.........874.@....../684....778............ +...........................954.....*397.........................394...........614..307*74..457..............+.514.......................327. +........335*25.....-....31..........................................$...719.................*........6..214................878.............. +...............86*.269....*...480........................*....140..947....*..&.......................*......972..............*..364*274..... +501-.......805..........285...*..................6....335.167...*........18...332.............741...127......+.............246.............. +......616.......752*276.....470.848..599.........*............779..=................539...961..$.........204.......-..201*.....%............ +.491.....*..521.........*94.......*.-.....&...163........285/......51..99*......474..*...-.......945.....&......839.......140...201.....$... +....$.795..*........539.........500.......662.............................421....*...459..../.......*407.............../................471. +...........110.......*...............252.............................%..........730......551..509.............824...230....569....48=....... +......150...................................+..70.565=.&320.........983....155................=.....54.......%............*....@......../... +...............972..146...........49.433..137..............................*....%..................@....................436.451..........328 +568-...@.552%....-.-................*.................957................93......74...........*........156.566../....#...........285........ +.....565..............693....443......................*....394.@58...362...................383.583.............542.38............./..890.... +...*.................*........*........&.223...........506.............=..................................300...............477........&.... +..612..459..........462....663......125....................720..............355.....253...............904......................*............ +........$................................622..............=................*...........*30.........#.$........................284........383 +............&.999....&.......................%........240....295*681.846....53.....806......793..646....626./76..737....479.........558.@... +.........892..#.......885.....804..587*....340.........*..............%............*.........*..........*................%............/..... +660..635...........-............./.....213........$....512.....551.............*....910........................@............................ +........*..........361..270*.....................328..............*.........853........................*.....985...965............232...948. +..501@......................213...412$.....375..................631..916.......................254...284.........#....*..252........*....... +...................695............................872*876..622..........-.........*..575...851*..................910.395..*....*717.248..... +.....91.........80....*..390...........497....496............*.......@.........297..*................&....873.............946.8.........647. +.......*.424.......108.....=.............*..................686....418.............131........600.96.327...=...561...321............343*.... +....731....*..............................938..........256..............909.......................................*......................... +.........811...=....................680...........167...*...601.....................892..#.......142*.......151..108............201......... +................653........879....@.*.........%...*...699..*..............726............695.870.....526.$................*8............234. +....54....311..............=...320..619.......495.375.......926....914.........654..............*........236...$.......444.....@613......... +...*........*......450*............................................*...786.625.......804.850.....674..........305........................... +..593.512....517.......155.....646*239....286......+...........96..264....*......471.*......*.........314*901..............879.............. +..........................................=.....419....820......&..................+.......163....148........................*....586....... +.....331.....................637....126.................*..147............650...............................................315....*........ +.......%......................$....../.................392....@...943..34...*......752.............................161..30.........970.521.. +.........984.412#.......-.569...@................464....................*.275..&.....#.126*506....................*.......=.168-............ +.724..................570....*.914.388.........%..$.........274.......263.......130..............102.....2....21+.268....................226 +..........776=...6........759.......*..283..309.....682......$..........................................%........................446........ +....%284.........-....#...........119....*......622...@....+............/.......929..178...........141/............../650...628.+........... +....................440........88.........335...*.......804............968..976*....+...................$.421..431..................*....... +.....880@.......871.....30......................249...........134....*................*...............95....-...*.....856...353...94.....963 +...............*....97..&.......989./.........*.....522+..$.....*.226.436.905......347.396.707...511..........342.....-.....*...........*... +........936*....299.........217.&...478....931.457........62.391............&...............*..../...884*....................370........483. +....965.....992.............*......................................371*771.............37..382...........990...391.......852................ +.......*........985.......753.&..........561.204.......................................*......................*...........@..........+935... +......677.....................164.883...............325........951.....847....%......433....*944.50...753..344.............................. +.829.......583........429............*34......243...*.........*.............329.%........421...........*..........803..746............675... +...*..................*....512............999.......102......398.................640................401....310.............164...452..*..... +269........9........705....*........782....%.......................615.734....-..............289...........*.....................=....661... +........37.#..............14.......*........../.......586.............*........623.......129........324.....601...%.....@................... +...165................#.........861............463.......*.......361*..............356........175.....*.........906.897..716....118..#...... +.....*.............728....417.........+...395#.........443...........829.....390-....................399...............*..........+..813.... +....176..253...846......$...........719..........132............897...............334......................20...........51.....%............ +..............*....*..278................958........*.......=.................183*.......427.......766.......*..914.282......674............ +....&......344...249.....................*.....445.770.....67.....301................295*.........*....715.390...*...../...............424.. +.....541......................160.580...........#................=...........*677..............394.......*........327....739...179.360..*... +..........=................%.....*................-954......%.............406......765..................930.....*.........../.....*.....370. +....%.....979.379..........415...............318..........284....440../............-....133.........157......579.550................747..... +.240..........*.....................@...........*642............*.....84.....%.331................2*...................582...=........*..... +......=.....246....167...............704.............763........999.......781...*.....-109............126..801............*.484....632..542. +....%..488.........@..........................$954....*../.....................779..........232................510.....149.................. +...27..........984.........*....485.....937........982..234..............225..................*..........122.............................16. +...........473.#..........558..*.............410-...........93............#..655....846....829.....760......=...................=....+...... +.....=390..*...................624........#.................+..473..............#......=...........+...577#......$...481.......651.869.806.. +747.......543.259.../717............&...346.......948..........$...........472.............230+......=.........206......*................... +................*........+.224/...798.........311...*..896*220...............&.+..................825....../............378...370........... +...............485.641.674.....................*......................618.......389........................565..&674...........*............ +..........475.................=.162............461.441...................*..........652......&....508..856...........364....464............. +...............154...452#...693....*................*.......391.........979....344..&.......814..............501.......=.................... +...............*................425....25#...........788............879...........*.....29....................&....................850...794 +393.............523...507*683..............174@..........-.............=...369....439....-.......*305.891..........952............*......... +..........+...............................................535..911.........................*....1.........441.....-.........88...906........ +..........997...17.............779..............960...................209........545......513................*...........98...........+608.. +.....................63.968...*.........340.......*...858..339...........%.-767...+...173........47.........906............*210............. +.............&..575..*....@.788.........*.........178.....*.......949.................+...........*.............-.....399.............@..... +..........571....%....984............414...............$.912.....*......302.............594.240..724....341..645.......*.......=..848.642... +....282@...........*......=......189.....138...227*.906.........70......*..................*.............=..........957...657.81../......... +..........*...$.813.179.901.592.....*....................................7....127.............$692...............$..........*.........*..... +.......207..91..............*.....784...872..756.........&..322..............*.........*19.........749.......548..624.694..858...512..598... +.................+.........352...........*.....*.934..126...*.....351..........40...616.......153.....*661............*...........*......... +...823........829...346...........821...826.304...%.......115.......*..........*...............*.............../...622...523.......606...... +...*...............*.............*...................186...........813....716@.372....16..300...489..108.....770.......................697.. +..........919...782.......912................@.........*.%485............................*..........*...............208.220....853.......... +...308......*............*......269.........539.......2.............853.......941.660.532........246.......980..357*....+.....*......./..... +..../......32.164.......15.479.=.............................=...............*....*......................#....*......+......-.855.....415... +.......305..../.....649....*......633...925...634............121............355....578.......14*....422..543.297....429..142................ +..960..+..............*.....536......*..@....-.......51..-.........592#..........+..............9..*........................................ +.....*......515......434............908..........189......430..................332...722..-.........450..#.........................139...... +..259......*.............................39..33.....$..................................*...159..443.....925.............743....414.&...=437. +......58..475...........227%.......217..../...*................../...............&....506..........................63..*.......*............ +.......=......-..............993....%.........166........605....293........977+..498......%.....834...455...........*.....%....981.991...... +...........636..728...*.......*.......494...............................................205........*.@...........528....226.........#....785 +664.9..............$..9...494.272...............725*....775...$....854..........226.243..........832....637*73................165........... +...*...340+.............@...*.......548.............405....*...768..*..............*.......81.........................10.787.$.......918.... +.......................145...265....+..........110........45.........90..299.....$........&.....696...475.-452..290....*...*..........@..... +......+....246.108.305...................894....=............121.588......*....69...................................236..97......348........ +.......709........*...........-...........-..........411...=...*.......135........................738..383.....634*..........429.@.......... +...........%........%217......119.....................@..47.........+.......923..............606...*.......960..............-............... +....835.....744...................546.......215.............512.....950.......%...444......&...$.833......./.........813.......400..%...48.. +........362.......898..#.......................*.732........*.............965....&.........584..................521..#...........-.995...... +....64.*.........*.....265........781..376...320.#........998...450.......%............................$...............................304.. +....-...966...875..981........742*.......*...........*276.........*...............541.....219.279..357..164...551..%717...............%..... +...................*...786.$..........*...163.....915...........960...%...509.135*...........*................-...........%.539............. +....666..699......179..+...612..=734..545...........................88.....&.......392...46..........483=..&.......548.135.....*.413.#620... +...$....*....948..........................530.656....%..484....*..................*......./...741..........444......*.......150...*......... +......................524...928..........=........858....=..562.571........117@.195..896......*......662.......148.388.............320...... +...166..48.../....-............#...159.......487.....................260...............#...713.........*.347................................ +......*.......657..837.....273.......%........*...155.................*........225..................228.....*370..../.......724.....764..... +......654.679.................@.........-....918...................681..461.............................776......737.................+...... +...........*....859......881#............625......$...........888.........+...57...............887.$.......*............................#911 +...46*....72...&...................................102.............651........*......*530.......-..667....850..829*.869%........298......... +......925..........892.352*........6.41....................+...160.$.....*.72..878..1.....................................738......*926..32. +...............279.........721......*..............694....799..&......878....*................219....+...482..368$...........*../........... +......604........*....................583*506........-...........740..........347............*....576......*................498..478.974.... +..486.-....................626..................320........&....../.................*979.=....863........497........111..............%...... +...................................538..78...*.....*......7...455.......223......939......673..........=......559-....*...834............58. +.......644....&.......#..669+.1.......*.....782.....865......*....779..#..............110...../....937..312...........489................... +.......*....571.....69........*.......169...................919....*.....808.................335...*.............................24*896..... +.......233................590.553..............198=..450.........661.......*.....................15...-....................-575............. +...........919*.....................................*.......234.........492..%...........300...........301........./866..........*.......... +...............470.....440.874...116....240........299......................27......409.......................................639.136.......
\ No newline at end of file diff --git a/aoc2023/src/day4/input.txt b/aoc2023/src/day4/input.txt new file mode 100644 index 0000000..0391b6a --- /dev/null +++ b/aoc2023/src/day4/input.txt @@ -0,0 +1,203 @@ +Card 1: 8 86 59 90 68 52 55 24 37 69 | 10 55 8 86 6 62 69 68 59 37 91 90 24 22 78 61 58 89 52 96 95 94 13 36 81 +Card 2: 6 42 98 5 17 31 13 36 63 61 | 99 88 14 20 63 5 56 33 6 21 92 13 17 7 31 93 30 74 98 15 11 36 61 42 47 +Card 3: 16 58 72 77 1 67 33 82 68 7 | 16 37 15 75 78 1 49 82 22 45 83 58 77 79 50 88 98 67 33 72 42 29 35 7 68 +Card 4: 75 35 37 6 29 54 64 57 82 4 | 8 33 27 85 84 54 75 37 4 57 70 29 64 94 17 6 38 41 82 81 71 35 47 51 19 +Card 5: 23 85 52 77 81 50 28 59 87 82 | 70 65 12 35 9 41 62 31 47 66 58 15 76 46 68 67 55 86 17 38 18 1 75 79 13 +Card 6: 77 64 13 36 68 88 16 75 25 95 | 25 64 55 58 75 66 23 16 27 68 69 88 13 9 39 42 29 65 83 97 32 89 53 96 94 +Card 7: 31 12 76 29 48 96 41 49 21 37 | 94 81 65 82 15 33 53 91 88 37 46 29 3 80 95 67 11 27 31 30 49 89 78 41 90 +Card 8: 20 5 52 31 46 25 88 95 39 83 | 36 62 48 39 69 3 81 11 61 95 43 85 34 46 5 8 13 45 10 17 2 88 70 52 89 +Card 9: 8 85 89 55 77 9 40 5 57 37 | 56 84 62 42 49 50 51 35 75 25 13 74 68 1 99 48 41 94 45 66 17 69 23 29 67 +Card 10: 74 1 7 89 97 82 75 9 11 42 | 94 71 41 30 50 58 23 81 35 6 97 57 67 85 98 10 87 43 96 77 31 8 54 72 65 +Card 11: 38 29 6 5 4 84 34 1 94 23 | 89 48 51 84 49 33 50 65 79 53 12 8 5 1 35 69 83 57 11 42 67 26 9 6 55 +Card 12: 35 83 44 75 36 65 85 87 60 72 | 8 3 91 33 59 29 56 26 21 60 80 88 25 5 51 47 46 44 41 31 62 79 76 89 55 +Card 13: 8 56 97 66 32 70 25 76 18 20 | 15 50 91 65 3 67 98 81 9 44 18 92 13 64 96 47 87 46 7 33 66 71 82 88 90 +Card 14: 37 52 63 28 19 89 44 76 98 24 | 70 13 59 31 17 84 90 6 62 19 74 36 94 1 15 12 29 95 47 92 23 67 60 58 53 +Card 15: 71 70 25 51 95 86 66 37 27 53 | 14 20 30 17 59 96 11 68 46 13 75 44 40 62 32 7 81 91 73 64 93 83 35 80 49 +Card 16: 97 4 63 22 75 73 5 52 34 26 | 33 98 64 47 90 94 28 35 43 30 73 51 7 27 10 40 97 37 34 32 22 71 63 21 80 +Card 17: 15 18 29 55 14 25 69 4 59 75 | 66 4 82 23 94 22 26 16 55 69 75 20 76 25 29 59 15 18 70 2 28 39 95 14 40 +Card 18: 26 40 70 42 37 68 25 76 56 97 | 33 97 28 13 24 50 66 53 67 84 26 68 42 56 92 40 65 76 25 32 70 93 85 37 94 +Card 19: 56 61 7 53 48 88 77 73 27 79 | 50 81 29 15 46 19 33 89 54 85 58 73 68 34 84 2 40 27 44 94 88 62 14 1 56 +Card 20: 34 89 62 72 6 30 16 53 78 2 | 2 78 73 89 85 40 47 30 34 8 60 23 72 26 62 96 6 91 29 16 57 46 59 53 94 +Card 21: 65 18 22 53 8 31 32 84 39 9 | 75 16 70 3 14 61 34 9 38 71 8 49 53 52 81 18 45 82 41 44 32 63 65 51 69 +Card 22: 44 80 76 71 36 1 50 87 23 27 | 1 76 83 67 87 68 25 80 8 23 57 29 52 4 50 64 24 44 77 45 27 32 36 73 71 +Card 23: 68 90 10 43 73 63 85 47 11 96 | 9 29 53 84 4 6 25 82 11 21 73 83 20 95 66 27 80 26 70 33 85 47 17 74 98 +Card 24: 51 68 2 69 39 86 55 70 6 54 | 72 17 14 26 91 52 96 86 66 64 51 2 92 53 36 39 89 42 40 68 55 37 6 54 7 +Card 25: 74 92 43 35 29 93 39 53 10 54 | 86 35 10 18 92 43 56 25 44 53 93 39 29 54 11 12 55 61 83 41 21 69 81 4 74 +Card 26: 80 19 99 93 76 67 70 60 39 9 | 98 2 26 95 21 49 44 9 31 58 83 46 14 99 4 78 12 56 89 71 66 29 47 64 96 +Card 27: 92 52 5 46 49 62 74 72 44 87 | 37 93 24 29 5 88 72 81 62 50 69 33 52 19 23 8 84 1 70 87 95 96 61 63 49 +Card 28: 79 80 98 59 54 45 91 16 11 4 | 80 10 98 45 78 91 1 65 12 11 4 82 88 79 54 55 8 99 59 67 68 16 25 3 70 +Card 29: 52 30 9 13 44 71 48 63 65 27 | 90 31 17 80 44 39 85 93 58 65 8 63 16 35 40 1 73 68 52 6 97 99 13 10 61 +Card 30: 12 19 35 9 82 20 72 61 50 67 | 11 84 77 14 46 29 62 28 81 98 43 12 15 72 35 99 19 97 75 1 20 7 82 60 52 +Card 31: 21 58 93 11 50 25 88 77 64 29 | 42 1 31 30 99 69 54 32 88 24 95 15 55 56 14 45 19 33 87 34 7 93 79 23 74 +Card 32: 39 87 70 22 46 95 69 3 58 80 | 85 95 24 45 84 22 37 12 33 43 93 96 27 56 70 67 91 58 10 68 69 40 97 82 13 +Card 33: 91 42 78 76 77 27 22 98 94 70 | 80 17 63 21 37 52 46 44 2 7 73 86 49 40 23 4 92 60 43 76 29 22 24 69 42 +Card 34: 11 50 70 95 32 81 26 57 7 76 | 83 64 65 46 87 56 28 98 90 11 96 40 99 3 16 12 61 19 97 76 51 92 93 34 15 +Card 35: 80 28 55 51 98 5 92 54 73 78 | 78 66 10 38 36 51 1 83 94 33 42 17 62 56 59 21 86 25 46 48 63 12 45 31 65 +Card 36: 63 76 16 74 10 14 50 73 81 35 | 3 68 1 76 62 53 67 97 13 85 28 65 32 72 34 98 57 20 71 17 64 48 8 56 44 +Card 37: 37 1 38 62 56 27 17 8 21 98 | 78 31 14 23 18 62 4 2 97 88 59 34 57 46 81 16 36 58 86 35 72 61 7 80 28 +Card 38: 56 30 92 44 33 11 16 45 72 60 | 74 86 59 87 22 81 46 32 52 21 78 10 57 1 13 85 49 75 95 29 8 38 77 54 50 +Card 39: 66 83 99 18 79 70 57 25 86 55 | 8 41 50 87 77 7 78 84 53 35 43 26 13 29 30 69 91 65 32 59 31 45 56 15 48 +Card 40: 64 46 22 83 33 38 95 75 69 89 | 82 65 45 68 75 33 69 49 22 95 89 74 53 46 38 25 83 64 8 59 81 16 94 27 60 +Card 41: 90 26 49 5 76 98 92 64 19 32 | 47 35 49 45 13 67 73 55 4 64 79 63 89 57 5 75 85 91 25 88 74 70 28 68 86 +Card 42: 45 52 92 43 76 96 4 86 53 62 | 96 53 55 18 95 44 25 45 47 66 62 2 52 60 10 3 1 37 87 92 98 70 9 86 23 +Card 43: 9 64 57 76 21 30 38 98 85 1 | 11 22 92 81 58 59 48 75 2 32 15 84 27 56 86 99 98 66 54 96 20 37 67 12 29 +Card 44: 11 41 84 1 76 6 64 8 31 44 | 11 1 33 58 55 6 84 44 70 20 64 41 90 98 72 42 8 38 4 39 76 17 18 69 31 +Card 45: 88 12 95 1 24 71 70 49 79 8 | 86 57 43 12 90 78 70 76 24 95 39 8 1 13 47 71 49 75 15 32 2 77 58 79 21 +Card 46: 84 91 96 41 17 76 9 36 81 1 | 82 5 99 19 43 20 86 69 37 44 95 41 55 65 96 70 24 47 77 15 31 36 2 79 22 +Card 47: 48 80 18 4 40 11 90 17 27 68 | 33 40 15 99 48 12 25 27 44 17 50 94 68 63 11 29 80 4 18 42 32 90 19 2 91 +Card 48: 44 30 51 97 22 57 87 17 53 11 | 35 17 81 22 11 30 75 80 74 54 79 16 78 97 89 87 51 37 43 72 53 57 27 94 23 +Card 49: 31 2 7 13 9 33 95 41 57 34 | 25 90 77 13 1 95 18 17 34 92 10 33 80 2 82 66 91 73 70 86 21 7 42 47 19 +Card 50: 16 44 77 76 23 81 47 29 62 22 | 35 27 83 47 88 76 98 64 31 86 48 42 95 67 25 44 17 51 18 26 12 1 90 99 62 +Card 51: 55 68 41 17 28 83 64 62 22 13 | 24 6 23 22 64 7 83 74 44 34 28 68 13 32 26 50 62 17 12 41 97 55 16 1 9 +Card 52: 96 79 43 83 37 25 86 24 66 34 | 79 18 6 2 64 62 86 48 65 34 29 68 9 87 76 71 3 69 61 41 40 35 37 55 32 +Card 53: 46 1 10 43 47 17 62 52 58 75 | 58 14 52 71 31 75 55 50 8 99 63 23 4 13 10 62 16 17 82 43 56 46 76 83 65 +Card 54: 75 33 27 30 87 32 68 89 44 17 | 73 28 31 97 27 9 57 14 15 20 39 82 38 36 43 58 75 4 44 30 33 80 16 48 17 +Card 55: 70 11 9 44 14 32 83 10 99 71 | 65 48 21 75 83 71 92 2 34 22 11 14 39 31 63 25 88 15 80 76 96 90 52 70 99 +Card 56: 17 38 6 13 3 67 87 64 37 68 | 41 7 53 11 5 62 93 28 65 8 56 32 1 69 47 18 82 40 20 12 80 37 89 43 2 +Card 57: 64 29 46 22 61 56 32 20 97 72 | 31 14 29 44 74 22 1 56 4 52 58 45 50 78 67 11 97 72 16 20 27 57 61 83 85 +Card 58: 62 85 13 46 79 37 99 81 91 8 | 98 17 85 23 33 94 35 2 47 20 3 11 36 96 43 46 25 60 59 10 22 55 87 58 28 +Card 59: 58 36 55 31 69 91 21 51 56 10 | 19 49 73 6 34 27 40 65 11 55 44 67 37 97 14 85 84 89 72 29 64 15 70 68 94 +Card 60: 46 40 95 45 75 74 7 38 10 81 | 32 38 4 61 78 5 39 99 86 33 2 98 83 42 11 75 27 73 81 9 54 37 40 12 80 +Card 61: 40 29 73 56 91 44 24 77 1 5 | 87 52 80 45 70 48 47 44 69 17 16 6 82 66 37 42 39 3 10 15 97 13 40 99 62 +Card 62: 54 55 29 80 70 50 97 89 33 68 | 21 3 76 73 6 42 2 91 19 18 72 92 94 11 77 32 52 8 81 48 35 16 27 12 84 +Card 63: 19 45 77 86 6 33 83 91 52 36 | 18 68 60 58 84 29 9 67 21 99 24 80 69 96 25 85 46 50 95 27 61 4 90 63 88 +Card 64: 88 23 57 8 93 17 20 42 54 51 | 12 78 82 80 85 43 73 44 84 89 15 36 30 10 25 29 7 99 61 60 86 14 26 28 83 +Card 65: 92 13 3 54 4 95 28 72 8 15 | 15 60 66 33 82 95 94 69 71 59 54 99 40 31 83 17 13 80 28 72 4 92 45 87 46 +Card 66: 1 42 10 66 94 21 46 95 73 32 | 64 99 3 86 69 71 95 78 60 28 5 19 35 85 67 7 32 16 39 66 89 42 31 43 58 +Card 67: 87 50 23 52 5 22 88 82 59 72 | 26 59 48 90 82 55 50 37 87 35 2 52 72 11 40 23 54 88 19 33 5 97 86 22 30 +Card 68: 21 89 80 14 73 61 9 7 68 48 | 18 89 38 26 32 21 79 15 14 86 44 55 95 41 80 7 9 29 73 1 13 48 68 28 61 +Card 69: 9 82 65 50 57 40 96 36 83 60 | 96 17 88 60 40 74 33 19 41 23 82 89 92 72 50 83 4 7 56 34 9 36 52 57 65 +Card 70: 40 63 61 64 3 21 52 11 66 53 | 82 42 13 30 44 72 74 83 45 70 38 33 80 8 64 48 49 73 19 51 85 47 90 84 92 +Card 71: 92 24 98 94 89 41 1 93 28 32 | 28 61 92 13 53 89 43 23 32 66 81 93 94 38 90 36 24 68 1 91 98 41 29 67 64 +Card 72: 29 61 68 1 78 69 33 45 39 18 | 81 12 36 28 73 75 18 35 42 33 95 68 3 79 39 8 24 82 87 45 11 91 23 51 1 +Card 73: 15 33 51 46 80 95 67 71 97 16 | 23 7 93 94 55 33 5 84 28 32 15 59 98 6 46 17 86 43 39 81 36 42 63 71 82 +Card 74: 95 9 16 72 30 20 41 97 45 90 | 30 72 49 66 36 9 82 98 95 16 48 57 46 86 47 90 20 85 54 74 73 4 22 60 32 +Card 75: 82 55 49 44 75 57 19 59 38 4 | 21 78 35 6 93 75 28 41 83 72 55 22 64 89 70 47 23 29 20 99 48 53 27 65 13 +Card 76: 19 31 41 50 27 43 74 21 51 44 | 24 79 71 16 49 37 60 14 8 33 52 40 98 6 34 62 56 4 10 30 39 48 99 67 22 +Card 77: 39 23 28 96 98 50 40 34 79 74 | 85 68 79 33 48 23 56 10 89 38 50 71 17 28 6 74 53 4 98 26 8 22 39 31 66 +Card 78: 80 31 82 32 70 17 68 44 22 97 | 72 6 95 57 13 94 37 44 70 46 32 69 22 56 40 15 77 88 17 82 31 47 71 18 68 +Card 79: 37 53 75 59 72 43 65 74 81 26 | 37 23 11 48 45 86 74 2 59 58 92 12 65 78 16 97 57 76 67 26 18 41 43 54 49 +Card 80: 63 41 23 39 40 10 26 93 24 73 | 30 19 74 40 49 90 22 65 78 10 24 93 73 41 51 7 61 15 29 39 63 16 64 23 37 +Card 81: 88 68 74 9 97 46 11 87 39 10 | 40 3 14 85 64 43 42 97 90 9 39 13 29 72 47 10 48 4 68 96 99 25 98 65 57 +Card 82: 81 48 21 57 65 39 12 66 95 33 | 16 33 79 85 92 52 50 34 15 22 9 45 74 17 24 63 28 72 84 62 58 77 41 64 83 +Card 83: 45 33 86 43 63 96 25 88 53 15 | 73 93 79 18 2 26 21 65 28 57 52 88 1 80 33 38 76 3 56 35 6 23 34 24 13 +Card 84: 31 74 96 40 36 99 91 92 63 10 | 78 38 59 27 84 34 31 72 19 91 12 45 57 92 32 44 70 50 10 24 87 33 49 65 61 +Card 85: 24 20 39 42 78 57 12 64 40 44 | 68 34 77 20 21 12 35 23 97 3 50 65 42 18 84 41 43 69 94 37 76 57 31 45 79 +Card 86: 51 48 14 80 3 72 92 15 35 43 | 50 69 18 76 63 30 58 19 65 16 70 55 54 12 87 62 60 68 93 83 1 44 26 98 27 +Card 87: 11 4 31 73 5 81 2 32 29 51 | 3 47 9 18 16 19 66 36 23 70 91 64 69 87 51 84 43 65 35 42 63 72 82 54 93 +Card 88: 94 10 52 17 78 45 99 66 8 81 | 11 31 71 59 41 88 67 30 47 98 33 21 37 15 53 20 36 58 57 91 39 28 49 70 86 +Card 89: 28 68 50 39 98 57 78 71 11 48 | 95 67 79 86 53 17 66 60 77 6 44 54 19 31 74 80 63 99 47 12 91 21 70 8 10 +Card 90: 36 90 94 26 59 84 63 38 48 39 | 69 56 39 88 89 97 26 38 83 55 87 13 33 68 95 94 18 48 36 44 59 84 63 90 66 +Card 91: 89 3 61 68 53 85 66 81 11 78 | 29 10 81 58 22 47 19 3 36 98 61 85 89 78 39 17 50 53 11 66 68 24 4 86 25 +Card 92: 57 5 56 91 64 38 89 47 55 74 | 73 51 48 19 57 98 64 9 74 65 53 47 54 72 69 38 56 1 21 6 91 40 55 5 89 +Card 93: 6 86 18 53 9 82 70 81 89 26 | 21 69 75 10 8 86 89 70 47 23 78 96 98 53 6 9 2 81 31 56 39 55 18 1 42 +Card 94: 86 78 79 57 3 2 5 69 30 53 | 80 2 53 90 3 30 48 79 5 78 19 35 62 59 97 56 13 12 70 86 10 69 51 55 57 +Card 95: 64 51 15 84 25 94 88 80 20 33 | 1 90 50 47 32 15 20 51 84 65 64 55 39 94 19 66 40 25 88 43 80 34 29 3 92 +Card 96: 83 88 94 87 79 45 49 91 99 33 | 91 53 72 37 87 40 26 88 33 49 89 99 24 59 94 52 75 83 79 71 62 50 92 28 6 +Card 97: 51 91 36 6 68 9 97 78 39 80 | 18 97 68 34 91 61 78 3 23 84 8 16 36 96 65 99 59 80 58 90 14 32 1 41 74 +Card 98: 92 41 9 7 52 86 83 40 8 63 | 47 17 14 35 34 22 19 52 79 7 81 92 1 82 93 73 25 58 60 39 59 27 3 16 41 +Card 99: 72 47 22 4 62 58 31 91 34 50 | 49 65 94 71 82 25 24 9 64 62 50 60 14 84 16 93 1 46 8 19 47 44 21 10 11 +Card 100: 96 18 53 37 54 98 30 84 58 45 | 30 59 89 23 8 35 85 6 36 54 37 17 92 79 27 39 4 61 11 80 19 58 72 51 47 +Card 101: 67 26 23 99 78 60 55 82 83 11 | 60 22 91 21 18 29 67 62 34 93 56 59 49 52 38 79 28 11 17 77 76 20 2 99 92 +Card 102: 28 94 4 54 77 42 17 44 59 48 | 24 13 61 6 5 83 50 77 76 37 90 71 79 47 8 98 41 75 59 70 89 16 30 17 45 +Card 103: 65 69 32 77 64 99 24 71 73 90 | 20 26 72 17 16 46 86 2 28 13 88 45 5 70 95 55 33 65 49 68 50 58 85 83 22 +Card 104: 78 17 88 26 65 79 8 18 47 25 | 31 86 76 30 84 44 62 97 81 42 14 72 25 32 82 5 54 69 98 52 68 13 92 3 58 +Card 105: 72 63 74 24 23 67 34 26 50 73 | 11 70 76 89 84 92 79 33 82 44 71 48 35 8 59 14 93 15 29 18 55 3 38 77 28 +Card 106: 36 40 51 81 60 96 34 49 85 89 | 72 15 7 40 60 97 68 52 36 55 87 96 85 89 49 61 78 34 37 27 76 5 51 81 12 +Card 107: 56 6 20 66 35 45 14 19 62 52 | 15 27 93 17 77 19 35 43 80 72 47 88 8 70 71 92 83 82 10 97 25 90 44 69 87 +Card 108: 33 44 49 78 10 26 20 65 77 13 | 33 54 2 24 17 20 26 7 93 5 3 77 81 46 92 78 49 65 32 51 44 95 13 29 10 +Card 109: 51 25 49 60 83 75 46 43 50 41 | 96 12 53 50 78 92 60 15 76 6 5 34 41 23 25 70 20 75 86 73 30 39 32 48 95 +Card 110: 13 22 99 91 47 53 35 34 37 77 | 79 35 1 13 88 57 76 89 81 15 53 56 99 34 6 68 77 32 91 47 87 37 4 24 16 +Card 111: 17 21 92 30 95 1 52 5 27 46 | 86 24 6 51 99 68 16 34 19 76 31 10 56 63 58 97 87 26 40 73 8 54 69 18 90 +Card 112: 52 83 38 39 95 12 57 14 46 85 | 12 95 85 14 89 50 52 17 92 18 38 34 55 83 16 66 19 88 4 20 46 57 77 39 11 +Card 113: 6 25 93 3 52 46 2 13 70 7 | 67 46 40 2 3 77 35 50 57 52 55 75 53 72 97 89 34 84 15 31 23 7 58 25 21 +Card 114: 24 53 25 12 17 82 14 50 3 74 | 91 83 57 50 96 68 52 11 56 44 89 95 15 13 54 20 76 48 30 88 53 55 93 65 47 +Card 115: 95 81 49 37 80 70 7 60 75 99 | 29 74 98 94 49 59 60 86 75 93 72 56 87 82 76 32 33 4 46 70 27 83 1 35 2 +Card 116: 80 67 54 68 98 47 12 56 77 60 | 45 81 47 78 29 39 56 42 80 54 68 90 37 2 16 96 5 38 14 59 7 30 6 67 20 +Card 117: 6 59 84 35 1 53 28 77 94 24 | 97 62 40 54 93 44 90 63 26 64 91 75 6 4 22 82 80 2 69 12 77 21 53 49 10 +Card 118: 86 30 39 49 32 29 27 68 97 50 | 2 48 36 99 83 4 38 5 47 77 66 1 20 10 14 15 63 78 89 91 85 80 41 28 54 +Card 119: 87 78 77 15 85 99 2 35 45 11 | 58 51 62 42 63 90 37 22 8 83 34 31 67 35 72 17 91 7 88 49 13 39 59 4 18 +Card 120: 80 21 33 94 26 68 73 35 83 3 | 67 9 94 49 27 50 40 30 60 90 86 91 98 69 6 15 36 71 38 31 17 33 41 70 84 +Card 121: 81 17 27 59 99 69 49 14 83 91 | 20 77 55 73 87 36 25 56 54 58 45 68 80 18 3 15 65 31 96 40 75 30 92 42 23 +Card 122: 22 44 29 27 77 20 86 34 5 99 | 63 19 97 74 4 39 7 52 87 31 81 45 23 18 53 47 50 73 80 2 70 94 26 66 14 +Card 123: 39 40 61 53 56 60 96 5 68 25 | 97 98 6 79 81 32 51 26 59 13 10 2 3 77 88 80 63 90 52 12 87 29 49 18 76 +Card 124: 78 19 92 75 56 95 2 16 43 44 | 95 2 56 4 92 66 53 88 21 16 43 78 17 44 85 48 12 19 52 40 69 75 59 82 26 +Card 125: 14 43 38 9 8 62 17 28 12 11 | 80 19 38 43 11 34 29 9 32 12 62 28 77 72 17 69 33 96 94 78 67 8 93 90 4 +Card 126: 60 95 93 99 11 49 20 75 37 54 | 54 42 19 49 92 95 11 34 74 93 60 52 99 5 7 75 20 12 68 98 43 50 36 37 56 +Card 127: 73 24 71 80 58 62 17 41 61 43 | 68 43 79 58 87 67 6 62 20 41 93 71 27 88 23 17 24 42 52 13 61 80 81 84 73 +Card 128: 99 10 91 58 70 47 80 30 96 57 | 46 57 3 72 4 87 70 10 59 7 96 48 28 97 91 58 47 76 36 80 8 23 19 30 99 +Card 129: 50 3 78 8 80 11 57 52 94 47 | 63 60 38 92 50 65 91 88 53 17 96 42 66 28 1 25 75 76 73 87 90 36 82 24 68 +Card 130: 38 42 33 70 61 58 73 88 74 29 | 83 92 77 58 56 74 55 93 38 46 29 28 37 68 33 73 91 61 12 64 25 88 42 31 70 +Card 131: 92 46 42 96 12 14 95 84 57 78 | 11 6 82 41 73 55 8 93 76 98 99 86 31 21 78 29 32 70 62 23 95 15 9 77 52 +Card 132: 40 97 45 2 19 99 29 98 37 20 | 5 56 36 21 33 83 32 98 66 20 16 37 97 93 40 78 43 77 99 29 87 96 2 30 39 +Card 133: 97 81 10 23 75 6 53 27 35 47 | 37 93 8 92 68 65 15 85 25 67 61 56 5 42 88 18 76 87 60 46 59 94 86 57 91 +Card 134: 96 66 54 61 10 85 98 40 13 41 | 90 58 9 38 28 24 57 52 5 81 80 62 34 54 79 49 2 95 1 18 41 65 82 32 42 +Card 135: 54 79 66 83 45 35 10 27 41 94 | 67 42 4 89 51 95 1 63 90 40 65 23 98 7 86 9 97 3 11 61 92 69 77 80 2 +Card 136: 37 86 74 45 70 95 33 28 82 32 | 67 13 62 8 63 41 78 40 24 91 11 48 7 85 59 81 44 37 45 90 66 70 35 33 94 +Card 137: 75 89 5 18 91 57 37 63 85 40 | 27 34 9 51 76 41 69 86 95 81 36 82 1 38 10 99 7 47 21 77 8 30 19 71 60 +Card 138: 9 67 82 54 5 98 7 6 40 96 | 13 83 90 88 44 17 82 24 47 84 23 85 62 45 72 91 58 46 38 32 25 79 70 59 33 +Card 139: 1 6 65 80 35 91 63 22 60 50 | 79 84 81 92 75 36 88 90 86 16 53 17 44 43 15 94 73 51 14 42 33 98 74 57 4 +Card 140: 24 43 8 76 91 79 42 68 81 70 | 65 36 56 57 16 69 38 86 85 37 22 9 98 33 45 25 95 28 52 2 27 6 14 46 55 +Card 141: 62 32 78 2 21 45 75 48 91 85 | 38 42 3 20 21 56 48 75 86 45 40 91 33 73 25 85 16 78 2 24 72 26 32 61 62 +Card 142: 90 10 32 43 65 91 24 22 34 62 | 91 26 72 81 7 11 32 10 90 33 34 87 35 24 29 3 59 62 2 65 22 43 57 74 79 +Card 143: 16 52 66 56 50 57 77 71 73 40 | 71 43 80 59 36 39 77 40 11 4 64 16 85 52 49 73 56 57 10 9 86 46 66 6 50 +Card 144: 61 56 14 66 2 73 39 8 33 97 | 26 8 47 67 16 18 37 39 14 9 61 33 97 2 66 56 73 4 75 11 62 68 49 44 34 +Card 145: 75 65 92 85 73 18 70 95 49 22 | 25 8 49 2 16 13 97 33 93 66 75 85 73 71 65 18 22 53 92 38 44 50 62 70 95 +Card 146: 78 62 86 83 26 23 80 2 77 87 | 23 96 38 63 83 22 20 86 77 21 67 66 75 5 36 47 26 61 80 87 82 16 78 46 2 +Card 147: 84 36 18 42 50 12 64 61 99 91 | 18 75 61 76 74 12 1 41 28 91 64 24 55 36 27 3 84 99 42 50 95 83 31 7 22 +Card 148: 61 91 60 18 68 50 73 29 23 87 | 18 76 33 5 27 97 31 37 21 38 56 91 60 87 23 55 58 61 50 45 14 29 72 68 73 +Card 149: 46 97 81 18 85 95 91 43 72 87 | 32 23 1 49 66 96 24 16 42 22 81 51 72 8 20 37 44 71 45 25 90 88 5 94 74 +Card 150: 17 99 20 36 33 78 9 87 81 84 | 37 8 79 65 31 99 45 36 81 90 73 11 49 46 87 84 3 33 19 12 57 9 20 48 17 +Card 151: 35 46 49 80 66 75 99 77 8 53 | 75 24 5 67 4 53 49 61 19 23 26 97 93 77 46 66 35 40 99 39 30 80 76 25 8 +Card 152: 11 80 39 1 30 36 16 85 33 66 | 26 66 60 2 94 16 81 48 80 43 85 96 51 68 33 63 88 54 6 36 37 59 5 1 47 +Card 153: 49 86 25 83 96 8 93 88 24 57 | 66 60 51 33 57 95 49 79 63 2 93 58 65 70 55 76 87 27 1 46 11 52 80 84 54 +Card 154: 38 41 75 30 91 6 14 66 47 57 | 34 56 11 70 71 60 22 81 41 74 39 67 79 98 87 42 62 3 32 57 55 46 33 16 51 +Card 155: 25 31 45 21 68 57 73 20 71 32 | 20 18 98 53 60 7 38 10 12 19 77 64 79 74 17 33 83 88 28 16 32 21 89 69 65 +Card 156: 19 35 39 37 84 50 62 95 96 56 | 89 24 92 67 4 47 54 59 72 84 3 5 76 96 23 1 58 86 32 21 78 88 68 44 48 +Card 157: 24 68 39 72 23 93 81 51 45 25 | 96 33 76 99 5 70 93 18 24 68 6 64 49 92 45 80 15 77 4 57 25 13 44 28 2 +Card 158: 51 18 46 75 2 80 20 72 17 29 | 97 55 47 23 20 4 39 24 64 11 31 16 90 29 93 72 18 45 27 46 61 70 80 68 67 +Card 159: 34 10 70 56 51 9 99 32 15 74 | 13 31 44 56 63 20 99 81 40 78 84 90 50 52 85 19 41 10 45 71 22 28 26 8 14 +Card 160: 69 49 13 23 36 64 24 18 57 7 | 54 62 96 36 7 10 28 64 1 85 3 63 73 21 27 37 49 47 75 34 97 30 77 32 9 +Card 161: 35 16 44 25 42 62 95 77 89 34 | 29 26 11 78 97 23 28 36 10 96 54 81 17 22 80 27 77 44 41 34 20 51 76 24 75 +Card 162: 60 17 28 76 67 12 41 15 53 70 | 41 19 35 64 65 15 37 22 80 66 55 40 45 81 17 98 85 74 57 4 16 91 49 5 68 +Card 163: 57 3 82 45 28 70 50 17 85 48 | 68 87 47 62 58 31 88 92 98 90 46 29 5 85 93 24 95 99 39 75 55 33 65 49 14 +Card 164: 33 81 13 87 53 48 79 70 17 91 | 92 57 21 4 36 27 62 1 46 80 31 72 5 94 58 99 75 67 83 25 51 9 26 52 63 +Card 165: 55 70 45 36 72 59 81 16 69 98 | 60 7 43 54 66 78 83 23 25 94 48 67 26 56 53 58 2 4 27 31 34 39 49 85 74 +Card 166: 94 64 48 15 36 35 79 23 77 33 | 78 80 25 5 18 34 92 69 84 86 26 13 89 65 29 3 7 39 71 31 42 21 51 48 55 +Card 167: 13 34 54 2 20 16 89 79 88 9 | 47 75 25 82 72 76 51 37 95 22 71 55 54 74 9 33 97 83 27 2 79 28 17 91 24 +Card 168: 33 82 70 88 7 46 96 67 26 89 | 73 8 22 1 59 45 92 24 43 41 15 64 3 58 83 63 57 82 20 18 91 13 77 60 19 +Card 169: 91 4 32 45 55 98 80 52 9 33 | 20 45 37 28 69 61 60 81 12 33 51 74 15 97 50 86 72 99 2 41 70 58 19 40 39 +Card 170: 45 72 63 87 70 33 89 41 4 18 | 25 9 19 49 26 63 11 73 54 64 70 37 45 82 30 1 90 24 87 42 4 40 91 71 18 +Card 171: 74 99 84 26 66 10 95 8 75 68 | 34 62 37 97 57 65 75 74 6 67 68 96 4 1 95 55 52 82 13 47 63 48 94 26 77 +Card 172: 62 99 47 83 94 8 51 70 9 76 | 94 99 83 26 57 76 18 67 22 80 61 34 8 39 65 78 13 81 70 51 62 93 9 3 33 +Card 173: 42 99 9 18 48 61 36 83 13 84 | 7 69 44 61 35 54 27 3 60 55 99 84 32 48 18 19 72 42 89 65 4 92 79 75 13 +Card 174: 48 34 46 43 53 51 72 35 19 3 | 72 43 57 51 14 34 2 36 53 25 94 81 87 61 19 35 23 4 99 26 48 46 7 90 86 +Card 175: 46 59 27 28 82 13 99 35 18 6 | 36 90 70 87 64 31 42 71 50 27 76 45 99 32 21 20 9 88 23 93 17 46 80 85 59 +Card 176: 92 44 3 29 10 7 66 4 57 21 | 36 68 61 87 65 1 53 95 60 2 34 47 75 42 82 8 83 79 54 74 93 26 69 22 32 +Card 177: 89 23 17 80 22 65 98 11 94 3 | 91 28 37 99 63 60 42 87 23 98 71 39 82 93 57 68 62 13 75 77 22 26 53 48 90 +Card 178: 11 75 56 47 64 88 91 66 59 12 | 41 97 40 26 42 67 23 28 31 99 85 30 11 94 81 55 74 89 52 64 65 69 3 38 43 +Card 179: 31 97 46 27 96 57 45 30 64 82 | 36 42 81 54 85 31 1 29 8 84 28 50 64 76 10 67 77 39 21 4 75 78 99 47 12 +Card 180: 10 32 84 45 87 16 82 14 95 8 | 21 8 41 66 56 42 77 83 90 9 55 61 19 38 23 50 28 62 99 58 33 11 84 39 98 +Card 181: 90 54 11 49 95 88 15 75 18 2 | 30 5 68 41 71 52 56 10 50 60 81 51 27 94 42 55 6 87 78 66 72 96 36 12 62 +Card 182: 73 1 91 2 99 75 30 29 48 89 | 46 51 34 7 18 57 64 9 23 68 16 19 85 70 66 72 5 87 12 4 25 97 10 89 60 +Card 183: 16 20 31 39 75 36 78 33 88 69 | 57 17 8 70 79 37 6 48 51 85 30 45 98 26 3 83 29 58 87 54 61 35 74 43 66 +Card 184: 69 50 38 49 9 96 75 82 80 14 | 23 99 30 83 78 9 50 40 14 74 75 8 37 69 82 42 26 49 96 1 38 58 80 84 7 +Card 185: 44 66 49 89 36 28 30 85 32 68 | 44 28 66 72 33 65 31 67 36 30 99 89 12 25 32 76 68 85 48 90 78 92 13 49 82 +Card 186: 46 48 6 52 24 19 51 76 11 47 | 93 63 78 33 31 86 68 10 74 70 3 83 36 4 54 79 8 77 38 57 97 27 22 29 53 +Card 187: 49 12 70 83 40 68 15 78 88 95 | 72 31 40 69 37 65 71 35 9 44 49 95 89 68 50 41 20 58 16 60 90 22 28 96 10 +Card 188: 86 47 96 63 55 29 91 31 59 23 | 55 77 30 23 91 75 86 47 29 31 78 67 4 92 96 26 63 37 80 54 1 11 32 15 98 +Card 189: 40 97 46 63 66 58 54 35 33 59 | 75 17 57 71 55 62 43 96 85 98 83 37 40 23 65 94 93 25 72 78 46 47 28 33 56 +Card 190: 94 41 57 47 6 24 65 59 44 20 | 95 86 26 77 87 47 18 27 16 85 57 61 66 37 35 38 23 42 50 60 98 71 62 8 25 +Card 191: 57 32 39 19 48 77 27 96 10 61 | 68 82 86 70 75 35 11 24 69 56 45 95 67 44 25 36 90 47 74 39 27 55 66 87 12 +Card 192: 50 94 12 32 88 76 95 23 46 49 | 60 9 6 37 42 50 96 15 95 66 34 94 91 4 33 29 14 92 16 80 98 64 12 57 36 +Card 193: 32 25 53 7 71 31 80 42 92 63 | 84 78 28 90 27 24 5 67 63 75 81 12 31 55 46 60 89 98 37 16 86 23 72 43 22 +Card 194: 79 47 88 9 97 76 62 23 72 84 | 77 78 67 65 91 79 64 38 41 26 89 16 10 71 86 82 47 75 61 11 34 66 7 3 70 +Card 195: 22 47 95 56 66 98 44 73 50 30 | 92 33 28 65 16 60 8 45 56 2 47 84 25 55 58 17 35 88 38 95 81 63 43 57 98 +Card 196: 76 23 10 43 9 32 46 62 84 79 | 22 4 49 42 23 55 13 35 90 9 24 52 65 26 95 94 18 37 47 79 56 59 54 86 48 +Card 197: 65 44 24 84 49 62 6 54 42 20 | 25 72 90 58 77 60 59 73 11 39 91 19 21 28 62 8 41 66 87 56 64 52 80 82 24 +Card 198: 63 44 64 86 78 25 92 90 99 70 | 62 29 51 81 21 6 75 58 54 90 18 10 59 98 97 41 4 52 53 64 80 28 92 11 9 +Card 199: 7 15 47 28 44 22 74 76 40 56 | 78 24 95 38 25 36 77 46 89 45 18 42 3 75 62 90 52 81 83 85 80 26 4 23 71 +Card 200: 85 88 3 44 54 19 9 71 29 53 | 72 42 56 55 33 68 65 86 58 3 57 83 12 31 96 9 13 62 70 80 17 29 41 27 6 +Card 201: 10 51 69 82 56 40 94 9 90 78 | 57 92 89 1 99 87 5 73 80 28 2 6 67 70 33 18 17 78 16 95 69 44 38 24 55 +Card 202: 44 47 79 75 24 50 86 80 62 87 | 66 91 36 15 28 81 57 69 30 14 10 20 27 18 77 46 95 72 39 23 38 34 60 37 26 +Card 203: 59 31 79 81 4 21 24 54 48 62 | 37 90 25 51 70 77 18 17 97 52 40 75 43 3 91 50 87 67 42 15 14 63 6 13 5
\ No newline at end of file diff --git a/aoc2023/src/day6/input.txt b/aoc2023/src/day6/input.txt new file mode 100644 index 0000000..1026e3a --- /dev/null +++ b/aoc2023/src/day6/input.txt @@ -0,0 +1,2 @@ +Time: 41 66 72 66 +Distance: 244 1047 1228 1040
\ No newline at end of file diff --git a/aoc2023/src/day7/input.txt b/aoc2023/src/day7/input.txt new file mode 100644 index 0000000..b1d1932 --- /dev/null +++ b/aoc2023/src/day7/input.txt @@ -0,0 +1,1000 @@ +3Q373 470 +K53JT 351 +A9JK9 856 +2T333 515 +867T4 541 +58K22 253 +5JA6J 994 +K4A4K 865 +94377 519 +92J2Q 901 +J7676 389 +2KK36 938 +JQ2KK 987 +Q7A82 509 +TTTA5 243 +72J27 502 +AKKKA 387 +23222 674 +55335 161 +AA655 73 +QKKQA 686 +5J2T5 680 +666AT 385 +ATA3A 761 +TTT8J 364 +98A2T 282 +59A44 260 +6T9QJ 130 +T7TKQ 721 +9274T 656 +T9AJ4 182 +A2222 259 +TQKJ7 67 +4J844 560 +AAATA 636 +9J36J 546 +QJQQQ 119 +249TT 295 +877J7 221 +4KA23 116 +929Q2 929 +99JQQ 445 +Q9QJ8 432 +4Q7TJ 963 +4J2J8 783 +5J657 257 +88788 183 +KKK7K 909 +KK396 637 +J45AT 117 +84448 806 +A2698 820 +A9AA5 320 +A3934 19 +Q45Q5 392 +78686 254 +A55A5 701 +98A4K 655 +5AJ88 95 +AK3KK 55 +773KK 33 +J9J9J 356 +2KAKK 563 +655K5 287 +55T56 475 +54444 308 +5J5QA 811 +QKA76 792 +2K288 42 +JTKA2 694 +88668 889 +8TQ64 212 +23QQ2 261 +8K8K5 365 +JKKAA 234 +3J894 880 +667Q2 817 +888T4 599 +T5Q83 315 +3QK29 670 +JK4KK 322 +75T8T 144 +AAA7K 291 +7T333 495 +A49K4 448 +JJ3J3 251 +5999J 278 +38438 890 +6K3Q9 122 +TTT99 93 +94775 240 +K8QJ3 369 +59674 107 +267J4 355 +QTQTQ 187 +46J44 961 +Q7AK2 580 +69969 609 +876A5 474 +A3866 642 +Q3QQA 526 +JAA88 425 +35Q9K 986 +QQTQJ 550 +54535 357 +2J222 639 +QK5J7 743 +222Q2 191 +T4T44 855 +QTQQ2 338 +JA7A2 300 +AAAJ2 508 +4J455 23 +A77AA 339 +5KK25 899 +252J2 737 +7QJ76 888 +K46QK 795 +A4T3J 640 +8A8K8 176 +AA5AA 41 +J2Q24 958 +58855 632 +333J3 610 +74474 807 +K3AAA 78 +JJ222 765 +44224 688 +76733 361 +5845K 181 +TT4T2 974 +23J33 102 +QQJ6Q 34 +Q9AQQ 150 +22747 717 +KAA5A 121 +7AA7J 286 +J786T 780 +3K8TT 32 +A6KAA 25 +9A362 166 +A29Q2 499 +6688K 57 +KKQKA 947 +999JJ 975 +6A666 927 +TTT3K 658 +JQQ7T 467 +8A247 934 +7JK8J 712 +KK39K 612 +6666Q 17 +77Q37 868 +A66AJ 169 +KKKKJ 535 +7Q7JJ 591 +K9848 646 +46888 931 +A86A8 326 +743TA 527 +QKK67 977 +KKJ6K 471 +AAJ7A 571 +55292 330 +3A222 390 +6453J 109 +JKKKA 403 +4J9T5 21 +K7A5K 486 +6TT34 793 +3479Q 60 +44624 443 +6KK3K 164 +4447J 112 +QQ27Q 452 +JAK65 522 +Q5Q5Q 354 +J5Q6A 540 +68999 711 +3QJ4Q 155 +A6AAA 314 +222KK 767 +55T9A 373 +T5T57 913 +TTTTA 794 +8J258 190 +3Q87J 489 +AAQAQ 950 +Q4JJ4 588 +6T64T 9 +636K5 228 +AA222 248 +7KJ35 616 +26646 507 +44A4J 829 +23323 904 +TA265 135 +JJQT9 136 +KATJ8 644 +J2862 713 +4JQ28 152 +Q3K2T 56 +6Q232 812 +9A622 885 +KJKKJ 773 +3859T 374 +99333 101 +TKTTK 205 +3333A 35 +5A4AQ 548 +T4944 967 +43353 813 +423JK 869 +T99T7 219 +3AAAA 394 +T65Q6 740 +J9243 352 +6656J 496 +444K4 574 +Q8T6K 98 +AQ55K 917 +7QQJ7 605 +TJ5TT 615 +68JQ5 852 +7A3J2 745 +369AK 217 +57755 343 +A8844 61 +Q76QQ 698 +36333 774 +237Q7 12 +KT694 283 +88286 154 +4T552 990 +Q9J54 759 +K6697 350 +A3A33 937 +AA9AA 246 +QQ7KK 748 +TT4A6 380 +4J992 845 +A66AA 573 +5QQ2Q 28 +86J37 214 +2A443 362 +Q9QKK 654 +44434 964 +77773 74 +44355 235 +9QK75 863 +3AJ33 766 +T2TJT 53 +44494 860 +883A9 309 +QQ59Q 360 +A88A8 584 +A83A4 395 +7J9TA 299 +55955 833 +QJK35 188 +4656A 514 +8KTQ4 554 +56J47 985 +J272J 184 +9J999 671 +72295 31 +53555 264 +4A537 750 +7A4JJ 875 +QK834 463 +88KKA 570 +QQ9JK 906 +6Q646 858 +53336 359 +QJ8QJ 587 +424TJ 607 +KTKK6 285 +Q5AQQ 84 +899A8 542 +K8TKK 250 +4JA4A 705 +6J75J 896 +888K8 312 +5583J 660 +6T335 614 +Q757T 945 +3AKKA 629 +KK946 825 +3393Q 406 +7J288 367 +49999 907 +99729 837 +66265 384 +K47JQ 263 +2AJ4K 566 +TTKKA 186 +8J877 418 +56844 666 +JTTTT 531 +6TJ94 26 +JQ5J5 344 +7J772 85 +33747 510 +KJA2A 729 +333TQ 578 +JQAT4 955 +75766 834 +QQ6QQ 980 +32K33 306 +TTTJ6 231 +2QTTT 213 +999AQ 608 +33353 202 +Q8Q8Q 756 +KK555 490 +746K8 691 +98A75 853 +JQ858 816 +KK9KK 536 +9T999 933 +TA8A8 39 +8558J 919 +J8KQK 15 +73Q2K 503 +2K2KJ 585 +JK9K5 903 +TJ7T7 545 +J723T 453 +KT895 583 +TTTKT 123 +39535 393 +K4K88 893 +43KK6 821 +6AA8J 504 +972TA 597 +7J736 592 +536A8 63 +J23Q3 402 +83K9Q 405 +28337 396 +9T558 776 +7AA78 946 +QTT24 441 +26QT3 401 +AJQAQ 953 +6T6AJ 304 +JK5KK 162 +2JJ2J 484 +73773 6 +8J864 630 +78782 557 +6TJ52 424 +487JQ 830 +8J698 82 +AJAAA 866 +228J8 204 +622J4 823 +6J2QJ 79 +22K22 232 +A86A6 444 +83K8Q 965 +JK586 944 +JA848 465 +8888A 45 +2T28T 803 +73J73 450 +27272 857 +7A777 544 +A998J 679 +46466 458 +KJ233 192 +4453J 378 +TQQJT 451 +A3K5J 512 +888Q6 968 +6AA66 841 +QQ222 883 +3K5A3 233 +JA4AA 379 +62288 778 +44456 51 +4A644 862 +55647 981 +A77A7 327 +KQ3A3 687 +QQ7Q7 976 +T4A2T 293 +46226 628 +Q59Q5 348 +36AJ2 984 +54433 532 +JJQ24 831 +7455J 381 +78845 218 +72AQ5 276 +52T22 618 +99399 68 +36AA3 118 +69669 839 +33Q5J 785 +TJ766 626 +T28J4 556 +T883Q 142 +73928 932 +TJ884 494 +AJ36Q 485 +9Q999 324 +T725Q 267 +22622 88 +92364 685 +97792 789 +J673K 620 +99943 625 +77JJ7 921 +8828Q 572 +7777J 353 +TAAJT 926 +99T29 787 +AQ4J4 520 +9J559 5 +J3T94 706 +K9KK9 918 +KK252 439 +79925 97 +TT47T 497 +848T4 126 +6TTT6 426 +K8825 925 +888J8 62 +K5K85 972 +AAKKA 449 +J5555 663 +89J99 27 +4Q444 922 +A9A99 397 +5A555 163 +8J3K8 662 +29989 645 +95222 751 +Q4Q4Q 193 +555K5 982 +74AJ8 735 +KKQ6K 668 +7676Q 916 +A28T7 784 +K57KK 388 +A4J4J 115 +2K442 229 +33TT3 956 +TT6TA 741 +TT782 131 +TJ5JQ 238 +TQ7T7 415 +29KQQ 598 +A8AAT 676 +46A28 650 +6698K 696 +6J969 158 +6694A 271 +QTQ5T 498 +Q2QQQ 613 +2A7QJ 210 +6T466 683 +QJ575 799 +Q63Q3 822 +Q9J28 848 +TTTT7 7 +KA9AA 854 +K2JJT 859 +28228 179 +K29KJ 429 +JJ8JJ 222 +A99A5 457 +QQTTT 983 +43KK2 134 +984JJ 1 +97J97 892 +2AAA8 689 +9Q77J 819 +98TJK 517 +56KA5 71 +7J66J 294 +55855 335 +TTT8T 596 +33663 407 +7J774 911 +3JQ55 564 +QQQ7Q 329 +85668 120 +KK333 301 +Q3553 867 +7K557 988 +Q8488 400 +96J99 643 +29224 714 +T8ATA 346 +99J93 462 +K83J3 697 +3KQJ4 653 +5KJQ2 824 +4JJ3A 897 +56248 727 +JJ666 702 +355T5 245 +45KAK 553 +88AAA 236 +K55J5 581 +AJJ49 65 +A8Q3J 197 +AAAKQ 529 +55976 707 +77776 930 +A9995 227 +K7J7K 912 +29K99 244 +4Q464 80 +22972 195 +666JQ 189 +26278 241 +79288 601 +5454A 427 +JTAKQ 138 +88833 549 +84J54 215 +AATAK 114 +58959 145 +8ATTJ 431 +QJ26K 265 +A3JA3 81 +T8T4J 242 +4T3A3 37 +44777 871 +JQ542 561 +A97Q9 693 +A76T4 412 +28T4A 481 +T485A 861 +78286 303 +K6776 52 +T8TKQ 754 +KJ938 957 +Q444Q 840 +25A89 455 +58588 673 +K8858 634 +K8KJ8 170 +K6KKK 851 +53353 140 +2T2K6 593 +QQAQA 48 +TT6J6 305 +922J2 920 +AA22K 22 +J555Q 725 +TTAAT 781 +2244J 171 +A95K7 436 +2J299 651 +78AAA 321 +2KKK2 690 +2J565 649 +77J5K 77 +T999T 762 +J4445 879 +J888Q 873 +J884J 1000 +98898 413 +29299 442 +QKQ3Q 678 +A652A 993 +55272 898 +KA5K5 664 +8KJAQ 147 +Q56QJ 734 +K77J3 739 +J7677 661 +T5569 206 +2AA2J 757 +TJTJT 342 +T2TTT 682 +88J82 363 +9KK78 700 +AT4T4 730 +86968 736 +99995 207 +7A3J4 172 +8KK87 991 +TKKJJ 16 +J7532 165 +J9888 996 +9AJTA 92 +43T78 310 +93J77 317 +J4424 805 +43J86 703 +952TJ 127 +54363 146 +8T2J7 435 +88848 832 +TAAAQ 791 +8228T 256 +699QT 815 +KQQQK 30 +T82J3 49 +36222 4 +AK288 86 +6792A 194 +2Q22T 667 +J3545 270 +9QJK4 280 +QQ22Q 371 +K9247 446 +A422A 943 +765K3 469 +9J5A6 874 +4A4QA 775 +8Q8Q8 124 +T8Q62 850 +8Q8Q5 747 +6KT88 738 +82888 722 +3TQQQ 349 +2J3TT 539 +7TQ59 72 +8998T 733 +JQJT3 414 +82428 589 +92856 423 +89833 54 +79T4A 523 +95839 979 +TJJT5 936 +33839 29 +37433 511 +TKJ2T 681 +JT973 633 +Q8Q8J 971 +Q5555 440 +K8886 24 +Q75A4 43 +3AQ33 298 +T446T 719 +577J5 753 +KJTKT 167 +52528 8 +25222 641 +QJ2T8 621 +A8JQJ 316 +7T7A7 772 +KQQTQ 141 +83734 758 +6Q66Q 434 +QJ6Q2 638 +AAA7A 196 +57555 203 +4QJQ4 216 +82J5Q 763 +A73A3 940 +46AJQ 559 +T4936 103 +89Q29 262 +7872T 466 +A5J58 274 +AAAQA 290 +37399 844 +A759Q 328 +TJ9TT 273 +77887 268 +64A2J 978 +6T76Q 110 +QQ467 742 +9J7Q5 422 +4K6Q3 91 +336K3 826 +6K63Q 382 +23552 105 +243AA 505 +Q887J 764 +2J92A 749 +68A3Q 416 +7T8T8 199 +225J5 404 +24774 153 +T7T77 870 +3J393 347 +Q5Q8J 128 +7Q777 796 +QKKKK 617 +86686 108 +44KT4 75 +56858 622 +5AJK4 960 +3245Q 311 +36536 370 +6644Q 11 +JKAAA 104 +T2426 579 +J3399 83 +33933 602 +A299J 777 +26J22 224 +8666J 594 +J3J38 669 +3AJ84 239 +52Q8T 877 +QJQQK 779 +QJ6T8 797 +43339 399 +9AJ74 476 +T499Q 13 +2TAKA 928 +T3K78 809 +2923K 201 +J8858 798 +T8888 818 +98399 168 +8T266 555 +23A57 652 +3KKK3 113 +22T22 460 +AJJAA 106 +7QKA8 464 +QQ8TQ 368 +99A99 341 +62Q5A 223 +J9T47 568 +Q7388 894 +69662 744 +96J2T 323 +2A779 89 +Q2874 269 +77797 948 +5359A 864 +AJ9K4 482 +Q3Q44 567 +JT958 665 +A38J3 438 +J4666 296 +428J5 501 +38K8K 410 +6T979 709 +3533T 284 +2285A 910 +933T6 882 +K6666 786 +56Q32 992 +5J752 198 +AJJQJ 600 +KK5KK 3 +38T94 180 +67QTJ 69 +J6636 200 +229J8 493 +QJTQ3 247 +5KQ5K 149 +654AT 528 +T84T4 878 +Q23QQ 905 +QQQ74 325 +4JTQQ 408 +T4T78 340 +3T5T5 551 +3J3J3 391 +88844 631 +TTT9T 810 +57775 935 +A777J 604 +4555T 2 +A5J8T 942 +22AJJ 506 +22323 997 +A3323 624 +84442 516 +2T992 76 +J7T76 828 +J8552 995 +KTKK3 886 +33853 782 +53233 129 +44J4J 372 +KQQT2 480 +K5649 576 +3J63K 760 +2J666 827 +6JT68 318 +45Q64 849 +49884 801 +9KTTK 902 +66737 952 +5Q8J4 708 +57Q92 724 +627J7 331 +K22J6 473 +4T444 923 +J4444 552 +78J8J 491 +4K328 477 +4AA3A 808 +7A34Q 437 +AQ888 428 +8TA99 768 +AA9A9 143 +9K5AT 211 +77722 40 +TQTTT 941 +Q2A4K 492 +236T9 677 +J8686 746 +J585K 64 +TJKQT 582 +T3TTJ 157 +22266 38 +KT5TK 692 +QJQQJ 908 +4K623 279 +7JJJ7 173 +64A66 524 +J7AJ8 417 +K43Q3 769 +T662T 148 +54J2J 488 +K6485 44 +J6666 970 +J26J9 209 +8337Q 334 +A27A4 319 +A7T78 132 +K777A 842 +KKK4K 249 +99K9K 430 +8745K 151 +Q2QTJ 433 +QKQ76 525 +25Q2Q 533 +5QK6J 800 +77T77 558 +5K323 939 +33KK4 590 +K8A52 111 +ATQJ6 569 +ATK89 50 +4433A 836 +3KKKQ 891 +46TK4 538 +5249Q 447 +2462K 675 +8JT6T 336 +466J7 459 +7K7KK 838 +544Q4 959 +58773 483 +823J5 999 +2TKA5 752 +AKJ58 386 +7T833 99 +KQ88Q 659 +KJ3A4 790 +K9595 307 +3K3J4 534 +3838T 220 +32522 720 +366Q3 500 +J8868 989 +T7KTK 376 +JQQQA 14 +42555 409 +5T5T5 648 +4KK4Q 383 +K7777 884 +736A3 543 +343Q3 366 +TJ856 237 +JJ555 46 +K5QQQ 275 +QAQQ7 672 +8KTJQ 731 +QQQ3Q 47 +J257Q 575 +6Q3QQ 87 +QKK43 924 +TTATJ 998 +K44K5 771 +37895 881 +48823 521 +KKK74 456 +99J79 139 +J4542 635 +AJ96K 954 +K8937 411 +5J355 895 +96967 185 +333T3 562 +TAJ77 755 +J38A8 487 +AAT79 313 +A6Q73 398 +386JA 10 +J35Q8 623 +27758 969 +3K3KJ 966 +7928Q 627 +AAA4A 59 +2AA52 478 +848J8 133 +55225 843 +TTQT9 619 +3Q79K 255 +27AK8 58 +TKTKK 272 +KTTAT 333 +55666 802 +47748 454 +Q3T56 699 +63T3T 302 +8754Q 723 +4J86T 358 +8TTQ9 226 +5523J 125 +88588 606 +58AAA 208 +TK273 137 +4Q7KQ 160 +29292 577 +Q333Q 611 +22TT2 716 +A55AA 258 +64822 468 +22228 847 +2242T 788 +JA26Q 472 +8JAAA 174 +K5Q8A 175 +Q5AT4 732 +J4434 530 +76666 337 +9998Q 547 +9T2J9 100 +3Q982 90 +7727Q 281 +92944 973 +K2597 814 +K444K 36 +26KJ6 292 +34K38 962 +5A378 225 +636J9 375 +TTTT4 420 +A66TA 461 +69QK5 345 +76293 479 +66966 804 +A3383 297 +T82TT 657 +2QJJQ 156 +K2JK3 94 +K6K66 252 +K58QJ 876 +6J979 513 +92647 718 +QQ9Q9 586 +862Q5 20 +5465K 915 +KQ44Q 595 +T66T6 288 +TJT7T 710 +5JT8K 159 +KJTK3 603 +KKJTQ 949 +67776 914 +J4323 177 +22229 704 +96999 178 +8AJKA 70 +69T69 419 +65556 770 +87738 537 +547J4 835 +44766 421 +3355J 684 +2K266 647 +5TTT5 266 +3T3TT 332 +88JJ8 96 +QQ5K3 887 +K7JKK 377 +J8Q2Q 66 +2KKJ6 230 +TTKQT 277 +22Q92 18 +JTTTK 695 +J993Q 846 +88898 728 +88T87 715 +Q74J4 872 +4T999 951 +T997Q 289 +92QA9 726 +AJ394 900 +TT2T2 518 +JJJJJ 565
\ No newline at end of file diff --git a/aoc2023/src/day8/input.txt b/aoc2023/src/day8/input.txt new file mode 100644 index 0000000..e27fbc1 --- /dev/null +++ b/aoc2023/src/day8/input.txt @@ -0,0 +1,740 @@ +LRLRLLRLRLRRLRLRLRRLRLRLLRRLRRLRLRLRLLRRRLRRRLLRRLRLRLRRRLRRLRRRLRLRLRRLRLLRLRLRRLRRRLRLRRLRRRLLRLRLRRRLRRRLRLRRRLRLRRRLLRRLLLRRRLLRRRLRRRLRRRLRLRLRLLRLRRLRLRLLLRRLRRLRRLRLRRLRRLLRRLRLRRRLRLRLLRRRLRRRLRRRLLLRRRLRLRLRRLRRRLRRRLRLRRRLRRLRRRLRLRRLLRRRLRRRLLLRRLRLRLRRLRRRLRRLRRLRLRRRR + +GXT = (MQM, CHN) +MBK = (RCK, RCK) +HBS = (QHS, RXC) +SXK = (FDB, FKP) +NJB = (BSB, KJM) +SPD = (FNL, RSH) +FJF = (NFH, XJN) +GHV = (LSV, BTS) +QDT = (HXV, PDX) +MDH = (XDK, DKN) +AAA = (FKL, CFC) +GRB = (VDP, LMM) +CXK = (DVB, CRJ) +FDB = (FTD, CNK) +LQT = (BJV, SMQ) +TSK = (NQD, VSG) +VLF = (NDS, CTV) +PGP = (DKC, CKL) +PVJ = (FDB, FKP) +VSV = (NFP, QHX) +KXN = (XJN, NFH) +KMQ = (VBH, XXH) +QXR = (RMD, TLT) +DLN = (TPD, KBG) +BHK = (GRP, RXF) +TSX = (HQP, SHK) +PTV = (VSG, NQD) +QVN = (XBH, DHC) +DDM = (TCB, XRQ) +NKD = (CDR, BJM) +JNR = (FMC, SQN) +VPQ = (JGC, VCJ) +HPB = (STQ, DDM) +HRT = (JNR, BGH) +CNQ = (HQV, PJQ) +PMG = (LRB, XXP) +RKV = (XGN, VCG) +KVQ = (KHS, SLV) +MDM = (VDX, NSF) +VHT = (PGP, GJS) +BPD = (NBF, VNH) +JCQ = (JCB, XVR) +CFJ = (PQP, CBJ) +DSX = (BXN, VDS) +MGH = (PFV, NLQ) +MPK = (FND, BJX) +QFR = (HFC, CNG) +PHS = (VNH, NBF) +KTT = (MTG, SQM) +JBK = (CSR, VXV) +BKL = (DLB, SHQ) +GQH = (PCH, LDZ) +XVJ = (CQM, SLF) +VBN = (FFF, PDL) +KQH = (SLT, XLG) +SSN = (PQH, LFT) +MQM = (SBH, TTC) +SCR = (HGH, QGS) +XTZ = (XKM, JTJ) +ZZZ = (CFC, FKL) +PRA = (GRB, MDB) +VTV = (LXQ, HKP) +PPX = (SQM, MTG) +PVA = (MRJ, CVH) +BJH = (VTR, RKG) +KPH = (RFD, NJP) +HXG = (NVJ, HNG) +LRX = (DCX, MGH) +NFD = (PFR, FVQ) +TDG = (TDH, ZZZ) +XKM = (XDG, VHT) +CKT = (LDC, VPF) +QQR = (BFQ, FXC) +RGJ = (KTV, GFR) +XDK = (MVC, SPX) +TLT = (MBK, DGL) +CDR = (JBG, KPH) +LTH = (DFN, BHK) +PVV = (BFQ, FXC) +FCK = (FRJ, KVG) +FXB = (MDH, VSJ) +DHD = (LDJ, RNH) +HHR = (HSK, CJD) +LSV = (LNP, NMD) +JSX = (DPF, SNN) +SBH = (XKD, GTX) +BHJ = (JSX, TMN) +CQX = (XPG, RLB) +XRQ = (FJK, NCF) +GMF = (JBX, DRV) +KBD = (HCC, TND) +KGT = (NLK, FRX) +RKM = (RTM, FMQ) +GNM = (GML, NLB) +SXP = (RKG, VTR) +PMS = (XBH, DHC) +PQH = (PJD, CXK) +XXH = (BMB, JGJ) +RHL = (QHS, RXC) +DFS = (JVK, VBN) +QCS = (XGN, VCG) +MJJ = (DDM, STQ) +SPV = (PXX, RRT) +FRJ = (SNX, MPQ) +FKC = (CBF, RKM) +SRG = (QFH, LGP) +VVQ = (BJV, SMQ) +BQC = (DSP, TXQ) +SHQ = (NKR, RGJ) +KCS = (QGS, HGH) +MTV = (BXN, VDS) +CNC = (HPB, MJJ) +SNF = (XXP, LRB) +KTP = (QRX, KML) +GSC = (HSK, CJD) +QRX = (CRB, TXL) +MDB = (VDP, LMM) +PFV = (CLM, CTN) +RRB = (HHR, GSC) +DDQ = (PXX, RRT) +TJB = (LSX, XNR) +BSP = (TXC, LKB) +MMV = (DKK, NFD) +DCB = (XKP, TNJ) +QKV = (CTT, SFM) +XDG = (PGP, GJS) +JMJ = (JLK, NJB) +VBJ = (HJV, JFD) +QHM = (CLJ, QGP) +STR = (HXG, RFC) +DPF = (VNQ, DQQ) +RXF = (NHV, GBX) +FXC = (JLX, LBS) +XVR = (MVT, QHD) +KNM = (BJD, QCK) +GTX = (MSB, FNP) +XCS = (PTN, NRH) +CGS = (FRX, NLK) +RCK = (CQM, CQM) +CDS = (PRR, GCJ) +BXN = (KQC, MSV) +PTN = (VST, QHJ) +TPD = (HJF, TSS) +RNH = (TTK, DBN) +TSM = (TPD, KBG) +KTG = (GPT, BMD) +PJP = (XBR, TCM) +QPF = (KJF, NJX) +HKP = (PLS, PGK) +KBG = (HJF, TSS) +SQK = (LSD, KNM) +XKD = (MSB, FNP) +QQP = (LFB, LTK) +MDX = (KTJ, FXF) +JLK = (KJM, BSB) +FBR = (PMG, SNF) +GSJ = (TDH, TDH) +DQQ = (FKK, KRF) +CTV = (CQD, RQX) +MNT = (RLG, XXQ) +GFL = (FGJ, KMD) +BJK = (VQX, JCQ) +SPN = (NKS, CNQ) +LNL = (XLM, XLC) +HKF = (HKJ, NNC) +FTD = (CCX, MSS) +RPV = (MDQ, DGS) +DCX = (NLQ, PFV) +JGB = (DVT, DRH) +CGM = (CHN, MQM) +JNQ = (PPX, KTT) +BJM = (JBG, KPH) +NFP = (SPD, XCT) +TPL = (LSD, KNM) +XTV = (CTJ, HPX) +LKB = (PDF, SLK) +QVK = (KMQ, MGF) +QVP = (VCX, JNQ) +NSR = (TJB, NBB) +XLA = (DLB, SHQ) +QLP = (HBS, RHL) +BGH = (FMC, SQN) +BJX = (LRX, PNM) +MVC = (BPD, PHS) +DXQ = (TMN, JSX) +PBK = (QKV, CTH) +GBJ = (RNH, LDJ) +BMB = (HJS, TJT) +SHT = (MFQ, LCT) +HSK = (CGS, KGT) +DRH = (PKN, PBN) +PQF = (XKP, TNJ) +RPX = (HCT, HQT) +FPH = (VQL, NPJ) +GLC = (PMS, QVN) +VDP = (SXK, PVJ) +JFD = (QBD, DGT) +LQL = (NPT, GVS) +TPQ = (NHL, MTD) +KRF = (HVT, MPK) +JQG = (QDT, PCK) +PJQ = (KVH, LBV) +VBB = (XXQ, RLG) +PSH = (SQV, TLB) +VXH = (VCX, JNQ) +VQD = (NBB, TJB) +JVD = (GDJ, JGQ) +SDR = (FTF, NQL) +NQQ = (TFM, CMC) +FNL = (LTV, CSX) +FVS = (NSF, VDX) +VTJ = (VXH, QVP) +KQC = (LGG, LGG) +SCS = (MTV, DSX) +QPS = (HMV, QQP) +CQM = (JDD, JDD) +FJX = (VBB, MNT) +GBQ = (BXV, LFR) +HGH = (SQK, TPL) +SLT = (FXB, NGN) +PBD = (HDC, FCX) +CKL = (MQS, NND) +LSX = (MBF, SPN) +HNG = (JQG, GKD) +MFQ = (PSH, TGK) +SNX = (GCS, KSF) +FMQ = (DXT, DFS) +TXC = (SLK, PDF) +VST = (SSN, LSR) +BFB = (VSV, SVC) +VNX = (TMF, QFS) +VPK = (VBB, MNT) +NVR = (XPG, RLB) +FLS = (FSL, CKH) +FKP = (FTD, CNK) +MGF = (XXH, VBH) +LNM = (NFD, DKK) +FNP = (VTT, MVG) +HDC = (PXP, GVH) +KVL = (LCT, MFQ) +XGP = (RHG, RTK) +JCT = (NJB, JLK) +XSL = (SVC, VSV) +SRS = (HPD, XBL) +FSL = (JMG, TFD) +CXB = (KQV, QGK) +QRP = (CGF, CQF) +PRG = (MDX, KPL) +VLL = (MRB, MHN) +VNQ = (KRF, FKK) +NPJ = (VPK, FJX) +MHN = (SRG, TTL) +KFN = (DFN, BHK) +FVQ = (LJM, TJV) +GKD = (QDT, PCK) +GVS = (FCK, NGC) +MBF = (CNQ, NKS) +SMQ = (KSV, KMF) +CRJ = (GSJ, TDG) +LHT = (BTL, KMB) +KJM = (KJC, BGC) +TTC = (GTX, XKD) +QFT = (PRM, KXS) +SDS = (JMP, TSR) +BLX = (PQF, DCB) +PXX = (LJT, QFK) +SQV = (FCB, HXF) +RQX = (DBJ, VTV) +THV = (GJL, MND) +SLK = (XBP, CXB) +LVS = (CTJ, HPX) +TSS = (CGL, JST) +MTG = (RKT, GTJ) +FFF = (GBQ, VTM) +XMV = (KVL, SHT) +FDJ = (MLG, MLG) +HPD = (MQK, FLS) +TLB = (HXF, FCB) +BGC = (SCR, KCS) +FBM = (PBD, MFK) +TJP = (JSS, GHV) +TXL = (NQC, RXH) +TKM = (GLQ, TKP) +RNS = (BJK, PHJ) +RRT = (LJT, QFK) +DHC = (XVF, STR) +RXM = (KVL, SHT) +JBX = (GBJ, DHD) +TBR = (HJV, JFD) +MFK = (HDC, FCX) +TFD = (QXN, QSK) +HMV = (LFB, LTK) +RMD = (MBK, DGL) +RJP = (CTX, TPQ) +CBF = (FMQ, RTM) +XXG = (JDH, TJP) +PDX = (XGQ, BSP) +XBL = (MQK, FLS) +GMT = (PCB, GTK) +DGT = (GNH, KVQ) +CHN = (TTC, SBH) +NKS = (HQV, PJQ) +HJC = (DXQ, BHJ) +CSR = (TSX, HSM) +XTK = (BJM, CDR) +DRT = (MPB, PSV) +HQT = (CRM, XTZ) +HNM = (SXJ, GMF) +NLQ = (CLM, CTN) +LTK = (PGS, SCS) +DNR = (DRT, QLK) +QVR = (DLN, TSM) +VLD = (GSP, CKT) +LFT = (PJD, CXK) +KVG = (SNX, MPQ) +FBS = (JSN, KFT) +GTK = (XHH, LCL) +KJZ = (MDB, GRB) +QGK = (PKK, VFK) +VDS = (KQC, MSV) +KHS = (TRF, JVD) +BHH = (MLG, RPX) +JVL = (CQF, CGF) +RGQ = (CQJ, KTG) +VTM = (LFR, BXV) +GML = (VFF, VLD) +CTJ = (FKC, PDT) +BJV = (KSV, KSV) +SPX = (BPD, PHS) +CTX = (NHL, MTD) +LRB = (HHP, CDS) +XHH = (MKX, KQH) +FDL = (QFT, MNG) +CCX = (HKF, VPS) +GPT = (VHX, QPF) +VFK = (VJX, QPS) +QFH = (LHP, CKD) +KMD = (QFR, XVX) +MSB = (VTT, MVG) +TRF = (JGQ, GDJ) +PHJ = (VQX, JCQ) +DBN = (NRQ, GBN) +JPM = (PMG, SNF) +TND = (HQB, XXT) +FJK = (XHV, FBS) +PNM = (DCX, MGH) +QFK = (RKR, QVK) +VNV = (NRC, XXN) +QXN = (PSG, CFJ) +NND = (HJC, MPN) +DQM = (TJP, JDH) +PGK = (XQK, PRG) +HMK = (BJK, PHJ) +DLB = (RGJ, NKR) +PXP = (XTK, NKD) +LGG = (CNP, CNP) +HKJ = (VQD, NSR) +TMN = (SNN, DPF) +FRX = (FBR, JPM) +PTA = (JTJ, XKM) +NRH = (VST, QHJ) +BQD = (KTP, GFF) +VTT = (KFN, LTH) +GMV = (VCJ, JGC) +XLG = (FXB, NGN) +JDH = (GHV, JSS) +TJT = (JCT, JMJ) +HCT = (CRM, CRM) +BGR = (JMP, TSR) +CKH = (JMG, TFD) +DHX = (QGP, CLJ) +BQN = (TBN, BTQ) +RSH = (CSX, LTV) +SXJ = (DRV, JBX) +MRB = (SRG, TTL) +GTG = (SPV, DDQ) +VQL = (VPK, FJX) +RXC = (GXT, CGM) +MSV = (LGG, HLF) +PSV = (GBL, RRB) +LRV = (XTV, LVS) +MVR = (NQL, FTF) +JDD = (GRB, MDB) +TKG = (LHT, VLM) +NHL = (MMV, LNM) +XBR = (DHX, QHM) +DNK = (TXQ, DSP) +GBX = (SDS, BGR) +PDT = (CBF, RKM) +PGH = (FGJ, KMD) +GTR = (RPT, CXM) +GBP = (LNB, DNR) +DKC = (MQS, NND) +HSM = (SHK, HQP) +VVV = (GLQ, TKP) +TTJ = (DNK, BQC) +CJD = (CGS, KGT) +VSG = (RMJ, BQN) +XGQ = (TXC, LKB) +CNP = (PCH, PCH) +JPT = (NDS, CTV) +MVT = (GBP, RLR) +HJF = (CGL, JST) +KGB = (GML, NLB) +MPN = (DXQ, BHJ) +KFT = (DTS, DJP) +QCK = (RLF, QVR) +MJR = (MJD, RPS) +LBV = (FPH, RFH) +JMG = (QSK, QXN) +LDJ = (DBN, TTK) +XBP = (KQV, QGK) +RTM = (DFS, DXT) +VBH = (BMB, JGJ) +LHP = (MMH, BPV) +PMR = (MDQ, DGS) +NNR = (JDF, NVP) +GJL = (JDT, QLP) +JST = (SBL, LNL) +KML = (TXL, CRB) +FBA = (KQG, JSC) +KSF = (TLH, JBK) +VFF = (CKT, GSP) +PSG = (PQP, CBJ) +LDZ = (JSC, KQG) +DKN = (MVC, SPX) +DRV = (DHD, GBJ) +MJB = (HNM, LKH) +MNG = (KXS, PRM) +SNN = (VNQ, DQQ) +GNH = (KHS, SLV) +BJF = (HPD, XBL) +LGP = (LHP, CKD) +XVZ = (CVH, MRJ) +GRP = (NHV, GBX) +NGC = (FRJ, KVG) +BJD = (QVR, RLF) +FKL = (LRV, DSH) +KSV = (VHK, VHK) +XQK = (KPL, MDX) +NRC = (DMT, GLC) +VNH = (LQT, VVQ) +CGL = (SBL, SBL) +GVH = (NKD, XTK) +DBJ = (LXQ, HKP) +KVC = (PMX, XPR) +NJP = (VXG, TTJ) +VXG = (BQC, DNK) +CLJ = (JVL, QRP) +RFH = (VQL, NPJ) +GFR = (KGB, GNM) +KQV = (VFK, PKK) +SQM = (GTJ, RKT) +MQS = (MPN, HJC) +BXV = (RJP, CLN) +VSJ = (DKN, XDK) +SHK = (XMV, RXM) +GSP = (LDC, VPF) +MSS = (VPS, HKF) +SFM = (NVR, CQX) +FMC = (BJF, SRS) +DXS = (RMD, TLT) +QHS = (CGM, GXT) +DJP = (FDL, JHP) +MPT = (PQF, DCB) +LXQ = (PLS, PGK) +RFD = (TTJ, VXG) +JGJ = (HJS, TJT) +XGN = (KVT, LQL) +NBB = (LSX, XNR) +CKD = (MMH, BPV) +CTT = (CQX, NVR) +CBJ = (RRG, KBD) +CNG = (THV, QBK) +BMD = (QPF, VHX) +XLC = (BKL, SCZ) +KQG = (CPT, VLL) +KTJ = (KVC, VBM) +JBG = (NJP, RFD) +KVT = (NPT, GVS) +QGP = (JVL, QRP) +HFC = (THV, QBK) +JDT = (HBS, RHL) +MNF = (NRS, XVZ) +GKR = (GTK, PCB) +NVP = (NQQ, RRQ) +MPQ = (GCS, KSF) +PLS = (PRG, XQK) +JDF = (NQQ, RRQ) +CQD = (DBJ, VTV) +LNP = (TPK, SCP) +HQP = (XMV, RXM) +RJM = (MJD, RPS) +MQK = (FSL, CKH) +KXS = (HBJ, HMP) +CSX = (QCS, RKV) +VCG = (LQL, KVT) +NVJ = (JQG, GKD) +NLB = (VLD, VFF) +CQN = (NVP, JDF) +PDL = (VTM, GBQ) +SJM = (JNR, BGH) +VTR = (HMK, RNS) +QGS = (SQK, TPL) +NFH = (XRH, DKD) +TXQ = (GFL, PGH) +GCJ = (XSL, BFB) +RKT = (CQN, NNR) +BFQ = (LBS, JLX) +PKN = (FGD, TKG) +XKP = (FDJ, BHH) +QHX = (SPD, XCT) +NKR = (GFR, KTV) +GLQ = (FBM, KLD) +PRR = (XSL, BFB) +XLT = (HPB, MJJ) +HRD = (QVP, VXH) +SNL = (VSF, GTG) +TBN = (XCS, LJX) +RPS = (NFM, VNX) +MKX = (XLG, SLT) +NQC = (MPT, BLX) +DKK = (FVQ, PFR) +LCT = (TGK, PSH) +XHV = (JSN, KFT) +PRM = (HMP, HBJ) +NQL = (BQD, TTN) +HQV = (KVH, LBV) +RKG = (HMK, RNS) +LCL = (KQH, MKX) +LMM = (PVJ, SXK) +NCF = (XHV, FBS) +NRS = (MRJ, CVH) +RTK = (RJM, MJR) +RFC = (NVJ, HNG) +XXQ = (SXP, BJH) +RPT = (NMV, VNV) +QBR = (CTH, QKV) +FXF = (VBM, KVC) +CRB = (NQC, RXH) +NQD = (BQN, RMJ) +RKR = (KMQ, MGF) +DSP = (GFL, PGH) +DSH = (XTV, LVS) +DMT = (QVN, PMS) +VPS = (NNC, HKJ) +JSC = (CPT, VLL) +XKS = (DVT, DRH) +TTV = (LKH, HNM) +MJD = (VNX, NFM) +SCZ = (SHQ, DLB) +XVX = (CNG, HFC) +KTV = (KGB, GNM) +QHJ = (LSR, SSN) +CQJ = (GPT, BMD) +NMD = (TPK, SCP) +DVB = (GSJ, GSJ) +JMP = (MQP, RGQ) +BSB = (BGC, KJC) +CPT = (MRB, MHN) +PQP = (RRG, KBD) +RLG = (BJH, SXP) +VQX = (XVR, JCB) +XJN = (XRH, DKD) +JHP = (QFT, MNG) +KMB = (HRT, SJM) +QSK = (PSG, CFJ) +DKD = (VLF, JPT) +NHV = (BGR, SDS) +HXV = (XGQ, BSP) +XXN = (DMT, GLC) +VLM = (KMB, BTL) +RLR = (DNR, LNB) +PCH = (KQG, JSC) +XRH = (VLF, JPT) +SBL = (XLM, XLM) +CRM = (JTJ, XKM) +JSS = (BTS, LSV) +CXM = (NMV, VNV) +MLG = (HCT, HCT) +JXH = (MVR, SDR) +XBH = (XVF, STR) +DXT = (VBN, JVK) +JSN = (DTS, DJP) +KLD = (MFK, PBD) +KVH = (RFH, FPH) +NJX = (GMV, VPQ) +NRQ = (GKR, GMT) +HXF = (DXS, QXR) +DGS = (SNL, BVF) +LJT = (RKR, QVK) +JLX = (XGP, TKS) +FCX = (PXP, GVH) +VDX = (VBJ, TBR) +VSF = (SPV, DDQ) +VCX = (KTT, PPX) +MMH = (MDM, FVS) +MPB = (GBL, RRB) +RLF = (TSM, DLN) +RMJ = (BTQ, TBN) +VJX = (QQP, HMV) +XVF = (RFC, HXG) +CTN = (VVV, TKM) +QHD = (GBP, RLR) +JGC = (JXH, QCQ) +KPL = (FXF, KTJ) +NGN = (MDH, VSJ) +XPG = (MJB, TTV) +MQP = (KTG, CQJ) +JCB = (QHD, MVT) +MNM = (RPT, CXM) +RXH = (BLX, MPT) +HHP = (GCJ, PRR) +SLV = (JVD, TRF) +HVT = (BJX, FND) +MTD = (MMV, LNM) +TTL = (QFH, LGP) +LTV = (QCS, RKV) +VXV = (TSX, HSM) +TCM = (QHM, DHX) +NBF = (LQT, VVQ) +BTQ = (LJX, XCS) +TKP = (KLD, FBM) +LDC = (HSD, PJP) +VHK = (NRS, NRS) +NFM = (TMF, QFS) +GTJ = (NNR, CQN) +LSD = (QCK, BJD) +HJV = (QBD, DGT) +QBK = (MND, GJL) +XNR = (MBF, SPN) +HQB = (KXN, FJF) +TNJ = (FDJ, BHH) +TGK = (SQV, TLB) +KMF = (VHK, MNF) +JVK = (PDL, FFF) +NSF = (VBJ, TBR) +SCP = (QQR, PVV) +XXP = (HHP, CDS) +VHX = (NJX, KJF) +VCJ = (JXH, QCQ) +KJC = (KCS, SCR) +XXT = (FJF, KXN) +NNC = (VQD, NSR) +VBM = (XPR, PMX) +JTJ = (XDG, VHT) +CNK = (CCX, MSS) +FTF = (TTN, BQD) +LKH = (SXJ, GMF) +TLH = (CSR, VXV) +GFF = (KML, QRX) +LFR = (CLN, RJP) +DTS = (FDL, JHP) +TTN = (KTP, GFF) +BTL = (HRT, SJM) +HJS = (JCT, JMJ) +HBJ = (JVR, GSF) +SLF = (JDD, KJZ) +CVH = (CNC, XLT) +JGQ = (JGB, XKS) +FGJ = (QFR, XVX) +STQ = (XRQ, TCB) +GCS = (JBK, TLH) +FKK = (HVT, MPK) +LJM = (DQM, XXG) +BTS = (NMD, LNP) +SVC = (NFP, QHX) +VPF = (PJP, HSD) +NPT = (NGC, FCK) +TTK = (GBN, NRQ) +XCT = (FNL, RSH) +RRG = (TND, HCC) +HMP = (GSF, JVR) +TJV = (XXG, DQM) +CTH = (CTT, SFM) +TPK = (QQR, PVV) +LSR = (PQH, LFT) +XLM = (BKL, BKL) +FGD = (VLM, LHT) +GSF = (VTJ, HRD) +PBN = (FGD, TKG) +NMV = (NRC, XXN) +CLN = (TPQ, CTX) +TMF = (TSK, PTV) +HPX = (FKC, PDT) +GBN = (GMT, GKR) +PCK = (PDX, HXV) +TCB = (NCF, FJK) +LJX = (NRH, PTN) +QBD = (KVQ, GNH) +CMC = (QBR, PBK) +GBL = (HHR, GSC) +SQN = (BJF, SRS) +FCB = (QXR, DXS) +GDJ = (XKS, JGB) +PCB = (LCL, XHH) +BPV = (MDM, FVS) +PJD = (DVB, DVB) +RHG = (MJR, RJM) +DVT = (PKN, PBN) +TFM = (QBR, PBK) +HCC = (HQB, XXT) +PGS = (DSX, MTV) +TSR = (MQP, RGQ) +KJF = (GMV, VPQ) +GJS = (DKC, CKL) +LNB = (QLK, DRT) +PKK = (QPS, VJX) +TKS = (RHG, RTK) +QFS = (TSK, PTV) +DGL = (RCK, XVJ) +XPR = (MNM, GTR) +TDH = (FKL, CFC) +PDF = (XBP, CXB) +DFN = (RXF, GRP) +JVR = (HRD, VTJ) +LBS = (TKS, XGP) +QCQ = (MVR, SDR) +MND = (JDT, QLP) +PFR = (LJM, TJV) +QLK = (MPB, PSV) +CFC = (LRV, DSH) +PMX = (GTR, MNM) +CGF = (PMR, RPV) +MVG = (LTH, KFN) +NLK = (FBR, JPM) +LFB = (SCS, PGS) +BVF = (VSF, GTG) +MDQ = (BVF, SNL) +CQF = (PMR, RPV) +FND = (LRX, PNM) +MRJ = (CNC, XLT) +HSD = (XBR, TCM) +HLF = (CNP, GQH) +RRQ = (CMC, TFM) +CLM = (TKM, VVV) +RLB = (TTV, MJB) +NDS = (RQX, CQD)
\ No newline at end of file diff --git a/aoc2023/src/day9/input.txt b/aoc2023/src/day9/input.txt new file mode 100644 index 0000000..6e0678f --- /dev/null +++ b/aoc2023/src/day9/input.txt @@ -0,0 +1,200 @@ +16 22 27 23 4 -16 23 267 1025 2943 7407 17445 39670 88339 193607 417868 887273 1851158 3792224 7628687 15083115 +12 27 53 97 184 369 757 1550 3165 6502 13489 28103 58181 118520 236055 458342 867210 1600341 2884757 5087813 8793398 +3 9 23 45 75 113 159 213 275 345 423 509 603 705 815 933 1059 1193 1335 1485 1643 +14 21 42 87 173 334 631 1162 2072 3563 5904 9441 14607 21932 32053 45724 63826 87377 117542 155643 203169 +6 13 20 27 34 41 48 55 62 69 76 83 90 97 104 111 118 125 132 139 146 +18 28 38 48 58 68 78 88 98 108 118 128 138 148 158 168 178 188 198 208 218 +21 33 40 47 73 158 375 850 1793 3543 6630 11857 20405 33964 54893 86412 132829 199805 294660 426723 607729 +5 11 28 62 114 176 227 229 123 -175 -778 -1832 -3520 -6066 -9739 -14857 -21791 -30969 -42880 -58078 -77186 +24 40 75 158 329 650 1234 2297 4245 7835 14509 27104 51294 98315 189749 365429 696074 1303683 2396426 4333544 7754453 +18 23 29 46 96 212 448 922 1929 4181 9250 20305 43249 88396 172934 324721 588708 1038939 1802431 3107544 5380614 +23 48 93 172 303 512 850 1439 2577 4950 10022 20709 42513 85461 167621 322006 611043 1157808 2213227 4297234 8485467 +-5 1 16 41 89 207 507 1216 2767 5970 12327 24602 47877 91653 174402 333999 651945 1308548 2704118 5713694 12198267 +6 29 72 158 337 698 1389 2653 4895 8818 15726 28221 51759 97922 190866 379323 758008 1504863 2945432 5665084 10707897 +9 12 14 16 18 23 61 248 912 2857 7918 20117 47998 109127 238298 501654 1019615 2002014 3798866 6969266 12368366 +17 22 22 7 -38 -133 -303 -578 -993 -1588 -2408 -3503 -4928 -6743 -9013 -11808 -15203 -19278 -24118 -29813 -36458 +-2 4 18 55 139 307 619 1172 2109 3609 5862 9109 14010 22956 43541 96348 230584 553042 1278506 2813195 5887325 +8 15 28 69 174 408 898 1887 3825 7548 14661 28355 55092 107964 213209 422581 836414 1645965 3210142 6193077 11808762 +16 42 93 189 363 674 1225 2187 3843 6689 11662 20608 37156 68227 126480 234080 428266 769300 1351491 2318111 3881153 +22 28 29 28 44 131 412 1147 2869 6647 14589 30812 63325 127656 253684 498111 966448 1850438 3489669 6469940 11775962 +10 22 64 147 279 478 797 1361 2416 4390 7966 14167 24453 40830 65971 103349 157382 233590 338764 481147 670627 +26 44 80 147 257 416 626 905 1352 2314 4756 10993 26015 59722 130486 270571 534070 1008160 1828632 3200823 5427261 +10 13 25 59 130 257 465 787 1266 1957 2929 4267 6074 8473 11609 15651 20794 27261 35305 45211 57298 +22 34 53 80 110 130 129 142 361 1361 4516 12738 31795 72709 156208 321132 640567 1253344 2426426 4679304 9031095 +-3 3 14 32 60 112 238 564 1347 3045 6402 12548 23114 40362 67330 107992 167433 252039 369702 530040 744632 +9 6 1 -6 -15 -26 -39 -54 -71 -90 -111 -134 -159 -186 -215 -246 -279 -314 -351 -390 -431 +8 19 30 41 52 63 74 85 96 107 118 129 140 151 162 173 184 195 206 217 228 +12 28 56 112 219 400 680 1122 1935 3705 7813 17117 36988 76803 152011 286901 518214 899754 1508166 2450062 3870689 +4 18 45 100 211 419 778 1355 2230 3496 5259 7638 10765 14785 19856 26149 33848 43150 54265 67416 82839 +14 27 62 122 200 276 326 367 589 1672 5468 16376 44007 108213 248366 540095 1124752 2259977 4404234 8354542 15465362 +10 22 40 63 103 210 507 1241 2865 6190 12701 25249 49587 97767 195548 398210 823495 1718635 3594121 7486884 15473014 +14 34 81 182 390 802 1584 3006 5499 9763 16982 29248 50393 87661 155200 281530 525422 1008672 1981041 3943806 7877282 +12 6 3 23 101 286 644 1284 2444 4698 9375 19317 40145 82250 163780 314954 584100 1045886 1812291 3046947 4983573 +13 21 32 52 86 138 211 307 427 571 738 926 1132 1352 1581 1813 2041 2257 2452 2616 2738 +17 35 58 79 89 86 96 217 705 2144 5802 14399 33741 76089 166928 358407 755996 1571412 3227213 6560698 13212768 +17 31 59 122 252 488 875 1475 2402 3896 6454 11039 19391 34467 61040 106490 181823 302957 492317 780784 1210046 +11 13 19 31 63 168 488 1351 3457 8223 18396 39097 79555 156016 296889 552619 1016132 1867206 3470206 6587672 12837496 +16 29 54 116 265 600 1300 2668 5219 9890 18523 34882 66641 129080 251748 490245 946750 1805263 3391104 6269484 11405501 +14 27 57 121 242 458 839 1513 2706 4807 8477 14831 25734 44266 75427 127171 211878 348395 564801 902077 1418890 +7 20 34 49 65 82 100 119 139 160 182 205 229 254 280 307 335 364 394 425 457 +1 6 11 16 21 26 31 36 41 46 51 56 61 66 71 76 81 86 91 96 101 +11 27 54 101 191 376 755 1502 2915 5494 10051 17860 30889 52245 87140 144991 243747 418245 735396 1320359 2399651 +2 8 29 83 199 423 835 1581 2927 5359 9789 17981 33374 62532 117469 219074 401880 720802 1262037 2164843 3671777 +6 24 54 96 150 216 294 384 486 600 726 864 1014 1176 1350 1536 1734 1944 2166 2400 2646 +10 19 51 124 260 486 847 1434 2430 4183 7326 12972 22998 40360 69185 113940 176032 244249 271543 122978 -535002 +-2 -4 -14 -20 14 157 520 1272 2677 5175 9538 17144 30453 53895 95688 171741 313968 587314 1122914 2179488 4251816 +10 2 -8 -10 16 111 367 983 2360 5278 11264 23369 47724 96431 192545 378084 726118 1357970 2466328 4344512 7421136 +9 22 62 142 278 503 886 1552 2699 4608 7642 12230 18832 27881 39698 54376 71629 90602 109638 125998 135530 +-2 -1 13 46 97 157 212 250 272 307 431 790 1627 3313 6382 11570 19858 32519 51169 77822 114949 +18 43 87 167 324 645 1288 2508 4685 8358 14272 23448 37289 57738 87507 130399 191748 279005 402501 576421 820026 +-8 -3 21 87 247 597 1292 2561 4722 8197 13527 21387 32601 48157 69222 97157 133532 180141 239017 312447 402987 +1 15 44 102 209 386 650 1009 1457 1969 2496 2960 3249 3212 2654 1331 -1055 -4861 -10508 -18486 -29359 +5 1 -2 6 59 235 682 1661 3639 7499 14980 29518 57729 111857 213604 399865 731009 1302477 2260610 3823774 6310015 +1 9 37 102 234 477 887 1529 2484 3904 6221 10771 21422 48445 117084 285457 680175 1564375 3463249 7388968 15233734 +-3 -3 -1 11 59 207 588 1446 3189 6453 12177 21689 36803 59927 94182 143532 212925 308445 437475 608871 833147 +10 8 4 -1 1 26 99 259 588 1312 3062 7435 18059 42442 94973 201543 406366 781704 1441336 2558759 4391269 +10 15 18 27 59 146 351 801 1756 3756 7920 16506 33869 67961 132485 249722 453870 794437 1338782 2172261 3393567 +7 15 41 104 240 511 1006 1830 3083 4847 7237 10652 16512 29023 58918 130730 296023 656207 1400169 2864048 5623160 +-8 -4 15 66 176 382 731 1280 2096 3256 4847 6966 9720 13226 17611 23012 29576 37460 46831 57866 70752 +11 15 15 11 3 -9 -25 -45 -69 -97 -129 -165 -205 -249 -297 -349 -405 -465 -529 -597 -669 +-1 2 8 24 76 213 509 1071 2071 3838 7075 13309 25742 50751 100388 196360 376127 701946 1273914 2248326 3862968 +11 12 10 -4 -30 -41 52 467 1667 4541 10659 22594 44276 81300 141049 232411 364763 545762 777320 1048944 1327390 +9 11 12 20 63 215 648 1733 4223 9564 20404 41417 80649 151761 277849 498056 879093 1535245 2662704 4597458 7910851 +21 22 23 43 114 293 701 1602 3535 7522 15407 30447 58395 109537 202601 372448 685608 1272236 2392115 4569768 8866201 +17 27 37 47 57 67 77 87 97 107 117 127 137 147 157 167 177 187 197 207 217 +18 42 72 103 130 150 170 224 408 956 2402 5903 13836 30828 65432 132724 258166 483158 872788 1526383 2591566 +23 30 36 41 45 48 50 51 51 50 48 45 41 36 30 23 15 6 -4 -15 -27 +14 31 52 83 148 308 690 1526 3202 6317 11752 20749 35000 56746 88886 135096 199958 289099 409340 568855 777340 +4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 +14 26 44 76 143 283 574 1197 2563 5538 11840 24799 50942 103413 209274 424645 865170 1765883 3597017 7286172 14643193 +12 27 49 69 87 136 330 950 2594 6451 14824 32143 66919 135472 268945 526276 1017696 1946291 3679643 6870089 12651367 +11 16 21 26 31 36 41 46 51 56 61 66 71 76 81 86 91 96 101 106 111 +10 35 74 146 282 527 958 1744 3300 6630 14020 30337 65320 137420 279964 550689 1046022 1921877 3423206 5925084 9988734 +20 29 40 59 108 247 607 1436 3177 6629 13289 26035 50387 96675 183550 343396 630338 1131693 1983878 3393971 5668318 +8 24 59 134 284 569 1103 2113 4045 7744 14750 27772 51427 93361 165904 288451 490806 817776 1335357 2138914 3363822 +11 25 55 105 179 281 415 585 795 1049 1351 1705 2115 2585 3119 3721 4395 5145 5975 6889 7891 +19 37 74 159 334 661 1245 2294 4257 8117 15987 32302 66195 136227 279739 571067 1156243 2317357 4588524 8958785 17217096 +-2 9 41 103 219 443 870 1652 3057 5656 10790 21562 44740 94217 197246 406018 820326 1634301 3236137 6423499 12866391 +5 -1 -8 -9 10 70 199 432 811 1385 2210 3349 4872 6856 9385 12550 16449 21187 26876 33635 41590 +19 32 45 58 71 84 97 110 123 136 149 162 175 188 201 214 227 240 253 266 279 +22 37 55 71 94 167 396 1005 2447 5608 12151 25096 49895 96676 185249 356351 696284 1389007 2822275 5796409 11921644 +22 47 92 163 266 410 610 889 1282 1854 2764 4460 8230 17669 42342 106334 266942 653145 1540604 3491025 7600370 +23 38 73 146 277 488 805 1274 2012 3332 6035 12106 26379 60395 140880 327309 746281 1655398 3556625 7389446 14848405 +10 34 81 160 274 417 573 715 811 876 1179 2852 9421 30324 88549 236536 588096 1380274 3089189 6639788 13773628 +17 32 52 70 76 73 108 318 991 2642 6104 12634 24034 42787 72208 116610 181485 273700 401708 575774 808216 +-4 7 32 78 155 279 498 962 2061 4658 10451 22528 46285 91178 174513 330071 627521 1214340 2401733 4831449 9782898 +-1 1 -1 -2 13 71 214 503 1023 1889 3253 5312 8317 12583 18500 26545 37295 51441 69803 93346 123197 +14 25 55 119 234 420 706 1143 1844 3111 5790 12143 27772 65506 152698 344108 743534 1538777 3056905 5851463 10843458 +-7 -7 2 25 72 160 317 595 1112 2172 4561 10190 23357 53033 116746 246846 500187 972563 1819588 3286119 5746790 +24 51 91 144 210 289 381 486 604 735 879 1036 1206 1389 1585 1794 2016 2251 2499 2760 3034 +-6 -8 -7 -4 9 70 282 871 2293 5443 12063 25532 52395 105321 208785 409850 798384 1544682 2969297 5672672 10775633 +18 38 74 128 197 273 343 389 388 312 128 -202 -721 -1477 -2523 -3917 -5722 -8006 -10842 -14308 -18487 +14 14 6 -15 -54 -116 -206 -329 -490 -694 -946 -1251 -1614 -2040 -2534 -3101 -3746 -4474 -5290 -6199 -7206 +0 4 22 78 215 499 1023 1911 3322 5454 8548 12892 18825 26741 37093 50397 67236 88264 114210 145882 184171 +15 19 27 58 141 316 650 1285 2551 5196 10802 22466 45823 90469 171801 313223 548567 924441 1502037 2357706 3581329 +28 49 76 114 185 353 769 1757 3977 8715 18361 37142 72176 134903 242928 422277 710018 1157133 1831442 2820274 4232451 +2 -5 0 35 133 356 819 1728 3430 6476 11736 20729 36639 67155 131593 277209 613962 1384465 3098432 6781691 14423617 +-2 7 41 121 269 517 931 1662 3062 5945 12131 25493 53858 112344 229132 455405 882418 1670639 3098937 5646285 10124879 +15 19 18 9 -6 -15 9 113 369 879 1780 3249 5508 8829 13539 20025 28739 40203 55014 73849 97470 +9 14 33 89 229 533 1128 2215 4117 7356 12767 21657 36017 58795 94238 148311 229201 347914 518973 761225 1098765 +8 23 51 104 202 386 739 1423 2763 5438 10883 22095 45241 92932 191019 392729 807586 1658885 3393971 6888230 13809204 +6 3 10 41 110 231 418 685 1046 1515 2106 2833 3710 4751 5970 7381 8998 10835 12906 15225 17806 +12 12 16 37 101 264 650 1525 3438 7497 15913 33051 67399 135147 266525 516779 984800 1844138 3393654 6138665 10918457 +9 30 68 138 276 551 1072 2001 3595 6307 10985 19236 34096 61304 111765 206261 384197 719228 1346090 2504950 4612204 +23 38 66 121 224 409 731 1285 2251 3984 7170 13069 23864 43131 76439 132081 221927 362378 575386 889489 1340792 +16 28 40 52 64 76 88 100 112 124 136 148 160 172 184 196 208 220 232 244 256 +17 30 61 119 219 397 747 1501 3179 6842 14487 29629 58121 109269 197305 343287 577501 942446 1496489 2318283 3512047 +-1 5 14 37 100 253 588 1271 2598 5105 9816 18826 36619 72851 147828 302628 616809 1237973 2429186 4642459 8629254 +16 36 76 164 342 666 1206 2046 3284 5032 7416 10576 14666 19854 26322 34266 43896 55436 69124 85212 103966 +-5 -3 12 63 182 411 809 1475 2612 4686 8786 17372 35707 74388 153464 308525 598601 1114243 1980956 3346921 5332708 +14 26 38 50 62 74 86 98 110 122 134 146 158 170 182 194 206 218 230 242 254 +2 -4 -19 -52 -115 -221 -369 -502 -417 401 3053 9640 23844 51688 102447 189584 331368 550394 870413 1307468 1850007 +21 43 82 139 220 346 563 952 1639 2805 4696 7633 12022 18364 27265 39446 55753 77167 104814 139975 184096 +-8 -16 -17 2 54 155 326 590 966 1484 2301 4109 9224 24092 64560 166325 404748 930980 2035275 4253332 8536722 +-2 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 +12 33 69 137 269 529 1047 2087 4183 8402 16827 33411 65487 126554 241758 459276 874624 1682767 3288727 6538653 13194051 +5 11 36 85 167 311 593 1176 2363 4661 8852 16065 27841 46181 73565 112928 167577 241031 336764 457829 606339 +5 0 6 43 134 309 628 1231 2423 4814 9565 18848 36718 70725 134771 253948 472385 865492 1558424 2753105 4766758 +20 31 42 53 64 75 86 97 108 119 130 141 152 163 174 185 196 207 218 229 240 +17 34 57 94 167 331 710 1554 3321 6788 13195 24426 43231 73493 120544 191534 295857 445638 656285 947110 1342023 +19 22 16 1 -16 -13 61 313 960 2430 5532 11711 23385 44323 79959 137439 225057 350542 517400 718181 923118 +12 20 36 60 92 132 180 236 300 372 452 540 636 740 852 972 1100 1236 1380 1532 1692 +15 28 66 154 345 743 1533 3025 5728 10495 18847 33738 61349 115157 224805 454707 941713 1968938 4106276 8470690 17196453 +26 54 104 181 285 412 556 719 953 1484 3011 7356 18816 46948 112339 258637 577588 1260474 2701490 5699779 11842279 +-5 0 13 48 130 307 671 1382 2697 5034 9163 16738 31609 62754 130392 278202 597329 1273687 2682530 5580428 11497888 +8 23 49 86 133 194 288 465 841 1695 3749 8922 22170 55570 136666 324373 737550 1603839 3339673 6676646 12854891 +7 18 29 40 51 62 73 84 95 106 117 128 139 150 161 172 183 194 205 216 227 +10 24 44 69 95 111 110 139 432 1714 5858 17254 45544 110822 253017 547981 1133786 2251864 4308844 7966159 14265585 +-5 -2 6 18 42 106 277 693 1613 3490 7072 13536 24660 43038 72343 117643 185775 285782 429418 631726 911694 +25 49 82 120 164 225 336 574 1090 2143 4134 7640 13481 22991 39079 69707 137760 306259 738049 1829516 4498299 +28 39 59 115 256 569 1203 2401 4540 8179 14115 23447 37648 58645 88907 131541 190396 270175 376555 516315 697472 +11 22 42 82 162 312 578 1053 1983 4058 9103 21549 51304 118974 264819 563384 1146435 2237670 4203680 7626820 13407030 +13 32 67 140 285 548 987 1672 2685 4120 6083 8692 12077 16380 21755 28368 36397 46032 57475 70940 86653 +16 33 54 83 134 242 480 986 2021 4120 8486 17955 39204 87515 196569 437797 957362 2044827 4257394 8639335 17100774 +9 16 28 45 77 154 347 816 1911 4366 9654 20646 42906 87373 176023 353702 712286 1438821 2909549 5870876 11783816 +8 6 12 48 156 403 877 1669 2836 4346 6024 7554 8652 9615 12577 23971 58912 148486 351260 770724 1580844 +10 34 83 183 372 704 1257 2145 3534 5662 8863 13595 20472 30300 44117 63237 89298 124314 170731 231487 310076 +8 20 36 53 68 78 80 71 48 8 -52 -135 -244 -382 -552 -757 -1000 -1284 -1612 -1987 -2412 +8 24 64 148 311 624 1225 2369 4520 8531 15994 29900 55846 104185 193758 358183 656084 1187050 2115368 3703412 6355581 +5 15 30 49 71 95 120 145 169 191 210 225 235 239 236 225 205 175 134 81 15 +20 50 100 187 348 653 1224 2260 4071 7142 12288 21029 36419 64717 118496 222024 419946 790371 1463632 2649684 4685450 +19 31 52 89 164 327 670 1344 2599 4900 9234 17847 35889 74868 159497 340530 717567 1477557 2956756 5736005 10781030 +18 39 72 138 278 564 1112 2106 3859 6958 12565 22975 42565 79305 147043 268821 481528 842249 1436726 2390408 3882632 +4 10 15 19 22 24 25 25 24 22 19 15 10 4 -3 -11 -20 -30 -41 -53 -66 +17 26 56 136 308 628 1180 2113 3711 6506 11444 20114 35050 60116 100984 165715 265453 415242 634976 950492 1394816 +25 37 60 118 244 489 953 1860 3725 7710 16362 35110 75232 159574 333227 682794 1369993 2688371 5156120 9663710 17702660 +4 8 33 90 191 348 577 927 1566 2968 6257 13776 29961 62612 124665 236581 429480 749160 1261153 2056982 3261795 +13 25 58 131 276 546 1035 1922 3551 6559 12064 21925 39086 68016 115257 190092 305345 478325 731926 1095895 1608280 +8 7 17 55 139 281 476 687 826 731 139 -1345 -4283 -9443 -17842 -30793 -49956 -77393 -115627 -167705 -237265 +5 22 61 137 265 460 737 1111 1597 2210 2965 3877 4961 6232 7705 9395 11317 13486 15917 18625 21625 +15 14 17 28 53 111 267 709 1908 4922 11933 27153 58340 119414 235217 450591 848077 1582290 2945281 5487158 10231495 +2 9 28 68 137 258 498 1015 2135 4478 9159 18097 34472 63377 112719 194430 326056 532799 850094 1326810 2029171 +22 34 46 53 55 67 142 416 1181 3001 6930 15013 31533 66065 140600 305315 671836 1480416 3230374 6924401 14511151 +18 34 63 125 258 526 1027 1901 3338 5586 8959 13845 20714 30126 42739 59317 80738 108002 142239 184717 236850 +27 52 102 187 321 526 843 1369 2346 4335 8515 17154 34306 66795 125554 227394 397285 671238 1099884 1752853 2724063 +23 38 55 78 115 182 314 595 1239 2789 6549 15431 35510 78803 168285 347274 697739 1377040 2692175 5248108 10237257 +25 38 63 120 243 496 1004 2001 3903 7429 13817 25215 45369 80781 142570 249338 431421 736992 1240579 2054666 3345159 +28 41 54 67 80 93 106 119 132 145 158 171 184 197 210 223 236 249 262 275 288 +-6 0 15 44 101 212 418 778 1372 2304 3705 5736 8591 12500 17732 24598 33454 44704 58803 76260 97641 +4 28 65 121 220 415 796 1496 2709 4761 8325 14968 28410 57238 120465 258450 553719 1170131 2426846 4940384 9902961 +6 7 15 36 76 141 237 370 546 771 1051 1392 1800 2281 2841 3486 4222 5055 5991 7036 8196 +24 33 45 62 77 83 95 191 590 1804 4931 12217 28162 61797 131542 275661 574402 1195504 2484736 5141196 10551151 +23 41 68 104 149 203 266 338 419 509 608 716 833 959 1094 1238 1391 1553 1724 1904 2093 +22 42 68 105 161 238 323 380 347 146 -277 -830 -906 1697 13721 53857 170028 477110 1234650 2999191 6910095 +-9 -1 22 61 119 200 304 418 503 477 194 -581 -2201 -5170 -10180 -18152 -30281 -48085 -73458 -108727 -156713 +11 16 21 26 31 36 41 46 51 56 61 66 71 76 81 86 91 96 101 106 111 +7 13 33 88 211 463 966 1970 3984 8020 16029 31654 61492 117150 218504 398730 711877 1243999 2129161 3571988 5878841 +26 54 107 191 316 512 855 1506 2775 5254 10135 19972 40418 83980 177798 379260 806629 1698071 3523848 7197074 14465457 +7 6 4 13 65 221 583 1306 2603 4745 8094 13284 21806 37503 69932 141398 301131 653436 1413420 3017283 6339755 +8 13 26 47 76 113 158 211 272 341 418 503 596 697 806 923 1048 1181 1322 1471 1628 +14 19 31 61 140 340 804 1785 3694 7157 13081 22729 37804 60542 93814 141237 207294 297463 418355 577861 785308 +18 25 41 74 132 223 355 536 774 1077 1453 1910 2456 3099 3847 4708 5690 6801 8049 9442 10988 +13 39 87 171 318 573 1009 1765 3152 5886 11539 23368 47825 97318 195247 385056 746111 1420737 2658839 4889321 8831144 +10 8 14 34 74 141 255 482 1006 2285 5397 12804 30003 69026 155797 345601 755687 1633870 3501675 7448656 15726061 +6 11 25 69 172 364 663 1064 1547 2130 3002 4780 8943 18505 38998 79845 156212 291437 520143 892151 1477318 +27 50 84 135 218 372 697 1431 3090 6700 14160 28802 56287 106157 194788 351446 631221 1142968 2109356 3994435 7771240 +9 31 66 114 175 249 336 436 549 675 814 966 1131 1309 1500 1704 1921 2151 2394 2650 2919 +8 7 7 8 10 22 98 426 1513 4538 11998 28875 64756 137733 281650 559617 1089152 2088679 3962843 7457584 13938920 +-5 -7 -9 -11 -2 54 247 779 2078 5020 11348 24426 50527 100927 195162 365902 666005 1178435 2029861 3408899 5590116 +10 16 34 74 147 274 521 1081 2432 5608 12628 27136 55313 107130 198019 351047 599686 991280 1591318 2488630 3801631 +9 8 21 66 172 391 830 1721 3552 7290 14748 29193 56376 106318 196477 357514 644161 1156577 2084086 3797672 7049008 +14 40 88 183 380 785 1580 3064 5738 10495 19048 34867 65134 124613 242953 477946 938949 1827706 3509661 6640837 12400447 +15 25 39 64 129 294 653 1337 2538 4600 8260 15178 28989 57277 115164 231711 461221 903259 1738853 3298396 6194405 +9 6 6 11 31 107 353 1029 2669 6320 14014 29709 61115 123102 243845 475664 914050 1731530 3239870 6009120 11104366 +26 37 48 75 147 313 670 1432 3073 6602 14068 29452 60189 119691 231437 435496 798808 1431239 2510444 4320037 7307627 +3 -1 -10 -24 -43 -67 -96 -130 -169 -213 -262 -316 -375 -439 -508 -582 -661 -745 -834 -928 -1027 +18 43 89 169 300 508 853 1501 2897 6147 13824 31625 71718 159389 345977 733436 1519704 3080095 6109095 11860445 22542764 +17 38 63 88 109 122 123 108 73 14 -73 -192 -347 -542 -781 -1068 -1407 -1802 -2257 -2776 -3363 +3 2 10 40 110 248 497 920 1605 2670 4268 6592 9880 14420 20555 28688 39287 52890 70110 91640 118258 +21 37 57 85 131 212 354 601 1040 1854 3418 6456 12280 23135 42677 76614 133543 226019 371895 595975 932025 +14 28 56 121 265 567 1177 2386 4774 9508 18898 37365 73056 140538 265518 493797 909482 1673256 3102528 5835085 11151679 +13 31 73 156 302 533 869 1334 1975 2899 4333 6712 10800 17849 29801 49538 81185 130471 205153 315508 474898 +-1 -10 -9 16 78 189 360 601 921 1328 1829 2430 3136 3951 4878 5919 7075 8346 9731 11228 12834 +1 10 33 77 148 252 400 620 988 1712 3344 7262 16674 38591 87590 192932 412066 856321 1739510 3468242 6804651 +2 19 60 137 265 461 749 1184 1908 3251 5909 11312 22519 46478 99470 219319 490975 1097216 2415107 5194716 10885594 +7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 +13 24 44 89 197 451 1016 2204 4587 9194 17866 33915 63351 117117 215018 392358 710721 1274860 2258304 3941069 6763777 +1 -4 1 26 80 183 394 857 1858 3876 7615 14048 24625 42043 72406 130287 249223 501620 1034021 2126310 4286814 +7 20 36 46 41 20 1 35 223 736 1838 3912 7489 13280 22211 35461 54503 81148 117592 166466 230889 +16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 +-1 3 12 46 137 336 738 1542 3172 6494 13173 26223 50812 95393 173241 304485 518733 858397 1382834 2173428 3339747
\ No newline at end of file |