#
tokens: 44984/50000 5/1140 files (page 86/103)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 86 of 103. Use http://codebase.md/cyfrin/aderyn?lines=true&page={x} to view the full context.

# Directory Structure

```
├── .cargo
│   └── config.toml
├── .git-blame-ignore-revs
├── .gitattributes
├── .github
│   ├── images
│   │   ├── aderyn_logo.png
│   │   ├── poweredbycyfrinblack.png
│   │   └── poweredbycyfrinblue.png
│   ├── ISSUE_TEMPLATE
│   │   ├── bug_report.md
│   │   ├── false_positive_issue.md
│   │   └── feature_request.md
│   └── workflows
│       ├── cargo.yml
│       ├── dependencies.yml
│       ├── release.yml
│       ├── reports.yml
│       └── toml.yml
├── .gitignore
├── .gitmodules
├── .vscode
│   └── settings.json
├── aderyn
│   ├── Cargo.toml
│   ├── oranda.json
│   ├── README.md
│   ├── src
│   │   ├── birdsong.rs
│   │   ├── completions.rs
│   │   ├── lib.rs
│   │   ├── lsp.rs
│   │   ├── main.rs
│   │   ├── mcp.rs
│   │   └── panic.rs
│   └── templates
│       └── aderyn.toml
├── aderyn_core
│   ├── .gitignore
│   ├── Cargo.toml
│   ├── README.md
│   ├── src
│   │   ├── ast
│   │   │   ├── ast_nodes.rs
│   │   │   ├── ast.rs
│   │   │   ├── impls
│   │   │   │   ├── ctx
│   │   │   │   │   ├── utils.rs
│   │   │   │   │   └── workspace.rs
│   │   │   │   ├── ctx.rs
│   │   │   │   ├── disp
│   │   │   │   │   ├── blocks.rs
│   │   │   │   │   ├── contracts.rs
│   │   │   │   │   ├── enumerations.rs
│   │   │   │   │   ├── errors.rs
│   │   │   │   │   ├── events.rs
│   │   │   │   │   ├── expressions.rs
│   │   │   │   │   ├── functions.rs
│   │   │   │   │   ├── identifiers.rs
│   │   │   │   │   ├── literals.rs
│   │   │   │   │   ├── modifiers.rs
│   │   │   │   │   ├── statements.rs
│   │   │   │   │   ├── structures.rs
│   │   │   │   │   ├── types.rs
│   │   │   │   │   ├── user_defined_value_types.rs
│   │   │   │   │   ├── using_for_directives.rs
│   │   │   │   │   └── variables.rs
│   │   │   │   ├── disp.rs
│   │   │   │   ├── node
│   │   │   │   │   ├── blocks.rs
│   │   │   │   │   ├── contracts.rs
│   │   │   │   │   ├── documentation.rs
│   │   │   │   │   ├── enumerations.rs
│   │   │   │   │   ├── errors.rs
│   │   │   │   │   ├── events.rs
│   │   │   │   │   ├── expressions.rs
│   │   │   │   │   ├── functions.rs
│   │   │   │   │   ├── identifiers.rs
│   │   │   │   │   ├── import_directives.rs
│   │   │   │   │   ├── literals.rs
│   │   │   │   │   ├── modifiers.rs
│   │   │   │   │   ├── pragma_directives.rs
│   │   │   │   │   ├── source_units.rs
│   │   │   │   │   ├── statements.rs
│   │   │   │   │   ├── structures.rs
│   │   │   │   │   ├── types.rs
│   │   │   │   │   ├── user_defined_value_types.rs
│   │   │   │   │   ├── using_for_directives.rs
│   │   │   │   │   └── variables.rs
│   │   │   │   ├── node.rs
│   │   │   │   ├── own
│   │   │   │   │   ├── hashing.rs
│   │   │   │   │   ├── node_id.rs
│   │   │   │   │   ├── source_units.rs
│   │   │   │   │   └── utils.rs
│   │   │   │   └── own.rs
│   │   │   ├── impls.rs
│   │   │   ├── macros.rs
│   │   │   ├── magic.rs
│   │   │   ├── node_type.rs
│   │   │   └── yul.rs
│   │   ├── ast.rs
│   │   ├── audit
│   │   │   ├── attack_surface.rs
│   │   │   ├── auditor.rs
│   │   │   ├── entrypoint.rs
│   │   │   └── public_functions_no_sender.rs
│   │   ├── audit.rs
│   │   ├── context
│   │   │   ├── browser
│   │   │   │   ├── ancestral_line.rs
│   │   │   │   ├── closest_ancestor.rs
│   │   │   │   ├── external_calls.rs
│   │   │   │   ├── extractor.rs
│   │   │   │   ├── immediate_children.rs
│   │   │   │   ├── location.rs
│   │   │   │   ├── macros.rs
│   │   │   │   ├── parent.rs
│   │   │   │   ├── peek_over.rs
│   │   │   │   ├── peek_under.rs
│   │   │   │   ├── peek.rs
│   │   │   │   ├── siblings.rs
│   │   │   │   ├── sort_nodes.rs
│   │   │   │   └── storage_vars.rs
│   │   │   ├── browser.rs
│   │   │   ├── capturable.rs
│   │   │   ├── flow
│   │   │   │   ├── display.rs
│   │   │   │   ├── error.rs
│   │   │   │   ├── kind.rs
│   │   │   │   ├── primitives.rs
│   │   │   │   ├── reducibles.rs
│   │   │   │   ├── tests.rs
│   │   │   │   ├── utils.rs
│   │   │   │   ├── visualizer.rs
│   │   │   │   └── voids.rs
│   │   │   ├── flow.rs
│   │   │   ├── graph
│   │   │   │   ├── callgraph
│   │   │   │   │   ├── legacy.rs
│   │   │   │   │   ├── new.rs
│   │   │   │   │   ├── tests.rs
│   │   │   │   │   ├── utils.rs
│   │   │   │   │   └── visit.rs
│   │   │   │   ├── callgraph.rs
│   │   │   │   ├── preprocess
│   │   │   │   │   ├── legacy.rs
│   │   │   │   │   └── new.rs
│   │   │   │   ├── preprocess.rs
│   │   │   │   ├── traits.rs
│   │   │   │   └── utils.rs
│   │   │   ├── graph.rs
│   │   │   ├── macros.rs
│   │   │   ├── mcp
│   │   │   │   ├── callgraph
│   │   │   │   │   ├── render.rs
│   │   │   │   │   ├── tool.rs
│   │   │   │   │   └── utils.rs
│   │   │   │   ├── callgraph.rs
│   │   │   │   ├── contract_surface
│   │   │   │   │   ├── render.rs
│   │   │   │   │   ├── tool.rs
│   │   │   │   │   └── util.rs
│   │   │   │   ├── contract_surface.rs
│   │   │   │   ├── list_contracts
│   │   │   │   │   ├── render.rs
│   │   │   │   │   └── tool.rs
│   │   │   │   ├── list_contracts.rs
│   │   │   │   ├── node_finder
│   │   │   │   │   ├── render.rs
│   │   │   │   │   ├── tool.rs
│   │   │   │   │   └── utils.rs
│   │   │   │   ├── node_finder.rs
│   │   │   │   ├── node_summarizer
│   │   │   │   │   ├── render.rs
│   │   │   │   │   ├── tool.rs
│   │   │   │   │   └── utils.rs
│   │   │   │   ├── node_summarizer.rs
│   │   │   │   ├── project_overview
│   │   │   │   │   ├── render.rs
│   │   │   │   │   └── tool.rs
│   │   │   │   ├── project_overview.rs
│   │   │   │   ├── tool_guide
│   │   │   │   │   └── tool.rs
│   │   │   │   └── tool_guide.rs
│   │   │   ├── mcp.rs
│   │   │   ├── router
│   │   │   │   ├── external_calls.rs
│   │   │   │   ├── internal_calls.rs
│   │   │   │   ├── modifier_calls.rs
│   │   │   │   └── tests.rs
│   │   │   ├── router.rs
│   │   │   └── workspace.rs
│   │   ├── context.rs
│   │   ├── detect
│   │   │   ├── detector.rs
│   │   │   ├── entrypoint.rs
│   │   │   ├── helpers.rs
│   │   │   ├── high
│   │   │   │   ├── _template.rs
│   │   │   │   ├── abi_encode_packed_hash_collision.rs
│   │   │   │   ├── arbitrary_transfer_from.rs
│   │   │   │   ├── const_func_changes_state.rs
│   │   │   │   ├── contract_locks_ether.rs
│   │   │   │   ├── dangerous_unary_operator.rs
│   │   │   │   ├── delegate_call_unchecked_address.rs
│   │   │   │   ├── delete_nested_mapping.rs
│   │   │   │   ├── dynamic_array_length_assignment.rs
│   │   │   │   ├── enumerable_loop_removal.rs
│   │   │   │   ├── eth_send_unchecked_address.rs
│   │   │   │   ├── experimental_encoder.rs
│   │   │   │   ├── function_selector_collision.rs
│   │   │   │   ├── incorrect_caret_operator.rs
│   │   │   │   ├── incorrect_erc20_interface.rs
│   │   │   │   ├── incorrect_erc721_interface.rs
│   │   │   │   ├── incorrect_shift_order.rs
│   │   │   │   ├── misused_boolean.rs
│   │   │   │   ├── msg_value_in_loops.rs
│   │   │   │   ├── multiple_constructors.rs
│   │   │   │   ├── nested_struct_in_mapping.rs
│   │   │   │   ├── out_of_order_retryable.rs
│   │   │   │   ├── pre_declared_variable_usage.rs
│   │   │   │   ├── reentrancy_state_change.rs
│   │   │   │   ├── reused_contract_name.rs
│   │   │   │   ├── rtlo.rs
│   │   │   │   ├── selfdestruct.rs
│   │   │   │   ├── signed_integer_storage_array.rs
│   │   │   │   ├── state_variable_shadowing.rs
│   │   │   │   ├── storage_array_memory_edit.rs
│   │   │   │   ├── strict_equality_contract_balance.rs
│   │   │   │   ├── tautological_compare.rs
│   │   │   │   ├── tautology_or_contradiction.rs
│   │   │   │   ├── tx_origin_used_for_auth.rs
│   │   │   │   ├── unchecked_low_level_call.rs
│   │   │   │   ├── unchecked_send.rs
│   │   │   │   ├── unprotected_initializer.rs
│   │   │   │   ├── unsafe_casting.rs
│   │   │   │   ├── weak_randomness.rs
│   │   │   │   └── yul_return.rs
│   │   │   ├── high.rs
│   │   │   ├── low
│   │   │   │   ├── _template.rs
│   │   │   │   ├── assert_state_change.rs
│   │   │   │   ├── block_timestamp_deadline.rs
│   │   │   │   ├── boolean_equality.rs
│   │   │   │   ├── builtin_symbol_shadowing.rs
│   │   │   │   ├── centralization_risk.rs
│   │   │   │   ├── constant_function_contains_assembly.rs
│   │   │   │   ├── costly_loop.rs
│   │   │   │   ├── dead_code.rs
│   │   │   │   ├── delegatecall_in_loop.rs
│   │   │   │   ├── deprecated_oz_function.rs
│   │   │   │   ├── division_before_multiplication.rs
│   │   │   │   ├── ecrecover.rs
│   │   │   │   ├── empty_block.rs
│   │   │   │   ├── empty_require_revert.rs
│   │   │   │   ├── function_initializing_state.rs
│   │   │   │   ├── function_pointer_in_constructor.rs
│   │   │   │   ├── inconsistent_type_names.rs
│   │   │   │   ├── incorrect_modifier.rs
│   │   │   │   ├── internal_function_used_once.rs
│   │   │   │   ├── large_numeric_literal.rs
│   │   │   │   ├── literal_instead_of_constant.rs
│   │   │   │   ├── local_variable_shadowing.rs
│   │   │   │   ├── missing_inheritance.rs
│   │   │   │   ├── modifier_used_only_once.rs
│   │   │   │   ├── multiple_placeholders.rs
│   │   │   │   ├── non_reentrant_not_first.rs
│   │   │   │   ├── push_0_opcode.rs
│   │   │   │   ├── redundant_statement.rs
│   │   │   │   ├── require_revert_in_loop.rs
│   │   │   │   ├── return_bomb.rs
│   │   │   │   ├── solmate_safe_transfer_lib.rs
│   │   │   │   ├── state_change_without_event.rs
│   │   │   │   ├── state_no_address_check.rs
│   │   │   │   ├── state_variable_could_be_constant.rs
│   │   │   │   ├── state_variable_could_be_immutable.rs
│   │   │   │   ├── state_variable_read_external.rs
│   │   │   │   ├── storage_array_length_not_cached.rs
│   │   │   │   ├── todo.rs
│   │   │   │   ├── unchecked_return.rs
│   │   │   │   ├── uninitialized_local_variable.rs
│   │   │   │   ├── unsafe_erc20_operation.rs
│   │   │   │   ├── unsafe_oz_erc721_mint.rs
│   │   │   │   ├── unspecific_solidity_pragma.rs
│   │   │   │   ├── unused_error.rs
│   │   │   │   ├── unused_import.rs
│   │   │   │   ├── unused_public_function.rs
│   │   │   │   ├── unused_state_variable.rs
│   │   │   │   └── void_constructor.rs
│   │   │   ├── low.rs
│   │   │   └── test_utils.rs
│   │   ├── detect.rs
│   │   ├── lib.rs
│   │   ├── stats
│   │   │   ├── cloc.rs
│   │   │   ├── dbg_tips.txt
│   │   │   ├── ignore.rs
│   │   │   ├── token.rs
│   │   │   └── util.rs
│   │   ├── stats.rs
│   │   ├── test_utils
│   │   │   └── load_source_unit.rs
│   │   ├── test_utils.rs
│   │   ├── visitor
│   │   │   ├── ast_visitor.rs
│   │   │   ├── macros.rs
│   │   │   └── workspace_visitor.rs
│   │   └── visitor.rs
│   ├── templates
│   │   └── mcp-tool-response
│   │       ├── callgraph.md
│   │       ├── contract_surface.md
│   │       ├── list_contracts.md
│   │       ├── node_finder_get_all.md
│   │       ├── node_finder_grep.md
│   │       ├── node_finder_search.md
│   │       ├── node_summarizer.md
│   │       ├── project_overview.md
│   │       └── tool_guide.md
│   └── tests
│       ├── common
│       │   ├── ancestral_line.rs
│       │   ├── closest_ancestor.rs
│       │   ├── immediate_children.rs
│       │   ├── immediate_parent.rs
│       │   ├── mod.rs
│       │   ├── new_ast_nodes.rs
│       │   ├── peek_over.rs
│       │   └── sibling.rs
│       └── traversal.rs
├── aderyn_driver
│   ├── .gitignore
│   ├── benches
│   │   └── detectors.rs
│   ├── Cargo.toml
│   ├── README.md
│   ├── src
│   │   ├── compile.rs
│   │   ├── config.rs
│   │   ├── display.rs
│   │   ├── driver.rs
│   │   ├── interface
│   │   │   ├── json.rs
│   │   │   ├── lsp.rs
│   │   │   ├── markdown.rs
│   │   │   ├── mod.rs
│   │   │   ├── sarif.rs
│   │   │   ├── tables.rs
│   │   │   └── util.rs
│   │   ├── lib.rs
│   │   ├── mcp.rs
│   │   ├── process.rs
│   │   └── runner.rs
│   └── tests
│       └── astgen.rs
├── bacon.toml
├── benchmarks
│   ├── aderyn
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── iteration_times.svg
│   │       │   └── pdf.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── iteration_times_small.svg
│   │       ├── iteration_times.svg
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── relative_iteration_times_small.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── SD.svg
│   │       └── typical.svg
│   ├── arbitrary-transfer-from
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── avoid-abi-encode-packed
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── block-timestamp-deadline
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── centralization-risk
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── constants-instead-of-literals
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── delegate-call-in-loop
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── deprecated-oz-functions
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── ecrecover
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── empty-block
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── hello_world
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── inconsistent-type-names
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── large-numeric-literal
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── non-reentrant-before-others
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── push-zero-opcode
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── report
│   │   └── index.html
│   ├── require-with-string
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── solmate-safe-transfer-lib
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── unindexed-events
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── unprotected-initializer
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── unsafe-erc20-functions
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── unsafe-oz-erc721-mint
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── unspecific-solidity-pragma
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── useless-internal-function
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── useless-modifier
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── useless-public-function
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   └── zero-address-check
│       ├── base
│       │   ├── benchmark.json
│       │   ├── estimates.json
│       │   ├── sample.json
│       │   └── tukey.json
│       ├── change
│       │   └── estimates.json
│       ├── new
│       │   ├── benchmark.json
│       │   ├── estimates.json
│       │   ├── sample.json
│       │   └── tukey.json
│       └── report
│           ├── both
│           │   ├── pdf.svg
│           │   └── regression.svg
│           ├── change
│           │   ├── mean.svg
│           │   ├── median.svg
│           │   └── t-test.svg
│           ├── index.html
│           ├── MAD.svg
│           ├── mean.svg
│           ├── median.svg
│           ├── pdf_small.svg
│           ├── pdf.svg
│           ├── regression_small.svg
│           ├── regression.svg
│           ├── relative_pdf_small.svg
│           ├── relative_regression_small.svg
│           ├── SD.svg
│           ├── slope.svg
│           └── typical.svg
├── Cargo.lock
├── Cargo.toml
├── cli
│   ├── benchmarks.sh
│   └── reportgen.sh
├── CODEOWNERS
├── CONTRIBUTING.md
├── cyfrinup
│   ├── dynamic_script
│   └── why.md
├── deny.toml
├── dist-workspace.toml
├── funding.json
├── LICENSE
├── Makefile
├── package-lock.json
├── package.json
├── README.md
├── RELEASE_CHECKLIST.md
├── reports
│   ├── adhoc-sol-files-highs-only-report.json
│   ├── adhoc-sol-files-report.md
│   ├── ccip-functions-report.md
│   ├── empty_report.md
│   ├── hardhat-playground-report.md
│   ├── nft-report-icm.md
│   ├── nft-report.md
│   ├── prb-math-report.md
│   ├── report.json
│   ├── report.md
│   ├── report.sarif
│   ├── sablier-aderyn-toml-nested-root.md
│   ├── templegold-report.md
│   └── uniswap_profile.md
├── rust-toolchain.toml
├── rustfmt.toml
├── tests
│   ├── adhoc-sol-files
│   │   ├── aderyn.toml
│   │   ├── Counter.sol
│   │   ├── DemoASTNodes.sol
│   │   ├── Helper.sol
│   │   ├── InconsistentUints.sol
│   │   ├── inheritance
│   │   │   ├── ExtendedInheritance.sol
│   │   │   ├── IContractInheritance.sol
│   │   │   └── InheritanceBase.sol
│   │   ├── InternalFunctions.sol
│   │   ├── lib
│   │   │   └── ThisShouldBeExcluded.sol
│   │   ├── multiple-versions
│   │   │   ├── 0.4
│   │   │   │   ├── A.sol
│   │   │   │   └── B.sol
│   │   │   ├── 0.5
│   │   │   │   ├── A.sol
│   │   │   │   └── B.sol
│   │   │   ├── 0.6
│   │   │   │   ├── A.sol
│   │   │   │   └── B.sol
│   │   │   ├── 0.7
│   │   │   │   ├── A.sol
│   │   │   │   └── B.sol
│   │   │   └── 0.8
│   │   │       ├── A.sol
│   │   │       └── B.sol
│   │   ├── OnceModifierExample.sol
│   │   └── StateVariables.sol
│   ├── ast
│   │   ├── abstract_contract.json
│   │   ├── address_payable.json
│   │   ├── array_type_name.json
│   │   ├── ast-erc4626.json
│   │   ├── base_constructor_call.json
│   │   ├── bit_not.json
│   │   ├── call.json
│   │   ├── constructor.json
│   │   ├── contract_dep_order.json
│   │   ├── do_while.json
│   │   ├── documentation_1.json
│   │   ├── documentation_2.json
│   │   ├── documentation_3.json
│   │   ├── documentation_local_variable.json
│   │   ├── documentation_on_statements.json
│   │   ├── documentation_triple.json
│   │   ├── empty_block.json
│   │   ├── enum_value_declaration.json
│   │   ├── enum_value.json
│   │   ├── event_definition.json
│   │   ├── experimental_encoder_pragma.json
│   │   ├── fallback_and_reveice_ether.json
│   │   ├── fallback_payable.json
│   │   ├── fallback.json
│   │   ├── function_type.json
│   │   ├── function.json
│   │   ├── global_enum.json
│   │   ├── global_struct.json
│   │   ├── inheritance_specifier.json
│   │   ├── leave.json
│   │   ├── license.json
│   │   ├── long_type_name_binary_operation.json
│   │   ├── long_type_name_identifier.json
│   │   ├── loop.json
│   │   ├── mappings.json
│   │   ├── modifier_definition.json
│   │   ├── modifier_invocation.json
│   │   ├── mutability.json
│   │   ├── nested_functions.json
│   │   ├── non_utf8.json
│   │   ├── override.json
│   │   ├── placeholder_statement.json
│   │   ├── receive_ether.json
│   │   ├── short_type_name_ref.json
│   │   ├── short_type_name.json
│   │   ├── slot_offset.json
│   │   ├── smoke.json
│   │   ├── source_location.json
│   │   ├── string.json
│   │   ├── stringlit.json
│   │   ├── switch_default.json
│   │   ├── switch.json
│   │   ├── try_catch.json
│   │   ├── two_base_functions.json
│   │   ├── unicode.json
│   │   ├── used_errors.json
│   │   ├── userDefinedValueType.json
│   │   ├── using_for_directive.json
│   │   ├── var_access.json
│   │   └── yul_hex_literal.json
│   ├── contract-playground
│   │   ├── .github
│   │   │   └── workflows
│   │   │       └── test.yml
│   │   ├── .gitignore
│   │   ├── dot
│   │   │   └── .gitkeep
│   │   ├── foundry.toml
│   │   ├── README.md
│   │   ├── script
│   │   │   └── Counter.s.sol
│   │   ├── src
│   │   │   ├── AbstractContract.sol
│   │   │   ├── AderynIgnoreCustomDetectors.sol
│   │   │   ├── AdminContract.sol
│   │   │   ├── ArbitraryTransferFrom.sol
│   │   │   ├── AssemblyExample.sol
│   │   │   ├── AssertStateChange.sol
│   │   │   ├── auditor_mode
│   │   │   │   ├── ExternalCalls.sol
│   │   │   │   └── PublicFunctionsWithoutSenderCheck.sol
│   │   │   ├── BooleanEquality.sol
│   │   │   ├── BuiltinSymbolShadow.sol
│   │   │   ├── CacheArrayLength.sol
│   │   │   ├── CallGraphTests.sol
│   │   │   ├── Casting.sol
│   │   │   ├── cloc
│   │   │   │   ├── AnotherHeavilyCommentedContract.sol
│   │   │   │   ├── EmptyContractFile.sol
│   │   │   │   └── HeavilyCommentedContract.sol
│   │   │   ├── CompilerBugStorageSignedIntegerArray.sol
│   │   │   ├── ConstantFuncsAssembly.sol
│   │   │   ├── ConstantsLiterals.sol
│   │   │   ├── ConstFuncChangeState.sol
│   │   │   ├── ContractLocksEther.sol
│   │   │   ├── ContractWithTodo.sol
│   │   │   ├── control_flow
│   │   │   │   └── SimpleProgram.sol
│   │   │   ├── CostlyOperationsInsideLoops.sol
│   │   │   ├── Counter.sol
│   │   │   ├── CrazyPragma.sol
│   │   │   ├── DangerousStrictEquality1.sol
│   │   │   ├── DangerousStrictEquality2.sol
│   │   │   ├── DangerousUnaryOperator.sol
│   │   │   ├── DeadCode.sol
│   │   │   ├── DelegateCallWithoutAddressCheck.sol
│   │   │   ├── DeletionNestedMappingStructureContract.sol
│   │   │   ├── DeprecatedOZFunctions.sol
│   │   │   ├── DivisionBeforeMultiplication.sol
│   │   │   ├── DynamicArrayLengthAssignment.sol
│   │   │   ├── EmitAfterExternalCall.sol
│   │   │   ├── EmptyBlocks.sol
│   │   │   ├── EnumerableSetIteration.sol
│   │   │   ├── eth2
│   │   │   │   └── DepositContract.sol
│   │   │   ├── ExperimentalEncoder.sol
│   │   │   ├── ExternalCalls.sol
│   │   │   ├── FunctionInitializingState.sol
│   │   │   ├── FunctionPointers.sol
│   │   │   ├── FunctionSignatureCollision.sol
│   │   │   ├── HugeConstants.sol
│   │   │   ├── IgnoreEverything.sol
│   │   │   ├── InconsistentUints.sol
│   │   │   ├── IncorrectCaretOperator.sol
│   │   │   ├── IncorrectERC20.sol
│   │   │   ├── IncorrectERC721.sol
│   │   │   ├── IncorrectModifier.sol
│   │   │   ├── IncorrectShift.sol
│   │   │   ├── inheritance
│   │   │   │   ├── ExtendedInheritance.sol
│   │   │   │   ├── IContractInheritance.sol
│   │   │   │   └── InheritanceBase.sol
│   │   │   ├── InternalFunctions.sol
│   │   │   ├── KeccakContract.sol
│   │   │   ├── LocalVariableShadow.sol
│   │   │   ├── MissingInheritance.sol
│   │   │   ├── MisusedBoolean.sol
│   │   │   ├── MsgValueInLoop.sol
│   │   │   ├── MultipleConstructorSchemes.sol
│   │   │   ├── MultiplePlaceholders.sol
│   │   │   ├── nested
│   │   │   │   ├── 1
│   │   │   │   │   └── Nested.sol
│   │   │   │   └── 2
│   │   │   │       └── Nested.sol
│   │   │   ├── nested_mappings
│   │   │   │   ├── LaterVersion.sol
│   │   │   │   └── NestedMappings.sol
│   │   │   ├── OnceModifierExample.sol
│   │   │   ├── OnlyLibrary.sol
│   │   │   ├── OutOfOrderRetryable.sol
│   │   │   ├── parent_chain
│   │   │   │   └── ParentChainContract.sol
│   │   │   ├── PragmaRange.sol
│   │   │   ├── PreDeclaredVarUsage.sol
│   │   │   ├── PublicFunction.sol
│   │   │   ├── PublicVariableReadInExternalContext.sol
│   │   │   ├── RedundantStatements.sol
│   │   │   ├── ReturnBomb.sol
│   │   │   ├── reused_contract_name
│   │   │   │   ├── ContractA.sol
│   │   │   │   └── ContractB.sol
│   │   │   ├── RevertsAndRequriesInLoops.sol
│   │   │   ├── router
│   │   │   │   ├── ExternalCalls.sol
│   │   │   │   ├── FallbackAndReceiveOverrides.sol
│   │   │   │   ├── InternalCalls.sol
│   │   │   │   ├── ModifierCalls.sol
│   │   │   │   └── VarOverridesFunction.sol
│   │   │   ├── RTLO.sol
│   │   │   ├── SendEtherNoChecks.sol
│   │   │   ├── SendEtherNoChecksLibImport.sol
│   │   │   ├── StateChangeAfterExternalCall.sol
│   │   │   ├── StateShadowing.sol
│   │   │   ├── StateVariableCouldBeDeclaredConstant.sol
│   │   │   ├── StateVariableCouldBeDeclaredImmutable.sol
│   │   │   ├── StateVariables.sol
│   │   │   ├── StateVariablesChangesWithoutEvents.sol
│   │   │   ├── StateVariablesManipulation.sol
│   │   │   ├── StorageConditionals.sol
│   │   │   ├── StorageParameters.sol
│   │   │   ├── T11sTranferer.sol
│   │   │   ├── TautologicalCompare.sol
│   │   │   ├── TautologyOrContradiction.sol
│   │   │   ├── TestERC20.sol
│   │   │   ├── TransientKeyword.sol
│   │   │   ├── Trump.sol
│   │   │   ├── TxOriginUsedForAuth.sol
│   │   │   ├── U2.sol
│   │   │   ├── U3.sol
│   │   │   ├── U4.sol
│   │   │   ├── U5.sol
│   │   │   ├── UncheckedCalls.sol
│   │   │   ├── UncheckedReturn.sol
│   │   │   ├── UncheckedSend.sol
│   │   │   ├── UninitializedLocalVariables.sol
│   │   │   ├── UninitializedStateVariable.sol
│   │   │   ├── uniswap
│   │   │   │   ├── UniswapV2Swapper.sol
│   │   │   │   └── UniswapV3Swapper.sol
│   │   │   ├── UnprotectedInitialize.sol
│   │   │   ├── UnsafeERC721Mint.sol
│   │   │   ├── UnusedError.sol
│   │   │   ├── UnusedImport.sol
│   │   │   ├── UnusedStateVariables.sol
│   │   │   ├── UsingSelfdestruct.sol
│   │   │   ├── VoidConstructor.sol
│   │   │   ├── WeakRandomness.sol
│   │   │   ├── WrongOrderOfLayout.sol
│   │   │   ├── YulReturn.sol
│   │   │   └── ZeroAddressCheck.sol
│   │   └── test
│   │       └── Counter.t.sol
│   ├── foundry-nft-f23
│   │   ├── .github
│   │   │   └── workflows
│   │   │       └── test.yml
│   │   ├── .gitignore
│   │   ├── foundry.lock
│   │   ├── foundry.toml
│   │   ├── README.md
│   │   ├── remappings.txt
│   │   └── src
│   │       ├── BasicNft.sol
│   │       ├── F1.sol
│   │       ├── F2.sol
│   │       ├── Initializer.sol
│   │       └── inner-core-modules
│   │           └── ICM.sol
│   ├── foundry-nft-f23-icm
│   │   ├── .github
│   │   │   └── workflows
│   │   │       └── test.yml
│   │   ├── .gitignore
│   │   ├── aderyn.toml
│   │   ├── foundry.toml
│   │   ├── README.md
│   │   ├── remappings.txt
│   │   └── src
│   │       ├── BasicNft.sol
│   │       ├── F1.sol
│   │       ├── F2.sol
│   │       ├── Initializer.sol
│   │       └── inner-core-modules
│   │           └── ICM.sol
│   ├── hardhat-js-playground
│   │   ├── .gitignore
│   │   ├── artifacts
│   │   │   ├── build-info
│   │   │   │   └── cee6fe9a9a2f03f7ff10a27ab2746af6.json
│   │   │   └── contracts
│   │   │       ├── Counter.sol
│   │   │       │   ├── Counter.dbg.json
│   │   │       │   └── Counter.json
│   │   │       ├── ExtendedInheritance.sol
│   │   │       │   ├── ExtendedInheritance.dbg.json
│   │   │       │   └── ExtendedInheritance.json
│   │   │       ├── IContractInheritance.sol
│   │   │       │   ├── IContractInheritance.dbg.json
│   │   │       │   └── IContractInheritance.json
│   │   │       ├── InheritanceBase.sol
│   │   │       │   ├── InheritanceBase.dbg.json
│   │   │       │   └── InheritanceBase.json
│   │   │       ├── KeccakContract.sol
│   │   │       │   ├── KeccakContract.dbg.json
│   │   │       │   └── KeccakContract.json
│   │   │       ├── Lock.sol
│   │   │       │   ├── Lock.dbg.json
│   │   │       │   └── Lock.json
│   │   │       └── StateVariables.sol
│   │   │           ├── StateVariables.dbg.json
│   │   │           └── StateVariables.json
│   │   ├── contracts
│   │   │   ├── Counter.sol
│   │   │   ├── ExtendedInheritance.sol
│   │   │   ├── IContractInheritance.sol
│   │   │   ├── InheritanceBase.sol
│   │   │   ├── KeccakContract.sol
│   │   │   ├── Lock.sol
│   │   │   └── StateVariables.sol
│   │   ├── hardhat.config.js
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── scripts
│   │   │   └── deploy.js
│   │   ├── test
│   │   │   └── Lock.js
│   │   └── yarn.lock
│   ├── no-sol-files
│   │   ├── extra
│   │   │   └── HelloAgain.md
│   │   ├── Hello.txt
│   │   └── Hello.yul
│   └── toml
│       ├── nested_project1
│       │   ├── aderyn.toml
│       │   ├── folder1
│       │   │   └── hardhat.config.ts
│       │   ├── folder2
│       │   │   └── hardhat.config.ts
│       │   └── folder3
│       │       └── file.txt
│       └── nested_project2
│           ├── aderyn.toml
│           ├── folder1
│           │   └── foundry.toml
│           └── folder2
│               └── file1.txt
├── tools
│   └── xtask
│       ├── Cargo.toml
│       └── src
│           ├── blesspr.rs
│           ├── cut_release.rs
│           ├── flags.rs
│           ├── main.rs
│           ├── reportgen.rs
│           └── tomlgen.rs
└── typos.toml
```

# Files

--------------------------------------------------------------------------------
/benchmarks/constants-instead-of-literals/report/regression_small.svg:
--------------------------------------------------------------------------------

```
  1 | <svg width="450" height="300" viewBox="0 0 450 300" xmlns="http://www.w3.org/2000/svg">
  2 | <text x="15" y="130" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 15, 130)">
  3 | Total sample time (ms)
  4 | </text>
  5 | <text x="255" y="285" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
  6 | Iterations
  7 | </text>
  8 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="107" y1="244" x2="107" y2="15"/>
  9 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="143" y1="244" x2="143" y2="15"/>
 10 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="180" y1="244" x2="180" y2="15"/>
 11 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="216" y1="244" x2="216" y2="15"/>
 12 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="252" y1="244" x2="252" y2="15"/>
 13 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="288" y1="244" x2="288" y2="15"/>
 14 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="325" y1="244" x2="325" y2="15"/>
 15 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="361" y1="244" x2="361" y2="15"/>
 16 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="397" y1="244" x2="397" y2="15"/>
 17 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="434" y1="244" x2="434" y2="15"/>
 18 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="213" x2="434" y2="213"/>
 19 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="180" x2="434" y2="180"/>
 20 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="146" x2="434" y2="146"/>
 21 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="112" x2="434" y2="112"/>
 22 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="79" x2="434" y2="79"/>
 23 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="45" x2="434" y2="45"/>
 24 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="74,15 74,244 "/>
 25 | <text x="65" y="213" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 26 | 20.0
 27 | </text>
 28 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,213 74,213 "/>
 29 | <text x="65" y="180" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 30 | 40.0
 31 | </text>
 32 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,180 74,180 "/>
 33 | <text x="65" y="146" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 34 | 60.0
 35 | </text>
 36 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,146 74,146 "/>
 37 | <text x="65" y="112" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 38 | 80.0
 39 | </text>
 40 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,112 74,112 "/>
 41 | <text x="65" y="79" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 42 | 100.0
 43 | </text>
 44 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,79 74,79 "/>
 45 | <text x="65" y="45" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 46 | 120.0
 47 | </text>
 48 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,45 74,45 "/>
 49 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="75,245 434,245 "/>
 50 | <text x="107" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 51 | 10
 52 | </text>
 53 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="107,245 107,250 "/>
 54 | <text x="143" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 55 | 20
 56 | </text>
 57 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="143,245 143,250 "/>
 58 | <text x="180" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 59 | 30
 60 | </text>
 61 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="180,245 180,250 "/>
 62 | <text x="216" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 63 | 40
 64 | </text>
 65 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="216,245 216,250 "/>
 66 | <text x="252" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 67 | 50
 68 | </text>
 69 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="252,245 252,250 "/>
 70 | <text x="288" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 71 | 60
 72 | </text>
 73 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="288,245 288,250 "/>
 74 | <text x="325" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 75 | 70
 76 | </text>
 77 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="325,245 325,250 "/>
 78 | <text x="361" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 79 | 80
 80 | </text>
 81 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="361,245 361,250 "/>
 82 | <text x="397" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 83 | 90
 84 | </text>
 85 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="397,245 397,250 "/>
 86 | <text x="434" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 87 | 100
 88 | </text>
 89 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="434,245 434,250 "/>
 90 | <circle cx="75" cy="244" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 91 | <circle cx="78" cy="241" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 92 | <circle cx="82" cy="239" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 93 | <circle cx="85" cy="237" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 94 | <circle cx="89" cy="234" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 95 | <circle cx="93" cy="232" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 96 | <circle cx="96" cy="229" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 97 | <circle cx="100" cy="227" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 98 | <circle cx="104" cy="225" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 99 | <circle cx="107" cy="222" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
100 | <circle cx="111" cy="220" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
101 | <circle cx="114" cy="218" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
102 | <circle cx="118" cy="215" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
103 | <circle cx="122" cy="215" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
104 | <circle cx="125" cy="209" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
105 | <circle cx="129" cy="209" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
106 | <circle cx="133" cy="207" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
107 | <circle cx="136" cy="205" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
108 | <circle cx="140" cy="201" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
109 | <circle cx="143" cy="200" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
110 | <circle cx="147" cy="200" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
111 | <circle cx="151" cy="198" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
112 | <circle cx="154" cy="195" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
113 | <circle cx="158" cy="193" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
114 | <circle cx="162" cy="192" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
115 | <circle cx="165" cy="186" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
116 | <circle cx="169" cy="184" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
117 | <circle cx="172" cy="183" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
118 | <circle cx="176" cy="175" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
119 | <circle cx="180" cy="152" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
120 | <circle cx="183" cy="151" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
121 | <circle cx="187" cy="154" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
122 | <circle cx="191" cy="159" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
123 | <circle cx="194" cy="154" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
124 | <circle cx="198" cy="156" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
125 | <circle cx="201" cy="155" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
126 | <circle cx="205" cy="156" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
127 | <circle cx="209" cy="156" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
128 | <circle cx="212" cy="156" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
129 | <circle cx="216" cy="148" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
130 | <circle cx="220" cy="144" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
131 | <circle cx="223" cy="141" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
132 | <circle cx="227" cy="141" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
133 | <circle cx="230" cy="141" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
134 | <circle cx="234" cy="140" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
135 | <circle cx="238" cy="142" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
136 | <circle cx="241" cy="131" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
137 | <circle cx="245" cy="122" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
138 | <circle cx="249" cy="125" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
139 | <circle cx="252" cy="125" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
140 | <circle cx="256" cy="132" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
141 | <circle cx="259" cy="128" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
142 | <circle cx="263" cy="125" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
143 | <circle cx="267" cy="125" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
144 | <circle cx="270" cy="124" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
145 | <circle cx="274" cy="122" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
146 | <circle cx="278" cy="115" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
147 | <circle cx="281" cy="112" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
148 | <circle cx="285" cy="108" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
149 | <circle cx="288" cy="112" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
150 | <circle cx="292" cy="105" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
151 | <circle cx="296" cy="102" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
152 | <circle cx="299" cy="100" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
153 | <circle cx="303" cy="97" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
154 | <circle cx="307" cy="98" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
155 | <circle cx="310" cy="97" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
156 | <circle cx="314" cy="92" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
157 | <circle cx="317" cy="95" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
158 | <circle cx="321" cy="90" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
159 | <circle cx="325" cy="89" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
160 | <circle cx="328" cy="87" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
161 | <circle cx="332" cy="85" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
162 | <circle cx="336" cy="83" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
163 | <circle cx="339" cy="78" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
164 | <circle cx="343" cy="77" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
165 | <circle cx="346" cy="75" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
166 | <circle cx="350" cy="76" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
167 | <circle cx="354" cy="72" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
168 | <circle cx="357" cy="66" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
169 | <circle cx="361" cy="65" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
170 | <circle cx="365" cy="62" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
171 | <circle cx="368" cy="52" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
172 | <circle cx="372" cy="24" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
173 | <circle cx="375" cy="58" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
174 | <circle cx="379" cy="40" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
175 | <circle cx="383" cy="35" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
176 | <circle cx="386" cy="43" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
177 | <circle cx="390" cy="45" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
178 | <circle cx="394" cy="43" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
179 | <circle cx="397" cy="41" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
180 | <circle cx="401" cy="34" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
181 | <circle cx="404" cy="39" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
182 | <circle cx="408" cy="15" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
183 | <circle cx="412" cy="22" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
184 | <circle cx="415" cy="36" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
185 | <circle cx="419" cy="41" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
186 | <circle cx="423" cy="39" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
187 | <circle cx="426" cy="34" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
188 | <circle cx="430" cy="37" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
189 | <circle cx="434" cy="38" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
190 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="75,245 434,16 "/>
191 | <polygon opacity="0.25" fill="#1F78B4" points="75,245 434,19 434,15 "/>
192 | </svg>
193 | 
```

--------------------------------------------------------------------------------
/benchmarks/inconsistent-type-names/report/pdf.svg:
--------------------------------------------------------------------------------

```
  1 | <svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
  2 | <text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
  3 | inconsistent-type-names
  4 | </text>
  5 | <text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
  6 | Iterations
  7 | </text>
  8 | <text x="480" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
  9 | Average Time (ms)
 10 | </text>
 11 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
 12 | <text x="77" y="472" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 13 | 0
 14 | </text>
 15 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,472 86,472 "/>
 16 | <text x="77" y="431" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 17 | 10
 18 | </text>
 19 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,431 86,431 "/>
 20 | <text x="77" y="389" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 21 | 20
 22 | </text>
 23 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,389 86,389 "/>
 24 | <text x="77" y="347" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 25 | 30
 26 | </text>
 27 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,347 86,347 "/>
 28 | <text x="77" y="305" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 29 | 40
 30 | </text>
 31 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,305 86,305 "/>
 32 | <text x="77" y="263" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 33 | 50
 34 | </text>
 35 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,263 86,263 "/>
 36 | <text x="77" y="221" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 37 | 60
 38 | </text>
 39 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,221 86,221 "/>
 40 | <text x="77" y="179" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 41 | 70
 42 | </text>
 43 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,179 86,179 "/>
 44 | <text x="77" y="137" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 45 | 80
 46 | </text>
 47 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,137 86,137 "/>
 48 | <text x="77" y="95" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 49 | 90
 50 | </text>
 51 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,95 86,95 "/>
 52 | <text x="77" y="53" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 53 | 100
 54 | </text>
 55 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,53 86,53 "/>
 56 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 872,473 "/>
 57 | <text x="128" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 58 | 1
 59 | </text>
 60 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="128,473 128,478 "/>
 61 | <text x="209" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 62 | 1.5
 63 | </text>
 64 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="209,473 209,478 "/>
 65 | <text x="290" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 66 | 2
 67 | </text>
 68 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="290,473 290,478 "/>
 69 | <text x="370" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 70 | 2.5
 71 | </text>
 72 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="370,473 370,478 "/>
 73 | <text x="451" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 74 | 3
 75 | </text>
 76 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="451,473 451,478 "/>
 77 | <text x="531" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 78 | 3.5
 79 | </text>
 80 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="531,473 531,478 "/>
 81 | <text x="612" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 82 | 4
 83 | </text>
 84 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="612,473 612,478 "/>
 85 | <text x="693" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 86 | 4.5
 87 | </text>
 88 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="693,473 693,478 "/>
 89 | <text x="773" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 90 | 5
 91 | </text>
 92 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="773,473 773,478 "/>
 93 | <text x="854" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 94 | 5.5
 95 | </text>
 96 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="854,473 854,478 "/>
 97 | <text x="933" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(90, 933, 263)">
 98 | Density (a.u.)
 99 | </text>
100 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,53 873,473 "/>
101 | <text x="883" y="473" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
102 | 0
103 | </text>
104 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,473 878,473 "/>
105 | <text x="883" y="414" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
106 | 0.2
107 | </text>
108 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,414 878,414 "/>
109 | <text x="883" y="355" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
110 | 0.4
111 | </text>
112 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,355 878,355 "/>
113 | <text x="883" y="296" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
114 | 0.6
115 | </text>
116 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,296 878,296 "/>
117 | <text x="883" y="237" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
118 | 0.8
119 | </text>
120 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,237 878,237 "/>
121 | <text x="883" y="178" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
122 | 1
123 | </text>
124 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,178 878,178 "/>
125 | <text x="883" y="118" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
126 | 1.2
127 | </text>
128 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,118 878,118 "/>
129 | <text x="883" y="59" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
130 | 1.4
131 | </text>
132 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,59 878,59 "/>
133 | <polygon opacity="0.5" fill="#1F78B4" points="87,473 88,473 90,472 91,472 93,472 94,472 96,471 98,471 99,471 101,470 102,470 104,469 105,468 107,468 109,467 110,466 112,465 113,464 115,462 116,461 118,459 120,458 121,456 123,454 124,451 126,449 127,446 129,443 131,440 132,436 134,432 135,428 137,424 138,419 140,414 142,409 143,403 145,397 146,390 148,384 150,376 151,369 153,361 154,353 156,345 157,336 159,327 161,317 162,308 164,298 165,288 167,277 168,267 170,256 172,246 173,235 175,224 176,214 178,203 179,192 181,182 183,171 184,161 186,151 187,142 189,133 190,124 192,115 194,107 195,100 197,93 198,86 200,80 201,75 203,70 205,66 206,62 208,59 209,57 211,55 213,54 214,53 216,54 217,54 219,56 220,58 222,60 224,63 225,67 227,71 228,76 230,81 231,86 233,92 235,98 236,105 238,112 239,119 241,126 242,134 244,142 246,150 247,158 249,166 250,174 252,183 253,191 255,199 257,208 258,216 260,224 261,233 263,241 264,249 266,257 268,265 269,272 271,280 272,287 274,294 276,302 277,308 279,315 280,322 282,328 283,334 285,340 287,346 288,351 290,357 291,362 293,367 294,372 296,376 298,380 299,385 301,389 302,392 304,396 305,399 307,403 309,406 310,408 312,411 313,414 315,416 316,418 318,420 320,422 321,424 323,426 324,427 326,429 327,430 329,432 331,433 332,434 334,435 335,436 337,436 339,437 340,438 342,439 343,439 345,440 346,440 348,441 350,441 351,442 353,442 354,443 356,443 357,444 359,444 361,444 362,445 364,445 365,446 367,446 368,447 370,447 372,447 373,448 375,448 376,449 378,449 379,450 381,450 383,451 384,451 386,452 387,452 389,453 391,453 392,454 394,454 395,455 397,455 398,456 400,456 402,457 403,457 405,458 406,458 408,459 409,460 411,460 413,461 414,461 416,462 417,462 419,463 420,463 422,463 424,464 425,464 427,465 428,465 430,466 431,466 433,466 435,467 436,467 438,467 439,468 441,468 442,468 444,468 446,469 447,469 449,469 450,469 452,469 454,469 455,469 457,470 458,470 460,470 461,470 463,470 465,470 466,470 468,470 469,470 471,469 472,469 474,469 476,469 477,469 479,469 480,469 482,469 483,469 485,468 487,468 488,468 490,468 491,468 493,468 494,468 496,468 498,468 499,468 501,468 502,467 504,467 505,467 507,467 509,467 510,467 512,467 513,468 515,468 517,468 518,468 520,468 521,468 523,468 524,468 526,468 528,469 529,469 531,469 532,469 534,469 535,469 537,470 539,470 540,470 542,470 543,470 545,470 546,471 548,471 550,471 551,471 553,471 554,471 556,472 557,472 559,472 561,472 562,472 564,472 565,472 567,472 568,473 570,473 572,473 573,473 575,473 576,473 578,473 580,473 581,473 583,473 584,473 586,473 587,473 589,473 591,473 592,473 594,473 595,473 597,473 598,473 600,473 602,473 603,473 605,473 606,473 608,473 609,473 611,473 613,473 614,473 616,473 617,473 619,473 620,473 622,473 624,473 625,473 627,473 628,473 630,473 632,473 633,473 635,473 636,473 638,473 639,473 641,473 643,473 644,473 646,473 647,473 649,473 650,473 652,473 654,473 655,473 657,473 658,473 660,473 661,473 663,473 665,473 666,473 668,473 669,473 671,473 672,473 674,473 676,473 677,473 679,473 680,473 682,473 683,473 685,473 687,473 688,473 690,473 691,473 693,473 695,473 696,473 698,473 699,473 701,473 702,473 704,473 706,473 707,473 709,473 710,473 712,473 713,473 715,473 717,473 718,472 720,472 721,472 723,472 724,472 726,472 728,472 729,472 731,471 732,471 734,471 735,471 737,471 739,471 740,471 742,470 743,470 745,470 746,470 748,470 750,469 751,469 753,469 754,469 756,469 758,469 759,468 761,468 762,468 764,468 765,468 767,468 769,468 770,468 772,468 773,468 775,467 776,467 778,467 780,467 781,468 783,468 784,468 786,468 787,468 789,468 791,468 792,468 794,468 795,468 797,468 798,469 800,469 802,469 803,469 805,469 806,470 808,470 809,470 811,470 813,470 814,470 816,471 817,471 819,471 821,471 822,471 824,471 825,472 827,472 828,472 830,472 832,472 833,472 835,472 836,472 838,473 839,473 841,473 843,473 844,473 846,473 847,473 849,473 850,473 852,473 854,473 855,473 857,473 858,473 860,473 861,473 863,473 865,473 866,473 868,473 869,473 871,473 873,473 873,473 87,473 "/>
134 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="237,472 237,53 "/>
135 | <polyline fill="none" opacity="1" stroke="#FF7F00" stroke-width="1" points="137,472 137,53 "/>
136 | <polyline fill="none" opacity="1" stroke="#FF7F00" stroke-width="1" points="312,472 312,53 "/>
137 | <polyline fill="none" opacity="1" stroke="#E31A1C" stroke-width="1" points="87,472 87,53 "/>
138 | <polyline fill="none" opacity="1" stroke="#E31A1C" stroke-width="1" points="377,472 377,53 "/>
139 | <circle cx="408" cy="393" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
140 | <circle cx="380" cy="334" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
141 | <circle cx="355" cy="330" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
142 | <circle cx="777" cy="326" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
143 | <circle cx="327" cy="309" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
144 | <circle cx="333" cy="292" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
145 | <circle cx="362" cy="250" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
146 | <circle cx="507" cy="213" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
147 | <circle cx="355" cy="330" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
148 | <circle cx="327" cy="309" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
149 | <circle cx="333" cy="292" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
150 | <circle cx="362" cy="250" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
151 | <circle cx="408" cy="393" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
152 | <circle cx="380" cy="334" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
153 | <circle cx="777" cy="326" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
154 | <circle cx="507" cy="213" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
155 | <text x="776" y="228" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
156 | PDF
157 | </text>
158 | <text x="776" y="243" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
159 | Mean
160 | </text>
161 | <text x="776" y="258" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
162 | &quot;Clean&quot; sample
163 | </text>
164 | <text x="776" y="273" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
165 | Mild outliers
166 | </text>
167 | <text x="776" y="288" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
168 | Severe outliers
169 | </text>
170 | <rect x="746" y="228" width="20" height="10" opacity="0.5" fill="#1F78B4" stroke="none"/>
171 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="746,248 766,248 "/>
172 | <circle cx="756" cy="263" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
173 | <circle cx="756" cy="278" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
174 | <circle cx="756" cy="293" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
175 | </svg>
176 | 
```

--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------

```yaml
  1 | # This file was autogenerated by dist: https://opensource.axo.dev/cargo-dist/
  2 | #
  3 | # Copyright 2022-2024, axodotdev
  4 | # SPDX-License-Identifier: MIT or Apache-2.0
  5 | #
  6 | # CI that:
  7 | #
  8 | # * checks for a Git Tag that looks like a release
  9 | # * builds artifacts with dist (archives, installers, hashes)
 10 | # * uploads those artifacts to temporary workflow zip
 11 | # * on success, uploads the artifacts to a GitHub Release
 12 | #
 13 | # Note that the GitHub Release will be created with a generated
 14 | # title/body based on your changelogs.
 15 | 
 16 | name: Release
 17 | permissions:
 18 |   "contents": "write"
 19 | 
 20 | # This task will run whenever you push a git tag that looks like a version
 21 | # like "1.0.0", "v0.1.0-prerelease.1", "my-app/0.1.0", "releases/v1.0.0", etc.
 22 | # Various formats will be parsed into a VERSION and an optional PACKAGE_NAME, where
 23 | # PACKAGE_NAME must be the name of a Cargo package in your workspace, and VERSION
 24 | # must be a Cargo-style SemVer Version (must have at least major.minor.patch).
 25 | #
 26 | # If PACKAGE_NAME is specified, then the announcement will be for that
 27 | # package (erroring out if it doesn't have the given version or isn't dist-able).
 28 | #
 29 | # If PACKAGE_NAME isn't specified, then the announcement will be for all
 30 | # (dist-able) packages in the workspace with that version (this mode is
 31 | # intended for workspaces with only one dist-able package, or with all dist-able
 32 | # packages versioned/released in lockstep).
 33 | #
 34 | # If you push multiple tags at once, separate instances of this workflow will
 35 | # spin up, creating an independent announcement for each one. However, GitHub
 36 | # will hard limit this to 3 tags per commit, as it will assume more tags is a
 37 | # mistake.
 38 | #
 39 | # If there's a prerelease-style suffix to the version, then the release(s)
 40 | # will be marked as a prerelease.
 41 | on:
 42 |   pull_request:
 43 |   push:
 44 |     tags:
 45 |       - '**[0-9]+.[0-9]+.[0-9]+*'
 46 | 
 47 | jobs:
 48 |   # Run 'dist plan' (or host) to determine what tasks we need to do
 49 |   plan:
 50 |     runs-on: "ubuntu-latest"
 51 |     outputs:
 52 |       val: ${{ steps.plan.outputs.manifest }}
 53 |       tag: ${{ !github.event.pull_request && github.ref_name || '' }}
 54 |       tag-flag: ${{ !github.event.pull_request && format('--tag={0}', github.ref_name) || '' }}
 55 |       publishing: ${{ !github.event.pull_request }}
 56 |     env:
 57 |       GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 58 |     steps:
 59 |       - uses: actions/checkout@v4
 60 |         with:
 61 |           submodules: recursive
 62 |       - name: Install dist
 63 |         # we specify bash to get pipefail; it guards against the `curl` command
 64 |         # failing. otherwise `sh` won't catch that `curl` returned non-0
 65 |         shell: bash
 66 |         run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.28.0/cargo-dist-installer.sh | sh"
 67 |       - name: Cache dist
 68 |         uses: actions/upload-artifact@v4
 69 |         with:
 70 |           name: cargo-dist-cache
 71 |           path: ~/.cargo/bin/dist
 72 |       # sure would be cool if github gave us proper conditionals...
 73 |       # so here's a doubly-nested ternary-via-truthiness to try to provide the best possible
 74 |       # functionality based on whether this is a pull_request, and whether it's from a fork.
 75 |       # (PRs run on the *source* but secrets are usually on the *target* -- that's *good*
 76 |       # but also really annoying to build CI around when it needs secrets to work right.)
 77 |       - id: plan
 78 |         run: |
 79 |           dist ${{ (!github.event.pull_request && format('host --steps=create --tag={0}', github.ref_name)) || 'plan' }} --output-format=json > plan-dist-manifest.json
 80 |           echo "dist ran successfully"
 81 |           cat plan-dist-manifest.json
 82 |           echo "manifest=$(jq -c "." plan-dist-manifest.json)" >> "$GITHUB_OUTPUT"
 83 |       - name: "Upload dist-manifest.json"
 84 |         uses: actions/upload-artifact@v4
 85 |         with:
 86 |           name: artifacts-plan-dist-manifest
 87 |           path: plan-dist-manifest.json
 88 | 
 89 |   # Build and packages all the platform-specific things
 90 |   build-local-artifacts:
 91 |     name: build-local-artifacts (${{ join(matrix.targets, ', ') }})
 92 |     # Let the initial task tell us to not run (currently very blunt)
 93 |     needs:
 94 |       - plan
 95 |     if: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix.include != null && (needs.plan.outputs.publishing == 'true' || fromJson(needs.plan.outputs.val).ci.github.pr_run_mode == 'upload') }}
 96 |     strategy:
 97 |       fail-fast: false
 98 |       # Target platforms/runners are computed by dist in create-release.
 99 |       # Each member of the matrix has the following arguments:
100 |       #
101 |       # - runner: the github runner
102 |       # - dist-args: cli flags to pass to dist
103 |       # - install-dist: expression to run to install dist on the runner
104 |       #
105 |       # Typically there will be:
106 |       # - 1 "global" task that builds universal installers
107 |       # - N "local" tasks that build each platform's binaries and platform-specific installers
108 |       matrix: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix }}
109 |     runs-on: ${{ matrix.runner }}
110 |     container: ${{ matrix.container && matrix.container.image || null }}
111 |     env:
112 |       GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
113 |       BUILD_MANIFEST_NAME: target/distrib/${{ join(matrix.targets, '-') }}-dist-manifest.json
114 |     steps:
115 |       - name: enable windows longpaths
116 |         run: |
117 |           git config --global core.longpaths true
118 |       - uses: actions/checkout@v4
119 |         with:
120 |           submodules: recursive
121 |       - name: Install Rust non-interactively if not already installed
122 |         if: ${{ matrix.container }}
123 |         run: |
124 |           if ! command -v cargo > /dev/null 2>&1; then
125 |             curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
126 |             echo "$HOME/.cargo/bin" >> $GITHUB_PATH
127 |           fi
128 |       - name: Install dist
129 |         run: ${{ matrix.install_dist.run }}
130 |       # Get the dist-manifest
131 |       - name: Fetch local artifacts
132 |         uses: actions/download-artifact@v4
133 |         with:
134 |           pattern: artifacts-*
135 |           path: target/distrib/
136 |           merge-multiple: true
137 |       - name: Install dependencies
138 |         run: |
139 |           ${{ matrix.packages_install }}
140 |       - name: Build artifacts
141 |         run: |
142 |           # Actually do builds and make zips and whatnot
143 |           dist build ${{ needs.plan.outputs.tag-flag }} --print=linkage --output-format=json ${{ matrix.dist_args }} > dist-manifest.json
144 |           echo "dist ran successfully"
145 |       - id: cargo-dist
146 |         name: Post-build
147 |         # We force bash here just because github makes it really hard to get values up
148 |         # to "real" actions without writing to env-vars, and writing to env-vars has
149 |         # inconsistent syntax between shell and powershell.
150 |         shell: bash
151 |         run: |
152 |           # Parse out what we just built and upload it to scratch storage
153 |           echo "paths<<EOF" >> "$GITHUB_OUTPUT"
154 |           dist print-upload-files-from-manifest --manifest dist-manifest.json >> "$GITHUB_OUTPUT"
155 |           echo "EOF" >> "$GITHUB_OUTPUT"
156 | 
157 |           cp dist-manifest.json "$BUILD_MANIFEST_NAME"
158 |       - name: "Upload artifacts"
159 |         uses: actions/upload-artifact@v4
160 |         with:
161 |           name: artifacts-build-local-${{ join(matrix.targets, '_') }}
162 |           path: |
163 |             ${{ steps.cargo-dist.outputs.paths }}
164 |             ${{ env.BUILD_MANIFEST_NAME }}
165 | 
166 |   # Build and package all the platform-agnostic(ish) things
167 |   build-global-artifacts:
168 |     needs:
169 |       - plan
170 |       - build-local-artifacts
171 |     runs-on: "ubuntu-latest"
172 |     env:
173 |       GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
174 |       BUILD_MANIFEST_NAME: target/distrib/global-dist-manifest.json
175 |     steps:
176 |       - uses: actions/checkout@v4
177 |         with:
178 |           submodules: recursive
179 |       - name: Install cached dist
180 |         uses: actions/download-artifact@v4
181 |         with:
182 |           name: cargo-dist-cache
183 |           path: ~/.cargo/bin/
184 |       - run: chmod +x ~/.cargo/bin/dist
185 |       # Get all the local artifacts for the global tasks to use (for e.g. checksums)
186 |       - name: Fetch local artifacts
187 |         uses: actions/download-artifact@v4
188 |         with:
189 |           pattern: artifacts-*
190 |           path: target/distrib/
191 |           merge-multiple: true
192 |       - id: cargo-dist
193 |         shell: bash
194 |         run: |
195 |           dist build ${{ needs.plan.outputs.tag-flag }} --output-format=json "--artifacts=global" > dist-manifest.json
196 |           echo "dist ran successfully"
197 | 
198 |           # Parse out what we just built and upload it to scratch storage
199 |           echo "paths<<EOF" >> "$GITHUB_OUTPUT"
200 |           jq --raw-output ".upload_files[]" dist-manifest.json >> "$GITHUB_OUTPUT"
201 |           echo "EOF" >> "$GITHUB_OUTPUT"
202 | 
203 |           cp dist-manifest.json "$BUILD_MANIFEST_NAME"
204 |       - name: "Upload artifacts"
205 |         uses: actions/upload-artifact@v4
206 |         with:
207 |           name: artifacts-build-global
208 |           path: |
209 |             ${{ steps.cargo-dist.outputs.paths }}
210 |             ${{ env.BUILD_MANIFEST_NAME }}
211 |   # Determines if we should publish/announce
212 |   host:
213 |     needs:
214 |       - plan
215 |       - build-local-artifacts
216 |       - build-global-artifacts
217 |     # Only run if we're "publishing", and only if local and global didn't fail (skipped is fine)
218 |     if: ${{ always() && needs.plan.outputs.publishing == 'true' && (needs.build-global-artifacts.result == 'skipped' || needs.build-global-artifacts.result == 'success') && (needs.build-local-artifacts.result == 'skipped' || needs.build-local-artifacts.result == 'success') }}
219 |     env:
220 |       GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
221 |     runs-on: "ubuntu-latest"
222 |     outputs:
223 |       val: ${{ steps.host.outputs.manifest }}
224 |     steps:
225 |       - uses: actions/checkout@v4
226 |         with:
227 |           submodules: recursive
228 |       - name: Install cached dist
229 |         uses: actions/download-artifact@v4
230 |         with:
231 |           name: cargo-dist-cache
232 |           path: ~/.cargo/bin/
233 |       - run: chmod +x ~/.cargo/bin/dist
234 |       # Fetch artifacts from scratch-storage
235 |       - name: Fetch artifacts
236 |         uses: actions/download-artifact@v4
237 |         with:
238 |           pattern: artifacts-*
239 |           path: target/distrib/
240 |           merge-multiple: true
241 |       - id: host
242 |         shell: bash
243 |         run: |
244 |           dist host ${{ needs.plan.outputs.tag-flag }} --steps=upload --steps=release --output-format=json > dist-manifest.json
245 |           echo "artifacts uploaded and released successfully"
246 |           cat dist-manifest.json
247 |           echo "manifest=$(jq -c "." dist-manifest.json)" >> "$GITHUB_OUTPUT"
248 |       - name: "Upload dist-manifest.json"
249 |         uses: actions/upload-artifact@v4
250 |         with:
251 |           # Overwrite the previous copy
252 |           name: artifacts-dist-manifest
253 |           path: dist-manifest.json
254 |       # Create a GitHub Release while uploading all files to it
255 |       - name: "Download GitHub Artifacts"
256 |         uses: actions/download-artifact@v4
257 |         with:
258 |           pattern: artifacts-*
259 |           path: artifacts
260 |           merge-multiple: true
261 |       - name: Cleanup
262 |         run: |
263 |           # Remove the granular manifests
264 |           rm -f artifacts/*-dist-manifest.json
265 |       - name: Create GitHub Release
266 |         env:
267 |           PRERELEASE_FLAG: "${{ fromJson(steps.host.outputs.manifest).announcement_is_prerelease && '--prerelease' || '' }}"
268 |           ANNOUNCEMENT_TITLE: "${{ fromJson(steps.host.outputs.manifest).announcement_title }}"
269 |           ANNOUNCEMENT_BODY: "${{ fromJson(steps.host.outputs.manifest).announcement_github_body }}"
270 |           RELEASE_COMMIT: "${{ github.sha }}"
271 |         run: |
272 |           # Write and read notes from a file to avoid quoting breaking things
273 |           echo "$ANNOUNCEMENT_BODY" > $RUNNER_TEMP/notes.txt
274 | 
275 |           gh release create "${{ needs.plan.outputs.tag }}" --target "$RELEASE_COMMIT" $PRERELEASE_FLAG --title "$ANNOUNCEMENT_TITLE" --notes-file "$RUNNER_TEMP/notes.txt" artifacts/*
276 | 
277 |   publish-homebrew-formula:
278 |     needs:
279 |       - plan
280 |       - host
281 |     runs-on: "ubuntu-latest"
282 |     env:
283 |       GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
284 |       PLAN: ${{ needs.plan.outputs.val }}
285 |       GITHUB_USER: "axo bot"
286 |       GITHUB_EMAIL: "[email protected]"
287 |     if: ${{ !fromJson(needs.plan.outputs.val).announcement_is_prerelease || fromJson(needs.plan.outputs.val).publish_prereleases }}
288 |     steps:
289 |       - uses: actions/checkout@v4
290 |         with:
291 |           repository: "cyfrin/homebrew-tap"
292 |           token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
293 |       # So we have access to the formula
294 |       - name: Fetch homebrew formulae
295 |         uses: actions/download-artifact@v4
296 |         with:
297 |           pattern: artifacts-*
298 |           path: Formula/
299 |           merge-multiple: true
300 |       # This is extra complex because you can make your Formula name not match your app name
301 |       # so we need to find releases with a *.rb file, and publish with that filename.
302 |       - name: Commit formula files
303 |         run: |
304 |           git config --global user.name "${GITHUB_USER}"
305 |           git config --global user.email "${GITHUB_EMAIL}"
306 | 
307 |           for release in $(echo "$PLAN" | jq --compact-output '.releases[] | select([.artifacts[] | endswith(".rb")] | any)'); do
308 |             filename=$(echo "$release" | jq '.artifacts[] | select(endswith(".rb"))' --raw-output)
309 |             name=$(echo "$filename" | sed "s/\.rb$//")
310 |             version=$(echo "$release" | jq .app_version --raw-output)
311 | 
312 |             export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH"
313 |             brew update
314 |             # We avoid reformatting user-provided data such as the app description and homepage.
315 |             brew style --except-cops FormulaAudit/Homepage,FormulaAudit/Desc,FormulaAuditStrict --fix "Formula/${filename}" || true
316 | 
317 |             git add "Formula/${filename}"
318 |             git commit -m "${name} ${version}"
319 |           done
320 |           git push
321 | 
322 |   publish-npm:
323 |     needs:
324 |       - plan
325 |       - host
326 |     runs-on: "ubuntu-latest"
327 |     env:
328 |       GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
329 |       PLAN: ${{ needs.plan.outputs.val }}
330 |     if: ${{ !fromJson(needs.plan.outputs.val).announcement_is_prerelease || fromJson(needs.plan.outputs.val).publish_prereleases }}
331 |     steps:
332 |       - name: Fetch npm packages
333 |         uses: actions/download-artifact@v4
334 |         with:
335 |           pattern: artifacts-*
336 |           path: npm/
337 |           merge-multiple: true
338 |       - uses: actions/setup-node@v4
339 |         with:
340 |           node-version: '20.x'
341 |           registry-url: 'https://registry.npmjs.org'
342 |       - run: |
343 |           for release in $(echo "$PLAN" | jq --compact-output '.releases[] | select([.artifacts[] | endswith("-npm-package.tar.gz")] | any)'); do
344 |             pkg=$(echo "$release" | jq '.artifacts[] | select(endswith("-npm-package.tar.gz"))' --raw-output)
345 |             npm publish --access public "./npm/${pkg}"
346 |           done
347 |         env:
348 |           NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
349 | 
350 |   announce:
351 |     needs:
352 |       - plan
353 |       - host
354 |       - publish-homebrew-formula
355 |       - publish-npm
356 |     # use "always() && ..." to allow us to wait for all publish jobs while
357 |     # still allowing individual publish jobs to skip themselves (for prereleases).
358 |     # "host" however must run to completion, no skipping allowed!
359 |     if: ${{ always() && needs.host.result == 'success' && (needs.publish-homebrew-formula.result == 'skipped' || needs.publish-homebrew-formula.result == 'success') && (needs.publish-npm.result == 'skipped' || needs.publish-npm.result == 'success') }}
360 |     runs-on: "ubuntu-latest"
361 |     env:
362 |       GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
363 |     steps:
364 |       - uses: actions/checkout@v4
365 |         with:
366 |           submodules: recursive
367 | 
```

--------------------------------------------------------------------------------
/aderyn_core/src/context/flow/reducibles.rs:
--------------------------------------------------------------------------------

```rust
  1 | use crate::{ast::Block, context::workspace::WorkspaceContext};
  2 | 
  3 | use super::{ASTNode, AstNodeId, Cfg, CfgNodeDescriptor, CfgNodeId, CfgReduce};
  4 | 
  5 | use crate::ast::*;
  6 | 
  7 | // Control flow graph definitions nodes
  8 | #[derive(Debug, Clone)]
  9 | pub struct CfgBlock {
 10 |     pub block: AstNodeId,
 11 | }
 12 | 
 13 | impl CfgReduce for CfgBlock {
 14 |     fn reduce(&self, context: &WorkspaceContext, cfg: &mut Cfg) -> (CfgNodeId, CfgNodeId) {
 15 |         let start_id = cfg.add_start_block_node(self.block);
 16 |         let end_id = cfg.add_end_block_node(self.block);
 17 |         cfg.start_end_pairs.insert(start_id, end_id);
 18 | 
 19 |         let mut last_link = start_id;
 20 | 
 21 |         if let Some(ASTNode::Block(block)) = context.nodes.get(&self.block) {
 22 |             for statement in &block.statements {
 23 |                 let node_id = cfg.add_statement_node(statement);
 24 |                 cfg.add_flow_edge(last_link, node_id);
 25 |                 last_link = node_id;
 26 |             }
 27 |         }
 28 | 
 29 |         cfg.add_flow_edge(last_link, end_id);
 30 | 
 31 |         (start_id, end_id)
 32 |     }
 33 | }
 34 | 
 35 | impl CfgBlock {
 36 |     pub fn from(block: &Block) -> Self {
 37 |         Self { block: block.id }
 38 |     }
 39 | }
 40 | 
 41 | /// Helper functions
 42 | impl Cfg {
 43 |     pub fn add_block_node(&mut self, block: &Block) -> CfgNodeId {
 44 |         self.add_node(CfgNodeDescriptor::Block(Box::new(CfgBlock::from(block))))
 45 |     }
 46 | }
 47 | 
 48 | /////////////////////////////////////////////////////////////////////////////////////////////////
 49 | 
 50 | #[derive(Debug, Clone)]
 51 | pub struct CfgIfStatement {
 52 |     pub if_statement: AstNodeId,
 53 | }
 54 | 
 55 | impl CfgReduce for CfgIfStatement {
 56 |     fn reduce(&self, context: &WorkspaceContext, cfg: &mut Cfg) -> (CfgNodeId, CfgNodeId) {
 57 |         let start_id = cfg.add_start_if_node(self.if_statement);
 58 |         let end_id = cfg.add_end_if_node(self.if_statement);
 59 |         cfg.start_end_pairs.insert(start_id, end_id);
 60 | 
 61 |         let Some(ASTNode::IfStatement(if_ast_node)) = context.nodes.get(&self.if_statement) else {
 62 |             cfg.add_flow_edge(start_id, end_id);
 63 |             return (start_id, end_id);
 64 |         };
 65 | 
 66 |         // Condition node
 67 |         let start_cond = cfg.add_start_if_cond_node();
 68 |         let end_cond = cfg.add_end_if_cond_node();
 69 |         cfg.start_end_pairs.insert(start_id, end_id);
 70 | 
 71 |         let condition = cfg.add_if_statement_condition(&if_ast_node.condition);
 72 | 
 73 |         cfg.add_flow_edge(start_id, start_cond);
 74 |         cfg.add_flow_edge(start_cond, condition);
 75 |         cfg.add_flow_edge(condition, end_cond);
 76 | 
 77 |         // True branch
 78 |         let start_true_branch = cfg.add_start_if_true_branch_node();
 79 |         let end_true_branch = cfg.add_end_if_true_branch_node();
 80 |         cfg.start_end_pairs.insert(start_true_branch, end_true_branch);
 81 | 
 82 |         let true_block = match &if_ast_node.true_body {
 83 |             super::BlockOrStatement::Block(block) => cfg.add_block_node(block.as_ref()),
 84 |             super::BlockOrStatement::Statement(stmt) => cfg.add_statement_node(stmt.as_ref()),
 85 |         };
 86 | 
 87 |         cfg.add_flow_edge(end_cond, start_true_branch);
 88 |         cfg.add_flow_edge(start_true_branch, true_block);
 89 |         cfg.add_flow_edge(true_block, end_true_branch);
 90 | 
 91 |         cfg.add_flow_edge(end_true_branch, end_id);
 92 | 
 93 |         // False branch
 94 |         if let Some(false_body) = if_ast_node.false_body.as_ref() {
 95 |             let start_false_branch = cfg.add_start_if_false_branch_node();
 96 |             let end_false_branch = cfg.add_end_if_false_branch_node();
 97 |             cfg.start_end_pairs.insert(start_false_branch, end_false_branch);
 98 | 
 99 |             let false_block = match false_body {
100 |                 super::BlockOrStatement::Block(block) => cfg.add_block_node(block.as_ref()),
101 |                 super::BlockOrStatement::Statement(stmt) => cfg.add_statement_node(stmt.as_ref()),
102 |             };
103 | 
104 |             cfg.add_flow_edge(end_cond, start_false_branch);
105 |             cfg.add_flow_edge(start_false_branch, false_block);
106 |             cfg.add_flow_edge(false_block, end_false_branch);
107 | 
108 |             cfg.add_flow_edge(end_false_branch, end_id);
109 |         } else {
110 |             // It's possible to skip the true branch if the false branch doesn't exist
111 |             let start_false_branch = cfg.add_start_if_false_branch_node();
112 |             let end_false_branch = cfg.add_end_if_false_branch_node();
113 |             cfg.start_end_pairs.insert(start_false_branch, end_false_branch);
114 | 
115 |             cfg.add_flow_edge(end_cond, start_false_branch);
116 |             cfg.add_flow_edge(start_false_branch, end_false_branch);
117 | 
118 |             cfg.add_flow_edge(end_false_branch, end_id);
119 |         }
120 | 
121 |         (start_id, end_id)
122 |     }
123 | }
124 | 
125 | impl CfgIfStatement {
126 |     pub fn from(if_stmt: &IfStatement) -> Self {
127 |         Self { if_statement: if_stmt.id }
128 |     }
129 | }
130 | 
131 | impl Cfg {
132 |     pub fn add_if_statement(&mut self, if_stmt: &IfStatement) -> CfgNodeId {
133 |         self.add_node(CfgNodeDescriptor::IfStatement(Box::new(CfgIfStatement::from(if_stmt))))
134 |     }
135 | }
136 | 
137 | /////////////////////////////////////////////////////////////////////////////////////////////////
138 | 
139 | #[derive(Debug, Clone)]
140 | pub struct CfgWhileStatement {
141 |     pub while_statement: AstNodeId,
142 | }
143 | 
144 | impl CfgReduce for CfgWhileStatement {
145 |     fn reduce(&self, context: &WorkspaceContext, cfg: &mut Cfg) -> (CfgNodeId, CfgNodeId) {
146 |         let start_id = cfg.add_start_while_node(self.while_statement);
147 |         let end_id = cfg.add_end_while_node(self.while_statement);
148 |         cfg.start_end_pairs.insert(start_id, end_id);
149 | 
150 |         let Some(ASTNode::WhileStatement(ast_while_stmt)) =
151 |             context.nodes.get(&self.while_statement)
152 |         else {
153 |             cfg.add_flow_edge(start_id, end_id);
154 |             return (start_id, end_id);
155 |         };
156 | 
157 |         let start_cond = cfg.add_start_while_cond_node();
158 |         let end_cond = cfg.add_end_while_cond_node();
159 |         cfg.start_end_pairs.insert(start_cond, end_cond);
160 |         cfg.start_cond_pairs.insert(start_id, start_cond);
161 |         cfg.cond_start_pairs.insert(end_cond, start_id);
162 | 
163 |         let condition = cfg.add_while_statement_condition(&ast_while_stmt.condition);
164 | 
165 |         cfg.add_flow_edge(start_id, start_cond);
166 |         cfg.add_flow_edge(start_cond, condition);
167 |         cfg.add_flow_edge(condition, end_cond);
168 | 
169 |         // Exit happens from the condition node
170 |         cfg.add_flow_edge(end_cond, end_id);
171 | 
172 |         // Loop arcs around the condition
173 |         let start_body = cfg.add_start_while_body_node();
174 |         let end_body = cfg.add_end_while_body_node();
175 |         cfg.start_end_pairs.insert(start_body, end_body);
176 | 
177 |         let body = match &ast_while_stmt.body {
178 |             BlockOrStatement::Block(block) => cfg.add_block_node(block),
179 |             BlockOrStatement::Statement(stmt) => cfg.add_statement_node(stmt),
180 |         };
181 | 
182 |         cfg.add_flow_edge(end_cond, start_body);
183 |         cfg.add_flow_edge(start_body, body);
184 |         cfg.add_flow_edge(body, end_body);
185 |         cfg.add_flow_edge(end_body, start_cond);
186 | 
187 |         (start_id, end_id)
188 |     }
189 | }
190 | 
191 | impl CfgWhileStatement {
192 |     pub fn from(while_stmt: &WhileStatement) -> Self {
193 |         Self { while_statement: while_stmt.id }
194 |     }
195 | }
196 | 
197 | impl Cfg {
198 |     pub fn add_while_statement(&mut self, while_stmt: &WhileStatement) -> CfgNodeId {
199 |         self.add_node(CfgNodeDescriptor::WhileStatement(Box::new(CfgWhileStatement::from(
200 |             while_stmt,
201 |         ))))
202 |     }
203 | }
204 | 
205 | /////////////////////////////////////////////////////////////////////////////////////////////////
206 | 
207 | #[derive(Debug, Clone)]
208 | pub struct CfgForStatement {
209 |     pub for_statement: AstNodeId,
210 | }
211 | 
212 | impl CfgReduce for CfgForStatement {
213 |     fn reduce(&self, context: &WorkspaceContext, cfg: &mut Cfg) -> (CfgNodeId, CfgNodeId) {
214 |         let start_id = cfg.add_start_for_node(self.for_statement);
215 |         let end_id = cfg.add_end_for_node(self.for_statement);
216 |         cfg.start_end_pairs.insert(start_id, end_id);
217 | 
218 |         let Some(ASTNode::ForStatement(ast_for_stmt)) = context.nodes.get(&self.for_statement)
219 |         else {
220 |             cfg.add_flow_edge(start_id, end_id);
221 |             return (start_id, end_id);
222 |         };
223 | 
224 |         // First we prepare the loop initialization expression
225 |         let start_loop_init = cfg.add_start_for_init_exp_node();
226 |         let end_loop_init = cfg.add_end_for_init_exp_node();
227 |         cfg.start_end_pairs.insert(start_loop_init, end_loop_init);
228 | 
229 |         if let Some(ast_loop_init) = ast_for_stmt.initialization_expression.as_ref() {
230 |             let loop_init = match ast_loop_init.as_ref() {
231 |                 ExpressionOrVariableDeclarationStatement::ExpressionStatement(exp_stmt) => {
232 |                     cfg.add_expression_statement(exp_stmt)
233 |                 }
234 |                 ExpressionOrVariableDeclarationStatement::VariableDeclarationStatement(stmt) => {
235 |                     cfg.add_variable_declaration_statement(stmt)
236 |                 }
237 |             };
238 |             cfg.add_flow_edge(start_loop_init, loop_init);
239 |             cfg.add_flow_edge(loop_init, end_loop_init);
240 |         } else {
241 |             // If there is not loop initialization expression, leave it blank
242 |             cfg.add_flow_edge(start_loop_init, end_loop_init);
243 |         }
244 | 
245 |         // Prepare the loop condition expression
246 |         let start_loop_cond = cfg.add_start_for_cond_node();
247 |         let end_loop_cond = cfg.add_end_for_cond_node();
248 |         cfg.start_end_pairs.insert(start_loop_cond, end_loop_cond);
249 |         cfg.start_cond_pairs.insert(start_id, start_loop_cond);
250 | 
251 |         if let Some(ast_loop_cond) = ast_for_stmt.condition.as_ref() {
252 |             let loop_cond = cfg.add_for_statement_condition(ast_loop_cond);
253 |             cfg.add_flow_edge(start_loop_cond, loop_cond);
254 |             cfg.add_flow_edge(loop_cond, end_loop_cond);
255 |         } else {
256 |             cfg.add_flow_edge(start_loop_cond, end_loop_cond);
257 |         }
258 | 
259 |         // Prepare the loop body
260 |         let start_loop_body = cfg.add_start_for_body_node();
261 |         let end_loop_body = cfg.add_end_for_body_node();
262 |         cfg.start_end_pairs.insert(start_loop_body, end_loop_body);
263 | 
264 |         let loop_body = match &ast_for_stmt.body {
265 |             BlockOrStatement::Block(block) => cfg.add_block_node(block),
266 |             BlockOrStatement::Statement(stmt) => cfg.add_statement_node(stmt),
267 |         };
268 | 
269 |         cfg.add_flow_edge(start_loop_body, loop_body);
270 |         cfg.add_flow_edge(loop_body, end_loop_body);
271 | 
272 |         // Prepare the loop expression
273 |         let start_loop_exp = cfg.add_start_for_exp_node();
274 |         let end_loop_exp = cfg.add_end_for_exp_node();
275 |         cfg.start_end_pairs.insert(start_loop_exp, end_loop_exp);
276 |         cfg.start_loop_expr.insert(start_id, start_loop_exp);
277 |         cfg.loop_expr_start.insert(end_loop_exp, start_id);
278 | 
279 |         if let Some(ast_loop_exp) = ast_for_stmt.loop_expression.as_ref() {
280 |             let loop_exp = cfg.add_expression_statement(ast_loop_exp.as_ref());
281 |             cfg.add_flow_edge(start_loop_exp, loop_exp);
282 |             cfg.add_flow_edge(loop_exp, end_loop_exp);
283 |         } else {
284 |             cfg.add_flow_edge(start_loop_exp, end_loop_exp);
285 |         }
286 | 
287 |         // Connect all the above components
288 |         cfg.add_flow_edge(start_id, start_loop_init);
289 |         cfg.add_flow_edge(end_loop_init, start_loop_cond);
290 |         cfg.add_flow_edge(end_loop_cond, start_loop_body);
291 |         cfg.add_flow_edge(end_loop_body, start_loop_exp);
292 |         cfg.add_flow_edge(end_loop_exp, start_loop_cond);
293 |         cfg.add_flow_edge(end_loop_cond, end_id);
294 | 
295 |         (start_id, end_id)
296 |     }
297 | }
298 | 
299 | impl CfgForStatement {
300 |     pub fn from(for_stmt: &ForStatement) -> Self {
301 |         Self { for_statement: for_stmt.id }
302 |     }
303 | }
304 | 
305 | impl Cfg {
306 |     pub fn add_for_statement(&mut self, for_stmt: &ForStatement) -> CfgNodeId {
307 |         self.add_node(CfgNodeDescriptor::ForStatement(Box::new(CfgForStatement::from(for_stmt))))
308 |     }
309 | }
310 | 
311 | /////////////////////////////////////////////////////////////////////////////////////////////////
312 | 
313 | #[derive(Debug, Clone)]
314 | pub struct CfgDoWhileStatement {
315 |     pub do_while_statement: AstNodeId,
316 | }
317 | 
318 | impl CfgReduce for CfgDoWhileStatement {
319 |     fn reduce(&self, context: &WorkspaceContext, cfg: &mut Cfg) -> (CfgNodeId, CfgNodeId) {
320 |         let start_id = cfg.add_start_do_while_node(self.do_while_statement);
321 |         let end_id = cfg.add_end_do_while_node(self.do_while_statement);
322 |         cfg.start_end_pairs.insert(start_id, end_id);
323 | 
324 |         let Some(ASTNode::DoWhileStatement(ast_do_while_stmt)) =
325 |             context.nodes.get(&self.do_while_statement)
326 |         else {
327 |             cfg.add_flow_edge(start_id, end_id);
328 |             return (start_id, end_id);
329 |         };
330 | 
331 |         // Loop body
332 |         let start_loop_body = cfg.add_start_do_while_body_node();
333 |         let end_loop_body = cfg.add_end_do_while_body_node();
334 |         cfg.start_end_pairs.insert(start_loop_body, end_loop_body);
335 | 
336 |         let loop_body = cfg.add_block_node(&ast_do_while_stmt.body);
337 | 
338 |         cfg.add_flow_edge(start_id, start_loop_body);
339 |         cfg.add_flow_edge(start_loop_body, loop_body);
340 |         cfg.add_flow_edge(loop_body, end_loop_body);
341 | 
342 |         // Loop condition
343 |         let start_loop_cond = cfg.add_start_do_while_cond_node();
344 |         let end_loop_cond = cfg.add_end_do_while_cond_node();
345 |         cfg.start_end_pairs.insert(start_loop_cond, end_loop_cond);
346 |         cfg.start_cond_pairs.insert(start_id, start_loop_cond);
347 |         cfg.cond_start_pairs.insert(end_loop_cond, start_id);
348 | 
349 |         let loop_cond = cfg.add_do_while_statement_condition(&ast_do_while_stmt.condition);
350 | 
351 |         cfg.add_flow_edge(end_loop_body, start_loop_cond);
352 |         cfg.add_flow_edge(start_loop_cond, loop_cond);
353 |         cfg.add_flow_edge(loop_cond, end_loop_cond);
354 | 
355 |         // Loop link
356 |         cfg.add_flow_edge(end_loop_cond, start_loop_body);
357 | 
358 |         // Exit link
359 |         cfg.add_flow_edge(end_loop_cond, end_id);
360 | 
361 |         (start_id, end_id)
362 |     }
363 | }
364 | 
365 | impl CfgDoWhileStatement {
366 |     pub fn from(do_while_stmt: &DoWhileStatement) -> Self {
367 |         Self { do_while_statement: do_while_stmt.id }
368 |     }
369 | }
370 | 
371 | impl Cfg {
372 |     pub fn add_do_while_statement(&mut self, do_while_stmt: &DoWhileStatement) -> CfgNodeId {
373 |         self.add_node(CfgNodeDescriptor::DoWhileStatement(Box::new(CfgDoWhileStatement::from(
374 |             do_while_stmt,
375 |         ))))
376 |     }
377 | }
378 | 
379 | /////////////////////////////////////////////////////////////////////////////////////////////////
380 | 
381 | #[derive(Debug, Clone)]
382 | pub struct CfgUncheckedBlock {
383 |     pub unchecked_block: AstNodeId,
384 | }
385 | 
386 | impl CfgReduce for CfgUncheckedBlock {
387 |     fn reduce(&self, context: &WorkspaceContext, cfg: &mut Cfg) -> (CfgNodeId, CfgNodeId) {
388 |         let start_id = cfg.add_start_unchecked_block_node(self.unchecked_block);
389 |         let end_id = cfg.add_end_unchecked_block_node(self.unchecked_block);
390 |         cfg.start_end_pairs.insert(start_id, end_id);
391 | 
392 |         let mut last_link = start_id;
393 | 
394 |         if let Some(ASTNode::UncheckedBlock(block)) = context.nodes.get(&self.unchecked_block) {
395 |             for statement in &block.statements {
396 |                 let node_id = cfg.add_statement_node(statement);
397 |                 cfg.add_flow_edge(last_link, node_id);
398 |                 last_link = node_id;
399 |             }
400 |         }
401 | 
402 |         cfg.add_flow_edge(last_link, end_id);
403 | 
404 |         (start_id, end_id)
405 |     }
406 | }
407 | 
408 | impl CfgUncheckedBlock {
409 |     pub fn from(unchecked_block: &UncheckedBlock) -> Self {
410 |         Self { unchecked_block: unchecked_block.id }
411 |     }
412 | }
413 | 
414 | /// Helper functions
415 | impl Cfg {
416 |     pub fn add_unchecked_block_node(&mut self, unchecked_block: &UncheckedBlock) -> CfgNodeId {
417 |         self.add_node(CfgNodeDescriptor::UncheckedBlock(Box::new(CfgUncheckedBlock::from(
418 |             unchecked_block,
419 |         ))))
420 |     }
421 | }
422 | 
```

--------------------------------------------------------------------------------
/benchmarks/unsafe-erc20-functions/report/regression.svg:
--------------------------------------------------------------------------------

```
  1 | <svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
  2 | <text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
  3 | unsafe-erc20-functions
  4 | </text>
  5 | <text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
  6 | Total sample time (ms)
  7 | </text>
  8 | <text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
  9 | Iterations (x 10^3)
 10 | </text>
 11 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="256" y1="472" x2="256" y2="53"/>
 12 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="434" y1="472" x2="434" y2="53"/>
 13 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="611" y1="472" x2="611" y2="53"/>
 14 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="789" y1="472" x2="789" y2="53"/>
 15 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="437" x2="932" y2="437"/>
 16 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="398" x2="932" y2="398"/>
 17 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="358" x2="932" y2="358"/>
 18 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="319" x2="932" y2="319"/>
 19 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="280" x2="932" y2="280"/>
 20 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="240" x2="932" y2="240"/>
 21 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="201" x2="932" y2="201"/>
 22 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="162" x2="932" y2="162"/>
 23 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="123" x2="932" y2="123"/>
 24 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="83" x2="932" y2="83"/>
 25 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
 26 | <text x="77" y="437" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 27 | 10.0
 28 | </text>
 29 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,437 86,437 "/>
 30 | <text x="77" y="398" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 31 | 20.0
 32 | </text>
 33 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,398 86,398 "/>
 34 | <text x="77" y="358" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 35 | 30.0
 36 | </text>
 37 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,358 86,358 "/>
 38 | <text x="77" y="319" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 39 | 40.0
 40 | </text>
 41 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,319 86,319 "/>
 42 | <text x="77" y="280" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 43 | 50.0
 44 | </text>
 45 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,280 86,280 "/>
 46 | <text x="77" y="240" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 47 | 60.0
 48 | </text>
 49 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,240 86,240 "/>
 50 | <text x="77" y="201" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 51 | 70.0
 52 | </text>
 53 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,201 86,201 "/>
 54 | <text x="77" y="162" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 55 | 80.0
 56 | </text>
 57 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,162 86,162 "/>
 58 | <text x="77" y="123" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 59 | 90.0
 60 | </text>
 61 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,123 86,123 "/>
 62 | <text x="77" y="83" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 63 | 100.0
 64 | </text>
 65 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,83 86,83 "/>
 66 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
 67 | <text x="256" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 68 | 0.5
 69 | </text>
 70 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="256,473 256,478 "/>
 71 | <text x="434" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 72 | 1
 73 | </text>
 74 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="434,473 434,478 "/>
 75 | <text x="611" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 76 | 1.5
 77 | </text>
 78 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="611,473 611,478 "/>
 79 | <text x="789" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 80 | 2
 81 | </text>
 82 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="789,473 789,478 "/>
 83 | <circle cx="87" cy="472" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 84 | <circle cx="95" cy="468" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 85 | <circle cx="104" cy="465" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 86 | <circle cx="112" cy="460" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 87 | <circle cx="121" cy="457" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 88 | <circle cx="129" cy="453" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 89 | <circle cx="138" cy="450" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 90 | <circle cx="146" cy="446" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 91 | <circle cx="155" cy="442" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 92 | <circle cx="163" cy="439" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 93 | <circle cx="172" cy="435" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 94 | <circle cx="180" cy="428" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 95 | <circle cx="189" cy="421" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 96 | <circle cx="197" cy="420" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 97 | <circle cx="206" cy="419" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 98 | <circle cx="215" cy="414" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
 99 | <circle cx="223" cy="409" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
100 | <circle cx="232" cy="405" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
101 | <circle cx="240" cy="401" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
102 | <circle cx="249" cy="399" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
103 | <circle cx="257" cy="392" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
104 | <circle cx="266" cy="382" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
105 | <circle cx="274" cy="314" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
106 | <circle cx="283" cy="336" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
107 | <circle cx="291" cy="344" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
108 | <circle cx="300" cy="377" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
109 | <circle cx="308" cy="373" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
110 | <circle cx="317" cy="368" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
111 | <circle cx="325" cy="344" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
112 | <circle cx="334" cy="355" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
113 | <circle cx="343" cy="352" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
114 | <circle cx="351" cy="355" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
115 | <circle cx="360" cy="348" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
116 | <circle cx="368" cy="342" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
117 | <circle cx="377" cy="336" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
118 | <circle cx="385" cy="330" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
119 | <circle cx="394" cy="325" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
120 | <circle cx="402" cy="323" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
121 | <circle cx="411" cy="321" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
122 | <circle cx="419" cy="312" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
123 | <circle cx="428" cy="304" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
124 | <circle cx="436" cy="306" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
125 | <circle cx="445" cy="305" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
126 | <circle cx="454" cy="300" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
127 | <circle cx="462" cy="291" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
128 | <circle cx="471" cy="278" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
129 | <circle cx="479" cy="287" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
130 | <circle cx="488" cy="281" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
131 | <circle cx="496" cy="280" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
132 | <circle cx="505" cy="281" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
133 | <circle cx="513" cy="277" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
134 | <circle cx="522" cy="270" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
135 | <circle cx="530" cy="266" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
136 | <circle cx="539" cy="263" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
137 | <circle cx="547" cy="260" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
138 | <circle cx="556" cy="220" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
139 | <circle cx="564" cy="226" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
140 | <circle cx="573" cy="248" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
141 | <circle cx="582" cy="248" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
142 | <circle cx="590" cy="242" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
143 | <circle cx="599" cy="238" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
144 | <circle cx="607" cy="232" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
145 | <circle cx="616" cy="229" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
146 | <circle cx="624" cy="228" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
147 | <circle cx="633" cy="220" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
148 | <circle cx="641" cy="117" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
149 | <circle cx="650" cy="180" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
150 | <circle cx="658" cy="201" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
151 | <circle cx="667" cy="69" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
152 | <circle cx="675" cy="170" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
153 | <circle cx="684" cy="189" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
154 | <circle cx="693" cy="186" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
155 | <circle cx="701" cy="176" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
156 | <circle cx="710" cy="179" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
157 | <circle cx="718" cy="92" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
158 | <circle cx="727" cy="131" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
159 | <circle cx="735" cy="143" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
160 | <circle cx="744" cy="153" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
161 | <circle cx="752" cy="152" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
162 | <circle cx="761" cy="146" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
163 | <circle cx="769" cy="113" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
164 | <circle cx="778" cy="113" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
165 | <circle cx="786" cy="110" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
166 | <circle cx="795" cy="120" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
167 | <circle cx="803" cy="126" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
168 | <circle cx="812" cy="122" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
169 | <circle cx="821" cy="116" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
170 | <circle cx="829" cy="119" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
171 | <circle cx="838" cy="113" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
172 | <circle cx="846" cy="106" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
173 | <circle cx="855" cy="100" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
174 | <circle cx="863" cy="97" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
175 | <circle cx="872" cy="94" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
176 | <circle cx="880" cy="92" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
177 | <circle cx="889" cy="92" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
178 | <circle cx="897" cy="88" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
179 | <circle cx="906" cy="82" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
180 | <circle cx="914" cy="58" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
181 | <circle cx="923" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
182 | <circle cx="932" cy="63" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
183 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,473 932,57 "/>
184 | <polygon opacity="0.25" fill="#1F78B4" points="87,473 932,64 932,53 "/>
185 | <text x="132" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
186 | Sample
187 | </text>
188 | <text x="132" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
189 | Linear regression
190 | </text>
191 | <text x="132" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
192 | Confidence interval
193 | </text>
194 | <circle cx="112" cy="73" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
195 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="2" points="102,88 122,88 "/>
196 | <rect x="102" y="98" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
197 | </svg>
198 | 
```
Page 86/103FirstPrevNextLast