#
tokens: 48205/50000 4/1140 files (page 88/94)
lines: off (toggle) GitHub
raw markdown copy
This is page 88 of 94. Use http://codebase.md/cyfrin/aderyn?lines=false&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
# Aderyn Analysis Report

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.
# Table of Contents

- [Summary](#summary)
  - [Files Summary](#files-summary)
  - [Files Details](#files-details)
  - [Issue Summary](#issue-summary)
- [High Issues](#high-issues)
  - [H-1: `delegatecall` to an Arbitrary Address](#h-1-delegatecall-to-an-arbitrary-address)
  - [H-2: Unchecked Low level calls](#h-2-unchecked-low-level-calls)
- [Low Issues](#low-issues)
  - [L-1: `delegatecall` in loop](#l-1-delegatecall-in-loop)
  - [L-2: Centralization Risk](#l-2-centralization-risk)
  - [L-3: `ecrecover` Signature Malleability](#l-3-ecrecover-signature-malleability)
  - [L-4: Unspecific Solidity Pragma](#l-4-unspecific-solidity-pragma)
  - [L-5: Address State Variable Set Without Checks](#l-5-address-state-variable-set-without-checks)
  - [L-6: Public Function Not Used Internally](#l-6-public-function-not-used-internally)
  - [L-7: Literal Instead of Constant](#l-7-literal-instead-of-constant)
  - [L-8: Empty `require()` / `revert()` Statement](#l-8-empty-require--revert-statement)
  - [L-9: PUSH0 Opcode](#l-9-push0-opcode)
  - [L-10: Modifier Invoked Only Once](#l-10-modifier-invoked-only-once)
  - [L-11: Empty Block](#l-11-empty-block)
  - [L-12: Large Numeric Literal](#l-12-large-numeric-literal)
  - [L-13: Internal Function Used Only Once](#l-13-internal-function-used-only-once)
  - [L-14: Contract has TODO Comments](#l-14-contract-has-todo-comments)
  - [L-15: Inconsistent uint256/uint (or) int256/int types](#l-15-inconsistent-uint256uint-or-int256int-types)
  - [L-16: Unused Error](#l-16-unused-error)
  - [L-17: Unused State Variable](#l-17-unused-state-variable)
  - [L-18: Dead Code](#l-18-dead-code)
  - [L-19: Unused Import](#l-19-unused-import)
  - [L-20: State Variable Could Be Constant](#l-20-state-variable-could-be-constant)
  - [L-21: State Change Without Event](#l-21-state-change-without-event)
  - [L-22: State Variable Could Be Immutable](#l-22-state-variable-could-be-immutable)


# Summary

## Files Summary

| Key | Value |
| --- | --- |
| .sol Files | 20 |
| Total nSLOC | 245 |


## Files Details

| Filepath | nSLOC |
| --- | --- |
| Counter.sol | 20 |
| DemoASTNodes.sol | 31 |
| Helper.sol | 8 |
| InconsistentUints.sol | 17 |
| InternalFunctions.sol | 22 |
| OnceModifierExample.sol | 8 |
| StateVariables.sol | 58 |
| inheritance/ExtendedInheritance.sol | 17 |
| inheritance/IContractInheritance.sol | 4 |
| inheritance/InheritanceBase.sol | 8 |
| multiple-versions/0.4/A.sol | 5 |
| multiple-versions/0.4/B.sol | 5 |
| multiple-versions/0.5/A.sol | 5 |
| multiple-versions/0.5/B.sol | 7 |
| multiple-versions/0.6/A.sol | 5 |
| multiple-versions/0.6/B.sol | 5 |
| multiple-versions/0.7/A.sol | 5 |
| multiple-versions/0.7/B.sol | 5 |
| multiple-versions/0.8/A.sol | 5 |
| multiple-versions/0.8/B.sol | 5 |
| **Total** | **245** |


## Issue Summary

| Category | No. of Issues |
| --- | --- |
| High | 2 |
| Low | 22 |


# High Issues

## H-1: `delegatecall` to an Arbitrary Address

Making a `delegatecall` to an arbitrary address without any checks is dangerous. Consider adding requirements on the target address.

<details><summary>1 Found Instances</summary>


- Found in inheritance/ExtendedInheritance.sol [Line: 14](../tests/adhoc-sol-files/inheritance/ExtendedInheritance.sol#L14)

	```solidity
	    function doSomethingElse(address target) external {
	```

</details>



## H-2: Unchecked Low level calls

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.

<details><summary>1 Found Instances</summary>


- Found in inheritance/ExtendedInheritance.sol [Line: 16](../tests/adhoc-sol-files/inheritance/ExtendedInheritance.sol#L16)

	```solidity
	            target.delegatecall(abi.encodeWithSignature("doSomething(uint256)", i));
	```

</details>



# Low Issues

## L-1: `delegatecall` in loop

Using `delegatecall` in loop may consume excessive gas, or worse, lead to more severe issues.

<details><summary>1 Found Instances</summary>


- Found in inheritance/ExtendedInheritance.sol [Line: 15](../tests/adhoc-sol-files/inheritance/ExtendedInheritance.sol#L15)

	```solidity
	        for (uint256 i = 0; i < 3; i++) {
	```

</details>



## L-2: Centralization Risk

Contracts have owners with privileged rights to perform admin tasks and need to be trusted to not perform malicious updates or drain funds.

<details><summary>1 Found Instances</summary>


- Found in InternalFunctions.sol [Line: 12](../tests/adhoc-sol-files/InternalFunctions.sol#L12)

	```solidity
	    function setValue(uint256 _newValue) external onlyOwner {
	```

</details>



## L-3: `ecrecover` Signature Malleability

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.

<details><summary>1 Found Instances</summary>


- Found in inheritance/ExtendedInheritance.sol [Line: 21](../tests/adhoc-sol-files/inheritance/ExtendedInheritance.sol#L21)

	```solidity
	        return ecrecover(theHash, v, r, s);
	```

</details>



## L-4: Unspecific Solidity Pragma

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;`

<details><summary>16 Found Instances</summary>


- Found in Counter.sol [Line: 2](../tests/adhoc-sol-files/Counter.sol#L2)

	```solidity
	pragma solidity ^0.8.13;
	```

- Found in DemoASTNodes.sol [Line: 2](../tests/adhoc-sol-files/DemoASTNodes.sol#L2)

	```solidity
	pragma solidity >=0.8.0;
	```

- Found in Helper.sol [Line: 2](../tests/adhoc-sol-files/Helper.sol#L2)

	```solidity
	pragma solidity >=0.8.0;
	```

- Found in InconsistentUints.sol [Line: 1](../tests/adhoc-sol-files/InconsistentUints.sol#L1)

	```solidity
	pragma solidity ^0.8.24;
	```

- Found in inheritance/IContractInheritance.sol [Line: 2](../tests/adhoc-sol-files/inheritance/IContractInheritance.sol#L2)

	```solidity
	pragma solidity >=0.8.0;
	```

- Found in inheritance/InheritanceBase.sol [Line: 2](../tests/adhoc-sol-files/inheritance/InheritanceBase.sol#L2)

	```solidity
	pragma solidity ^0.8.0;
	```

- Found in multiple-versions/0.4/A.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.4/A.sol#L2)

	```solidity
	pragma solidity ^0.4.0;
	```

- Found in multiple-versions/0.4/B.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.4/B.sol#L2)

	```solidity
	pragma solidity ^0.4.0;
	```

- Found in multiple-versions/0.5/A.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.5/A.sol#L2)

	```solidity
	pragma solidity ^0.5.0;
	```

- Found in multiple-versions/0.5/B.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.5/B.sol#L2)

	```solidity
	pragma solidity ^0.5.0;
	```

- Found in multiple-versions/0.6/A.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.6/A.sol#L2)

	```solidity
	pragma solidity ^0.6.0;
	```

- Found in multiple-versions/0.6/B.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.6/B.sol#L2)

	```solidity
	pragma solidity ^0.6.0;
	```

- Found in multiple-versions/0.7/A.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.7/A.sol#L2)

	```solidity
	pragma solidity ^0.7.0;
	```

- Found in multiple-versions/0.7/B.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.7/B.sol#L2)

	```solidity
	pragma solidity ^0.7.0;
	```

- Found in multiple-versions/0.8/A.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.8/A.sol#L2)

	```solidity
	pragma solidity ^0.8.0;
	```

- Found in multiple-versions/0.8/B.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.8/B.sol#L2)

	```solidity
	pragma solidity ^0.8.0;
	```

</details>



## L-5: Address State Variable Set Without Checks

Check for `address(0)` when assigning values to address state variables.

<details><summary>1 Found Instances</summary>


- Found in StateVariables.sol [Line: 58](../tests/adhoc-sol-files/StateVariables.sol#L58)

	```solidity
	        addr = newAddr;
	```

</details>



## L-6: Public Function Not Used Internally

If a function is marked public but is not used internally, consider marking it as `external`.

<details><summary>6 Found Instances</summary>


- Found in Counter.sol [Line: 7](../tests/adhoc-sol-files/Counter.sol#L7)

	```solidity
	    function setNumber(uint256 newNumber) public {
	```

- Found in StateVariables.sol [Line: 47](../tests/adhoc-sol-files/StateVariables.sol#L47)

	```solidity
	    function setAddrNoZeroError(address newAddr) public {
	```

- Found in StateVariables.sol [Line: 52](../tests/adhoc-sol-files/StateVariables.sol#L52)

	```solidity
	    function setAddrNoZeroRequire(address newAddr) public {
	```

- Found in StateVariables.sol [Line: 57](../tests/adhoc-sol-files/StateVariables.sol#L57)

	```solidity
	    function setAddrNoCheck(address newAddr) public {
	```

- Found in StateVariables.sol [Line: 61](../tests/adhoc-sol-files/StateVariables.sol#L61)

	```solidity
	    function setEmptyAlteredNumbers(
	```

- Found in StateVariables.sol [Line: 71](../tests/adhoc-sol-files/StateVariables.sol#L71)

	```solidity
	    function setNonEmptyAlteredNumbers(
	```

</details>



## L-7: Literal Instead of Constant

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.

<details><summary>6 Found Instances</summary>


- Found in DemoASTNodes.sol [Line: 15](../tests/adhoc-sol-files/DemoASTNodes.sol#L15)

	```solidity
	            if (i == 3) {
	```

- Found in DemoASTNodes.sol [Line: 20](../tests/adhoc-sol-files/DemoASTNodes.sol#L20)

	```solidity
	            if (i == 5) {
	```

- Found in DemoASTNodes.sol [Line: 31](../tests/adhoc-sol-files/DemoASTNodes.sol#L31)

	```solidity
	        uint256[] memory numbers = new uint256[](5);
	```

- Found in DemoASTNodes.sol [Line: 35](../tests/adhoc-sol-files/DemoASTNodes.sol#L35)

	```solidity
	        numbers[3] = 3;
	```

- Found in DemoASTNodes.sol [Line: 36](../tests/adhoc-sol-files/DemoASTNodes.sol#L36)

	```solidity
	        numbers[4] = 4;
	```

- Found in DemoASTNodes.sol [Line: 38](../tests/adhoc-sol-files/DemoASTNodes.sol#L38)

	```solidity
	        int256 i = 4; 
	```

</details>



## L-8: Empty `require()` / `revert()` Statement

Use descriptive reason strings or custom errors for revert paths.

<details><summary>1 Found Instances</summary>


- Found in DemoASTNodes.sol [Line: 7](../tests/adhoc-sol-files/DemoASTNodes.sol#L7)

	```solidity
	        require(to != address(0));
	```

</details>



## L-9: PUSH0 Opcode

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.

<details><summary>10 Found Instances</summary>


- Found in Counter.sol [Line: 2](../tests/adhoc-sol-files/Counter.sol#L2)

	```solidity
	pragma solidity ^0.8.13;
	```

- Found in DemoASTNodes.sol [Line: 2](../tests/adhoc-sol-files/DemoASTNodes.sol#L2)

	```solidity
	pragma solidity >=0.8.0;
	```

- Found in Helper.sol [Line: 2](../tests/adhoc-sol-files/Helper.sol#L2)

	```solidity
	pragma solidity >=0.8.0;
	```

- Found in InconsistentUints.sol [Line: 1](../tests/adhoc-sol-files/InconsistentUints.sol#L1)

	```solidity
	pragma solidity ^0.8.24;
	```

- Found in StateVariables.sol [Line: 2](../tests/adhoc-sol-files/StateVariables.sol#L2)

	```solidity
	pragma solidity 0.8.20;
	```

- Found in inheritance/ExtendedInheritance.sol [Line: 2](../tests/adhoc-sol-files/inheritance/ExtendedInheritance.sol#L2)

	```solidity
	pragma solidity 0.8.20;
	```

- Found in inheritance/IContractInheritance.sol [Line: 2](../tests/adhoc-sol-files/inheritance/IContractInheritance.sol#L2)

	```solidity
	pragma solidity >=0.8.0;
	```

- Found in inheritance/InheritanceBase.sol [Line: 2](../tests/adhoc-sol-files/inheritance/InheritanceBase.sol#L2)

	```solidity
	pragma solidity ^0.8.0;
	```

- Found in multiple-versions/0.8/A.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.8/A.sol#L2)

	```solidity
	pragma solidity ^0.8.0;
	```

- Found in multiple-versions/0.8/B.sol [Line: 2](../tests/adhoc-sol-files/multiple-versions/0.8/B.sol#L2)

	```solidity
	pragma solidity ^0.8.0;
	```

</details>



## L-10: Modifier Invoked Only Once

Consider removing the modifier or inlining the logic into the calling function.

<details><summary>3 Found Instances</summary>


- Found in DemoASTNodes.sol [Line: 6](../tests/adhoc-sol-files/DemoASTNodes.sol#L6)

	```solidity
	    modifier iHaveAPlaceholder(address to) {
	```

- Found in InternalFunctions.sol [Line: 18](../tests/adhoc-sol-files/InternalFunctions.sol#L18)

	```solidity
	    modifier onlyOwner() {
	```

- Found in OnceModifierExample.sol [Line: 6](../tests/adhoc-sol-files/OnceModifierExample.sol#L6)

	```solidity
	    modifier onlyOnce() {
	```

</details>



## L-11: Empty Block

Consider removing empty blocks.

<details><summary>2 Found Instances</summary>


- Found in OnceModifierExample.sol [Line: 10](../tests/adhoc-sol-files/OnceModifierExample.sol#L10)

	```solidity
	    function perform() external onlyOnce {
	```

- Found in multiple-versions/0.5/B.sol [Line: 8](../tests/adhoc-sol-files/multiple-versions/0.5/B.sol#L8)

	```solidity
	    function emptyBlockCatchMe() external {
	```

</details>



## L-12: Large Numeric Literal

Large literal values multiples of 10000 can be replaced with scientific notation.Use `e` notation, for example: `1e18`, instead of its full numeric value.

<details><summary>1 Found Instances</summary>


- Found in DemoASTNodes.sol [Line: 14](../tests/adhoc-sol-files/DemoASTNodes.sol#L14)

	```solidity
	        for (uint256 i = 0; i < 10000000; ++i) {
	```

</details>



## L-13: Internal Function Used Only Once

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.

<details><summary>1 Found Instances</summary>


- Found in InternalFunctions.sol [Line: 28](../tests/adhoc-sol-files/InternalFunctions.sol#L28)

	```solidity
	    function internalSet2(uint256 _newValue) internal {
	```

</details>



## L-14: Contract has TODO Comments

Contract contains comments with TODOS. Consider implementing or removing them.

<details><summary>1 Found Instances</summary>


- Found in Counter.sol [Line: 4](../tests/adhoc-sol-files/Counter.sol#L4)

	```solidity
	contract Counter {
	```

</details>



## L-15: Inconsistent uint256/uint (or) int256/int types

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.

<details><summary>7 Found Instances</summary>


- Found in InconsistentUints.sol [Line: 5](../tests/adhoc-sol-files/InconsistentUints.sol#L5)

	```solidity
	    uint public uintVariable; // 1
	```

- Found in InconsistentUints.sol [Line: 7](../tests/adhoc-sol-files/InconsistentUints.sol#L7)

	```solidity
	    int public intVariable; // 1
	```

- Found in InconsistentUints.sol [Line: 11](../tests/adhoc-sol-files/InconsistentUints.sol#L11)

	```solidity
	        uint personUint; // 2
	```

- Found in InconsistentUints.sol [Line: 12](../tests/adhoc-sol-files/InconsistentUints.sol#L12)

	```solidity
	        mapping (uint => uint256) personMap; // 3 2
	```

- Found in InconsistentUints.sol [Line: 15](../tests/adhoc-sol-files/InconsistentUints.sol#L15)

	```solidity
	    uint[] public uintArray; // 4
	```

- Found in InconsistentUints.sol [Line: 16](../tests/adhoc-sol-files/InconsistentUints.sol#L16)

	```solidity
	    mapping(uint256 => uint other) u2uMapping; // 5 3
	```

- Found in InconsistentUints.sol [Line: 19](../tests/adhoc-sol-files/InconsistentUints.sol#L19)

	```solidity
	    constructor(uint _uintInitial, uint256 _uint256Initial) { // 6 4
	```

</details>



## L-16: Unused Error

Consider using or removing the unused error.

<details><summary>1 Found Instances</summary>


- Found in Helper.sol [Line: 8](../tests/adhoc-sol-files/Helper.sol#L8)

	```solidity
	error NotNice();
	```

</details>



## L-17: Unused State Variable

State variable appears to be unused. No analysis has been performed to see if any inline assembly references it. Consider removing this unused variable.

<details><summary>7 Found Instances</summary>


- Found in InconsistentUints.sol [Line: 16](../tests/adhoc-sol-files/InconsistentUints.sol#L16)

	```solidity
	    mapping(uint256 => uint other) u2uMapping; // 5 3
	```

- Found in StateVariables.sol [Line: 8](../tests/adhoc-sol-files/StateVariables.sol#L8)

	```solidity
	    uint256 private staticPrivateNumber;
	```

- Found in StateVariables.sol [Line: 9](../tests/adhoc-sol-files/StateVariables.sol#L9)

	```solidity
	    uint256 internal staticInternalNumber;
	```

- Found in StateVariables.sol [Line: 13](../tests/adhoc-sol-files/StateVariables.sol#L13)

	```solidity
	    uint256 private staticNonEmptyPrivateNumber = 1;
	```

- Found in StateVariables.sol [Line: 14](../tests/adhoc-sol-files/StateVariables.sol#L14)

	```solidity
	    uint256 internal staticNonEmptyInternalNumber = 2;
	```

- Found in StateVariables.sol [Line: 28](../tests/adhoc-sol-files/StateVariables.sol#L28)

	```solidity
	    uint256 private constant PRIVATE_CONSTANT = 1;
	```

- Found in StateVariables.sol [Line: 29](../tests/adhoc-sol-files/StateVariables.sol#L29)

	```solidity
	    uint256 internal constant INTERNAL_CONSTANT = 2;
	```

</details>



## L-18: Dead Code

Functions that are not used. Consider removing them.

<details><summary>2 Found Instances</summary>


- Found in DemoASTNodes.sol [Line: 12](../tests/adhoc-sol-files/DemoASTNodes.sol#L12)

	```solidity
	    function useBreakAndContinueStatement(address x) internal pure iHaveAPlaceholder(x) returns(uint256 sum) {
	```

- Found in DemoASTNodes.sol [Line: 30](../tests/adhoc-sol-files/DemoASTNodes.sol#L30)

	```solidity
	    function calculateSumUsingDoWhileLoop() internal pure returns(uint256 sum) {
	```

</details>



## L-19: Unused Import

Redundant import statement. Consider removing it.

<details><summary>1 Found Instances</summary>


- Found in StateVariables.sol [Line: 4](../tests/adhoc-sol-files/StateVariables.sol#L4)

	```solidity
	import {Counter} from "./Counter.sol";
	```

</details>



## L-20: State Variable Could Be Constant

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.

<details><summary>5 Found Instances</summary>


- Found in StateVariables.sol [Line: 13](../tests/adhoc-sol-files/StateVariables.sol#L13)

	```solidity
	    uint256 private staticNonEmptyPrivateNumber = 1;
	```

- Found in StateVariables.sol [Line: 14](../tests/adhoc-sol-files/StateVariables.sol#L14)

	```solidity
	    uint256 internal staticNonEmptyInternalNumber = 2;
	```

- Found in StateVariables.sol [Line: 15](../tests/adhoc-sol-files/StateVariables.sol#L15)

	```solidity
	    uint256 public staticNonEmptyPublicNumber = 3;
	```

- Found in multiple-versions/0.8/B.sol [Line: 5](../tests/adhoc-sol-files/multiple-versions/0.8/B.sol#L5)

	```solidity
	    address public MY_ADDRESS = address(0);
	```

- Found in multiple-versions/0.8/B.sol [Line: 6](../tests/adhoc-sol-files/multiple-versions/0.8/B.sol#L6)

	```solidity
	    uint256 public MY_UINT = 134131;
	```

</details>



## L-21: State Change Without Event

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.

<details><summary>11 Found Instances</summary>


- Found in Counter.sol [Line: 7](../tests/adhoc-sol-files/Counter.sol#L7)

	```solidity
	    function setNumber(uint256 newNumber) public {
	```

- Found in Counter.sol [Line: 11](../tests/adhoc-sol-files/Counter.sol#L11)

	```solidity
	    function increment() public {
	```

- Found in Counter.sol [Line: 16](../tests/adhoc-sol-files/Counter.sol#L16)

	```solidity
	    function callIncrement() external {
	```

- Found in Counter.sol [Line: 21](../tests/adhoc-sol-files/Counter.sol#L21)

	```solidity
	    function incrementByTwoMagic() external {
	```

- Found in Counter.sol [Line: 28](../tests/adhoc-sol-files/Counter.sol#L28)

	```solidity
	    function incrementByTwoConstant() external {
	```

- Found in InternalFunctions.sol [Line: 12](../tests/adhoc-sol-files/InternalFunctions.sol#L12)

	```solidity
	    function setValue(uint256 _newValue) external onlyOwner {
	```

- Found in StateVariables.sol [Line: 47](../tests/adhoc-sol-files/StateVariables.sol#L47)

	```solidity
	    function setAddrNoZeroError(address newAddr) public {
	```

- Found in StateVariables.sol [Line: 52](../tests/adhoc-sol-files/StateVariables.sol#L52)

	```solidity
	    function setAddrNoZeroRequire(address newAddr) public {
	```

- Found in StateVariables.sol [Line: 57](../tests/adhoc-sol-files/StateVariables.sol#L57)

	```solidity
	    function setAddrNoCheck(address newAddr) public {
	```

- Found in StateVariables.sol [Line: 61](../tests/adhoc-sol-files/StateVariables.sol#L61)

	```solidity
	    function setEmptyAlteredNumbers(
	```

- Found in StateVariables.sol [Line: 71](../tests/adhoc-sol-files/StateVariables.sol#L71)

	```solidity
	    function setNonEmptyAlteredNumbers(
	```

</details>



## L-22: State Variable Could Be Immutable

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

<details><summary>3 Found Instances</summary>


- Found in InconsistentUints.sol [Line: 5](../tests/adhoc-sol-files/InconsistentUints.sol#L5)

	```solidity
	    uint public uintVariable; // 1
	```

- Found in InconsistentUints.sol [Line: 6](../tests/adhoc-sol-files/InconsistentUints.sol#L6)

	```solidity
	    uint256 public uint256Variable; // 1
	```

- Found in InternalFunctions.sol [Line: 5](../tests/adhoc-sol-files/InternalFunctions.sol#L5)

	```solidity
	    address public owner;
	```

</details>




```

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

```rust
use super::{
    browser::GetImmediateParent,
    capturable::Capturable,
    graph::{LegacyWorkspaceCallGraph, WorkspaceCallGraphs},
    macros::generate_get_source_unit,
    router::Router,
};
pub use crate::ast::ASTNode;
use crate::{ast::*, stats::IgnoreLine};
use solidity_ast::EvmVersion;
use std::{
    cmp::Ordering,
    collections::{HashMap, HashSet},
    path::PathBuf,
};

#[derive(Default, Debug, Clone, PartialEq, Eq, Hash)]
pub struct NodeContext {
    pub source_unit_id: NodeID,
    pub contract_definition_id: Option<NodeID>,
    pub function_definition_id: Option<NodeID>,
    pub modifier_definition_id: Option<NodeID>,
}

#[derive(Default, Debug)]
pub struct WorkspaceContext {
    pub last_source_unit_id: NodeID,
    pub last_contract_definition_id: Option<NodeID>,
    pub last_function_definition_id: Option<NodeID>,
    pub last_modifier_definition_id: Option<NodeID>,

    pub parent_link: HashMap<NodeID, NodeID>,
    pub evm_version: EvmVersion,

    // relative source filepaths
    pub src_filepaths: Vec<String>,
    pub sloc_stats: HashMap<String, usize>,
    pub ignore_lines_stats: HashMap<String, Vec<IgnoreLine>>,
    pub nodes: HashMap<NodeID, ASTNode>,

    // Legacy callgraphs
    pub inward_callgraph: Option<LegacyWorkspaceCallGraph>,
    pub outward_callgraph: Option<LegacyWorkspaceCallGraph>,

    // Callgraphs
    pub callgraphs: Option<WorkspaceCallGraphs>,

    // Source units
    pub source_units_context: Vec<SourceUnit>,

    // In-scope files
    pub included: HashSet<PathBuf>,

    // Function router
    pub router: Option<Router>,

    // Hashmaps of all nodes => source_unit_id
    pub(crate) array_type_names_context: HashMap<ArrayTypeName, NodeContext>,
    pub(crate) assignments_context: HashMap<Assignment, NodeContext>,
    pub(crate) binary_operations_context: HashMap<BinaryOperation, NodeContext>,
    pub(crate) blocks_context: HashMap<Block, NodeContext>,
    pub(crate) conditionals_context: HashMap<Conditional, NodeContext>,
    pub(crate) contract_definitions_context: HashMap<ContractDefinition, NodeContext>,
    pub(crate) elementary_type_names_context: HashMap<ElementaryTypeName, NodeContext>,
    pub(crate) elementary_type_name_expressions_context:
        HashMap<ElementaryTypeNameExpression, NodeContext>,
    pub(crate) emit_statements_context: HashMap<EmitStatement, NodeContext>,
    pub(crate) enum_definitions_context: HashMap<EnumDefinition, NodeContext>,
    pub(crate) enum_values_context: HashMap<EnumValue, NodeContext>,
    pub(crate) event_definitions_context: HashMap<EventDefinition, NodeContext>,
    pub(crate) error_definitions_context: HashMap<ErrorDefinition, NodeContext>,
    pub(crate) expression_statements_context: HashMap<ExpressionStatement, NodeContext>,
    pub(crate) function_calls_context: HashMap<FunctionCall, NodeContext>,
    pub(crate) function_call_options_context: HashMap<FunctionCallOptions, NodeContext>,
    pub(crate) function_definitions_context: HashMap<FunctionDefinition, NodeContext>,
    pub(crate) function_type_names_context: HashMap<FunctionTypeName, NodeContext>,
    pub(crate) for_statements_context: HashMap<ForStatement, NodeContext>,
    pub(crate) identifiers_context: HashMap<Identifier, NodeContext>,
    pub(crate) identifier_paths_context: HashMap<IdentifierPath, NodeContext>,
    pub(crate) if_statements_context: HashMap<IfStatement, NodeContext>,
    pub(crate) import_directives_context: HashMap<ImportDirective, NodeContext>,
    pub(crate) index_accesses_context: HashMap<IndexAccess, NodeContext>,
    pub(crate) index_range_accesses_context: HashMap<IndexRangeAccess, NodeContext>,
    pub(crate) inheritance_specifiers_context: HashMap<InheritanceSpecifier, NodeContext>,
    pub(crate) inline_assemblies_context: HashMap<InlineAssembly, NodeContext>,
    pub(crate) literals_context: HashMap<Literal, NodeContext>,
    pub(crate) member_accesses_context: HashMap<MemberAccess, NodeContext>,
    pub(crate) new_expressions_context: HashMap<NewExpression, NodeContext>,
    pub(crate) mappings_context: HashMap<Mapping, NodeContext>,
    pub(crate) modifier_definitions_context: HashMap<ModifierDefinition, NodeContext>,
    pub(crate) modifier_invocations_context: HashMap<ModifierInvocation, NodeContext>,
    pub(crate) override_specifiers_context: HashMap<OverrideSpecifier, NodeContext>,
    pub(crate) parameter_lists_context: HashMap<ParameterList, NodeContext>,
    pub(crate) pragma_directives_context: HashMap<PragmaDirective, NodeContext>,
    pub(crate) returns_context: HashMap<Return, NodeContext>,
    pub(crate) revert_statements_context: HashMap<RevertStatement, NodeContext>,
    pub(crate) struct_definitions_context: HashMap<StructDefinition, NodeContext>,
    pub(crate) structured_documentations_context: HashMap<StructuredDocumentation, NodeContext>,
    pub(crate) try_statements_context: HashMap<TryStatement, NodeContext>,
    pub(crate) try_catch_clauses_context: HashMap<TryCatchClause, NodeContext>,
    pub(crate) tuple_expressions_context: HashMap<TupleExpression, NodeContext>,
    pub(crate) unary_operations_context: HashMap<UnaryOperation, NodeContext>,
    pub(crate) unchecked_blocks_context: HashMap<UncheckedBlock, NodeContext>,
    pub(crate) user_defined_type_names_context: HashMap<UserDefinedTypeName, NodeContext>,
    pub(crate) user_defined_value_type_definitions_context:
        HashMap<UserDefinedValueTypeDefinition, NodeContext>,
    pub(crate) using_for_directives_context: HashMap<UsingForDirective, NodeContext>,
    pub(crate) variable_declarations_context: HashMap<VariableDeclaration, NodeContext>,
    pub(crate) variable_declaration_statements_context:
        HashMap<VariableDeclarationStatement, NodeContext>,
    pub(crate) while_statements_context: HashMap<WhileStatement, NodeContext>,
    pub(crate) do_while_statements_context: HashMap<DoWhileStatement, NodeContext>,
    pub(crate) break_statements_context: HashMap<Break, NodeContext>,
    pub(crate) continue_statements_context: HashMap<Continue, NodeContext>,
    pub(crate) placeholder_statements_context: HashMap<PlaceholderStatement, NodeContext>,
    pub(crate) yul_function_calls_context: HashMap<YulFunctionCall, NodeContext>,
    pub(crate) yul_identifiers_context: HashMap<YulIdentifier, NodeContext>,
    pub(crate) yul_literals_context: HashMap<YulLiteral, NodeContext>,
    pub(crate) yul_assignments_context: HashMap<YulAssignment, NodeContext>,
}

impl WorkspaceContext {
    // Setters

    pub fn set_sloc_stats(&mut self, sloc_stats: HashMap<String, usize>) {
        self.sloc_stats = sloc_stats;
    }

    pub fn set_ignore_lines_stats(&mut self, ignore_lines_stats: HashMap<String, Vec<IgnoreLine>>) {
        self.ignore_lines_stats = ignore_lines_stats;
    }

    // Getters

    pub fn get_parent(&self, node_id: NodeID) -> Option<&ASTNode> {
        self.nodes.get(self.parent_link.get(&node_id)?)
    }

    pub fn get_ancestral_line(&self, node_id: NodeID) -> Vec<&ASTNode> {
        let mut chain = vec![];
        let mut parent = self.nodes.get(&node_id);
        while let Some(next_parent) = parent {
            chain.push(next_parent);
            parent = next_parent.parent(self);
        }
        chain
    }
    pub fn get_closest_ancestor(&self, node_id: NodeID, node_type: NodeType) -> Option<&ASTNode> {
        let mut current_node_id = self.parent_link.get(&node_id)?;
        while let Some(current) = self.nodes.get(current_node_id) {
            if current.node_type() == node_type {
                return Some(current);
            }
            current_node_id = self.parent_link.get(current_node_id)?;
        }
        None
    }
    pub fn get_closest_ancestor_including_self(
        &self,
        node_id: NodeID,
        node_type: NodeType,
    ) -> Option<&ASTNode> {
        if let Some(node) = self.nodes.get(&node_id)
            && node.node_type() == node_type
        {
            return Some(node);
        }
        self.get_closest_ancestor(node_id, node_type)
    }
    pub fn get_source_code_of_node(&self, node_id: NodeID) -> Option<String> {
        let node = self.nodes.get(&node_id)?;
        let source_unit = self.get_source_unit_from_child_node(node).unwrap();
        let src_location = node.src().unwrap_or("");

        let chopped_location = match src_location.rfind(':') {
            Some(index) => &src_location[..index],
            None => src_location, // No colon found, return the original string
        }
        .to_string();

        if let Some((offset, len)) = chopped_location.split_once(':') {
            let offset: usize = offset.parse().ok()?;
            let len: usize = len.parse().ok()?;
            if let Some(content) = source_unit.source.as_ref()
                && offset + len < content.len()
            {
                let required_content = &content[offset..offset + len];
                return Some(required_content.to_string());
            }
        }
        None
    }

    pub fn get_offset_and_length_of_node(&self, node_id: NodeID) -> Option<(usize, usize)> {
        let node = self.nodes.get(&node_id)?;
        let src_location = node.src().unwrap_or("");

        let chopped_location = match src_location.rfind(':') {
            Some(index) => &src_location[..index],
            None => src_location, // No colon found, return the original string
        }
        .to_string();

        if let Some((offset, len)) = chopped_location.split_once(':') {
            let offset: usize = offset.parse().ok()?;
            let len: usize = len.parse().ok()?;
            return Some((offset, len));
        }
        None
    }

    pub fn get_node_sort_key_from_capturable(
        &self,
        capturable: &Capturable,
    ) -> (String, usize, String) {
        capturable.make_key(self)
    }

    pub fn get_node_id_of_capturable(&self, capturable: &Capturable) -> Option<NodeID> {
        capturable.id()
    }

    /// Returns the relative location of nodes in the source code (if they are in same file)
    pub fn get_relative_location_of_nodes(
        &self,
        first: NodeID,
        second: NodeID,
    ) -> Option<Ordering> {
        let f = self.get_node_sort_key_pure(self.nodes.get(&first)?);
        let s = self.get_node_sort_key_pure(self.nodes.get(&second)?);

        // If the nodes aren't in the same file location comparison doesn't make sense
        if f.0 != s.0 {
            return None;
        }

        match f.1.cmp(&s.1) {
            Ordering::Less => Some(Ordering::Less),
            Ordering::Equal => {
                // If the nodes are on the same line, we must compare offset in the chopped_location
                let first_character_offset = f.2.split_once(':').unwrap();
                let second_character_offset = s.2.split_once(':').unwrap();
                Some(first_character_offset.0.cmp(second_character_offset.0))
            }
            Ordering::Greater => Some(Ordering::Greater),
        }
    }

    pub fn get_node_sort_key_pure(&self, node: &ASTNode) -> (String, usize, String) {
        let source_unit = self.get_source_unit_from_child_node(node).unwrap();
        let absolute_path = source_unit.absolute_path.as_ref().unwrap().clone();
        let source_line = node
            .src()
            .map(|src| source_unit.source_line(src).unwrap_or(0)) // If `src` is `Some`, get the line number, else return 0
            .unwrap_or(0); // If `src` is `None`, default to 0

        let src_location = node.src().unwrap_or("");

        let chopped_location = match src_location.rfind(':') {
            Some(index) => &src_location[..index],
            None => src_location, // No colon found, return the original string
        }
        .to_string();

        (absolute_path, source_line, chopped_location)
    }

    pub fn get_node_sort_key(&self, node: &ASTNode) -> (String, usize, String) {
        let source_unit = self.get_source_unit_from_child_node(node).unwrap();
        let absolute_path = source_unit.absolute_path.as_ref().unwrap().clone();
        let source_line =
            node.src().map(|src| source_unit.source_line(src).unwrap_or(0)).unwrap_or(0);

        let src_location = match node {
            ASTNode::ContractDefinition(contract_node) => contract_node
                .name_location
                .as_ref()
                .filter(|loc| !loc.contains("-1"))
                .map_or_else(|| contract_node.src.clone(), |loc| loc.clone()),
            ASTNode::FunctionDefinition(function_node) => function_node
                .name_location
                .as_ref()
                .filter(|loc| !loc.contains("-1"))
                .map_or_else(|| function_node.src.clone(), |loc| loc.clone()),
            ASTNode::ModifierDefinition(modifier_node) => modifier_node
                .name_location
                .as_ref()
                .filter(|loc| !loc.contains("-1"))
                .map_or_else(|| modifier_node.src.clone(), |loc| loc.clone()),
            ASTNode::VariableDeclaration(variable_node) => variable_node
                .name_location
                .as_ref()
                .filter(|loc| !loc.contains("-1"))
                .map_or_else(|| variable_node.src.clone(), |loc| loc.clone()),
            _ => node.src().unwrap_or("").to_string(),
        };

        let chopped_location = src_location
            .rfind(':')
            .map(|index| src_location[..index].to_string())
            .unwrap_or(src_location);

        (absolute_path, source_line, chopped_location)
    }
    pub fn get_code_snippet(&self, node: &ASTNode) -> String {
        let (filepath, _, src_location) = self.get_node_sort_key_pure(node);
        let source_unit = self
            .source_units()
            .into_iter()
            .find(|s| s.absolute_path.as_ref().is_some_and(|p| *p == filepath))
            .expect("node not found");

        let source_content = source_unit.source.as_ref().expect("source not found");

        let (byte_offset_str, byte_len_str) = src_location.split_once(':').unwrap();
        let byte_offset: usize = byte_offset_str.parse().unwrap();
        let byte_length: usize = byte_len_str.parse().unwrap();

        let code_snippet = &source_content[byte_offset..byte_offset + byte_length];
        code_snippet.to_owned()
    }
}

impl WorkspaceContext {
    pub fn array_type_names(&self) -> Vec<&ArrayTypeName> {
        self.array_type_names_context.keys().collect()
    }
    pub fn assignments(&self) -> Vec<&Assignment> {
        self.assignments_context.keys().collect()
    }
    pub fn binary_operations(&self) -> Vec<&BinaryOperation> {
        self.binary_operations_context.keys().collect()
    }
    pub fn blocks(&self) -> Vec<&Block> {
        self.blocks_context.keys().collect()
    }
    pub fn conditionals(&self) -> Vec<&Conditional> {
        self.conditionals_context.keys().collect()
    }
    pub fn contract_definitions(&self) -> Vec<&ContractDefinition> {
        self.contract_definitions_context.keys().collect()
    }
    pub fn elementary_type_names(&self) -> Vec<&ElementaryTypeName> {
        self.elementary_type_names_context.keys().collect()
    }
    pub fn elementary_type_name_expressions(&self) -> Vec<&ElementaryTypeNameExpression> {
        self.elementary_type_name_expressions_context.keys().collect()
    }
    pub fn emit_statements(&self) -> Vec<&EmitStatement> {
        self.emit_statements_context.keys().collect()
    }
    pub fn enum_definitions(&self) -> Vec<&EnumDefinition> {
        self.enum_definitions_context.keys().collect()
    }
    pub fn enum_values(&self) -> Vec<&EnumValue> {
        self.enum_values_context.keys().collect()
    }
    pub fn event_definitions(&self) -> Vec<&EventDefinition> {
        self.event_definitions_context.keys().collect()
    }
    pub fn error_definitions(&self) -> Vec<&ErrorDefinition> {
        self.error_definitions_context.keys().collect()
    }
    pub fn expression_statements(&self) -> Vec<&ExpressionStatement> {
        self.expression_statements_context.keys().collect()
    }
    pub fn function_calls(&self) -> Vec<&FunctionCall> {
        self.function_calls_context.keys().collect()
    }
    pub fn function_call_options(&self) -> Vec<&FunctionCallOptions> {
        self.function_call_options_context.keys().collect()
    }
    pub fn function_definitions(&self) -> Vec<&FunctionDefinition> {
        self.function_definitions_context.keys().collect()
    }
    pub fn function_type_names(&self) -> Vec<&FunctionTypeName> {
        self.function_type_names_context.keys().collect()
    }
    pub fn for_statements(&self) -> Vec<&ForStatement> {
        self.for_statements_context.keys().collect()
    }
    pub fn identifiers(&self) -> Vec<&Identifier> {
        self.identifiers_context.keys().collect()
    }
    pub fn identifier_paths(&self) -> Vec<&IdentifierPath> {
        self.identifier_paths_context.keys().collect()
    }
    pub fn if_statements(&self) -> Vec<&IfStatement> {
        self.if_statements_context.keys().collect()
    }
    pub fn import_directives(&self) -> Vec<&ImportDirective> {
        self.import_directives_context.keys().collect()
    }
    pub fn index_accesses(&self) -> Vec<&IndexAccess> {
        self.index_accesses_context.keys().collect()
    }
    pub fn index_range_accesses(&self) -> Vec<&IndexRangeAccess> {
        self.index_range_accesses_context.keys().collect()
    }
    pub fn inheritance_specifiers(&self) -> Vec<&InheritanceSpecifier> {
        self.inheritance_specifiers_context.keys().collect()
    }
    pub fn inline_assemblies(&self) -> Vec<&InlineAssembly> {
        self.inline_assemblies_context.keys().collect()
    }
    pub fn literals(&self) -> Vec<&Literal> {
        self.literals_context.keys().collect()
    }
    pub fn member_accesses(&self) -> Vec<&MemberAccess> {
        self.member_accesses_context.keys().collect()
    }
    pub fn new_expressions(&self) -> Vec<&NewExpression> {
        self.new_expressions_context.keys().collect()
    }
    pub fn mappings(&self) -> Vec<&Mapping> {
        self.mappings_context.keys().collect()
    }
    pub fn modifier_definitions(&self) -> Vec<&ModifierDefinition> {
        self.modifier_definitions_context.keys().collect()
    }
    pub fn modifier_invocations(&self) -> Vec<&ModifierInvocation> {
        self.modifier_invocations_context.keys().collect()
    }
    pub fn override_specifiers(&self) -> Vec<&OverrideSpecifier> {
        self.override_specifiers_context.keys().collect()
    }
    pub fn parameter_lists(&self) -> Vec<&ParameterList> {
        self.parameter_lists_context.keys().collect()
    }
    pub fn pragma_directives(&self) -> Vec<&PragmaDirective> {
        self.pragma_directives_context.keys().collect()
    }
    pub fn returns(&self) -> Vec<&Return> {
        self.returns_context.keys().collect()
    }
    pub fn revert_statements(&self) -> Vec<&RevertStatement> {
        self.revert_statements_context.keys().collect()
    }
    pub fn source_units(&self) -> Vec<&SourceUnit> {
        self.source_units_context.iter().collect()
    }
    pub fn struct_definitions(&self) -> Vec<&StructDefinition> {
        self.struct_definitions_context.keys().collect()
    }
    pub fn structured_documentations(&self) -> Vec<&StructuredDocumentation> {
        self.structured_documentations_context.keys().collect()
    }
    pub fn try_statements(&self) -> Vec<&TryStatement> {
        self.try_statements_context.keys().collect()
    }
    pub fn try_catch_clauses(&self) -> Vec<&TryCatchClause> {
        self.try_catch_clauses_context.keys().collect()
    }
    pub fn tuple_expressions(&self) -> Vec<&TupleExpression> {
        self.tuple_expressions_context.keys().collect()
    }
    pub fn unary_operations(&self) -> Vec<&UnaryOperation> {
        self.unary_operations_context.keys().collect()
    }

    pub fn unchecked_blocks(&self) -> Vec<&UncheckedBlock> {
        self.unchecked_blocks_context.keys().collect()
    }

    pub fn user_defined_type_names(&self) -> Vec<&UserDefinedTypeName> {
        self.user_defined_type_names_context.keys().collect()
    }
    pub fn user_defined_value_type_definitions(&self) -> Vec<&UserDefinedValueTypeDefinition> {
        self.user_defined_value_type_definitions_context.keys().collect()
    }
    pub fn using_for_directives(&self) -> Vec<&UsingForDirective> {
        self.using_for_directives_context.keys().collect()
    }
    pub fn variable_declarations(&self) -> Vec<&VariableDeclaration> {
        self.variable_declarations_context.keys().collect()
    }
    pub fn variable_declaration_statements(&self) -> Vec<&VariableDeclarationStatement> {
        self.variable_declaration_statements_context.keys().collect()
    }
    pub fn while_statements(&self) -> Vec<&WhileStatement> {
        self.while_statements_context.keys().collect()
    }

    pub fn do_while_statements(&self) -> Vec<&DoWhileStatement> {
        self.do_while_statements_context.keys().collect()
    }

    pub fn break_statements(&self) -> Vec<&Break> {
        self.break_statements_context.keys().collect()
    }

    pub fn continue_statements(&self) -> Vec<&Continue> {
        self.continue_statements_context.keys().collect()
    }

    pub fn placeholder_statements(&self) -> Vec<&PlaceholderStatement> {
        self.placeholder_statements_context.keys().collect()
    }

    pub fn yul_function_calls(&self) -> Vec<&YulFunctionCall> {
        self.yul_function_calls_context.keys().collect()
    }

    pub fn yul_identifiers(&self) -> Vec<&YulIdentifier> {
        self.yul_identifiers_context.keys().collect()
    }

    pub fn yul_assignments(&self) -> Vec<&YulAssignment> {
        self.yul_assignments_context.keys().collect()
    }

    pub fn yul_literals(&self) -> Vec<&YulLiteral> {
        self.yul_literals_context.keys().collect()
    }
}

generate_get_source_unit! {
    ArrayTypeName => array_type_names_context,
    Assignment => assignments_context,
    BinaryOperation => binary_operations_context,
    Block => blocks_context,
    Conditional => conditionals_context,
    ContractDefinition => contract_definitions_context,
    ElementaryTypeName => elementary_type_names_context,
    ElementaryTypeNameExpression => elementary_type_name_expressions_context,
    EmitStatement => emit_statements_context,
    EnumDefinition => enum_definitions_context,
    EnumValue => enum_values_context,
    EventDefinition => event_definitions_context,
    ErrorDefinition => error_definitions_context,
    ExpressionStatement => expression_statements_context,
    FunctionCall => function_calls_context,
    FunctionCallOptions => function_call_options_context,
    FunctionDefinition => function_definitions_context,
    FunctionTypeName => function_type_names_context,
    ForStatement => for_statements_context,
    Identifier => identifiers_context,
    IdentifierPath => identifier_paths_context,
    IfStatement => if_statements_context,
    ImportDirective => import_directives_context,
    IndexAccess => index_accesses_context,
    IndexRangeAccess => index_range_accesses_context,
    InheritanceSpecifier => inheritance_specifiers_context,
    InlineAssembly => inline_assemblies_context,
    Literal => literals_context,
    MemberAccess => member_accesses_context,
    NewExpression => new_expressions_context,
    Mapping => mappings_context,
    ModifierDefinition => modifier_definitions_context,
    ModifierInvocation => modifier_invocations_context,
    OverrideSpecifier => override_specifiers_context,
    ParameterList => parameter_lists_context,
    PragmaDirective => pragma_directives_context,
    Return => returns_context,
    RevertStatement => revert_statements_context,
    StructDefinition => struct_definitions_context,
    StructuredDocumentation => structured_documentations_context,
    TryStatement => try_statements_context,
    TryCatchClause => try_catch_clauses_context,
    TupleExpression => tuple_expressions_context,
    UnaryOperation => unary_operations_context,
    UncheckedBlock => unchecked_blocks_context,
    UserDefinedTypeName => user_defined_type_names_context,
    UserDefinedValueTypeDefinition => user_defined_value_type_definitions_context,
    UsingForDirective => using_for_directives_context,
    VariableDeclaration => variable_declarations_context,
    VariableDeclarationStatement => variable_declaration_statements_context,
    WhileStatement => while_statements_context,
    DoWhileStatement => do_while_statements_context,
    Break => break_statements_context,
    Continue => continue_statements_context,
    PlaceholderStatement => placeholder_statements_context,
    YulFunctionCall => yul_function_calls_context,
    YulIdentifier => yul_identifiers_context,
    YulLiteral => yul_literals_context,
}

```

--------------------------------------------------------------------------------
/benchmarks/aderyn/report/relative_iteration_times_small.svg:
--------------------------------------------------------------------------------

```
<svg width="450" height="300" viewBox="0 0 450 300" xmlns="http://www.w3.org/2000/svg">
<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)">
Average Iteration Time (ms)
</text>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="244" x2="75" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="110" y1="244" x2="110" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="146" y1="244" x2="146" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="182" y1="244" x2="182" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="218" y1="244" x2="218" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="254" y1="244" x2="254" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="290" y1="244" x2="290" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="326" y1="244" x2="326" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="362" y1="244" x2="362" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="398" y1="244" x2="398" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="434" y1="244" x2="434" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="228" x2="434" y2="228"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="198" x2="434" y2="198"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="168" x2="434" y2="168"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="138" x2="434" y2="138"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="108" x2="434" y2="108"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="77" x2="434" y2="77"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="47" x2="434" y2="47"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="17" x2="434" y2="17"/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="74,15 74,244 "/>
<text x="65" y="228" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
100.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,228 74,228 "/>
<text x="65" y="198" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
120.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,198 74,198 "/>
<text x="65" y="168" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
140.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,168 74,168 "/>
<text x="65" y="138" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
160.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,138 74,138 "/>
<text x="65" y="108" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
180.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,108 74,108 "/>
<text x="65" y="77" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
200.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,77 74,77 "/>
<text x="65" y="47" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
220.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,47 74,47 "/>
<text x="65" y="17" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
240.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,17 74,17 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="75,245 434,245 "/>
<text x="75" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="75,245 75,250 "/>
<text x="110" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
10
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="110,245 110,250 "/>
<text x="146" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
20
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="146,245 146,250 "/>
<text x="182" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
30
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="182,245 182,250 "/>
<text x="218" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
40
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="218,245 218,250 "/>
<text x="254" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
50
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="254,245 254,250 "/>
<text x="290" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
60
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="290,245 290,250 "/>
<text x="326" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
70
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="326,245 326,250 "/>
<text x="362" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
80
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="362,245 362,250 "/>
<text x="398" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
90
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="398,245 398,250 "/>
<text x="434" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
100
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="434,245 434,250 "/>
<circle cx="78" cy="238" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="82" cy="189" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="85" cy="234" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="89" cy="225" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="92" cy="234" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="96" cy="237" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="100" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="103" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="107" cy="163" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="110" cy="201" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="114" cy="203" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="118" cy="198" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="121" cy="199" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="125" cy="224" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="128" cy="211" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="132" cy="227" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="136" cy="234" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="139" cy="227" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="143" cy="223" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="146" cy="234" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="150" cy="225" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="153" cy="230" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="157" cy="222" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="161" cy="223" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="164" cy="91" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="168" cy="78" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="171" cy="164" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="175" cy="228" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="179" cy="241" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="182" cy="239" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="186" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="189" cy="239" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="193" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="197" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="200" cy="238" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="204" cy="236" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="207" cy="235" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="211" cy="238" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="215" cy="244" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="218" cy="239" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="222" cy="241" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="225" cy="241" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="229" cy="222" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="232" cy="223" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="236" cy="207" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="240" cy="215" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="243" cy="235" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="247" cy="241" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="250" cy="232" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="254" cy="180" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="258" cy="190" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="261" cy="229" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="265" cy="238" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="268" cy="239" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="272" cy="236" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="276" cy="227" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="279" cy="219" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="283" cy="206" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="286" cy="210" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="290" cy="203" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="293" cy="226" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="297" cy="228" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="301" cy="229" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="304" cy="223" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="308" cy="222" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="311" cy="220" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="315" cy="203" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="319" cy="206" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="322" cy="199" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="326" cy="206" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="329" cy="224" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="333" cy="199" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="337" cy="154" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="340" cy="168" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="344" cy="195" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="347" cy="197" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="351" cy="15" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="355" cy="144" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="358" cy="138" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="362" cy="172" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="365" cy="171" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="369" cy="169" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="372" cy="158" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="376" cy="188" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="380" cy="214" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="383" cy="205" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="387" cy="207" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="390" cy="205" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="394" cy="188" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="398" cy="139" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="401" cy="192" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="405" cy="201" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="408" cy="204" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="412" cy="198" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="416" cy="204" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="419" cy="133" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="423" cy="207" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="426" cy="120" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="430" cy="212" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="434" cy="196" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="78" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="82" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="85" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="89" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="92" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="96" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="100" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="103" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="107" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="110" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="114" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="118" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="121" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="125" cy="244" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="128" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="132" cy="238" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="136" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="139" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="143" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="146" cy="238" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="150" cy="236" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="153" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="157" cy="244" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="161" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="164" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="168" cy="189" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="171" cy="224" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="175" cy="237" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="179" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="182" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="186" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="189" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="193" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="197" cy="244" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="200" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="204" cy="244" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="207" cy="236" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="211" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="215" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="218" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="222" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="225" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="229" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="232" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="236" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="240" cy="244" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="243" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="247" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="250" cy="226" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="254" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="258" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="261" cy="244" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="265" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="268" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="272" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="276" cy="238" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="279" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="283" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="286" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="290" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="293" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="297" cy="243" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="301" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="304" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="308" cy="244" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="311" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="315" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="319" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="322" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="326" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="329" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="333" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="337" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="340" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="344" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="347" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="351" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="355" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="358" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="362" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="365" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="369" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="372" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="376" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="380" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="383" cy="179" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="387" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="390" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="394" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="398" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="401" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="405" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="408" cy="239" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="412" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="416" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="419" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="423" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="426" cy="241" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="430" cy="242" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="434" cy="240" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
</svg>

```

--------------------------------------------------------------------------------
/benchmarks/aderyn/report/both/iteration_times.svg:
--------------------------------------------------------------------------------

```
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
aderyn
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Average Iteration Time (ms)
</text>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="472" x2="87" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="171" y1="472" x2="171" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="256" y1="472" x2="256" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="340" y1="472" x2="340" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="425" y1="472" x2="425" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="509" y1="472" x2="509" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="594" y1="472" x2="594" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="678" y1="472" x2="678" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="763" y1="472" x2="763" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="847" y1="472" x2="847" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="932" y1="472" x2="932" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="443" x2="932" y2="443"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="388" x2="932" y2="388"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="333" x2="932" y2="333"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="277" x2="932" y2="277"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="222" x2="932" y2="222"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="167" x2="932" y2="167"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="112" x2="932" y2="112"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="56" x2="932" y2="56"/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="443" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
100.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,443 86,443 "/>
<text x="77" y="388" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
120.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,388 86,388 "/>
<text x="77" y="333" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
140.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,333 86,333 "/>
<text x="77" y="277" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
160.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,277 86,277 "/>
<text x="77" y="222" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
180.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,222 86,222 "/>
<text x="77" y="167" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
200.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,167 86,167 "/>
<text x="77" y="112" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
220.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,112 86,112 "/>
<text x="77" y="56" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
240.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,56 86,56 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="87" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 87,478 "/>
<text x="171" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
10
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="171,473 171,478 "/>
<text x="256" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
20
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="256,473 256,478 "/>
<text x="340" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
30
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="340,473 340,478 "/>
<text x="425" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
40
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="425,473 425,478 "/>
<text x="509" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
50
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="509,473 509,478 "/>
<text x="594" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
60
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="594,473 594,478 "/>
<text x="678" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
70
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="678,473 678,478 "/>
<text x="763" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
80
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="763,473 763,478 "/>
<text x="847" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
90
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="847,473 847,478 "/>
<text x="932" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
100
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="932,473 932,478 "/>
<circle cx="95" cy="460" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="103" cy="372" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="112" cy="453" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="120" cy="437" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="129" cy="453" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="137" cy="460" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="146" cy="464" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="154" cy="465" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="163" cy="323" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="171" cy="394" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="179" cy="397" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="188" cy="387" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="196" cy="390" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="205" cy="435" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="213" cy="411" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="222" cy="441" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="230" cy="454" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="239" cy="441" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="247" cy="433" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="256" cy="453" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="264" cy="437" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="272" cy="445" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="281" cy="432" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="289" cy="434" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="298" cy="192" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="306" cy="169" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="315" cy="325" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="323" cy="442" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="332" cy="465" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="340" cy="462" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="348" cy="464" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="357" cy="462" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="365" cy="465" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="374" cy="465" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="382" cy="460" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="391" cy="458" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="399" cy="454" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="408" cy="461" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="416" cy="472" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="425" cy="462" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="433" cy="466" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="441" cy="466" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="450" cy="432" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="458" cy="434" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="467" cy="405" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="475" cy="418" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="484" cy="456" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="492" cy="466" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="501" cy="450" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="509" cy="354" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="517" cy="374" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="526" cy="445" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="534" cy="461" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="543" cy="462" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="551" cy="458" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="560" cy="441" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="568" cy="427" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="577" cy="402" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="585" cy="409" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="594" cy="397" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="602" cy="439" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="610" cy="443" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="619" cy="444" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="627" cy="432" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="636" cy="432" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="644" cy="428" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="653" cy="396" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="661" cy="402" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="670" cy="390" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="678" cy="402" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="686" cy="435" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="695" cy="390" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="703" cy="306" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="712" cy="333" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="720" cy="382" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="729" cy="386" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="737" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="746" cy="288" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="754" cy="277" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="763" cy="340" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="771" cy="338" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="779" cy="334" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="788" cy="315" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="796" cy="368" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="805" cy="416" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="813" cy="400" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="822" cy="404" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="830" cy="401" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="839" cy="370" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="847" cy="279" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="855" cy="377" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="864" cy="394" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="872" cy="398" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="881" cy="387" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="889" cy="399" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="898" cy="268" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="906" cy="404" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="915" cy="244" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="923" cy="412" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="932" cy="384" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="95" cy="469" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="103" cy="466" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="112" cy="464" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="120" cy="463" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="129" cy="464" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="137" cy="466" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="146" cy="464" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="154" cy="463" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="163" cy="462" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="171" cy="465" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="179" cy="470" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="188" cy="465" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="196" cy="466" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="205" cy="471" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="213" cy="466" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="222" cy="461" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="230" cy="466" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="239" cy="468" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="247" cy="465" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="256" cy="461" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="264" cy="457" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="272" cy="468" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="281" cy="471" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="289" cy="470" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="298" cy="462" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="306" cy="370" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="315" cy="435" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="323" cy="458" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="332" cy="465" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="340" cy="464" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="348" cy="468" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="357" cy="468" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="365" cy="464" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="374" cy="471" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="382" cy="465" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="391" cy="472" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="399" cy="457" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="408" cy="467" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="416" cy="468" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="425" cy="466" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="433" cy="464" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="441" cy="470" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="450" cy="463" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="458" cy="469" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="467" cy="464" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="475" cy="472" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="484" cy="467" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="492" cy="462" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="501" cy="439" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="509" cy="466" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="517" cy="470" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="526" cy="471" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="534" cy="467" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="543" cy="467" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="551" cy="462" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="560" cy="461" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="568" cy="469" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="577" cy="470" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="585" cy="464" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="594" cy="470" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="602" cy="468" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="610" cy="470" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="619" cy="466" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="627" cy="468" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="636" cy="471" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="644" cy="468" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="653" cy="467" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="661" cy="466" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="670" cy="466" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="678" cy="467" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="686" cy="463" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="695" cy="464" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="703" cy="466" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="712" cy="464" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="720" cy="463" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="729" cy="467" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="737" cy="468" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="746" cy="465" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="754" cy="468" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="763" cy="466" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="771" cy="466" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="779" cy="466" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="788" cy="467" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="796" cy="465" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="805" cy="467" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="813" cy="353" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="822" cy="462" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="830" cy="462" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="839" cy="465" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="847" cy="466" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="855" cy="468" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="864" cy="468" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="872" cy="462" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="881" cy="467" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="889" cy="465" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="898" cy="467" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="906" cy="464" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="915" cy="466" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="923" cy="467" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<circle cx="932" cy="463" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
<text x="132" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Current
</text>
<text x="132" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Base
</text>
<circle cx="112" cy="73" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="112" cy="88" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
</svg>

```
Page 88/94FirstPrevNextLast