#
tokens: 42943/50000 3/1140 files (page 97/103)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 97 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

--------------------------------------------------------------------------------
/reports/adhoc-sol-files-report.md:
--------------------------------------------------------------------------------

```markdown
  1 | # Aderyn Analysis Report
  2 | 
  3 | This report was generated by [Aderyn](https://github.com/Cyfrin/aderyn), a static analysis tool built by [Cyfrin](https://cyfrin.io), a blockchain security company. This report is not a substitute for manual audit or security review. It should not be relied upon for any purpose other than to assist in the identification of potential security vulnerabilities.
  4 | # Table of Contents
  5 | 
  6 | - [Summary](#summary)
  7 |   - [Files Summary](#files-summary)
  8 |   - [Files Details](#files-details)
  9 |   - [Issue Summary](#issue-summary)
 10 | - [High Issues](#high-issues)
 11 |   - [H-1: `delegatecall` to an Arbitrary Address](#h-1-delegatecall-to-an-arbitrary-address)
 12 |   - [H-2: Unchecked Low level calls](#h-2-unchecked-low-level-calls)
 13 | - [Low Issues](#low-issues)
 14 |   - [L-1: `delegatecall` in loop](#l-1-delegatecall-in-loop)
 15 |   - [L-2: Centralization Risk](#l-2-centralization-risk)
 16 |   - [L-3: `ecrecover` Signature Malleability](#l-3-ecrecover-signature-malleability)
 17 |   - [L-4: Unspecific Solidity Pragma](#l-4-unspecific-solidity-pragma)
 18 |   - [L-5: Address State Variable Set Without Checks](#l-5-address-state-variable-set-without-checks)
 19 |   - [L-6: Public Function Not Used Internally](#l-6-public-function-not-used-internally)
 20 |   - [L-7: Literal Instead of Constant](#l-7-literal-instead-of-constant)
 21 |   - [L-8: Empty `require()` / `revert()` Statement](#l-8-empty-require--revert-statement)
 22 |   - [L-9: PUSH0 Opcode](#l-9-push0-opcode)
 23 |   - [L-10: Modifier Invoked Only Once](#l-10-modifier-invoked-only-once)
 24 |   - [L-11: Empty Block](#l-11-empty-block)
 25 |   - [L-12: Large Numeric Literal](#l-12-large-numeric-literal)
 26 |   - [L-13: Internal Function Used Only Once](#l-13-internal-function-used-only-once)
 27 |   - [L-14: Contract has TODO Comments](#l-14-contract-has-todo-comments)
 28 |   - [L-15: Inconsistent uint256/uint (or) int256/int types](#l-15-inconsistent-uint256uint-or-int256int-types)
 29 |   - [L-16: Unused Error](#l-16-unused-error)
 30 |   - [L-17: Unused State Variable](#l-17-unused-state-variable)
 31 |   - [L-18: Dead Code](#l-18-dead-code)
 32 |   - [L-19: Unused Import](#l-19-unused-import)
 33 |   - [L-20: State Variable Could Be Constant](#l-20-state-variable-could-be-constant)
 34 |   - [L-21: State Change Without Event](#l-21-state-change-without-event)
 35 |   - [L-22: State Variable Could Be Immutable](#l-22-state-variable-could-be-immutable)
 36 | 
 37 | 
 38 | # Summary
 39 | 
 40 | ## Files Summary
 41 | 
 42 | | Key | Value |
 43 | | --- | --- |
 44 | | .sol Files | 20 |
 45 | | Total nSLOC | 245 |
 46 | 
 47 | 
 48 | ## Files Details
 49 | 
 50 | | Filepath | nSLOC |
 51 | | --- | --- |
 52 | | Counter.sol | 20 |
 53 | | DemoASTNodes.sol | 31 |
 54 | | Helper.sol | 8 |
 55 | | InconsistentUints.sol | 17 |
 56 | | InternalFunctions.sol | 22 |
 57 | | OnceModifierExample.sol | 8 |
 58 | | StateVariables.sol | 58 |
 59 | | inheritance/ExtendedInheritance.sol | 17 |
 60 | | inheritance/IContractInheritance.sol | 4 |
 61 | | inheritance/InheritanceBase.sol | 8 |
 62 | | multiple-versions/0.4/A.sol | 5 |
 63 | | multiple-versions/0.4/B.sol | 5 |
 64 | | multiple-versions/0.5/A.sol | 5 |
 65 | | multiple-versions/0.5/B.sol | 7 |
 66 | | multiple-versions/0.6/A.sol | 5 |
 67 | | multiple-versions/0.6/B.sol | 5 |
 68 | | multiple-versions/0.7/A.sol | 5 |
 69 | | multiple-versions/0.7/B.sol | 5 |
 70 | | multiple-versions/0.8/A.sol | 5 |
 71 | | multiple-versions/0.8/B.sol | 5 |
 72 | | **Total** | **245** |
 73 | 
 74 | 
 75 | ## Issue Summary
 76 | 
 77 | | Category | No. of Issues |
 78 | | --- | --- |
 79 | | High | 2 |
 80 | | Low | 22 |
 81 | 
 82 | 
 83 | # High Issues
 84 | 
 85 | ## H-1: `delegatecall` to an Arbitrary Address
 86 | 
 87 | Making a `delegatecall` to an arbitrary address without any checks is dangerous. Consider adding requirements on the target address.
 88 | 
 89 | <details><summary>1 Found Instances</summary>
 90 | 
 91 | 
 92 | - Found in inheritance/ExtendedInheritance.sol [Line: 14](../tests/adhoc-sol-files/inheritance/ExtendedInheritance.sol#L14)
 93 | 
 94 | 	```solidity
 95 | 	    function doSomethingElse(address target) external {
 96 | 	```
 97 | 
 98 | </details>
 99 | 
100 | 
101 | 
102 | ## H-2: Unchecked Low level calls
103 | 
104 | The return value of the low-level call is not checked, so if the call fails, the Ether will be locked in the contract. If the low level is used to prevent blocking operations, consider logging failed calls. Ensure that the return value of a low-level call is checked or logged.
105 | 
106 | <details><summary>1 Found Instances</summary>
107 | 
108 | 
109 | - Found in inheritance/ExtendedInheritance.sol [Line: 16](../tests/adhoc-sol-files/inheritance/ExtendedInheritance.sol#L16)
110 | 
111 | 	```solidity
112 | 	            target.delegatecall(abi.encodeWithSignature("doSomething(uint256)", i));
113 | 	```
114 | 
115 | </details>
116 | 
117 | 
118 | 
119 | # Low Issues
120 | 
121 | ## L-1: `delegatecall` in loop
122 | 
123 | Using `delegatecall` in loop may consume excessive gas, or worse, lead to more severe issues.
124 | 
125 | <details><summary>1 Found Instances</summary>
126 | 
127 | 
128 | - Found in inheritance/ExtendedInheritance.sol [Line: 15](../tests/adhoc-sol-files/inheritance/ExtendedInheritance.sol#L15)
129 | 
130 | 	```solidity
131 | 	        for (uint256 i = 0; i < 3; i++) {
132 | 	```
133 | 
134 | </details>
135 | 
136 | 
137 | 
138 | ## L-2: Centralization Risk
139 | 
140 | Contracts have owners with privileged rights to perform admin tasks and need to be trusted to not perform malicious updates or drain funds.
141 | 
142 | <details><summary>1 Found Instances</summary>
143 | 
144 | 
145 | - Found in InternalFunctions.sol [Line: 12](../tests/adhoc-sol-files/InternalFunctions.sol#L12)
146 | 
147 | 	```solidity
148 | 	    function setValue(uint256 _newValue) external onlyOwner {
149 | 	```
150 | 
151 | </details>
152 | 
153 | 
154 | 
155 | ## L-3: `ecrecover` Signature Malleability
156 | 
157 | The `ecrecover` function is susceptible to signature malleability. This means that the same message can be signed in multiple ways, allowing an attacker to change the message signature without invalidating it. This can lead to unexpected behavior in smart contracts, such as the loss of funds or the ability to bypass access control. Consider using OpenZeppelin's ECDSA library instead of the built-in function.
158 | 
159 | <details><summary>1 Found Instances</summary>
160 | 
161 | 
162 | - Found in inheritance/ExtendedInheritance.sol [Line: 21](../tests/adhoc-sol-files/inheritance/ExtendedInheritance.sol#L21)
163 | 
164 | 	```solidity
165 | 	        return ecrecover(theHash, v, r, s);
166 | 	```
167 | 
168 | </details>
169 | 
170 | 
171 | 
172 | ## L-4: Unspecific Solidity Pragma
173 | 
174 | Consider using a specific version of Solidity in your contracts instead of a wide version. For example, instead of `pragma solidity ^0.8.0;`, use `pragma solidity 0.8.0;`
175 | 
176 | <details><summary>16 Found Instances</summary>
177 | 
178 | 
179 | - Found in Counter.sol [Line: 2](../tests/adhoc-sol-files/Counter.sol#L2)
180 | 
181 | 	```solidity
182 | 	pragma solidity ^0.8.13;
183 | 	```
184 | 
185 | - Found in DemoASTNodes.sol [Line: 2](../tests/adhoc-sol-files/DemoASTNodes.sol#L2)
186 | 
187 | 	```solidity
188 | 	pragma solidity >=0.8.0;
189 | 	```
190 | 
191 | - Found in Helper.sol [Line: 2](../tests/adhoc-sol-files/Helper.sol#L2)
192 | 
193 | 	```solidity
194 | 	pragma solidity >=0.8.0;
195 | 	```
196 | 
197 | - Found in InconsistentUints.sol [Line: 1](../tests/adhoc-sol-files/InconsistentUints.sol#L1)
198 | 
199 | 	```solidity
200 | 	pragma solidity ^0.8.24;
201 | 	```
202 | 
203 | - Found in inheritance/IContractInheritance.sol [Line: 2](../tests/adhoc-sol-files/inheritance/IContractInheritance.sol#L2)
204 | 
205 | 	```solidity
206 | 	pragma solidity >=0.8.0;
207 | 	```
208 | 
209 | - Found in inheritance/InheritanceBase.sol [Line: 2](../tests/adhoc-sol-files/inheritance/InheritanceBase.sol#L2)
210 | 
211 | 	```solidity
212 | 	pragma solidity ^0.8.0;
213 | 	```
214 | 
215 | - Found in multiple-versions/0.4/A.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.4/A.sol#L2)
216 | 
217 | 	```solidity
218 | 	pragma solidity ^0.4.0;
219 | 	```
220 | 
221 | - Found in multiple-versions/0.4/B.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.4/B.sol#L2)
222 | 
223 | 	```solidity
224 | 	pragma solidity ^0.4.0;
225 | 	```
226 | 
227 | - Found in multiple-versions/0.5/A.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.5/A.sol#L2)
228 | 
229 | 	```solidity
230 | 	pragma solidity ^0.5.0;
231 | 	```
232 | 
233 | - Found in multiple-versions/0.5/B.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.5/B.sol#L2)
234 | 
235 | 	```solidity
236 | 	pragma solidity ^0.5.0;
237 | 	```
238 | 
239 | - Found in multiple-versions/0.6/A.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.6/A.sol#L2)
240 | 
241 | 	```solidity
242 | 	pragma solidity ^0.6.0;
243 | 	```
244 | 
245 | - Found in multiple-versions/0.6/B.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.6/B.sol#L2)
246 | 
247 | 	```solidity
248 | 	pragma solidity ^0.6.0;
249 | 	```
250 | 
251 | - Found in multiple-versions/0.7/A.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.7/A.sol#L2)
252 | 
253 | 	```solidity
254 | 	pragma solidity ^0.7.0;
255 | 	```
256 | 
257 | - Found in multiple-versions/0.7/B.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.7/B.sol#L2)
258 | 
259 | 	```solidity
260 | 	pragma solidity ^0.7.0;
261 | 	```
262 | 
263 | - Found in multiple-versions/0.8/A.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.8/A.sol#L2)
264 | 
265 | 	```solidity
266 | 	pragma solidity ^0.8.0;
267 | 	```
268 | 
269 | - Found in multiple-versions/0.8/B.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.8/B.sol#L2)
270 | 
271 | 	```solidity
272 | 	pragma solidity ^0.8.0;
273 | 	```
274 | 
275 | </details>
276 | 
277 | 
278 | 
279 | ## L-5: Address State Variable Set Without Checks
280 | 
281 | Check for `address(0)` when assigning values to address state variables.
282 | 
283 | <details><summary>1 Found Instances</summary>
284 | 
285 | 
286 | - Found in StateVariables.sol [Line: 58](../tests/adhoc-sol-files/StateVariables.sol#L58)
287 | 
288 | 	```solidity
289 | 	        addr = newAddr;
290 | 	```
291 | 
292 | </details>
293 | 
294 | 
295 | 
296 | ## L-6: Public Function Not Used Internally
297 | 
298 | If a function is marked public but is not used internally, consider marking it as `external`.
299 | 
300 | <details><summary>6 Found Instances</summary>
301 | 
302 | 
303 | - Found in Counter.sol [Line: 7](../tests/adhoc-sol-files/Counter.sol#L7)
304 | 
305 | 	```solidity
306 | 	    function setNumber(uint256 newNumber) public {
307 | 	```
308 | 
309 | - Found in StateVariables.sol [Line: 47](../tests/adhoc-sol-files/StateVariables.sol#L47)
310 | 
311 | 	```solidity
312 | 	    function setAddrNoZeroError(address newAddr) public {
313 | 	```
314 | 
315 | - Found in StateVariables.sol [Line: 52](../tests/adhoc-sol-files/StateVariables.sol#L52)
316 | 
317 | 	```solidity
318 | 	    function setAddrNoZeroRequire(address newAddr) public {
319 | 	```
320 | 
321 | - Found in StateVariables.sol [Line: 57](../tests/adhoc-sol-files/StateVariables.sol#L57)
322 | 
323 | 	```solidity
324 | 	    function setAddrNoCheck(address newAddr) public {
325 | 	```
326 | 
327 | - Found in StateVariables.sol [Line: 61](../tests/adhoc-sol-files/StateVariables.sol#L61)
328 | 
329 | 	```solidity
330 | 	    function setEmptyAlteredNumbers(
331 | 	```
332 | 
333 | - Found in StateVariables.sol [Line: 71](../tests/adhoc-sol-files/StateVariables.sol#L71)
334 | 
335 | 	```solidity
336 | 	    function setNonEmptyAlteredNumbers(
337 | 	```
338 | 
339 | </details>
340 | 
341 | 
342 | 
343 | ## L-7: Literal Instead of Constant
344 | 
345 | Define and use `constant` variables instead of using literals. If the same constant literal value is used multiple times, create a constant state variable and reference it throughout the contract.
346 | 
347 | <details><summary>6 Found Instances</summary>
348 | 
349 | 
350 | - Found in DemoASTNodes.sol [Line: 15](../tests/adhoc-sol-files/DemoASTNodes.sol#L15)
351 | 
352 | 	```solidity
353 | 	            if (i == 3) {
354 | 	```
355 | 
356 | - Found in DemoASTNodes.sol [Line: 20](../tests/adhoc-sol-files/DemoASTNodes.sol#L20)
357 | 
358 | 	```solidity
359 | 	            if (i == 5) {
360 | 	```
361 | 
362 | - Found in DemoASTNodes.sol [Line: 31](../tests/adhoc-sol-files/DemoASTNodes.sol#L31)
363 | 
364 | 	```solidity
365 | 	        uint256[] memory numbers = new uint256[](5);
366 | 	```
367 | 
368 | - Found in DemoASTNodes.sol [Line: 35](../tests/adhoc-sol-files/DemoASTNodes.sol#L35)
369 | 
370 | 	```solidity
371 | 	        numbers[3] = 3;
372 | 	```
373 | 
374 | - Found in DemoASTNodes.sol [Line: 36](../tests/adhoc-sol-files/DemoASTNodes.sol#L36)
375 | 
376 | 	```solidity
377 | 	        numbers[4] = 4;
378 | 	```
379 | 
380 | - Found in DemoASTNodes.sol [Line: 38](../tests/adhoc-sol-files/DemoASTNodes.sol#L38)
381 | 
382 | 	```solidity
383 | 	        int256 i = 4; 
384 | 	```
385 | 
386 | </details>
387 | 
388 | 
389 | 
390 | ## L-8: Empty `require()` / `revert()` Statement
391 | 
392 | Use descriptive reason strings or custom errors for revert paths.
393 | 
394 | <details><summary>1 Found Instances</summary>
395 | 
396 | 
397 | - Found in DemoASTNodes.sol [Line: 7](../tests/adhoc-sol-files/DemoASTNodes.sol#L7)
398 | 
399 | 	```solidity
400 | 	        require(to != address(0));
401 | 	```
402 | 
403 | </details>
404 | 
405 | 
406 | 
407 | ## L-9: PUSH0 Opcode
408 | 
409 | Solc compiler version 0.8.20 switches the default target EVM version to Shanghai, which means that the generated bytecode will include PUSH0 opcodes. Be sure to select the appropriate EVM version in case you intend to deploy on a chain other than mainnet like L2 chains that may not support PUSH0, otherwise deployment of your contracts will fail.
410 | 
411 | <details><summary>10 Found Instances</summary>
412 | 
413 | 
414 | - Found in Counter.sol [Line: 2](../tests/adhoc-sol-files/Counter.sol#L2)
415 | 
416 | 	```solidity
417 | 	pragma solidity ^0.8.13;
418 | 	```
419 | 
420 | - Found in DemoASTNodes.sol [Line: 2](../tests/adhoc-sol-files/DemoASTNodes.sol#L2)
421 | 
422 | 	```solidity
423 | 	pragma solidity >=0.8.0;
424 | 	```
425 | 
426 | - Found in Helper.sol [Line: 2](../tests/adhoc-sol-files/Helper.sol#L2)
427 | 
428 | 	```solidity
429 | 	pragma solidity >=0.8.0;
430 | 	```
431 | 
432 | - Found in InconsistentUints.sol [Line: 1](../tests/adhoc-sol-files/InconsistentUints.sol#L1)
433 | 
434 | 	```solidity
435 | 	pragma solidity ^0.8.24;
436 | 	```
437 | 
438 | - Found in StateVariables.sol [Line: 2](../tests/adhoc-sol-files/StateVariables.sol#L2)
439 | 
440 | 	```solidity
441 | 	pragma solidity 0.8.20;
442 | 	```
443 | 
444 | - Found in inheritance/ExtendedInheritance.sol [Line: 2](../tests/adhoc-sol-files/inheritance/ExtendedInheritance.sol#L2)
445 | 
446 | 	```solidity
447 | 	pragma solidity 0.8.20;
448 | 	```
449 | 
450 | - Found in inheritance/IContractInheritance.sol [Line: 2](../tests/adhoc-sol-files/inheritance/IContractInheritance.sol#L2)
451 | 
452 | 	```solidity
453 | 	pragma solidity >=0.8.0;
454 | 	```
455 | 
456 | - Found in inheritance/InheritanceBase.sol [Line: 2](../tests/adhoc-sol-files/inheritance/InheritanceBase.sol#L2)
457 | 
458 | 	```solidity
459 | 	pragma solidity ^0.8.0;
460 | 	```
461 | 
462 | - Found in multiple-versions/0.8/A.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.8/A.sol#L2)
463 | 
464 | 	```solidity
465 | 	pragma solidity ^0.8.0;
466 | 	```
467 | 
468 | - Found in multiple-versions/0.8/B.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.8/B.sol#L2)
469 | 
470 | 	```solidity
471 | 	pragma solidity ^0.8.0;
472 | 	```
473 | 
474 | </details>
475 | 
476 | 
477 | 
478 | ## L-10: Modifier Invoked Only Once
479 | 
480 | Consider removing the modifier or inlining the logic into the calling function.
481 | 
482 | <details><summary>3 Found Instances</summary>
483 | 
484 | 
485 | - Found in DemoASTNodes.sol [Line: 6](../tests/adhoc-sol-files/DemoASTNodes.sol#L6)
486 | 
487 | 	```solidity
488 | 	    modifier iHaveAPlaceholder(address to) {
489 | 	```
490 | 
491 | - Found in InternalFunctions.sol [Line: 18](../tests/adhoc-sol-files/InternalFunctions.sol#L18)
492 | 
493 | 	```solidity
494 | 	    modifier onlyOwner() {
495 | 	```
496 | 
497 | - Found in OnceModifierExample.sol [Line: 6](../tests/adhoc-sol-files/OnceModifierExample.sol#L6)
498 | 
499 | 	```solidity
500 | 	    modifier onlyOnce() {
501 | 	```
502 | 
503 | </details>
504 | 
505 | 
506 | 
507 | ## L-11: Empty Block
508 | 
509 | Consider removing empty blocks.
510 | 
511 | <details><summary>2 Found Instances</summary>
512 | 
513 | 
514 | - Found in OnceModifierExample.sol [Line: 10](../tests/adhoc-sol-files/OnceModifierExample.sol#L10)
515 | 
516 | 	```solidity
517 | 	    function perform() external onlyOnce {
518 | 	```
519 | 
520 | - Found in multiple-versions/0.5/B.sol [Line: 8](../tests/adhoc-sol-files/multiple-versions/0.5/B.sol#L8)
521 | 
522 | 	```solidity
523 | 	    function emptyBlockCatchMe() external {
524 | 	```
525 | 
526 | </details>
527 | 
528 | 
529 | 
530 | ## L-12: Large Numeric Literal
531 | 
532 | Large literal values multiples of 10000 can be replaced with scientific notation.Use `e` notation, for example: `1e18`, instead of its full numeric value.
533 | 
534 | <details><summary>1 Found Instances</summary>
535 | 
536 | 
537 | - Found in DemoASTNodes.sol [Line: 14](../tests/adhoc-sol-files/DemoASTNodes.sol#L14)
538 | 
539 | 	```solidity
540 | 	        for (uint256 i = 0; i < 10000000; ++i) {
541 | 	```
542 | 
543 | </details>
544 | 
545 | 
546 | 
547 | ## L-13: Internal Function Used Only Once
548 | 
549 | Instead of separating the logic into a separate function, consider inlining the logic into the calling function. This can reduce the number of function calls and improve readability.
550 | 
551 | <details><summary>1 Found Instances</summary>
552 | 
553 | 
554 | - Found in InternalFunctions.sol [Line: 28](../tests/adhoc-sol-files/InternalFunctions.sol#L28)
555 | 
556 | 	```solidity
557 | 	    function internalSet2(uint256 _newValue) internal {
558 | 	```
559 | 
560 | </details>
561 | 
562 | 
563 | 
564 | ## L-14: Contract has TODO Comments
565 | 
566 | Contract contains comments with TODOS. Consider implementing or removing them.
567 | 
568 | <details><summary>1 Found Instances</summary>
569 | 
570 | 
571 | - Found in Counter.sol [Line: 4](../tests/adhoc-sol-files/Counter.sol#L4)
572 | 
573 | 	```solidity
574 | 	contract Counter {
575 | 	```
576 | 
577 | </details>
578 | 
579 | 
580 | 
581 | ## L-15: Inconsistent uint256/uint (or) int256/int types
582 | 
583 | Inconsistency in declaring uint256/uint (or) int256/int variables within a contract. Use explicit size declarations (uint256 or int256). Consider keeping the naming convention consistent in a given contract. Explicit size declarations are preferred (uint256, int256) over implicit ones (uint, int) to avoid confusion.
584 | 
585 | <details><summary>7 Found Instances</summary>
586 | 
587 | 
588 | - Found in InconsistentUints.sol [Line: 5](../tests/adhoc-sol-files/InconsistentUints.sol#L5)
589 | 
590 | 	```solidity
591 | 	    uint public uintVariable; // 1
592 | 	```
593 | 
594 | - Found in InconsistentUints.sol [Line: 7](../tests/adhoc-sol-files/InconsistentUints.sol#L7)
595 | 
596 | 	```solidity
597 | 	    int public intVariable; // 1
598 | 	```
599 | 
600 | - Found in InconsistentUints.sol [Line: 11](../tests/adhoc-sol-files/InconsistentUints.sol#L11)
601 | 
602 | 	```solidity
603 | 	        uint personUint; // 2
604 | 	```
605 | 
606 | - Found in InconsistentUints.sol [Line: 12](../tests/adhoc-sol-files/InconsistentUints.sol#L12)
607 | 
608 | 	```solidity
609 | 	        mapping (uint => uint256) personMap; // 3 2
610 | 	```
611 | 
612 | - Found in InconsistentUints.sol [Line: 15](../tests/adhoc-sol-files/InconsistentUints.sol#L15)
613 | 
614 | 	```solidity
615 | 	    uint[] public uintArray; // 4
616 | 	```
617 | 
618 | - Found in InconsistentUints.sol [Line: 16](../tests/adhoc-sol-files/InconsistentUints.sol#L16)
619 | 
620 | 	```solidity
621 | 	    mapping(uint256 => uint other) u2uMapping; // 5 3
622 | 	```
623 | 
624 | - Found in InconsistentUints.sol [Line: 19](../tests/adhoc-sol-files/InconsistentUints.sol#L19)
625 | 
626 | 	```solidity
627 | 	    constructor(uint _uintInitial, uint256 _uint256Initial) { // 6 4
628 | 	```
629 | 
630 | </details>
631 | 
632 | 
633 | 
634 | ## L-16: Unused Error
635 | 
636 | Consider using or removing the unused error.
637 | 
638 | <details><summary>1 Found Instances</summary>
639 | 
640 | 
641 | - Found in Helper.sol [Line: 8](../tests/adhoc-sol-files/Helper.sol#L8)
642 | 
643 | 	```solidity
644 | 	error NotNice();
645 | 	```
646 | 
647 | </details>
648 | 
649 | 
650 | 
651 | ## L-17: Unused State Variable
652 | 
653 | State variable appears to be unused. No analysis has been performed to see if any inline assembly references it. Consider removing this unused variable.
654 | 
655 | <details><summary>7 Found Instances</summary>
656 | 
657 | 
658 | - Found in InconsistentUints.sol [Line: 16](../tests/adhoc-sol-files/InconsistentUints.sol#L16)
659 | 
660 | 	```solidity
661 | 	    mapping(uint256 => uint other) u2uMapping; // 5 3
662 | 	```
663 | 
664 | - Found in StateVariables.sol [Line: 8](../tests/adhoc-sol-files/StateVariables.sol#L8)
665 | 
666 | 	```solidity
667 | 	    uint256 private staticPrivateNumber;
668 | 	```
669 | 
670 | - Found in StateVariables.sol [Line: 9](../tests/adhoc-sol-files/StateVariables.sol#L9)
671 | 
672 | 	```solidity
673 | 	    uint256 internal staticInternalNumber;
674 | 	```
675 | 
676 | - Found in StateVariables.sol [Line: 13](../tests/adhoc-sol-files/StateVariables.sol#L13)
677 | 
678 | 	```solidity
679 | 	    uint256 private staticNonEmptyPrivateNumber = 1;
680 | 	```
681 | 
682 | - Found in StateVariables.sol [Line: 14](../tests/adhoc-sol-files/StateVariables.sol#L14)
683 | 
684 | 	```solidity
685 | 	    uint256 internal staticNonEmptyInternalNumber = 2;
686 | 	```
687 | 
688 | - Found in StateVariables.sol [Line: 28](../tests/adhoc-sol-files/StateVariables.sol#L28)
689 | 
690 | 	```solidity
691 | 	    uint256 private constant PRIVATE_CONSTANT = 1;
692 | 	```
693 | 
694 | - Found in StateVariables.sol [Line: 29](../tests/adhoc-sol-files/StateVariables.sol#L29)
695 | 
696 | 	```solidity
697 | 	    uint256 internal constant INTERNAL_CONSTANT = 2;
698 | 	```
699 | 
700 | </details>
701 | 
702 | 
703 | 
704 | ## L-18: Dead Code
705 | 
706 | Functions that are not used. Consider removing them.
707 | 
708 | <details><summary>2 Found Instances</summary>
709 | 
710 | 
711 | - Found in DemoASTNodes.sol [Line: 12](../tests/adhoc-sol-files/DemoASTNodes.sol#L12)
712 | 
713 | 	```solidity
714 | 	    function useBreakAndContinueStatement(address x) internal pure iHaveAPlaceholder(x) returns(uint256 sum) {
715 | 	```
716 | 
717 | - Found in DemoASTNodes.sol [Line: 30](../tests/adhoc-sol-files/DemoASTNodes.sol#L30)
718 | 
719 | 	```solidity
720 | 	    function calculateSumUsingDoWhileLoop() internal pure returns(uint256 sum) {
721 | 	```
722 | 
723 | </details>
724 | 
725 | 
726 | 
727 | ## L-19: Unused Import
728 | 
729 | Redundant import statement. Consider removing it.
730 | 
731 | <details><summary>1 Found Instances</summary>
732 | 
733 | 
734 | - Found in StateVariables.sol [Line: 4](../tests/adhoc-sol-files/StateVariables.sol#L4)
735 | 
736 | 	```solidity
737 | 	import {Counter} from "./Counter.sol";
738 | 	```
739 | 
740 | </details>
741 | 
742 | 
743 | 
744 | ## L-20: State Variable Could Be Constant
745 | 
746 | State variables that are not updated following deployment should be declared constant to save gas. Add the `constant` attribute to state variables that never change.
747 | 
748 | <details><summary>5 Found Instances</summary>
749 | 
750 | 
751 | - Found in StateVariables.sol [Line: 13](../tests/adhoc-sol-files/StateVariables.sol#L13)
752 | 
753 | 	```solidity
754 | 	    uint256 private staticNonEmptyPrivateNumber = 1;
755 | 	```
756 | 
757 | - Found in StateVariables.sol [Line: 14](../tests/adhoc-sol-files/StateVariables.sol#L14)
758 | 
759 | 	```solidity
760 | 	    uint256 internal staticNonEmptyInternalNumber = 2;
761 | 	```
762 | 
763 | - Found in StateVariables.sol [Line: 15](../tests/adhoc-sol-files/StateVariables.sol#L15)
764 | 
765 | 	```solidity
766 | 	    uint256 public staticNonEmptyPublicNumber = 3;
767 | 	```
768 | 
769 | - Found in multiple-versions/0.8/B.sol [Line: 5](../tests/adhoc-sol-files/multiple-versions/0.8/B.sol#L5)
770 | 
771 | 	```solidity
772 | 	    address public MY_ADDRESS = address(0);
773 | 	```
774 | 
775 | - Found in multiple-versions/0.8/B.sol [Line: 6](../tests/adhoc-sol-files/multiple-versions/0.8/B.sol#L6)
776 | 
777 | 	```solidity
778 | 	    uint256 public MY_UINT = 134131;
779 | 	```
780 | 
781 | </details>
782 | 
783 | 
784 | 
785 | ## L-21: State Change Without Event
786 | 
787 | There are state variable changes in this function but no event is emitted. Consider emitting an event to enable offchain indexers to track the changes.
788 | 
789 | <details><summary>11 Found Instances</summary>
790 | 
791 | 
792 | - Found in Counter.sol [Line: 7](../tests/adhoc-sol-files/Counter.sol#L7)
793 | 
794 | 	```solidity
795 | 	    function setNumber(uint256 newNumber) public {
796 | 	```
797 | 
798 | - Found in Counter.sol [Line: 11](../tests/adhoc-sol-files/Counter.sol#L11)
799 | 
800 | 	```solidity
801 | 	    function increment() public {
802 | 	```
803 | 
804 | - Found in Counter.sol [Line: 16](../tests/adhoc-sol-files/Counter.sol#L16)
805 | 
806 | 	```solidity
807 | 	    function callIncrement() external {
808 | 	```
809 | 
810 | - Found in Counter.sol [Line: 21](../tests/adhoc-sol-files/Counter.sol#L21)
811 | 
812 | 	```solidity
813 | 	    function incrementByTwoMagic() external {
814 | 	```
815 | 
816 | - Found in Counter.sol [Line: 28](../tests/adhoc-sol-files/Counter.sol#L28)
817 | 
818 | 	```solidity
819 | 	    function incrementByTwoConstant() external {
820 | 	```
821 | 
822 | - Found in InternalFunctions.sol [Line: 12](../tests/adhoc-sol-files/InternalFunctions.sol#L12)
823 | 
824 | 	```solidity
825 | 	    function setValue(uint256 _newValue) external onlyOwner {
826 | 	```
827 | 
828 | - Found in StateVariables.sol [Line: 47](../tests/adhoc-sol-files/StateVariables.sol#L47)
829 | 
830 | 	```solidity
831 | 	    function setAddrNoZeroError(address newAddr) public {
832 | 	```
833 | 
834 | - Found in StateVariables.sol [Line: 52](../tests/adhoc-sol-files/StateVariables.sol#L52)
835 | 
836 | 	```solidity
837 | 	    function setAddrNoZeroRequire(address newAddr) public {
838 | 	```
839 | 
840 | - Found in StateVariables.sol [Line: 57](../tests/adhoc-sol-files/StateVariables.sol#L57)
841 | 
842 | 	```solidity
843 | 	    function setAddrNoCheck(address newAddr) public {
844 | 	```
845 | 
846 | - Found in StateVariables.sol [Line: 61](../tests/adhoc-sol-files/StateVariables.sol#L61)
847 | 
848 | 	```solidity
849 | 	    function setEmptyAlteredNumbers(
850 | 	```
851 | 
852 | - Found in StateVariables.sol [Line: 71](../tests/adhoc-sol-files/StateVariables.sol#L71)
853 | 
854 | 	```solidity
855 | 	    function setNonEmptyAlteredNumbers(
856 | 	```
857 | 
858 | </details>
859 | 
860 | 
861 | 
862 | ## L-22: State Variable Could Be Immutable
863 | 
864 | State variables that are only changed in the constructor should be declared immutable to save gas. Add the `immutable` attribute to state variables that are only changed in the constructor
865 | 
866 | <details><summary>3 Found Instances</summary>
867 | 
868 | 
869 | - Found in InconsistentUints.sol [Line: 5](../tests/adhoc-sol-files/InconsistentUints.sol#L5)
870 | 
871 | 	```solidity
872 | 	    uint public uintVariable; // 1
873 | 	```
874 | 
875 | - Found in InconsistentUints.sol [Line: 6](../tests/adhoc-sol-files/InconsistentUints.sol#L6)
876 | 
877 | 	```solidity
878 | 	    uint256 public uint256Variable; // 1
879 | 	```
880 | 
881 | - Found in InternalFunctions.sol [Line: 5](../tests/adhoc-sol-files/InternalFunctions.sol#L5)
882 | 
883 | 	```solidity
884 | 	    address public owner;
885 | 	```
886 | 
887 | </details>
888 | 
889 | 
890 | 
891 | 
```

--------------------------------------------------------------------------------
/aderyn_core/src/context/workspace.rs:
--------------------------------------------------------------------------------

```rust
  1 | use super::{
  2 |     browser::GetImmediateParent,
  3 |     capturable::Capturable,
  4 |     graph::{LegacyWorkspaceCallGraph, WorkspaceCallGraphs},
  5 |     macros::generate_get_source_unit,
  6 |     router::Router,
  7 | };
  8 | pub use crate::ast::ASTNode;
  9 | use crate::{ast::*, stats::IgnoreLine};
 10 | use solidity_ast::EvmVersion;
 11 | use std::{
 12 |     cmp::Ordering,
 13 |     collections::{HashMap, HashSet},
 14 |     path::PathBuf,
 15 | };
 16 | 
 17 | #[derive(Default, Debug, Clone, PartialEq, Eq, Hash)]
 18 | pub struct NodeContext {
 19 |     pub source_unit_id: NodeID,
 20 |     pub contract_definition_id: Option<NodeID>,
 21 |     pub function_definition_id: Option<NodeID>,
 22 |     pub modifier_definition_id: Option<NodeID>,
 23 | }
 24 | 
 25 | #[derive(Default, Debug)]
 26 | pub struct WorkspaceContext {
 27 |     pub last_source_unit_id: NodeID,
 28 |     pub last_contract_definition_id: Option<NodeID>,
 29 |     pub last_function_definition_id: Option<NodeID>,
 30 |     pub last_modifier_definition_id: Option<NodeID>,
 31 | 
 32 |     pub parent_link: HashMap<NodeID, NodeID>,
 33 |     pub evm_version: EvmVersion,
 34 | 
 35 |     // relative source filepaths
 36 |     pub src_filepaths: Vec<String>,
 37 |     pub sloc_stats: HashMap<String, usize>,
 38 |     pub ignore_lines_stats: HashMap<String, Vec<IgnoreLine>>,
 39 |     pub nodes: HashMap<NodeID, ASTNode>,
 40 | 
 41 |     // Legacy callgraphs
 42 |     pub inward_callgraph: Option<LegacyWorkspaceCallGraph>,
 43 |     pub outward_callgraph: Option<LegacyWorkspaceCallGraph>,
 44 | 
 45 |     // Callgraphs
 46 |     pub callgraphs: Option<WorkspaceCallGraphs>,
 47 | 
 48 |     // Source units
 49 |     pub source_units_context: Vec<SourceUnit>,
 50 | 
 51 |     // In-scope files
 52 |     pub included: HashSet<PathBuf>,
 53 | 
 54 |     // Function router
 55 |     pub router: Option<Router>,
 56 | 
 57 |     // Hashmaps of all nodes => source_unit_id
 58 |     pub(crate) array_type_names_context: HashMap<ArrayTypeName, NodeContext>,
 59 |     pub(crate) assignments_context: HashMap<Assignment, NodeContext>,
 60 |     pub(crate) binary_operations_context: HashMap<BinaryOperation, NodeContext>,
 61 |     pub(crate) blocks_context: HashMap<Block, NodeContext>,
 62 |     pub(crate) conditionals_context: HashMap<Conditional, NodeContext>,
 63 |     pub(crate) contract_definitions_context: HashMap<ContractDefinition, NodeContext>,
 64 |     pub(crate) elementary_type_names_context: HashMap<ElementaryTypeName, NodeContext>,
 65 |     pub(crate) elementary_type_name_expressions_context:
 66 |         HashMap<ElementaryTypeNameExpression, NodeContext>,
 67 |     pub(crate) emit_statements_context: HashMap<EmitStatement, NodeContext>,
 68 |     pub(crate) enum_definitions_context: HashMap<EnumDefinition, NodeContext>,
 69 |     pub(crate) enum_values_context: HashMap<EnumValue, NodeContext>,
 70 |     pub(crate) event_definitions_context: HashMap<EventDefinition, NodeContext>,
 71 |     pub(crate) error_definitions_context: HashMap<ErrorDefinition, NodeContext>,
 72 |     pub(crate) expression_statements_context: HashMap<ExpressionStatement, NodeContext>,
 73 |     pub(crate) function_calls_context: HashMap<FunctionCall, NodeContext>,
 74 |     pub(crate) function_call_options_context: HashMap<FunctionCallOptions, NodeContext>,
 75 |     pub(crate) function_definitions_context: HashMap<FunctionDefinition, NodeContext>,
 76 |     pub(crate) function_type_names_context: HashMap<FunctionTypeName, NodeContext>,
 77 |     pub(crate) for_statements_context: HashMap<ForStatement, NodeContext>,
 78 |     pub(crate) identifiers_context: HashMap<Identifier, NodeContext>,
 79 |     pub(crate) identifier_paths_context: HashMap<IdentifierPath, NodeContext>,
 80 |     pub(crate) if_statements_context: HashMap<IfStatement, NodeContext>,
 81 |     pub(crate) import_directives_context: HashMap<ImportDirective, NodeContext>,
 82 |     pub(crate) index_accesses_context: HashMap<IndexAccess, NodeContext>,
 83 |     pub(crate) index_range_accesses_context: HashMap<IndexRangeAccess, NodeContext>,
 84 |     pub(crate) inheritance_specifiers_context: HashMap<InheritanceSpecifier, NodeContext>,
 85 |     pub(crate) inline_assemblies_context: HashMap<InlineAssembly, NodeContext>,
 86 |     pub(crate) literals_context: HashMap<Literal, NodeContext>,
 87 |     pub(crate) member_accesses_context: HashMap<MemberAccess, NodeContext>,
 88 |     pub(crate) new_expressions_context: HashMap<NewExpression, NodeContext>,
 89 |     pub(crate) mappings_context: HashMap<Mapping, NodeContext>,
 90 |     pub(crate) modifier_definitions_context: HashMap<ModifierDefinition, NodeContext>,
 91 |     pub(crate) modifier_invocations_context: HashMap<ModifierInvocation, NodeContext>,
 92 |     pub(crate) override_specifiers_context: HashMap<OverrideSpecifier, NodeContext>,
 93 |     pub(crate) parameter_lists_context: HashMap<ParameterList, NodeContext>,
 94 |     pub(crate) pragma_directives_context: HashMap<PragmaDirective, NodeContext>,
 95 |     pub(crate) returns_context: HashMap<Return, NodeContext>,
 96 |     pub(crate) revert_statements_context: HashMap<RevertStatement, NodeContext>,
 97 |     pub(crate) struct_definitions_context: HashMap<StructDefinition, NodeContext>,
 98 |     pub(crate) structured_documentations_context: HashMap<StructuredDocumentation, NodeContext>,
 99 |     pub(crate) try_statements_context: HashMap<TryStatement, NodeContext>,
100 |     pub(crate) try_catch_clauses_context: HashMap<TryCatchClause, NodeContext>,
101 |     pub(crate) tuple_expressions_context: HashMap<TupleExpression, NodeContext>,
102 |     pub(crate) unary_operations_context: HashMap<UnaryOperation, NodeContext>,
103 |     pub(crate) unchecked_blocks_context: HashMap<UncheckedBlock, NodeContext>,
104 |     pub(crate) user_defined_type_names_context: HashMap<UserDefinedTypeName, NodeContext>,
105 |     pub(crate) user_defined_value_type_definitions_context:
106 |         HashMap<UserDefinedValueTypeDefinition, NodeContext>,
107 |     pub(crate) using_for_directives_context: HashMap<UsingForDirective, NodeContext>,
108 |     pub(crate) variable_declarations_context: HashMap<VariableDeclaration, NodeContext>,
109 |     pub(crate) variable_declaration_statements_context:
110 |         HashMap<VariableDeclarationStatement, NodeContext>,
111 |     pub(crate) while_statements_context: HashMap<WhileStatement, NodeContext>,
112 |     pub(crate) do_while_statements_context: HashMap<DoWhileStatement, NodeContext>,
113 |     pub(crate) break_statements_context: HashMap<Break, NodeContext>,
114 |     pub(crate) continue_statements_context: HashMap<Continue, NodeContext>,
115 |     pub(crate) placeholder_statements_context: HashMap<PlaceholderStatement, NodeContext>,
116 |     pub(crate) yul_function_calls_context: HashMap<YulFunctionCall, NodeContext>,
117 |     pub(crate) yul_identifiers_context: HashMap<YulIdentifier, NodeContext>,
118 |     pub(crate) yul_literals_context: HashMap<YulLiteral, NodeContext>,
119 |     pub(crate) yul_assignments_context: HashMap<YulAssignment, NodeContext>,
120 | }
121 | 
122 | impl WorkspaceContext {
123 |     // Setters
124 | 
125 |     pub fn set_sloc_stats(&mut self, sloc_stats: HashMap<String, usize>) {
126 |         self.sloc_stats = sloc_stats;
127 |     }
128 | 
129 |     pub fn set_ignore_lines_stats(&mut self, ignore_lines_stats: HashMap<String, Vec<IgnoreLine>>) {
130 |         self.ignore_lines_stats = ignore_lines_stats;
131 |     }
132 | 
133 |     // Getters
134 | 
135 |     pub fn get_parent(&self, node_id: NodeID) -> Option<&ASTNode> {
136 |         self.nodes.get(self.parent_link.get(&node_id)?)
137 |     }
138 | 
139 |     pub fn get_ancestral_line(&self, node_id: NodeID) -> Vec<&ASTNode> {
140 |         let mut chain = vec![];
141 |         let mut parent = self.nodes.get(&node_id);
142 |         while let Some(next_parent) = parent {
143 |             chain.push(next_parent);
144 |             parent = next_parent.parent(self);
145 |         }
146 |         chain
147 |     }
148 |     pub fn get_closest_ancestor(&self, node_id: NodeID, node_type: NodeType) -> Option<&ASTNode> {
149 |         let mut current_node_id = self.parent_link.get(&node_id)?;
150 |         while let Some(current) = self.nodes.get(current_node_id) {
151 |             if current.node_type() == node_type {
152 |                 return Some(current);
153 |             }
154 |             current_node_id = self.parent_link.get(current_node_id)?;
155 |         }
156 |         None
157 |     }
158 |     pub fn get_closest_ancestor_including_self(
159 |         &self,
160 |         node_id: NodeID,
161 |         node_type: NodeType,
162 |     ) -> Option<&ASTNode> {
163 |         if let Some(node) = self.nodes.get(&node_id)
164 |             && node.node_type() == node_type
165 |         {
166 |             return Some(node);
167 |         }
168 |         self.get_closest_ancestor(node_id, node_type)
169 |     }
170 |     pub fn get_source_code_of_node(&self, node_id: NodeID) -> Option<String> {
171 |         let node = self.nodes.get(&node_id)?;
172 |         let source_unit = self.get_source_unit_from_child_node(node).unwrap();
173 |         let src_location = node.src().unwrap_or("");
174 | 
175 |         let chopped_location = match src_location.rfind(':') {
176 |             Some(index) => &src_location[..index],
177 |             None => src_location, // No colon found, return the original string
178 |         }
179 |         .to_string();
180 | 
181 |         if let Some((offset, len)) = chopped_location.split_once(':') {
182 |             let offset: usize = offset.parse().ok()?;
183 |             let len: usize = len.parse().ok()?;
184 |             if let Some(content) = source_unit.source.as_ref()
185 |                 && offset + len < content.len()
186 |             {
187 |                 let required_content = &content[offset..offset + len];
188 |                 return Some(required_content.to_string());
189 |             }
190 |         }
191 |         None
192 |     }
193 | 
194 |     pub fn get_offset_and_length_of_node(&self, node_id: NodeID) -> Option<(usize, usize)> {
195 |         let node = self.nodes.get(&node_id)?;
196 |         let src_location = node.src().unwrap_or("");
197 | 
198 |         let chopped_location = match src_location.rfind(':') {
199 |             Some(index) => &src_location[..index],
200 |             None => src_location, // No colon found, return the original string
201 |         }
202 |         .to_string();
203 | 
204 |         if let Some((offset, len)) = chopped_location.split_once(':') {
205 |             let offset: usize = offset.parse().ok()?;
206 |             let len: usize = len.parse().ok()?;
207 |             return Some((offset, len));
208 |         }
209 |         None
210 |     }
211 | 
212 |     pub fn get_node_sort_key_from_capturable(
213 |         &self,
214 |         capturable: &Capturable,
215 |     ) -> (String, usize, String) {
216 |         capturable.make_key(self)
217 |     }
218 | 
219 |     pub fn get_node_id_of_capturable(&self, capturable: &Capturable) -> Option<NodeID> {
220 |         capturable.id()
221 |     }
222 | 
223 |     /// Returns the relative location of nodes in the source code (if they are in same file)
224 |     pub fn get_relative_location_of_nodes(
225 |         &self,
226 |         first: NodeID,
227 |         second: NodeID,
228 |     ) -> Option<Ordering> {
229 |         let f = self.get_node_sort_key_pure(self.nodes.get(&first)?);
230 |         let s = self.get_node_sort_key_pure(self.nodes.get(&second)?);
231 | 
232 |         // If the nodes aren't in the same file location comparison doesn't make sense
233 |         if f.0 != s.0 {
234 |             return None;
235 |         }
236 | 
237 |         match f.1.cmp(&s.1) {
238 |             Ordering::Less => Some(Ordering::Less),
239 |             Ordering::Equal => {
240 |                 // If the nodes are on the same line, we must compare offset in the chopped_location
241 |                 let first_character_offset = f.2.split_once(':').unwrap();
242 |                 let second_character_offset = s.2.split_once(':').unwrap();
243 |                 Some(first_character_offset.0.cmp(second_character_offset.0))
244 |             }
245 |             Ordering::Greater => Some(Ordering::Greater),
246 |         }
247 |     }
248 | 
249 |     pub fn get_node_sort_key_pure(&self, node: &ASTNode) -> (String, usize, String) {
250 |         let source_unit = self.get_source_unit_from_child_node(node).unwrap();
251 |         let absolute_path = source_unit.absolute_path.as_ref().unwrap().clone();
252 |         let source_line = node
253 |             .src()
254 |             .map(|src| source_unit.source_line(src).unwrap_or(0)) // If `src` is `Some`, get the line number, else return 0
255 |             .unwrap_or(0); // If `src` is `None`, default to 0
256 | 
257 |         let src_location = node.src().unwrap_or("");
258 | 
259 |         let chopped_location = match src_location.rfind(':') {
260 |             Some(index) => &src_location[..index],
261 |             None => src_location, // No colon found, return the original string
262 |         }
263 |         .to_string();
264 | 
265 |         (absolute_path, source_line, chopped_location)
266 |     }
267 | 
268 |     pub fn get_node_sort_key(&self, node: &ASTNode) -> (String, usize, String) {
269 |         let source_unit = self.get_source_unit_from_child_node(node).unwrap();
270 |         let absolute_path = source_unit.absolute_path.as_ref().unwrap().clone();
271 |         let source_line =
272 |             node.src().map(|src| source_unit.source_line(src).unwrap_or(0)).unwrap_or(0);
273 | 
274 |         let src_location = match node {
275 |             ASTNode::ContractDefinition(contract_node) => contract_node
276 |                 .name_location
277 |                 .as_ref()
278 |                 .filter(|loc| !loc.contains("-1"))
279 |                 .map_or_else(|| contract_node.src.clone(), |loc| loc.clone()),
280 |             ASTNode::FunctionDefinition(function_node) => function_node
281 |                 .name_location
282 |                 .as_ref()
283 |                 .filter(|loc| !loc.contains("-1"))
284 |                 .map_or_else(|| function_node.src.clone(), |loc| loc.clone()),
285 |             ASTNode::ModifierDefinition(modifier_node) => modifier_node
286 |                 .name_location
287 |                 .as_ref()
288 |                 .filter(|loc| !loc.contains("-1"))
289 |                 .map_or_else(|| modifier_node.src.clone(), |loc| loc.clone()),
290 |             ASTNode::VariableDeclaration(variable_node) => variable_node
291 |                 .name_location
292 |                 .as_ref()
293 |                 .filter(|loc| !loc.contains("-1"))
294 |                 .map_or_else(|| variable_node.src.clone(), |loc| loc.clone()),
295 |             _ => node.src().unwrap_or("").to_string(),
296 |         };
297 | 
298 |         let chopped_location = src_location
299 |             .rfind(':')
300 |             .map(|index| src_location[..index].to_string())
301 |             .unwrap_or(src_location);
302 | 
303 |         (absolute_path, source_line, chopped_location)
304 |     }
305 |     pub fn get_code_snippet(&self, node: &ASTNode) -> String {
306 |         let (filepath, _, src_location) = self.get_node_sort_key_pure(node);
307 |         let source_unit = self
308 |             .source_units()
309 |             .into_iter()
310 |             .find(|s| s.absolute_path.as_ref().is_some_and(|p| *p == filepath))
311 |             .expect("node not found");
312 | 
313 |         let source_content = source_unit.source.as_ref().expect("source not found");
314 | 
315 |         let (byte_offset_str, byte_len_str) = src_location.split_once(':').unwrap();
316 |         let byte_offset: usize = byte_offset_str.parse().unwrap();
317 |         let byte_length: usize = byte_len_str.parse().unwrap();
318 | 
319 |         let code_snippet = &source_content[byte_offset..byte_offset + byte_length];
320 |         code_snippet.to_owned()
321 |     }
322 | }
323 | 
324 | impl WorkspaceContext {
325 |     pub fn array_type_names(&self) -> Vec<&ArrayTypeName> {
326 |         self.array_type_names_context.keys().collect()
327 |     }
328 |     pub fn assignments(&self) -> Vec<&Assignment> {
329 |         self.assignments_context.keys().collect()
330 |     }
331 |     pub fn binary_operations(&self) -> Vec<&BinaryOperation> {
332 |         self.binary_operations_context.keys().collect()
333 |     }
334 |     pub fn blocks(&self) -> Vec<&Block> {
335 |         self.blocks_context.keys().collect()
336 |     }
337 |     pub fn conditionals(&self) -> Vec<&Conditional> {
338 |         self.conditionals_context.keys().collect()
339 |     }
340 |     pub fn contract_definitions(&self) -> Vec<&ContractDefinition> {
341 |         self.contract_definitions_context.keys().collect()
342 |     }
343 |     pub fn elementary_type_names(&self) -> Vec<&ElementaryTypeName> {
344 |         self.elementary_type_names_context.keys().collect()
345 |     }
346 |     pub fn elementary_type_name_expressions(&self) -> Vec<&ElementaryTypeNameExpression> {
347 |         self.elementary_type_name_expressions_context.keys().collect()
348 |     }
349 |     pub fn emit_statements(&self) -> Vec<&EmitStatement> {
350 |         self.emit_statements_context.keys().collect()
351 |     }
352 |     pub fn enum_definitions(&self) -> Vec<&EnumDefinition> {
353 |         self.enum_definitions_context.keys().collect()
354 |     }
355 |     pub fn enum_values(&self) -> Vec<&EnumValue> {
356 |         self.enum_values_context.keys().collect()
357 |     }
358 |     pub fn event_definitions(&self) -> Vec<&EventDefinition> {
359 |         self.event_definitions_context.keys().collect()
360 |     }
361 |     pub fn error_definitions(&self) -> Vec<&ErrorDefinition> {
362 |         self.error_definitions_context.keys().collect()
363 |     }
364 |     pub fn expression_statements(&self) -> Vec<&ExpressionStatement> {
365 |         self.expression_statements_context.keys().collect()
366 |     }
367 |     pub fn function_calls(&self) -> Vec<&FunctionCall> {
368 |         self.function_calls_context.keys().collect()
369 |     }
370 |     pub fn function_call_options(&self) -> Vec<&FunctionCallOptions> {
371 |         self.function_call_options_context.keys().collect()
372 |     }
373 |     pub fn function_definitions(&self) -> Vec<&FunctionDefinition> {
374 |         self.function_definitions_context.keys().collect()
375 |     }
376 |     pub fn function_type_names(&self) -> Vec<&FunctionTypeName> {
377 |         self.function_type_names_context.keys().collect()
378 |     }
379 |     pub fn for_statements(&self) -> Vec<&ForStatement> {
380 |         self.for_statements_context.keys().collect()
381 |     }
382 |     pub fn identifiers(&self) -> Vec<&Identifier> {
383 |         self.identifiers_context.keys().collect()
384 |     }
385 |     pub fn identifier_paths(&self) -> Vec<&IdentifierPath> {
386 |         self.identifier_paths_context.keys().collect()
387 |     }
388 |     pub fn if_statements(&self) -> Vec<&IfStatement> {
389 |         self.if_statements_context.keys().collect()
390 |     }
391 |     pub fn import_directives(&self) -> Vec<&ImportDirective> {
392 |         self.import_directives_context.keys().collect()
393 |     }
394 |     pub fn index_accesses(&self) -> Vec<&IndexAccess> {
395 |         self.index_accesses_context.keys().collect()
396 |     }
397 |     pub fn index_range_accesses(&self) -> Vec<&IndexRangeAccess> {
398 |         self.index_range_accesses_context.keys().collect()
399 |     }
400 |     pub fn inheritance_specifiers(&self) -> Vec<&InheritanceSpecifier> {
401 |         self.inheritance_specifiers_context.keys().collect()
402 |     }
403 |     pub fn inline_assemblies(&self) -> Vec<&InlineAssembly> {
404 |         self.inline_assemblies_context.keys().collect()
405 |     }
406 |     pub fn literals(&self) -> Vec<&Literal> {
407 |         self.literals_context.keys().collect()
408 |     }
409 |     pub fn member_accesses(&self) -> Vec<&MemberAccess> {
410 |         self.member_accesses_context.keys().collect()
411 |     }
412 |     pub fn new_expressions(&self) -> Vec<&NewExpression> {
413 |         self.new_expressions_context.keys().collect()
414 |     }
415 |     pub fn mappings(&self) -> Vec<&Mapping> {
416 |         self.mappings_context.keys().collect()
417 |     }
418 |     pub fn modifier_definitions(&self) -> Vec<&ModifierDefinition> {
419 |         self.modifier_definitions_context.keys().collect()
420 |     }
421 |     pub fn modifier_invocations(&self) -> Vec<&ModifierInvocation> {
422 |         self.modifier_invocations_context.keys().collect()
423 |     }
424 |     pub fn override_specifiers(&self) -> Vec<&OverrideSpecifier> {
425 |         self.override_specifiers_context.keys().collect()
426 |     }
427 |     pub fn parameter_lists(&self) -> Vec<&ParameterList> {
428 |         self.parameter_lists_context.keys().collect()
429 |     }
430 |     pub fn pragma_directives(&self) -> Vec<&PragmaDirective> {
431 |         self.pragma_directives_context.keys().collect()
432 |     }
433 |     pub fn returns(&self) -> Vec<&Return> {
434 |         self.returns_context.keys().collect()
435 |     }
436 |     pub fn revert_statements(&self) -> Vec<&RevertStatement> {
437 |         self.revert_statements_context.keys().collect()
438 |     }
439 |     pub fn source_units(&self) -> Vec<&SourceUnit> {
440 |         self.source_units_context.iter().collect()
441 |     }
442 |     pub fn struct_definitions(&self) -> Vec<&StructDefinition> {
443 |         self.struct_definitions_context.keys().collect()
444 |     }
445 |     pub fn structured_documentations(&self) -> Vec<&StructuredDocumentation> {
446 |         self.structured_documentations_context.keys().collect()
447 |     }
448 |     pub fn try_statements(&self) -> Vec<&TryStatement> {
449 |         self.try_statements_context.keys().collect()
450 |     }
451 |     pub fn try_catch_clauses(&self) -> Vec<&TryCatchClause> {
452 |         self.try_catch_clauses_context.keys().collect()
453 |     }
454 |     pub fn tuple_expressions(&self) -> Vec<&TupleExpression> {
455 |         self.tuple_expressions_context.keys().collect()
456 |     }
457 |     pub fn unary_operations(&self) -> Vec<&UnaryOperation> {
458 |         self.unary_operations_context.keys().collect()
459 |     }
460 | 
461 |     pub fn unchecked_blocks(&self) -> Vec<&UncheckedBlock> {
462 |         self.unchecked_blocks_context.keys().collect()
463 |     }
464 | 
465 |     pub fn user_defined_type_names(&self) -> Vec<&UserDefinedTypeName> {
466 |         self.user_defined_type_names_context.keys().collect()
467 |     }
468 |     pub fn user_defined_value_type_definitions(&self) -> Vec<&UserDefinedValueTypeDefinition> {
469 |         self.user_defined_value_type_definitions_context.keys().collect()
470 |     }
471 |     pub fn using_for_directives(&self) -> Vec<&UsingForDirective> {
472 |         self.using_for_directives_context.keys().collect()
473 |     }
474 |     pub fn variable_declarations(&self) -> Vec<&VariableDeclaration> {
475 |         self.variable_declarations_context.keys().collect()
476 |     }
477 |     pub fn variable_declaration_statements(&self) -> Vec<&VariableDeclarationStatement> {
478 |         self.variable_declaration_statements_context.keys().collect()
479 |     }
480 |     pub fn while_statements(&self) -> Vec<&WhileStatement> {
481 |         self.while_statements_context.keys().collect()
482 |     }
483 | 
484 |     pub fn do_while_statements(&self) -> Vec<&DoWhileStatement> {
485 |         self.do_while_statements_context.keys().collect()
486 |     }
487 | 
488 |     pub fn break_statements(&self) -> Vec<&Break> {
489 |         self.break_statements_context.keys().collect()
490 |     }
491 | 
492 |     pub fn continue_statements(&self) -> Vec<&Continue> {
493 |         self.continue_statements_context.keys().collect()
494 |     }
495 | 
496 |     pub fn placeholder_statements(&self) -> Vec<&PlaceholderStatement> {
497 |         self.placeholder_statements_context.keys().collect()
498 |     }
499 | 
500 |     pub fn yul_function_calls(&self) -> Vec<&YulFunctionCall> {
501 |         self.yul_function_calls_context.keys().collect()
502 |     }
503 | 
504 |     pub fn yul_identifiers(&self) -> Vec<&YulIdentifier> {
505 |         self.yul_identifiers_context.keys().collect()
506 |     }
507 | 
508 |     pub fn yul_assignments(&self) -> Vec<&YulAssignment> {
509 |         self.yul_assignments_context.keys().collect()
510 |     }
511 | 
512 |     pub fn yul_literals(&self) -> Vec<&YulLiteral> {
513 |         self.yul_literals_context.keys().collect()
514 |     }
515 | }
516 | 
517 | generate_get_source_unit! {
518 |     ArrayTypeName => array_type_names_context,
519 |     Assignment => assignments_context,
520 |     BinaryOperation => binary_operations_context,
521 |     Block => blocks_context,
522 |     Conditional => conditionals_context,
523 |     ContractDefinition => contract_definitions_context,
524 |     ElementaryTypeName => elementary_type_names_context,
525 |     ElementaryTypeNameExpression => elementary_type_name_expressions_context,
526 |     EmitStatement => emit_statements_context,
527 |     EnumDefinition => enum_definitions_context,
528 |     EnumValue => enum_values_context,
529 |     EventDefinition => event_definitions_context,
530 |     ErrorDefinition => error_definitions_context,
531 |     ExpressionStatement => expression_statements_context,
532 |     FunctionCall => function_calls_context,
533 |     FunctionCallOptions => function_call_options_context,
534 |     FunctionDefinition => function_definitions_context,
535 |     FunctionTypeName => function_type_names_context,
536 |     ForStatement => for_statements_context,
537 |     Identifier => identifiers_context,
538 |     IdentifierPath => identifier_paths_context,
539 |     IfStatement => if_statements_context,
540 |     ImportDirective => import_directives_context,
541 |     IndexAccess => index_accesses_context,
542 |     IndexRangeAccess => index_range_accesses_context,
543 |     InheritanceSpecifier => inheritance_specifiers_context,
544 |     InlineAssembly => inline_assemblies_context,
545 |     Literal => literals_context,
546 |     MemberAccess => member_accesses_context,
547 |     NewExpression => new_expressions_context,
548 |     Mapping => mappings_context,
549 |     ModifierDefinition => modifier_definitions_context,
550 |     ModifierInvocation => modifier_invocations_context,
551 |     OverrideSpecifier => override_specifiers_context,
552 |     ParameterList => parameter_lists_context,
553 |     PragmaDirective => pragma_directives_context,
554 |     Return => returns_context,
555 |     RevertStatement => revert_statements_context,
556 |     StructDefinition => struct_definitions_context,
557 |     StructuredDocumentation => structured_documentations_context,
558 |     TryStatement => try_statements_context,
559 |     TryCatchClause => try_catch_clauses_context,
560 |     TupleExpression => tuple_expressions_context,
561 |     UnaryOperation => unary_operations_context,
562 |     UncheckedBlock => unchecked_blocks_context,
563 |     UserDefinedTypeName => user_defined_type_names_context,
564 |     UserDefinedValueTypeDefinition => user_defined_value_type_definitions_context,
565 |     UsingForDirective => using_for_directives_context,
566 |     VariableDeclaration => variable_declarations_context,
567 |     VariableDeclarationStatement => variable_declaration_statements_context,
568 |     WhileStatement => while_statements_context,
569 |     DoWhileStatement => do_while_statements_context,
570 |     Break => break_statements_context,
571 |     Continue => continue_statements_context,
572 |     PlaceholderStatement => placeholder_statements_context,
573 |     YulFunctionCall => yul_function_calls_context,
574 |     YulIdentifier => yul_identifiers_context,
575 |     YulLiteral => yul_literals_context,
576 | }
577 | 
```

--------------------------------------------------------------------------------
/benchmarks/aderyn/report/relative_iteration_times_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 | Average Iteration Time (ms)
  4 | </text>
  5 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="244" x2="75" y2="15"/>
  6 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="110" y1="244" x2="110" y2="15"/>
  7 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="146" y1="244" x2="146" y2="15"/>
  8 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="182" y1="244" x2="182" y2="15"/>
  9 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="218" y1="244" x2="218" y2="15"/>
 10 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="254" y1="244" x2="254" y2="15"/>
 11 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="290" y1="244" x2="290" y2="15"/>
 12 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="326" y1="244" x2="326" y2="15"/>
 13 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="362" y1="244" x2="362" y2="15"/>
 14 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="398" y1="244" x2="398" y2="15"/>
 15 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="434" y1="244" x2="434" y2="15"/>
 16 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="228" x2="434" y2="228"/>
 17 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="198" x2="434" y2="198"/>
 18 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="168" x2="434" y2="168"/>
 19 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="138" x2="434" y2="138"/>
 20 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="108" x2="434" y2="108"/>
 21 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="77" x2="434" y2="77"/>
 22 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="47" x2="434" y2="47"/>
 23 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="17" x2="434" y2="17"/>
 24 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="74,15 74,244 "/>
 25 | <text x="65" y="228" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 26 | 100.0
 27 | </text>
 28 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,228 74,228 "/>
 29 | <text x="65" y="198" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 30 | 120.0
 31 | </text>
 32 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,198 74,198 "/>
 33 | <text x="65" y="168" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 34 | 140.0
 35 | </text>
 36 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,168 74,168 "/>
 37 | <text x="65" y="138" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 38 | 160.0
 39 | </text>
 40 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,138 74,138 "/>
 41 | <text x="65" y="108" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 42 | 180.0
 43 | </text>
 44 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,108 74,108 "/>
 45 | <text x="65" y="77" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 46 | 200.0
 47 | </text>
 48 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,77 74,77 "/>
 49 | <text x="65" y="47" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 50 | 220.0
 51 | </text>
 52 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,47 74,47 "/>
 53 | <text x="65" y="17" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 54 | 240.0
 55 | </text>
 56 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,17 74,17 "/>
 57 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="75,245 434,245 "/>
 58 | <text x="75" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 59 | 0
 60 | </text>
 61 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="75,245 75,250 "/>
 62 | <text x="110" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 63 | 10
 64 | </text>
 65 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="110,245 110,250 "/>
 66 | <text x="146" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 67 | 20
 68 | </text>
 69 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="146,245 146,250 "/>
 70 | <text x="182" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 71 | 30
 72 | </text>
 73 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="182,245 182,250 "/>
 74 | <text x="218" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 75 | 40
 76 | </text>
 77 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="218,245 218,250 "/>
 78 | <text x="254" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 79 | 50
 80 | </text>
 81 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="254,245 254,250 "/>
 82 | <text x="290" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 83 | 60
 84 | </text>
 85 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="290,245 290,250 "/>
 86 | <text x="326" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 87 | 70
 88 | </text>
 89 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="326,245 326,250 "/>
 90 | <text x="362" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 91 | 80
 92 | </text>
 93 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="362,245 362,250 "/>
 94 | <text x="398" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 95 | 90
 96 | </text>
 97 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="398,245 398,250 "/>
 98 | <text x="434" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 99 | 100
100 | </text>
101 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="434,245 434,250 "/>
102 | <circle cx="78" cy="238" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
103 | <circle cx="82" cy="189" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
104 | <circle cx="85" cy="234" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
105 | <circle cx="89" cy="225" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
106 | <circle cx="92" cy="234" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
107 | <circle cx="96" cy="237" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
108 | <circle cx="100" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
109 | <circle cx="103" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
110 | <circle cx="107" cy="163" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
111 | <circle cx="110" cy="201" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
112 | <circle cx="114" cy="203" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
113 | <circle cx="118" cy="198" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
114 | <circle cx="121" cy="199" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
115 | <circle cx="125" cy="224" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
116 | <circle cx="128" cy="211" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
117 | <circle cx="132" cy="227" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
118 | <circle cx="136" cy="234" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
119 | <circle cx="139" cy="227" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
120 | <circle cx="143" cy="223" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
121 | <circle cx="146" cy="234" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
122 | <circle cx="150" cy="225" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
123 | <circle cx="153" cy="230" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
124 | <circle cx="157" cy="222" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
125 | <circle cx="161" cy="223" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
126 | <circle cx="164" cy="91" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
127 | <circle cx="168" cy="78" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
128 | <circle cx="171" cy="164" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
129 | <circle cx="175" cy="228" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
130 | <circle cx="179" cy="241" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
131 | <circle cx="182" cy="239" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
132 | <circle cx="186" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
133 | <circle cx="189" cy="239" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
134 | <circle cx="193" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
135 | <circle cx="197" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
136 | <circle cx="200" cy="238" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
137 | <circle cx="204" cy="236" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
138 | <circle cx="207" cy="235" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
139 | <circle cx="211" cy="238" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
140 | <circle cx="215" cy="244" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
141 | <circle cx="218" cy="239" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
142 | <circle cx="222" cy="241" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
143 | <circle cx="225" cy="241" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
144 | <circle cx="229" cy="222" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
145 | <circle cx="232" cy="223" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
146 | <circle cx="236" cy="207" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
147 | <circle cx="240" cy="215" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
148 | <circle cx="243" cy="235" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
149 | <circle cx="247" cy="241" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
150 | <circle cx="250" cy="232" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
151 | <circle cx="254" cy="180" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
152 | <circle cx="258" cy="190" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
153 | <circle cx="261" cy="229" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
154 | <circle cx="265" cy="238" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
155 | <circle cx="268" cy="239" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
156 | <circle cx="272" cy="236" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
157 | <circle cx="276" cy="227" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
158 | <circle cx="279" cy="219" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
159 | <circle cx="283" cy="206" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
160 | <circle cx="286" cy="210" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
161 | <circle cx="290" cy="203" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
162 | <circle cx="293" cy="226" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
163 | <circle cx="297" cy="228" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
164 | <circle cx="301" cy="229" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
165 | <circle cx="304" cy="223" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
166 | <circle cx="308" cy="222" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
167 | <circle cx="311" cy="220" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
168 | <circle cx="315" cy="203" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
169 | <circle cx="319" cy="206" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
170 | <circle cx="322" cy="199" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
171 | <circle cx="326" cy="206" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
172 | <circle cx="329" cy="224" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
173 | <circle cx="333" cy="199" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
174 | <circle cx="337" cy="154" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
175 | <circle cx="340" cy="168" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
176 | <circle cx="344" cy="195" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
177 | <circle cx="347" cy="197" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
178 | <circle cx="351" cy="15" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
179 | <circle cx="355" cy="144" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
180 | <circle cx="358" cy="138" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
181 | <circle cx="362" cy="172" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
182 | <circle cx="365" cy="171" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
183 | <circle cx="369" cy="169" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
184 | <circle cx="372" cy="158" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
185 | <circle cx="376" cy="188" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
186 | <circle cx="380" cy="214" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
187 | <circle cx="383" cy="205" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
188 | <circle cx="387" cy="207" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
189 | <circle cx="390" cy="205" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
190 | <circle cx="394" cy="188" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
191 | <circle cx="398" cy="139" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
192 | <circle cx="401" cy="192" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
193 | <circle cx="405" cy="201" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
194 | <circle cx="408" cy="204" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
195 | <circle cx="412" cy="198" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
196 | <circle cx="416" cy="204" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
197 | <circle cx="419" cy="133" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
198 | <circle cx="423" cy="207" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
199 | <circle cx="426" cy="120" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
200 | <circle cx="430" cy="212" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
201 | <circle cx="434" cy="196" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
202 | <circle cx="78" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
203 | <circle cx="82" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
204 | <circle cx="85" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
205 | <circle cx="89" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
206 | <circle cx="92" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
207 | <circle cx="96" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
208 | <circle cx="100" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
209 | <circle cx="103" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
210 | <circle cx="107" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
211 | <circle cx="110" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
212 | <circle cx="114" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
213 | <circle cx="118" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
214 | <circle cx="121" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
215 | <circle cx="125" cy="244" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
216 | <circle cx="128" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
217 | <circle cx="132" cy="238" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
218 | <circle cx="136" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
219 | <circle cx="139" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
220 | <circle cx="143" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
221 | <circle cx="146" cy="238" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
222 | <circle cx="150" cy="236" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
223 | <circle cx="153" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
224 | <circle cx="157" cy="244" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
225 | <circle cx="161" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
226 | <circle cx="164" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
227 | <circle cx="168" cy="189" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
228 | <circle cx="171" cy="224" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
229 | <circle cx="175" cy="237" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
230 | <circle cx="179" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
231 | <circle cx="182" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
232 | <circle cx="186" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
233 | <circle cx="189" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
234 | <circle cx="193" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
235 | <circle cx="197" cy="244" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
236 | <circle cx="200" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
237 | <circle cx="204" cy="244" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
238 | <circle cx="207" cy="236" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
239 | <circle cx="211" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
240 | <circle cx="215" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
241 | <circle cx="218" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
242 | <circle cx="222" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
243 | <circle cx="225" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
244 | <circle cx="229" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
245 | <circle cx="232" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
246 | <circle cx="236" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
247 | <circle cx="240" cy="244" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
248 | <circle cx="243" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
249 | <circle cx="247" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
250 | <circle cx="250" cy="226" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
251 | <circle cx="254" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
252 | <circle cx="258" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
253 | <circle cx="261" cy="244" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
254 | <circle cx="265" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
255 | <circle cx="268" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
256 | <circle cx="272" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
257 | <circle cx="276" cy="238" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
258 | <circle cx="279" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
259 | <circle cx="283" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
260 | <circle cx="286" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
261 | <circle cx="290" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
262 | <circle cx="293" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
263 | <circle cx="297" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
264 | <circle cx="301" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
265 | <circle cx="304" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
266 | <circle cx="308" cy="244" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
267 | <circle cx="311" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
268 | <circle cx="315" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
269 | <circle cx="319" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
270 | <circle cx="322" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
271 | <circle cx="326" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
272 | <circle cx="329" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
273 | <circle cx="333" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
274 | <circle cx="337" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
275 | <circle cx="340" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
276 | <circle cx="344" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
277 | <circle cx="347" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
278 | <circle cx="351" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
279 | <circle cx="355" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
280 | <circle cx="358" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
281 | <circle cx="362" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
282 | <circle cx="365" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
283 | <circle cx="369" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
284 | <circle cx="372" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
285 | <circle cx="376" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
286 | <circle cx="380" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
287 | <circle cx="383" cy="179" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
288 | <circle cx="387" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
289 | <circle cx="390" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
290 | <circle cx="394" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
291 | <circle cx="398" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
292 | <circle cx="401" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
293 | <circle cx="405" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
294 | <circle cx="408" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
295 | <circle cx="412" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
296 | <circle cx="416" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
297 | <circle cx="419" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
298 | <circle cx="423" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
299 | <circle cx="426" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
300 | <circle cx="430" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
301 | <circle cx="434" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
302 | </svg>
303 | 
```
Page 97/103FirstPrevNextLast